diff -r d48733bf1529 -r b2265c7e5707 thermferm/server.c --- 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; }