diff -r 638e7dd1d560 -r 4b54d6f79d25 bmsd/fermenters.c --- 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 * - * 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; } } }