diff -r c867eb3f7fc1 -r cc49115e769e thermferm/server.c --- 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);