thermferm/server.c

changeset 684
b2265c7e5707
parent 681
1f81e52c5abf
child 687
f5d05b420732
--- a/thermferm/server.c	Wed Apr 17 15:03:01 2024 +0200
+++ b/thermferm/server.c	Wed Apr 17 19:54:56 2024 +0200
@@ -343,7 +343,7 @@
     }
 
     if (strcmp(opt, (char *)"JSON") == 0) {
-	char	*payload = NULL, vbuf[64];
+	char	*payload = NULL, *payloadu = NULL, vbuf[64];
 	bool	comma = false;
 
 	if (param == NULL) {
@@ -352,25 +352,11 @@
 	    for (device = Config.devices; device; device = device->next) {
 		if (comma)
 		    payload = xstrcat(payload, (char *)",");
-		payload = xstrcat(payload, (char *)"{\"uuid\":\"");
-		payload = xstrcat(payload, device->uuid);
-		payload = xstrcat(payload, (char *)"\",\"address\":\"");
-		payload = xstrcat(payload, device->address);
-		payload = xstrcat(payload, (char *)"\",\"subdevice\":");
-		snprintf(vbuf, 63, "%d", device->subdevice);
-		payload = xstrcat(payload, vbuf);
-		payload = xstrcat(payload, (char *)",\"inuse\":");
-		snprintf(vbuf, 63, "%d", device->inuse);
-		payload = xstrcat(payload, vbuf);
-		payload = xstrcat(payload, (char *)",\"comment\":\"");
-		payload = xstrcat(payload, device->comment);
-		payload = xstrcat(payload, (char *)"\",\"direction\":\"");
-		payload = xstrcat(payload, (char *)DEVDIR[device->direction]);
-		payload = xstrcat(payload, (char *)"\",\"value\":");
-		snprintf(vbuf, 63, "%d", device->value + device->offset);
-		payload = xstrcat(payload, vbuf);
-		payload = xstrcat(payload, (char *)"}");
+		payloadu = device_json(device, false);
+		payload = xstrcat(payload, payloadu);
 		comma = true;
+		free(payloadu);
+		payloadu = NULL;
 	    }
 	    payload = xstrcat(payload, (char *)"]");
 	    srv_send(s, payload);
@@ -386,39 +372,12 @@
 		    payload = xstrcat(payload, device->address);
 		    payload = xstrcat(payload, (char *)"-");
 		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)"\",\"metric\":{\"uuid\":\"");
-		    payload = xstrcat(payload, device->uuid);
-		    payload = xstrcat(payload, (char *)"\",\"type\":\"");
-		    payload = xstrcat(payload, (char *)DEVTYPE[device->type]);
-		    payload = xstrcat(payload, (char *)"\",\"direction\":\"");
-		    payload = xstrcat(payload, (char *)DEVDIR[device->direction]);
-		    payload = xstrcat(payload, (char *)"\",\"address\":\"");
-		    payload = xstrcat(payload, device->address);
-		    payload = xstrcat(payload, (char *)"\",\"subdevice\":");
-		    snprintf(vbuf, 63, "%d", device->subdevice);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)",\"value\":");
-		    snprintf(vbuf, 63, "%d", device->value);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)",\"offset\":");
-		    snprintf(vbuf, 63, "%d", device->offset);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)",\"present\":\"");
-		    payload = xstrcat(payload, (char *)DEVPRESENT[device->present]);
-		    payload = xstrcat(payload, (char *)"\",\"gpiopin\":");
-		    snprintf(vbuf, 63, "%d", device->gpiopin);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)",\"inuse\":");
-		    snprintf(vbuf, 63, "%d", device->inuse);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)",\"description\":\"");
-		    payload = xstrcat(payload, device->description);
-		    payload = xstrcat(payload, (char *)"\",\"comment\":\"");
-		    payload = xstrcat(payload, device->comment);
-		    payload = xstrcat(payload, (char *)"\",\"timestamp\":");
-		    snprintf(vbuf, 63, "%ld", (long)device->timestamp);
-		    payload = xstrcat(payload, vbuf);
-		    payload = xstrcat(payload, (char *)"}}");
+		    payload = xstrcat(payload, (char *)"\",\"metric\":");
+		    payloadu = device_json(device, true);
+		    payload = xstrcat(payload, payloadu);
+		    free(payloadu);
+		    payloadu = NULL;
+		    payload = xstrcat(payload, (char *)"}");
 	    	    srv_send(s, (char *)"213 Device json record follows:");
 		    srv_send(s, payload);
 	    	    free(payload);
@@ -427,6 +386,7 @@
 		    return 0;
 		}
 	    }
+	    srv_send(s, (char *)"{}");
 	    srv_send(s, (char *)"440 No such device");
             return 0;
 	}

mercurial