thermferm/mqtt.c

changeset 675
825210ba2707
parent 669
daa22055cd3d
child 678
cc49115e769e
--- a/thermferm/mqtt.c	Thu Apr 11 15:58:49 2024 +0200
+++ b/thermferm/mqtt.c	Sat Apr 13 16:50:26 2024 +0200
@@ -28,6 +28,8 @@
 #include "xutil.h"
 #include "delay.h"
 #include "mqtt.h"
+#include "websocket.h"
+
 
 extern sys_config       Config;
 extern int		debug;
@@ -1214,6 +1216,19 @@
 	free(topic);
 	topic = NULL;
     }
+
+    /*
+     * Build and send websocket message.
+     */
+    payload = xstrcpy((char *)"{\"fermenter\":");
+    payloadu = unit_data(unit, true);
+    payload = xstrcat(payload, payloadu);
+    payload = xstrcat(payload, (char *)"}");
+    ws_broadcast(payload);
+    free(payload);
+    payload = NULL;
+    free(payloadu);
+    payloadu = NULL;
 }
 
 
@@ -1390,6 +1405,52 @@
 }
 
 
+void node_ws(void)
+{
+    char		*payload = NULL, buf[64];
+    struct utsname	ubuf;
+
+    payload = xstrcpy((char *)"{\"thermferm\":{");
+
+    if (uname(&ubuf) == 0) {
+	payload = xstrcat(payload, (char *)"\"node\":\"");
+	payload = xstrcat(payload, ubuf.nodename);
+	payload = xstrcat(payload, (char *)"\",\"os\":\"");
+	payload = xstrcat(payload, ubuf.sysname);
+	payload = xstrcat(payload, (char *)"\",\"os_version\":\"");
+	payload = xstrcat(payload, ubuf.release);
+	payload = xstrcat(payload, (char *)"\"");
+    } else {
+	payload = xstrcat(payload, (char *)"\"node\":\"Unknown\",\"os\":\"Unknown\",\"os_version\":\"Unknown\"");
+    }
+    payload = xstrcat(payload, (char *)",\"FW\":\"");
+    payload = xstrcat(payload, (char *)VERSION);
+    payload = xstrcat(payload, (char *)"\"");
+
+    if (Config.temp_address || Config.hum_address) {
+        payload = xstrcat(payload, (char *)",\"THB\":{");
+        if (Config.temp_address) {
+            payload = xstrcat(payload, (char *)"\"temperature\":");
+            sprintf(buf, "%.1f", Config.temp_value / 1000.0);
+            payload = xstrcat(payload, buf);
+        }
+        if (Config.temp_address && Config.hum_address)
+            payload = xstrcat(payload, (char *)",");
+        if (Config.hum_address) {
+            payload = xstrcat(payload, (char *)"\"humidity\":");
+            sprintf(buf, "%.1f", Config.hum_value / 1000.0);
+            payload = xstrcat(payload, buf);
+        }
+        payload = xstrcat(payload, (char *)"}");
+    }
+
+    payload = xstrcat(payload, (char *)"}}");
+    ws_broadcast(payload);
+    free(payload);
+    payload = NULL;
+}
+
+
 
 void publishNData(bool birth, int flag)
 {
@@ -1594,6 +1655,8 @@
 	free(payload);
 	payload = NULL;
     }
+
+    node_ws();
 }
 
 

mercurial