Changed alarm message and mqtt message order

Thu, 19 Jul 2018 12:55:40 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 19 Jul 2018 12:55:40 +0200
changeset 546
d2e8626e7118
parent 545
c382a6c58c20
child 547
0e4d4b45249f

Changed alarm message and mqtt message order

thermferm/mqtt.c file | annotate | diff | comparison | revisions
--- a/thermferm/mqtt.c	Thu Jul 19 12:47:52 2018 +0200
+++ b/thermferm/mqtt.c	Thu Jul 19 12:55:40 2018 +0200
@@ -236,6 +236,10 @@
     prof_step           *pstep;
 
     payload = xstrcat(payload, (char *)"{");
+
+    /*
+     * Fixed unit values, never change these!
+     */
     if (birth) {
     	payload = xstrcat(payload, (char *)"\"uuid\":\"");
     	payload = xstrcat(payload, unit->uuid);
@@ -244,10 +248,23 @@
 	payload = xstrcat(payload, (char *)"\",");
     }
 
-    payload = xstrcat(payload, (char *)"\"name\":\"");
-    payload = xstrcat(payload, unit->name);
+    /*
+     * Product (beer) loaded information.
+     * TODO: extend with uuid and product code.
+     */
+    if (unit->name || strlen(unit->name)) {
+    	payload = xstrcat(payload, (char *)"\"product\":{\"code\":null,\"name\":\"");
+    	payload = xstrcat(payload, unit->name);
+    	payload = xstrcat(payload, (char *)"\"}");
+    } else {
+	payload = xstrcat(payload, (char *)"\"product\":null");
+    }
+
+    /*
+     * Air temperature sensor
+     */
     if (unit->air_address) {
-	payload = xstrcat(payload, (char *)"\",\"air\":{\"address\":\"");
+	payload = xstrcat(payload, (char *)",\"air\":{\"address\":\"");
 	payload = xstrcat(payload, unit->air_address);
 	payload = xstrcat(payload, (char *)"\",\"state\":\"");
 	payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]);
@@ -256,9 +273,12 @@
         payload = xstrcat(payload, buf);
 	payload = xstrcat(payload, (char *)"}");
     } else {
-	payload = xstrcat(payload, (char *)"\",\"air\":null");
+	payload = xstrcat(payload, (char *)",\"air\":null");
     }
 
+    /*
+     * Beer temperature sensor
+     */
     if (unit->beer_address) {
 	payload = xstrcat(payload, (char *)",\"beer\":{\"address\":\"");
 	payload = xstrcat(payload, unit->beer_address);
@@ -272,6 +292,9 @@
 	payload = xstrcat(payload, (char *)",\"beer\":null");
     }
 
+    /*
+     * External chiller temperature sensor
+     */
     if (unit->chiller_address) {
 	payload = xstrcat(payload, (char *)",\"chiller\":{\"address\":\"");
 	payload = xstrcat(payload, unit->chiller_address);
@@ -285,39 +308,77 @@
 	payload = xstrcat(payload, (char *)",\"chiller\":null");
     }
 
+    /*
+     * Heater control, power 0..100% and usage count.
+     */
     if (unit->heater_address) {
 	payload = xstrcat(payload, (char *)",\"heater\":{\"address\":\"");
 	payload = xstrcat(payload, unit->heater_address);
 	payload = xstrcat(payload, (char *)"\",\"state\":");
 	sprintf(buf, "%d", unit->heater_state);
 	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"usage\":");
+	sprintf(buf, "%d", unit->heater_usage);
+	payload = xstrcat(payload, buf);
 	payload = xstrcat(payload, (char *)"}");
     } else {
 	payload = xstrcat(payload, (char *)",\"heater\":null");
     }
     
+    /*
+     * Cooler control, power 0..100% and usage counter.
+     */
     if (unit->cooler_address) {
 	payload = xstrcat(payload, (char *)",\"cooler\":{\"address\":\"");
  	payload = xstrcat(payload, unit->cooler_address);
 	payload = xstrcat(payload, (char *)"\",\"state\":");
 	sprintf(buf, "%d", unit->cooler_state);
 	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"usage\":");
+	sprintf(buf, "%d", unit->cooler_usage);
+	payload = xstrcat(payload, buf);
 	payload = xstrcat(payload, (char *)"}");
     } else {
 	payload = xstrcat(payload, (char *)",\"cooler\":null");
     }
 
+    /*
+     * Fan control, 0..100% and usage counter.
+     */
     if (unit->fan_address) {
 	payload = xstrcat(payload, (char *)",\"fan\":{\"address\":\"");
 	payload = xstrcat(payload, unit->fan_address);
 	payload = xstrcat(payload, (char *)"\",\"state\":");
 	sprintf(buf, "%d", unit->fan_state);
 	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"usage\":");
+	sprintf(buf, "%d", unit->fan_usage);
+	payload = xstrcat(payload, buf);
 	payload = xstrcat(payload, (char *)"}");
     } else {
 	payload = xstrcat(payload, (char *)",\"fan\":null");
     }
 
+    /*
+     * Interior lights control, 0..100% and usage counter.
+     */
+    if (unit->light_address) {
+	payload = xstrcat(payload, (char *)",\"light\":{\"address\":\"");
+	payload = xstrcat(payload, unit->light_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->light_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"usage\":");
+	sprintf(buf, "%d", unit->light_usage);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"light\":null");
+    }
+
+    /*
+     * Door sensor.
+     */
     if (unit->door_address) {
 	payload = xstrcat(payload, (char *)",\"door\":{\"address\":\"");
 	payload = xstrcat(payload, unit->door_address);
@@ -329,17 +390,9 @@
 	payload = xstrcat(payload, (char *)",\"door\":null");
     }
 
-    if (unit->light_address) {
-	payload = xstrcat(payload, (char *)",\"light\":{\"address\":\"");
-	payload = xstrcat(payload, unit->light_address);
-	payload = xstrcat(payload, (char *)"\",\"state\":");
-	sprintf(buf, "%d", unit->light_state);
-	payload = xstrcat(payload, buf);
-	payload = xstrcat(payload, (char *)"}");
-    } else {
-	payload = xstrcat(payload, (char *)",\"light\":null");
-    }
-
+    /*
+     * PSU status
+     */
     if (unit->psu_address) {
 	payload = xstrcat(payload, (char *)",\"psu\":{\"address\":\"");
 	payload = xstrcat(payload, unit->psu_address);
@@ -351,6 +404,9 @@
 	payload = xstrcat(payload, (char *)",\"psu\":null");
     }
 
+    /*
+     * Working mode and setpoints
+     */
     payload = xstrcat(payload, (char *)",\"mode\":\"");
     payload = xstrcat(payload, (char *)UNITMODE[unit->mode]);
     payload = xstrcat(payload, (char *)"\",\"setpoint\":{\"low\":");
@@ -359,8 +415,13 @@
     payload = xstrcat(payload, (char *)",\"high\":");
     sprintf(buf, "%.1f", unit->PID_cool->SetP);
     payload = xstrcat(payload, buf);
-    payload = xstrcat(payload, (char *)"}");
-    
+    payload = xstrcat(payload, (char *)"},\"alarm\":");
+    sprintf(buf, "%d", unit->alarm_flag);
+    payload = xstrcat(payload, buf);
+
+    /*
+     * Loaded profile and state
+     */
     if (unit->mode == UNITMODE_PROFILE && unit->profile) {
 	for (profile = Config.profiles; profile; profile = profile->next) {
 	    if (strcmp(unit->profile, profile->uuid) == 0) {

mercurial