--- a/thermferm/mqtt.c Fri Apr 19 14:11:19 2024 +0200 +++ b/thermferm/mqtt.c Fri Apr 19 20:56:55 2024 +0200 @@ -1409,9 +1409,9 @@ } -void node_ws(void) +char *global_json(void) { - char *payload = NULL, buf[64]; + char *payload, buf[64]; struct utsname ubuf; payload = xstrcpy((char *)"{\"type\":\"global\",\"name\":\""); @@ -1428,26 +1428,79 @@ } payload = xstrcat(payload, (char *)"\",\"FW\":\""); payload = xstrcat(payload, (char *)VERSION); - payload = xstrcat(payload, (char *)"\""); + payload = xstrcat(payload, (char *)"\",\"server_port\":"); + sprintf(buf, "%d", Config.my_port); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"websocket_port\":"); + sprintf(buf, "%d", Config.websocket_port); + payload = xstrcat(payload, buf); 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, (char *)"\"temperature\":{\"address\":\""); + payload = xstrcat(payload, Config.temp_address); + payload = xstrcat(payload, (char *)"\",\"state\":\""); + payload = xstrcat(payload, (char *)TEMPSTATE[Config.temp_state]); + payload = xstrcat(payload, (char *)"\",\"value\":"); + sprintf(buf, "%d", Config.temp_value); payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); } 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, (char *)"\"humidity\":{\"address\":\""); + payload = xstrcat(payload, Config.hum_address); + payload = xstrcat(payload, (char *)"\",\"state\":\""); + payload = xstrcat(payload, (char *)TEMPSTATE[Config.hum_state]); + payload = xstrcat(payload, (char *)"\",\"value\":"); + sprintf(buf, "%d", Config.hum_value); payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); } + if (Config.temp_address || Config.hum_address) + payload = xstrcat(payload, (char *)","); + payload = xstrcat(payload, (char *)"\"index\":"); + sprintf(buf, "%d", Config.temp_hum_idx); + payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); } + payload = xstrcat(payload, (char *)",\"LCD\":{\"address\":"); + sprintf(buf, "%d", Config.lcd_address); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"cols\":"); + sprintf(buf, "%d", Config.lcd_cols); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"rows\":"); + sprintf(buf, "%d", Config.lcd_rows); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"},\"MQTT\":{\"host\":\""); + payload = xstrcat(payload, Config.mqtt_host); + payload = xstrcat(payload, (char *)"\",\"port\":"); + sprintf(buf, "%d", Config.mqtt_port); + payload = xstrcat(payload, buf); + if (Config.mqtt_username) { + payload = xstrcat(payload, (char *)",\"username\":\""); + payload = xstrcat(payload, Config.mqtt_username); + payload = xstrcat(payload, (char *)"\""); + if (Config.mqtt_password) { + payload = xstrcat(payload, (char *)",\"password\":\""); + payload = xstrcat(payload, Config.mqtt_password); + payload = xstrcat(payload, (char *)"\""); + } + } + payload = xstrcat(payload, (char *)"}}"); + return payload; +} - payload = xstrcat(payload, (char *)"}"); + + +void node_ws(void) +{ + char *payload = NULL; + + payload = global_json(); ws_broadcast(payload); free(payload); payload = NULL;