bmsd/mysql.c

changeset 502
a8a6901b5a99
parent 405
ef3f0274a1ea
child 505
c09b67fd8323
--- a/bmsd/mysql.c	Wed Oct 09 22:39:46 2019 +0200
+++ b/bmsd/mysql.c	Thu Oct 10 20:42:39 2019 +0200
@@ -35,6 +35,7 @@
 extern sys_config       	Config;
 extern sys_node_list		*nodes;
 extern sys_fermenter_list	*fermenters;
+extern sys_co2meter_list	*co2meters;
 extern int              	debug;
 
 
@@ -60,7 +61,8 @@
 {
     sys_node_list	*node, *tmpp;
     sys_fermenter_list	*fermenter, *tmpf;
-    int			ncnt = 0, fcnt = 0;
+    sys_co2meter_list	*co2meter, *tmpc;
+    int			ccnt = 0, ncnt = 0, fcnt = 0;
 
     con = mysql_init(NULL);
     if (con == NULL) {
@@ -226,7 +228,51 @@
 	}
     }
 
-    syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters", ncnt, fcnt);
+    if (mysql_query(con, "SELECT * FROM mon_co2meters")) {
+        syslog(LOG_NOTICE, "MySQL: SELECT * FROM mon_co2meters error %u (%s))", mysql_errno(con), mysql_error(con));
+    } else {
+        res_set = mysql_store_result(con);
+        if (res_set == NULL) {
+            syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con));
+        } else {
+            while ((row = mysql_fetch_row(res_set)) != NULL) {
+                co2meter = (sys_co2meter_list *)malloc(sizeof(sys_co2meter_list));
+                memset(co2meter, 0, sizeof(sys_co2meter_list));
+                co2meter->next                = NULL;
+                co2meter->uuid                = xstrcpy(row[1]);
+                co2meter->alias               = xstrcpy(row[2]);
+                co2meter->node                = xstrcpy(row[3]);
+                co2meter->online              = 0;    // Will be set later
+                co2meter->beercode            = xstrcpy(row[5]);
+                co2meter->beername            = xstrcpy(row[6]);
+                co2meter->beeruuid            = xstrcpy(row[7]);
+		co2meter->mode                = xstrcpy(row[8]);
+		co2meter->temperature_state   = xstrcpy(row[9]);
+		co2meter->temperature_address = xstrcpy(row[10]);
+		co2meter->temperature         = atof(row[11]);
+		co2meter->pressure_state      = xstrcpy(row[12]);
+		co2meter->pressure_channel    = atoi(row[13]);
+		co2meter->pressure_voltage    = atof(row[14]);
+		co2meter->pressure_zero       = atof(row[15]);
+		co2meter->pressure_bar        = atof(row[16]);
+
+		if (co2meters == NULL) {
+                    co2meters = co2meter;
+                } else {
+                    for (tmpc = co2meters; tmpc; tmpc = tmpc->next) {
+                        if (tmpc->next == NULL) {
+                            tmpc->next = co2meter;
+                            break;
+                        }
+                    }
+                }
+		ccnt++;
+	    }
+	    mysql_free_result(res_set);
+	}
+    }
+
+    syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters, %d co2meters", ncnt, fcnt, ccnt);
     return 0;
 }
 
@@ -234,6 +280,7 @@
 
 void bms_mysql_end(void)
 {
+    sys_co2meter_list	*tmpp, *oldtmpp;
     sys_fermenter_list	*tmpf, *oldtmpf;
     sys_node_list	*tmpn, *oldtmpn;
 
@@ -243,6 +290,28 @@
     if (debug)
 	fprintf(stdout, "MySQL: disconnected\n");
 
+    for (tmpp = co2meters; tmpp; tmpp = oldtmpp) {
+        oldtmpp = tmpp->next;
+        if (tmpp->uuid)
+            free(tmpp->uuid);
+        if (tmpp->alias)
+            free(tmpp->alias);
+        if (tmpp->node)
+            free(tmpp->node);
+        if (tmpp->beercode)
+            free(tmpp->beercode);
+        if (tmpp->beername)
+            free(tmpp->beername);
+        if (tmpp->beeruuid)
+            free(tmpp->beeruuid);
+        if (tmpp->temperature_address)
+            free(tmpp->temperature_address);
+        if (tmpp->temperature_state)
+            free(tmpp->temperature_state);
+        if (tmpp->pressure_state)
+            free(tmpp->pressure_state);
+        free(tmpp);
+    }
     for (tmpf = fermenters; tmpf; tmpf = oldtmpf) {
 	oldtmpf = tmpf->next;
 	if (tmpf->uuid)
@@ -531,3 +600,58 @@
 }
 
 
+
+void co2meter_mysql_insert(sys_co2meter_list *co2meter)
+{
+    char        *query = malloc(2560);
+
+    snprintf(query, 2559,
+        "INSERT INTO mon_co2meters SET uuid='%s', alias='%s', node='%s', online='%d', mode='%s', " \
+        "temperature_address='%s', temperature_state='%s', temperature='%.3f', " \
+	"pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f'",
+        co2meter->uuid, co2meter->alias, co2meter->node, co2meter->online ? 1:0, co2meter->mode,
+        co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature,
+	co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar);
+
+    if (bms_mysql_query(query) == 0) {
+        syslog(LOG_NOTICE,  "MySQL: insert new co2meter %s/%s", co2meter->node, co2meter->alias);
+    }
+    free(query);
+}
+
+
+
+void co2meter_mysql_update(sys_co2meter_list *co2meter)
+{
+    char        *query = malloc(2560);
+
+    snprintf(query, 2559,
+        "UPDATE mon_co2meters SET online='%d', mode='%s', " \
+	"temperature_address='%s', temperature_state='%s', temperature='%.3f', " \
+        "pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f' " \
+	"WHERE uuid='%s'",
+        co2meter->online ? 1:0, co2meter->mode,
+	co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature,
+        co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar,
+	co2meter->uuid);
+
+    bms_mysql_query(query);
+    free(query);
+}
+
+
+
+void co2meter_mysql_death(char *node, char *alias)
+{
+    char        *query = malloc(512);
+
+    if (alias)
+        snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s' and alias='%s'", node, alias);
+    else
+        snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s'", node);
+
+    bms_mysql_query(query);
+    free(query);
+}
+
+

mercurial