thermferm/mqtt.c

changeset 513
a2732027afb3
parent 510
2da3d3340403
child 514
f5a00ad53329
--- 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
 }
 

mercurial