bmsd/nodes.c

changeset 795
9472106a3143
parent 792
36d51473aa81
--- a/bmsd/nodes.c	Wed Jul 06 09:28:41 2022 +0200
+++ b/bmsd/nodes.c	Mon Jul 11 15:46:18 2022 +0200
@@ -26,6 +26,7 @@
 #include "bms.h"
 #include "xutil.h"
 #include "nodes.h"
+#include "mqtt.h"
 #include "mysql.h"
 #include "websocket.h"
 
@@ -412,4 +413,55 @@
 }
 
 
+void node_ws_receive(char *payload)
+{
+    struct json_object  *jobj, *val;
+    char                *node = NULL, *group = NULL, *control = NULL, *topic = NULL, *pay = NULL, buf[33];
 
+    syslog(LOG_NOTICE, "node_ws %s", payload);
+    /*
+     * Process the JSON formatted payload.
+     */
+    jobj = json_tokener_parse(payload);
+    if (json_object_object_get_ex(jobj, "node", &val))
+        node = xstrcpy((char *)json_object_get_string(val));
+    if (json_object_object_get_ex(jobj, "group_id", &val))
+        group = xstrcpy((char *)json_object_get_string(val));
+    if (json_object_object_get_ex(jobj, "control", &val))
+        control = xstrcpy((char *)json_object_get_string(val));
+
+    if (node && group && control) {
+
+	/*
+	 * Prepare MQTT topic
+	 */
+	topic = xstrcpy((char *)"mbv1.0/");
+	topic = xstrcat(topic, group);
+	topic = xstrcat(topic, (char *)"/NCMD/");
+	topic = xstrcat(topic, node);
+
+	pay = xstrcpy((char *)"{\"timestamp\":");
+    	snprintf(buf, 32, "%ld", time(NULL));
+    	pay = xstrcat(pay, buf);
+    	pay = xstrcat(pay, (char *)",\"metric\":");
+
+	if (strcmp(control, (char *)"reboot") == 0) {
+	    pay = xstrcat(pay, (char *)"{\"Node Control/Reboot\":true}}");
+	} else if (strcmp(control, (char *)"rebirth") == 0) {
+	    pay = xstrcat(pay, (char *)"{\"Node Control/Rebirth\":true}}");
+	}
+	syslog(LOG_NOTICE, "%s %s", topic, pay);
+	mqtt_publish(topic, pay);
+    }
+
+    if (node)
+        free(node);
+    if (group)
+	free(group);
+    if (control)
+    	free(control);
+    if (topic)
+	free(topic);
+    if (pay)
+	free(pay);
+}

mercurial