bmsd/fermenters.c

changeset 671
4b54d6f79d25
parent 558
a8e065a9f851
child 674
c865e3cdee04
--- a/bmsd/fermenters.c	Thu May 07 14:59:50 2020 +0200
+++ b/bmsd/fermenters.c	Mon May 11 17:32:08 2020 +0200
@@ -3,7 +3,7 @@
  * @brief Handle fermenters status
  * @author Michiel Broek <mbroek at mbse dot eu>
  *
- * Copyright (C) 2018-2019
+ * Copyright (C) 2018-2020
  *
  * This file is part of the bms (Brewery Management System)
  *
@@ -27,6 +27,7 @@
 #include "xutil.h"
 #include "fermenters.h"
 #include "mysql.h"
+#include "websocket.h"
 
 
 sys_fermenter_list	*fermenters = NULL;
@@ -41,6 +42,7 @@
     struct json_object	*jobj, *val, *sensor, *temp;
     sys_fermenter_list	*fermenter, *tmpp;
     bool		new_fermenter = true;
+    char		*msg = NULL, buf[65];
 
 //    fprintf(stdout, "fermenter_set: %s/%s %s %s\n", edge_node, alias, birth ? "BIRTH":"DATA", payload);
 
@@ -318,6 +320,76 @@
     }
     json_object_put(jobj);
 
+    msg = xstrcpy((char *)"{\"device\":\"fermenter\",\"node\":\"");
+    msg = xstrcat(msg, edge_node);
+    msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+    msg = xstrcat(msg, alias);
+    msg = xstrcat(msg, (char *)"\",\"online\":");
+    msg = xstrcat(msg, fermenter->online ? (char *)"1":(char *)"0");
+    msg = xstrcat(msg, (char *)",\"mode\":\"");
+    msg = xstrcat(msg, fermenter->mode);
+    msg = xstrcat(msg, (char *)"\",\"yeast_lo\":");
+    snprintf(buf, 64, "%.3f", fermenter->yeast_lo);
+    msg = xstrcat(msg, buf);
+    msg = xstrcat(msg, (char *)",\"yeast_hi\":");
+    snprintf(buf, 64, "%.3f", fermenter->yeast_hi);
+    msg = xstrcat(msg, buf);
+    if (fermenter->air_address) {
+    	msg = xstrcat(msg, (char *)",\"air\":");
+	snprintf(buf, 64, "%.3f", fermenter->air_temperature);
+	msg = xstrcat(msg, buf);
+    }
+    if (fermenter->beer_address) {
+        msg = xstrcat(msg, (char *)",\"beer\":");
+        snprintf(buf, 64, "%.3f", fermenter->beer_temperature);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->chiller_address) {
+        msg = xstrcat(msg, (char *)",\"chiller\":");
+        snprintf(buf, 64, "%.3f", fermenter->chiller_temperature);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->heater_address) {
+        msg = xstrcat(msg, (char *)",\"heater\":");
+        snprintf(buf, 64, "%d", fermenter->heater_state);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->cooler_address) {
+        msg = xstrcat(msg, (char *)",\"cooler\":");
+        snprintf(buf, 64, "%d", fermenter->cooler_state);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->fan_address) {
+        msg = xstrcat(msg, (char *)",\"fan\":");
+        snprintf(buf, 64, "%d", fermenter->fan_state);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->light_address) {
+        msg = xstrcat(msg, (char *)",\"light\":");
+        snprintf(buf, 64, "%d", fermenter->light_state);
+        msg = xstrcat(msg, buf);
+    }
+    if (fermenter->door_address) {
+        msg = xstrcat(msg, (char *)",\"door\":");
+        snprintf(buf, 64, "%d", fermenter->door_state);
+        msg = xstrcat(msg, buf);
+    }
+    msg = xstrcat(msg, (char *)",\"sp_lo\":");
+    snprintf(buf, 64, "%.3f", fermenter->setpoint_low);
+    msg = xstrcat(msg, buf);
+    msg = xstrcat(msg, (char *)",\"sp_hi\":");
+    snprintf(buf, 64, "%.3f", fermenter->setpoint_high);
+    msg = xstrcat(msg, buf);
+    msg = xstrcat(msg, (char *)",\"alarm\":");
+    snprintf(buf, 64, "%d", fermenter->alarm);
+    msg = xstrcat(msg, buf);
+    msg = xstrcat(msg, (char *)",\"stage\":\"");
+    msg = xstrcat(msg, fermenter->stage);
+    msg = xstrcat(msg, (char *)"\"}");
+    ws_broadcast(msg);
+    free(msg);
+    msg = NULL;
+
 //    fermenter_dump(fermenter);
 
     if (new_fermenter) {
@@ -671,7 +743,7 @@
 
 void fermenter_death(char *topic)
 {
-    char		*edge_node, *alias;
+    char		*edge_node, *alias, *msg = NULL;
     sys_fermenter_list	*tmpp;
 
     printf("fermenter_death: %s\n", topic);
@@ -689,6 +761,14 @@
 		if (tmpp->online)
 		    syslog(LOG_NOTICE, "Offline fermenter %s/%s", tmpp->node, tmpp->alias);
 	    	tmpp->online = false;
+		msg = xstrcpy((char *)"{\"device\":\"fermenter\",\"node\":\"");
+    		msg = xstrcat(msg, edge_node);
+    		msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+    		msg = xstrcat(msg, alias);
+    		msg = xstrcat(msg, (char *)"\",\"online\":0}");
+		ws_broadcast(msg);
+    		free(msg);
+    		msg = NULL;
 	    	break;
 	    }
     	}
@@ -698,6 +778,14 @@
 		if (tmpp->online)
 		    syslog(LOG_NOTICE, "Offline fermenter %s/%s", tmpp->node, tmpp->alias);
 		tmpp->online = false;
+		msg = xstrcpy((char *)"{\"device\":\"fermenter\",\"node\":\"");
+                msg = xstrcat(msg, edge_node);
+                msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+                msg = xstrcat(msg, tmpp->alias);
+                msg = xstrcat(msg, (char *)"\",\"online\":0}");
+                ws_broadcast(msg);
+                free(msg);
+                msg = NULL;
 	    }
 	}
     }

mercurial