bmsd/co2meters.c

Thu, 21 May 2020 14:32:23 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 21 May 2020 14:32:23 +0200
changeset 686
ca1fbb3bd3db
parent 684
ccb9f24d0fe9
child 718
59b02b64131b
permissions
-rw-r--r--

Removed ws_global function because dynamic menus don't work.

502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file co2meters.c
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief Handle co2meters status
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * @author Michiel Broek <mbroek at mbse dot eu>
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
673
9924b1218d39 Added co2meters to the websockets. Added node and units offline messages to the websockets.
Michiel Broek <mbroek@mbse.eu>
parents: 558
diff changeset
6 * Copyright (C) 2019-2020
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * This file is part of the bms (Brewery Management System)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 *
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * This is free software; you can redistribute it and/or modify it
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * under the terms of the GNU General Public License as published by the
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 * Free Software Foundation; either version 2, or (at your option) any
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * later version.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 *
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * bms is distributed in the hope that it will be useful, but
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * General Public License for more details.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 *
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 * along with ThermFerm; see the file COPYING. If not, write to the Free
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 #include "bms.h"
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 #include "xutil.h"
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 #include "co2meters.h"
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29 #include "mysql.h"
673
9924b1218d39 Added co2meters to the websockets. Added node and units offline messages to the websockets.
Michiel Broek <mbroek@mbse.eu>
parents: 558
diff changeset
30 #include "websocket.h"
684
ccb9f24d0fe9 Report any online status change via websocket broadcast. When starting, load all in memory tables sorted. The websocket status on the web pages has it's own panel. Prepared the menu system for dynamic updates.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
31 #include "nodes.h"
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 sys_co2meter_list *co2meters = NULL;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 extern int debug;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37 extern sys_config Config;
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
38 extern MYSQL *con;
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
39 extern MYSQL_RES *res_set;
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
40 extern MYSQL_ROW row;
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43
678
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
44 void co2meter_ws_send(sys_co2meter_list *co2meter)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
45 {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
46 char *msg = NULL, buf[65];
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
47
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
48 msg = xstrcpy((char *)"{\"device\":\"co2meters\",\"node\":\"");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
49 msg = xstrcat(msg, co2meter->node);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
50 msg = xstrcat(msg, (char *)"\",\"unit\":\"");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
51 msg = xstrcat(msg, co2meter->alias);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
52 msg = xstrcat(msg, (char *)"\",\"online\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
53 msg = xstrcat(msg, co2meter->online ? (char *)"1":(char *)"0");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
54 msg = xstrcat(msg, (char *)",\"mode\":\"");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
55 msg = xstrcat(msg, co2meter->mode);
680
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
56 msg = xstrcat(msg, (char *)"\",\"beeruuid\":\"");
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
57 msg = xstrcat(msg, co2meter->beeruuid);
678
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
58 msg = xstrcat(msg, (char *)"\",\"beercode\":\"");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
59 msg = xstrcat(msg, co2meter->beercode);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
60 msg = xstrcat(msg, (char *)"\",\"beername\":\"");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
61 msg = xstrcat(msg, co2meter->beername);
680
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
62 msg = xstrcat(msg, (char *)"\",\"temperature_state\":\"");
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
63 msg = xstrcat(msg, co2meter->temperature_state);
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
64 msg = xstrcat(msg, (char *)"\",\"temperature_address\":\"");
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
65 msg = xstrcat(msg, co2meter->temperature_address);
678
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
66 msg = xstrcat(msg, (char *)"\",\"temperature\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
67 snprintf(buf, 64, "%.3f", co2meter->temperature);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
68 msg = xstrcat(msg, buf);
680
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
69 msg = xstrcat(msg, (char *)",\"pressure_state\":\"");
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
70 msg = xstrcat(msg, co2meter->pressure_state);
0bb48333d133 Fixed missing co2meters websocket data. Added websockets and removed polling for the mon-ispindel screen. The iSpindel SG gauge adjusts the resolution to the highest detected OG.
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
71 msg = xstrcat(msg, (char *)"\",\"pressure_channel\":");
678
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
72 snprintf(buf, 64, "%d", co2meter->pressure_channel);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
73 msg = xstrcat(msg, buf);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
74 msg = xstrcat(msg, (char *)",\"pressure_voltage\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
75 snprintf(buf, 64, "%.3f", co2meter->pressure_voltage);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
76 msg = xstrcat(msg, buf);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
77 msg = xstrcat(msg, (char *)",\"pressure_zero\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
78 snprintf(buf, 64, "%.3f", co2meter->pressure_zero);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
79 msg = xstrcat(msg, buf);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
80 msg = xstrcat(msg, (char *)",\"pressure_bar\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
81 snprintf(buf, 64, "%.3f", co2meter->pressure_bar);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
82 msg = xstrcat(msg, buf);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
83 msg = xstrcat(msg, (char *)",\"alarm\":");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
84 snprintf(buf, 64, "%d", co2meter->alarm);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
85 msg = xstrcat(msg, buf);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
86 msg = xstrcat(msg, (char *)"}");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
87 ws_broadcast(msg);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
88 free(msg);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
89 msg = NULL;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
90 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
91
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
92
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
93
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
94 void co2meter_ws_receive(char *payload)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
95 {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
96 struct json_object *jobj, *val;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
97 sys_co2meter_list *tmpp;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
98 char *node = NULL, *alias = NULL, *beeruuid = NULL, *beercode = NULL, *beername = NULL;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
99 char query[512], *end;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
100 MYSQL *con2 = NULL;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
101
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
102 syslog(LOG_NOTICE, "co2meter_ws_receive(%s)", payload);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
103
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
104 /*
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
105 * Process the JSON formatted payload.
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
106 */
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
107 jobj = json_tokener_parse(payload);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
108 if (json_object_object_get_ex(jobj, "node", &val))
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
109 node = xstrcpy((char *)json_object_get_string(val));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
110 if (json_object_object_get_ex(jobj, "unit", &val))
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
111 alias = xstrcpy((char *)json_object_get_string(val));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
112 if (json_object_object_get_ex(jobj, "beeruuid", &val))
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
113 beeruuid = xstrcpy((char *)json_object_get_string(val));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
114 if (json_object_object_get_ex(jobj, "beercode", &val))
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
115 beercode = xstrcpy((char *)json_object_get_string(val));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
116 if (json_object_object_get_ex(jobj, "beername", &val))
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
117 beername = xstrcpy((char *)json_object_get_string(val));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
118 json_object_put(jobj);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
119
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
120 /*
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
121 * Search co2meter record in the memory array and use it if found.
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
122 */
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
123 if (co2meters) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
124 for (tmpp = co2meters; tmpp; tmpp = tmpp->next) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
125 if ((strcmp(tmpp->alias, alias) == 0) && (strcmp(tmpp->node, node) == 0)) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
126 if (beeruuid && beercode && beername) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
127 con2 = mysql_init(NULL);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
128 if (con2 == NULL) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
129 syslog(LOG_NOTICE, "MySQL: mysql_init() failed");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
130 } else {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
131 if (mysql_real_connect(con2, Config.mysql_host, Config.mysql_user, Config.mysql_pass, Config.mysql_database, Config.mysql_port, NULL, 0) == NULL) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
132 syslog(LOG_NOTICE, "MySQL: mysql_real_connect() %s", mysql_error(con2));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
133 } else {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
134 end = stpcpy(query, "UPDATE mon_co2meters SET beeruuid='");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
135 end += mysql_real_escape_string(con2, end, beeruuid, strlen(beeruuid));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
136 end = stpcpy(end, "', beercode='");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
137 end += mysql_real_escape_string(con2, end, beercode, strlen(beercode));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
138 end = stpcpy(end, "', beername='");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
139 end += mysql_real_escape_string(con2, end, beername, strlen(beername));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
140 end = stpcpy(end, "' WHERE node='");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
141 end += mysql_real_escape_string(con2, end, node, strlen(node));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
142 end = stpcpy(end, "' AND alias='");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
143 end += mysql_real_escape_string(con2, end, alias, strlen(alias));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
144 end = stpcpy(end, "'");
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
145
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
146 if (mysql_real_query(con2, query, (unsigned int) (end - query))) {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
147 syslog(LOG_NOTICE, "MySQL: `%s' error %u (%s))", query, mysql_errno(con2), mysql_error(con2));
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
148 } else {
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
149 /* Database updated, now update internal memory */
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
150 //syslog(LOG_NOTICE, "MySQL: `%s' Ok", query);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
151 if (tmpp->beercode)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
152 free(tmpp->beercode);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
153 tmpp->beercode = xstrcpy(beercode);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
154 if (tmpp->beername)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
155 free(tmpp->beername);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
156 tmpp->beername = xstrcpy(beername);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
157 if (tmpp->beeruuid)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
158 free(tmpp->beeruuid);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
159 tmpp->beeruuid = xstrcpy(beeruuid);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
160 /* Report new state to the client */
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
161 co2meter_ws_send(tmpp);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
162 syslog(LOG_NOTICE, "Set co2meter %s/%s new beer %s %s", node, alias, beercode, beername);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
163 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
164 mysql_close(con2);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
165 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
166 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
167 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
168 break;
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
169 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
170 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
171 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
172
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
173 if (node)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
174 free(node);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
175 if (alias)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
176 free(alias);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
177 if (beeruuid)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
178 free(beeruuid);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
179 if (beercode)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
180 free(beercode);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
181 if (beername)
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
182 free(beername);
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
183 }
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
184
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
185
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
186
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 void co2meter_set(char *edge_node, char *alias, char *payload)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 struct json_object *jobj, *val, *sensor;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 sys_co2meter_list *co2meter, *tmpp;
686
ca1fbb3bd3db Removed ws_global function because dynamic menus don't work.
Michiel Broek <mbroek@mbse.eu>
parents: 684
diff changeset
191 bool new_co2meter = true;
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 // fprintf(stdout, "co2meter_set: %s/%s %s\n", edge_node, alias, payload);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 * Search co2meter record in the memory array and use it if found.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 if (co2meters) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 for (tmpp = co2meters; tmpp; tmpp = tmpp->next) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 if ((strcmp(tmpp->alias, alias) == 0) && (strcmp(tmpp->node, edge_node) == 0)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 new_co2meter = false;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 co2meter = tmpp;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 break;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 // printf("new_co2meter %s\n", new_co2meter ? "true":"false");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 * Allocate new co2meter if not yet known.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 if (new_co2meter) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 co2meter = (sys_co2meter_list *)malloc(sizeof(sys_co2meter_list));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 memset(co2meter, 0, sizeof(sys_co2meter_list));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 co2meter->alias = xstrcpy(alias);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 co2meter->node = xstrcpy(edge_node);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 co2meter->mode = xstrcpy((char *)"OFF");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 if (! co2meter->online) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 co2meter->online = true;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 syslog(LOG_NOTICE, "Online co2meter %s/%s mode %s", edge_node, alias, co2meter->mode);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 * Process the JSON formatted payload.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 * Update only the fields that are found in the payload.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 jobj = json_tokener_parse(payload);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 if (json_object_object_get_ex(jobj, "uuid", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 if (co2meter->uuid)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 free(co2meter->uuid);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 co2meter->uuid = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 if (json_object_object_get_ex(jobj, "mode", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 if (co2meter->mode) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 if (strcmp(co2meter->mode, (char *)json_object_get_string(val))) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 syslog(LOG_NOTICE, "Change mode co2meter %s/%s: %s to %s", edge_node, alias, co2meter->mode, (char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 free(co2meter->mode);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 co2meter->mode = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 }
505
c09b67fd8323 Added CO2 meter units alarm led.
Michiel Broek <mbroek@mbse.eu>
parents: 502
diff changeset
246 if (json_object_object_get_ex(jobj, "alarm", &val)) {
c09b67fd8323 Added CO2 meter units alarm led.
Michiel Broek <mbroek@mbse.eu>
parents: 502
diff changeset
247 co2meter->alarm = json_object_get_int(val);
c09b67fd8323 Added CO2 meter units alarm led.
Michiel Broek <mbroek@mbse.eu>
parents: 502
diff changeset
248 }
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 if (json_object_object_get_ex(jobj, "temperature", &sensor)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 if (json_object_object_get_ex(sensor, "address", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 if (co2meter->temperature_address)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 free(co2meter->temperature_address);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 co2meter->temperature_address = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 if (json_object_object_get_ex(sensor, "state", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 if (co2meter->temperature_state)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 free(co2meter->temperature_state);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 co2meter->temperature_state = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 if (json_object_object_get_ex(sensor, "temperature", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 co2meter->temperature = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 if (json_object_object_get_ex(jobj, "pressure", &sensor)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 if (json_object_object_get_ex(sensor, "state", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 if (co2meter->pressure_state)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 free(co2meter->pressure_state);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 co2meter->pressure_state = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 if (json_object_object_get_ex(sensor, "channel", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 co2meter->pressure_channel = json_object_get_int(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 if (json_object_object_get_ex(sensor, "voltage", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 co2meter->pressure_voltage = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 if (json_object_object_get_ex(sensor, "zero", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 co2meter->pressure_zero = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 if (json_object_object_get_ex(sensor, "bar", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 co2meter->pressure_bar = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 json_object_put(jobj);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284
678
14322825cb3d The co2meters monitor screen rebuild to use websockets instead of data polling.
Michiel Broek <mbroek@mbse.eu>
parents: 677
diff changeset
285 co2meter_ws_send(co2meter);
673
9924b1218d39 Added co2meters to the websockets. Added node and units offline messages to the websockets.
Michiel Broek <mbroek@mbse.eu>
parents: 558
diff changeset
286
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 // co2meter_dump(co2meter);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 if (new_co2meter) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 if (co2meters == NULL) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291 co2meters = co2meter;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 } else {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 for (tmpp = co2meters; tmpp; tmpp = tmpp->next) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294 if (tmpp->next == NULL) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295 tmpp->next = co2meter;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 break;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 co2meter_mysql_insert(co2meter);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301 } else {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302 co2meter_mysql_update(co2meter);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
307
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
309 * With DBIRTH all active co2meters are publishd in an array.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 void co2meter_birth_data(char *topic, char *payload)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312 {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 char *message_type, *edge_node, *alias;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314 struct json_object *jobj, *val, *metric, *units, *unit;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315 int arraylen;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317 strtok(topic, "/"); // ignore namespace
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 strtok(NULL, "/");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319 message_type = strtok(NULL, "/");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320 edge_node = strtok(NULL, "/\0");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 alias = strtok(NULL, "/\0");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 if ((alias == NULL) && (strcmp("DBIRTH", message_type) == 0)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325 * Global initial DBIRTH message with array of co2meters.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 jobj = json_tokener_parse(payload);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 if (json_object_object_get_ex(jobj, "metric", &metric)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330 if (json_object_object_get_ex(metric, "units", &units)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331 arraylen = json_object_array_length(units);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 for (int i = 0; i < arraylen; i++) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334 * Parse the array of units
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336 unit = json_object_array_get_idx(units, i);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
338 if (json_object_object_get_ex(unit, "alias", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
339 if (alias)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
340 free(alias);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
341 alias = xstrcpy((char *)json_object_get_string(val));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
342 co2meter_set(edge_node, alias, (char *)json_object_to_json_string_ext(unit, 0));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
343 free(alias);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
344 alias = NULL;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
345 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
346 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
347 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
348 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
349 json_object_put(jobj);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
350 return;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
351 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
352
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
353 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
354 * The rest are errors.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
355 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
356 printf("ERROR co2meter_birth_data: %s %s %s\n", message_type, edge_node, alias);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
357 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
358
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
359
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
360
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
361 void co2meter_log(char *topic, char *payload)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
362 {
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
363 char *edge_node, *alias, *line, buf[128], *logfile;
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
364 struct json_object *jobj, *val, *metric;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
365 co2pressure_log *log;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
366 struct tm *mytime;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
367 time_t timestamp;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
368 FILE *fp;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
369
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
370 strtok(topic, "/"); // ignore namespace
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
371 strtok(NULL, "/"); // group_id
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
372 strtok(NULL, "/"); // message_type
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
373 edge_node = strtok(NULL, "/\0");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
374 alias = strtok(NULL, "/\0");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
375
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
376 log = (co2pressure_log *)malloc(sizeof(co2pressure_log));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
377 memset(log, 0, sizeof(co2pressure_log));
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
378
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
379 log->node = xstrcpy(edge_node);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
380 log->alias = xstrcpy(alias);
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
381 jobj = json_tokener_parse(payload);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
382
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
383 timestamp = time(NULL);
558
a8e065a9f851 Another attempt to fix the MySQL server has gone away error. Fixed gcc 7.1+ compiler warnings.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
384 log->datetime = malloc(73);
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
385 mytime = localtime(&timestamp);
558
a8e065a9f851 Another attempt to fix the MySQL server has gone away error. Fixed gcc 7.1+ compiler warnings.
Michiel Broek <mbroek@mbse.eu>
parents: 547
diff changeset
386 snprintf(log->datetime, 72, "%04d-%02d-%02d %02d:%02d:%02d",
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
387 mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
388
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
389 if (json_object_object_get_ex(jobj, "metric", &metric)) {
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
390 if (json_object_object_get_ex(metric, "uuid", &val)) {
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
391 if (strcmp((char *)"(null)", json_object_get_string(val)))
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
392 log->uuid = xstrcpy((char *)json_object_get_string(val));
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
393 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
394 if (json_object_object_get_ex(metric, "temperature", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
395 log->temperature = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
396 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
397 if (json_object_object_get_ex(metric, "pressure", &val)) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
398 log->pressure = json_object_get_double(val);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
399 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
400 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
401 json_object_put(jobj);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
402
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
403 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
404 * Because co2meters are not so smart and don't hold product information
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
405 * search the missing pieces in the database.
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
406 */
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
407 snprintf(buf, 127, "SELECT beercode,beername,beeruuid FROM mon_co2meters WHERE uuid='%s'", log->uuid);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
408 if (mysql_query(con, buf)) {
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
409 syslog(LOG_NOTICE, "MySQL: %s error %u (%s))", buf, mysql_errno(con), mysql_error(con));
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
410 } else {
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
411 res_set = mysql_store_result(con);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
412 if (res_set == NULL) {
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
413 syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con));
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
414 } else {
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
415 if ((row = mysql_fetch_row(res_set)) != NULL) {
547
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
416 /*
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
417 * Ignore when the beer_name or beer_code is not set.
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
418 */
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
419 if ((int)strlen(row[0]) == 0 || (int)strlen(row[1]) == 0) {
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
420 if (log->datetime)
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
421 free(log->datetime);
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
422 if (log->uuid)
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
423 free(log->uuid);
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
424 if (log->node)
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
425 free(log->node);
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
426 if (log->alias)
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
427 free(log->alias);
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
428 free(log);
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
429 return;
4d9c96545246 Don't log co2pressure for units that have an empty beer_code or beer_name.
Michiel Broek <mbroek@mbse.eu>
parents: 506
diff changeset
430 }
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
431 log->product_code = xstrcpy(row[0]);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
432 log->product_name = xstrcpy(row[1]);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
433 log->product_uuid = xstrcpy(row[2]);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
434 }
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
435 }
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
436 }
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
437
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
438 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
439 * Build csv log line
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
440 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
441 line = xstrcpy(log->datetime);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
442 line = xstrcat(line, (char *)",");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
443 snprintf(buf, 64, "%.3f", log->temperature);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
444 line = xstrcat(line, buf);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
445 line = xstrcat(line, (char *)",");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446 snprintf(buf, 64, "%.3f", log->pressure);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
447 line = xstrcat(line, buf);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
448 line = xstrcat(line, (char *)",");
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
449 line = xstrcat(line, log->uuid);
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
450
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
451 /*
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
452 * Build logfile name
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
453 */
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
454 logfile = xstrcpy(Config.web_root);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
455 logfile = xstrcat(logfile, (char *)"/log/co2pressure/");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
456 logfile = xstrcat(logfile, log->product_code);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
457 logfile = xstrcat(logfile, (char *)" ");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
458 logfile = xstrcat(logfile, log->product_name);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
459 logfile = xstrcat(logfile, (char *)".log");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
461 if (debug)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462 fprintf(stdout, "%s %s\n", logfile, line);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
463
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 fp = fopen(logfile, "a");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 if (fp) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 fprintf(fp, "%s\n", line);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 fclose(fp);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 } else {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469 syslog(LOG_NOTICE, "cannot append to `%s'", logfile);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
471
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
472 free(logfile);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 logfile = NULL;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
474 free(line);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475 line = NULL;
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
476
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
477 if (log->datetime)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
478 free(log->datetime);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
479 if (log->product_uuid )
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
480 free(log->product_uuid );
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 if (log->product_code )
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
482 free(log->product_code );
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
483 if (log->product_name )
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
484 free(log->product_name );
506
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
485 if (log->uuid)
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
486 free(log->uuid);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
487 if (log->node)
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
488 free(log->node);
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
489 if (log->alias)
8ab0e87d579e Added beer selection in the CO2 meter screen. Added CO2 pressure logging.
Michiel Broek <mbroek@mbse.eu>
parents: 505
diff changeset
490 free(log->alias);
502
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
491 free(log);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
492 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
493
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
494
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
495
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
496 void co2meter_dump(sys_co2meter_list *co2meter)
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
497 {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
498 if (debug) {
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
499 printf("uuid %s\n", co2meter->uuid);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
500 printf("alias %s\n", co2meter->alias);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
501 printf("node %s\n", co2meter->node);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
502 printf("online %s\n", co2meter->online ? "yes":"no");
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
503 printf("product %s / %s\n", co2meter->beercode, co2meter->beername);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
504 printf("Temperature %-16s %10s %8.3f\n", co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
505 printf("Pressure %10s %d %.3f %.3f %.3f\n", co2meter->pressure_state, co2meter->pressure_channel,
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
506 co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
507 printf("mode %s\n", co2meter->mode);
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
508 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
509 }
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
510
a8a6901b5a99 Added CO2 meter units to the daemon.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
511

mercurial