--- a/thermferm/mqtt.c Thu Apr 11 15:58:49 2024 +0200 +++ b/thermferm/mqtt.c Sat Apr 13 16:50:26 2024 +0200 @@ -28,6 +28,8 @@ #include "xutil.h" #include "delay.h" #include "mqtt.h" +#include "websocket.h" + extern sys_config Config; extern int debug; @@ -1214,6 +1216,19 @@ free(topic); topic = NULL; } + + /* + * Build and send websocket message. + */ + payload = xstrcpy((char *)"{\"fermenter\":"); + payloadu = unit_data(unit, true); + payload = xstrcat(payload, payloadu); + payload = xstrcat(payload, (char *)"}"); + ws_broadcast(payload); + free(payload); + payload = NULL; + free(payloadu); + payloadu = NULL; } @@ -1390,6 +1405,52 @@ } +void node_ws(void) +{ + char *payload = NULL, buf[64]; + struct utsname ubuf; + + payload = xstrcpy((char *)"{\"thermferm\":{"); + + if (uname(&ubuf) == 0) { + payload = xstrcat(payload, (char *)"\"node\":\""); + 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); + payload = xstrcat(payload, (char *)"\""); + } else { + payload = xstrcat(payload, (char *)"\"node\":\"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(buf, "%.1f", Config.temp_value / 1000.0); + payload = xstrcat(payload, buf); + } + if (Config.temp_address && Config.hum_address) + payload = xstrcat(payload, (char *)","); + if (Config.hum_address) { + payload = xstrcat(payload, (char *)"\"humidity\":"); + sprintf(buf, "%.1f", Config.hum_value / 1000.0); + payload = xstrcat(payload, buf); + } + payload = xstrcat(payload, (char *)"}"); + } + + payload = xstrcat(payload, (char *)"}}"); + ws_broadcast(payload); + free(payload); + payload = NULL; +} + + void publishNData(bool birth, int flag) { @@ -1594,6 +1655,8 @@ free(payload); payload = NULL; } + + node_ws(); }