thermferm/server.c

changeset 678
cc49115e769e
parent 677
c867eb3f7fc1
child 680
8b3c86124a08
--- a/thermferm/server.c	Sun Apr 14 14:41:38 2024 +0200
+++ b/thermferm/server.c	Mon Apr 15 17:04:57 2024 +0200
@@ -569,6 +569,7 @@
 /*
  * GLOBAL GET
  * GLOBAL PUT
+ * GLOBAL JSON
  */
 int cmd_global(int s, char *buf)
 {
@@ -588,6 +589,7 @@
 	srv_send(s, (char *)"Recognized commands:");
 	srv_send(s, (char *)"GLOBAL GET                    Get global settings");
 	srv_send(s, (char *)"GLOBAL PUT                    Put global settings");
+	srv_send(s, (char *)"GLOBAL JSON                   Get global json settings");
 	srv_send(s, (char *)".");
 	return 0;
     }
@@ -617,6 +619,52 @@
 	return 0;
     }
 
+    if (strcmp(opt, (char *)"JSON") == 0) {
+	char		*payload = NULL, tbuf[64];
+	struct utsname	ubuf;
+
+    	payload = xstrcpy((char *)"{\"type\":\"global\",\"name\":\"");
+	payload = xstrcat(payload, Config.name);
+	payload = xstrcat(payload, (char *)"\",\"node\":\"");
+    	if (uname(&ubuf) == 0) {
+            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);
+    	} else {
+            payload = xstrcat(payload, (char *)"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(tbuf, "%.1f", Config.temp_value / 1000.0);
+            	payload = xstrcat(payload, tbuf);
+            }
+            if (Config.temp_address && Config.hum_address)
+            	payload = xstrcat(payload, (char *)",");
+            if (Config.hum_address) {
+            	payload = xstrcat(payload, (char *)"\"humidity\":");
+            	sprintf(tbuf, "%.1f", Config.hum_value / 1000.0);
+            	payload = xstrcat(payload, tbuf);
+            }
+            payload = xstrcat(payload, (char *)"}");
+    	}
+
+    	payload = xstrcat(payload, (char *)"}");
+    	srv_send(s, (char *)"213 Global json data follows:");
+	srv_send(s, payload);
+	srv_send(s, (char *)".");
+    	free(payload);
+    	payload = NULL;
+	return 0;
+    }
+
     if (strcmp(opt, (char *)"PUT") == 0) {
 	int mqtt_reconnect = 0;
 	while (1) {
@@ -1535,13 +1583,17 @@
     }
 
     if (strcmp(opt, (char *)"JSON") == 0) {
+	syslog(LOG_NOTICE, "UNIT JSON %s", param);
         for (unit = Config.units; unit; unit = unit->next) {
             if (strcmp(param, unit->uuid) == 0) {
 		char	*payload, *payloadu;
 
 		srv_send(s, (char *)"213 Unit json data follows:");
-		payload = xstrcpy((char *)"{\"fermenter\":");
-		payloadu = unit_data(unit, true);
+
+		payload = xstrcpy((char *)"{\"type\":\"fermenter\",\"unit\":\"");
+		payload = xstrcat(payload, unit->alias);
+		payload = xstrcat(payload, (char *)"\",\"metric\":");
+		payloadu = unit_data(unit, false);
 		payload = xstrcat(payload, payloadu);
 		payload = xstrcat(payload, (char *)"}");
 		srv_send(s, payload);

mercurial