]> mj.ucw.cz Git - home-hw.git/commitdiff
BSB daemon: Frames should be ephemeral in MQTT
authorMartin Mares <mj@ucw.cz>
Fri, 28 Feb 2020 17:26:20 +0000 (18:26 +0100)
committerMartin Mares <mj@ucw.cz>
Fri, 28 Feb 2020 17:26:20 +0000 (18:26 +0100)
bsb/daemon/burrow-bsbd.c

index 05e54ae9d70950773e41bd108ff6cd0adf106906..a3870798eb70f4e88a562f40422e6053cdf7fdce 100644 (file)
@@ -49,6 +49,22 @@ static void mqtt_publish(const char *topic, const char *fmt, ...)
        va_end(args);
 }
 
+static void mqtt_publish_ephemeral(const char *topic, const char *fmt, ...)
+{
+       va_list args;
+       va_start(args, fmt);
+
+       if (mqtt_connected) {
+               char m[256];
+               int l = vsnprintf(m, sizeof(m), fmt, args);
+               int err = mosquitto_publish(mosq, NULL, topic, l, m, 0, false);
+               if (err != MOSQ_ERR_SUCCESS)
+                       msg(L_ERROR, "Mosquitto: Publish failed, error=%d", err);
+       }
+
+       va_end(args);
+}
+
 static void mqtt_conn_callback(struct mosquitto *mosq UNUSED, void *obj UNUSED, int status)
 {
        if (!status) {
@@ -162,7 +178,7 @@ static void process_stats(time_t t, byte *resp, uint len)
 {
        for (uint i=0; i < ARRAY_SIZE(stat_names) && 4*i + 3 < (uint) len; i++) {
                char item[64];
-               snprintf(item, sizeof(item), "burrow/bsb/stats/%s", stat_names[i]);
+               snprintf(item, sizeof(item), "bsb/stats/%s", stat_names[i]);
                mqtt_publish(item, "%u", (uint) get_u32_le(resp+4*i), t);
        }
 }
@@ -251,7 +267,7 @@ static void process_frame(time_t t, byte *pkt, uint len)
 
        char hex[3*len + 1];
        mem_to_hex(hex, pkt, len, ' ');
-       mqtt_publish("bsb/frame", "%s", hex, t);
+       mqtt_publish_ephemeral("bsb/frame", "%s", hex, t);
 
        msg(L_DEBUG, "<< %s", hex);