diff -r fd1354e2a045 -r a2732027afb3 thermferm/mqtt.c --- a/thermferm/mqtt.c Wed May 31 16:29:52 2017 +0200 +++ b/thermferm/mqtt.c Wed Jun 07 23:06:47 2017 +0200 @@ -178,6 +178,27 @@ +void pub_domoticz_temp(int idx, char *value) { + char *dload = NULL; + char sidx[10]; + + if (idx == 0) + return; + + sprintf(sidx, "%d", idx); + + dload = xstrcpy((char *)"{\"command\":\"udevice\",\"idx\":"); + dload = xstrcat(dload, sidx); + dload = xstrcat(dload, (char *)",\"nvalue\":0,\"svalue\":\""); + dload = xstrcat(dload, value); + dload = xstrcat(dload, (char *)"\"}"); + publisher(mosq, (char *)"domoticz/in", dload, false); + free(dload); + dload = NULL; +} + + + char *unit_data(units_list *unit, bool birth) { char *payload = NULL; @@ -206,6 +227,7 @@ sprintf(buf, "%.3f", unit->air_temperature / 1000.0); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->air_idx, buf); } else { payload = xstrcat(payload, (char *)"\",\"air\":null"); } @@ -219,6 +241,7 @@ sprintf(buf, "%.3f", unit->beer_temperature / 1000.0); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->beer_idx, buf); } else { payload = xstrcat(payload, (char *)",\"beer\":null"); } @@ -230,6 +253,7 @@ sprintf(buf, "%d", unit->heater_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->heater_idx, buf); } else { payload = xstrcat(payload, (char *)",\"heater\":null"); } @@ -241,6 +265,7 @@ sprintf(buf, "%d", unit->cooler_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->cooler_idx, buf); } else { payload = xstrcat(payload, (char *)",\"cooler\":null"); } @@ -252,6 +277,7 @@ sprintf(buf, "%d", unit->fan_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->fan_idx, buf); } else { payload = xstrcat(payload, (char *)",\"fan\":null"); } @@ -263,6 +289,7 @@ sprintf(buf, "%d", unit->door_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->door_idx, buf); } else { payload = xstrcat(payload, (char *)",\"door\":null"); } @@ -274,6 +301,7 @@ sprintf(buf, "%d", unit->light_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->light_idx, buf); } else { payload = xstrcat(payload, (char *)",\"light\":null"); } @@ -285,6 +313,7 @@ sprintf(buf, "%d", unit->psu_state); payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); + pub_domoticz_temp(unit->psu_idx, buf); } else { payload = xstrcat(payload, (char *)",\"psu\":null"); } @@ -406,7 +435,7 @@ void publishNData(bool birth, int flag) { #ifdef HAVE_MOSQUITTO_H - char *payload = NULL, buf[64]; + char *payload = NULL, sidx[10], buf[64]; struct utsname ubuf; bool comma = false; @@ -469,6 +498,20 @@ free(payload); payload = NULL; + + if ((Config.temp_address || Config.hum_address) && Config.temp_hum_idx) { + sprintf(sidx, "%d", Config.temp_hum_idx); + sprintf(buf, "%.1f;%.1f;0", Config.temp_value / 1000.0, Config.hum_value / 1000.0); + + payload = xstrcpy((char *)"{\"command\":\"udevice\",\"idx\":"); + payload = xstrcat(payload, sidx); + payload = xstrcat(payload, (char *)",\"nvalue\":0,\"svalue\":\""); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"\"}"); + publisher(mosq, (char *)"domoticz/in", payload, false); + free(payload); + payload = NULL; + } #endif }