Tue, 22 Jan 2019 20:27:45 +0100
Fermentables database bool to int types. Dropdown lists are using tables with indexes. Dropdown lists display in Dutch. Save and delete in the database now use POST instead of GET. Added the added and dissolved_protein fields. Removed the ibu_gal_per_lb field. Redesigned the web page. Code cleanup.
0 | 1 | /** |
2 | * @file mysql.c | |
3 | * @brief MySQL/MariaDB access. | |
4 | * @author Michiel Broek <mbroek at mbse dot eu> | |
5 | * | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
6 | * Copyright (C) 2018-2019 |
0 | 7 | * |
8 | * This file is part of the bms (Brewery Management System) | |
9 | * | |
10 | * This is free software; you can redistribute it and/or modify it | |
11 | * under the terms of the GNU General Public License as published by the | |
12 | * Free Software Foundation; either version 2, or (at your option) any | |
13 | * later version. | |
14 | * | |
15 | * bms is distributed in the hope that it will be useful, but | |
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 | * General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License | |
21 | * along with ThermFerm; see the file COPYING. If not, write to the Free | |
22 | * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | |
23 | */ | |
24 | ||
25 | #include "bms.h" | |
26 | #include "xutil.h" | |
27 | #include "mysql.h" | |
28 | #include "nodes.h" | |
29 | ||
30 | ||
31 | MYSQL *con = NULL; | |
32 | MYSQL_RES *res_set; | |
33 | MYSQL_ROW row; | |
34 | ||
35 | extern sys_config Config; | |
36 | extern sys_node_list *nodes; | |
37 | extern sys_fermenter_list *fermenters; | |
38 | extern int debug; | |
39 | ||
40 | ||
41 | time_t datetime_to_time_t(char *dt_string) | |
42 | { | |
43 | struct tm tm; | |
44 | ||
45 | memset(&tm, 0, sizeof(struct tm)); | |
46 | tm.tm_year = atoi(strtok(dt_string, "-")) - 1900; | |
47 | tm.tm_mon = atoi(strtok(NULL, "-")) - 1; | |
48 | tm.tm_mday = atoi(strtok(NULL, " ")); | |
49 | tm.tm_hour = atoi(strtok(NULL, ":")); | |
50 | tm.tm_min = atoi(strtok(NULL, ":")); | |
51 | tm.tm_sec = atoi(strtok(NULL, "\0")); | |
52 | tm.tm_isdst = 1; | |
53 | ||
54 | return mktime(&tm); | |
55 | } | |
56 | ||
57 | ||
58 | ||
59 | int bms_mysql_init(void) | |
60 | { | |
61 | sys_node_list *node, *tmpp; | |
62 | sys_fermenter_list *fermenter, *tmpf; | |
63 | int ncnt = 0, fcnt = 0; | |
64 | ||
65 | con = mysql_init(NULL); | |
66 | if (con == NULL) { | |
67 | syslog(LOG_NOTICE, "MySQL: mysql_init() failed"); | |
68 | return 1; | |
69 | } | |
70 | ||
71 | if (mysql_real_connect(con, Config.mysql_host, Config.mysql_user, Config.mysql_pass, Config.mysql_database, Config.mysql_port, NULL, 0) == NULL) { | |
72 | syslog(LOG_NOTICE, "MySQL: mysql_real_connect() %s", mysql_error(con)); | |
73 | return 2; | |
74 | } | |
75 | ||
76 | syslog(LOG_NOTICE, "MySQL: connected to %s:%d database %s", Config.mysql_host, Config.mysql_port, Config.mysql_database); | |
77 | syslog(LOG_NOTICE, "MySQL: %s server info: %s", mysql_get_host_info(con), mysql_get_server_info(con)); | |
78 | if (debug) | |
79 | fprintf(stdout, "MySQL: connected\n"); | |
80 | ||
81 | /* | |
82 | * Restore nodes from the database | |
83 | */ | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
84 | if (mysql_query(con, "SELECT * FROM mon_nodes")) { |
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
85 | syslog(LOG_NOTICE, "MySQL: SELECT * FROM mon_nodes error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 86 | } else { |
87 | res_set = mysql_store_result(con); | |
88 | if (res_set == NULL) { | |
89 | syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con)); | |
90 | } else { | |
91 | // Process results | |
92 | while ((row = mysql_fetch_row(res_set)) != NULL) { | |
93 | node = (sys_node_list *)malloc(sizeof(sys_node_list)); | |
94 | memset(node, 0, sizeof(sys_node_list)); | |
95 | node->next = NULL; | |
96 | node->uuid = xstrcpy(row[1]); | |
97 | node->node = xstrcpy(row[2]); | |
98 | node->online = false; // Will be set using MQTT | |
99 | node->group_id = xstrcpy(row[4]); | |
100 | node->hardwaremake = xstrcpy(row[5]); | |
101 | node->hardwaremodel = xstrcpy(row[6]); | |
102 | node->os = xstrcpy(row[7]); | |
103 | node->os_version = xstrcpy(row[8]); | |
104 | node->firmware = xstrcpy(row[9]); | |
105 | node->firstseen = datetime_to_time_t(row[10]); | |
106 | node->lastseen = datetime_to_time_t(row[11]); | |
107 | node->temperature = atof(row[12]); | |
108 | node->humidity = atof(row[13]); | |
109 | node->barometer = atof(row[14]); | |
110 | node->gps_latitude = atof(row[15]); | |
111 | node->gps_longitude = atof(row[16]); | |
112 | node->gps_altitude = atof(row[17]); | |
113 | node->net_address = xstrcpy(row[18]); | |
114 | node->net_ifname = xstrcpy(row[19]); | |
115 | node->net_rssi = atoi(row[20]); | |
116 | ||
117 | if (nodes == NULL) { | |
118 | nodes = node; | |
119 | } else { | |
120 | for (tmpp = nodes; tmpp; tmpp = tmpp->next) { | |
121 | if (tmpp->next == NULL) { | |
122 | tmpp->next = node; | |
123 | break; | |
124 | } | |
125 | } | |
126 | } | |
127 | ncnt++; | |
128 | } | |
129 | mysql_free_result(res_set); | |
130 | } | |
131 | } | |
132 | ||
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
133 | if (mysql_query(con, "SELECT * FROM mon_fermenters")) { |
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
134 | syslog(LOG_NOTICE, "MySQL: SELECT * FROM mon_fermenters error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 135 | } else { |
136 | res_set = mysql_store_result(con); | |
137 | if (res_set == NULL) { | |
138 | syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con)); | |
139 | } else { | |
140 | while ((row = mysql_fetch_row(res_set)) != NULL) { | |
141 | fermenter = (sys_fermenter_list *)malloc(sizeof(sys_fermenter_list)); | |
142 | memset(fermenter, 0, sizeof(sys_fermenter_list)); | |
143 | fermenter->next = NULL; | |
144 | fermenter->uuid = xstrcpy(row[1]); | |
145 | fermenter->alias = xstrcpy(row[2]); | |
146 | fermenter->node = xstrcpy(row[3]); | |
147 | fermenter->online = false; // Will be set later | |
148 | fermenter->beercode = xstrcpy(row[5]); | |
149 | fermenter->beername = xstrcpy(row[6]); | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
150 | fermenter->beeruuid = xstrcpy(row[44]); |
0 | 151 | if (strlen(row[7])) { |
152 | fermenter->air_address = xstrcpy(row[7]); | |
153 | fermenter->air_state = xstrcpy(row[8]); | |
154 | fermenter->air_temperature = atof(row[9]); | |
155 | } | |
156 | if (strlen(row[10])) { | |
157 | fermenter->beer_address = xstrcpy(row[10]); | |
158 | fermenter->beer_state = xstrcpy(row[11]); | |
159 | fermenter->beer_temperature = atof(row[12]); | |
160 | } | |
161 | if (strlen(row[13])) { | |
162 | fermenter->chiller_address = xstrcpy(row[13]); | |
163 | fermenter->chiller_state = xstrcpy(row[14]); | |
164 | fermenter->chiller_temperature = atof(row[15]); | |
165 | } | |
166 | if (strlen(row[16])) { | |
167 | fermenter->heater_address = xstrcpy(row[16]); | |
168 | fermenter->heater_state = atoi(row[17]); | |
169 | fermenter->heater_usage = atoi(row[18]); | |
170 | } | |
171 | if (strlen(row[19])) { | |
172 | fermenter->cooler_address = xstrcpy(row[19]); | |
173 | fermenter->cooler_state = atoi(row[20]); | |
174 | fermenter->cooler_usage = atoi(row[21]); | |
175 | } | |
176 | if (strlen(row[22])) { | |
177 | fermenter->fan_address = xstrcpy(row[22]); | |
178 | fermenter->fan_state = atoi(row[23]); | |
179 | fermenter->fan_usage = atoi(row[24]); | |
180 | } | |
181 | if (strlen(row[25])) { | |
182 | fermenter->light_address = xstrcpy(row[25]); | |
183 | fermenter->light_state = atoi(row[26]); | |
184 | fermenter->light_usage = atoi(row[27]); | |
185 | } | |
186 | if (strlen(row[28])) { | |
187 | fermenter->door_address = xstrcpy(row[28]); | |
188 | fermenter->door_state = atoi(row[29]); | |
189 | } | |
190 | if (strlen(row[30])) { | |
191 | fermenter->psu_address = xstrcpy(row[30]); | |
192 | fermenter->psu_state = atoi(row[31]); | |
193 | } | |
194 | fermenter->mode = xstrcpy(row[32]); | |
195 | fermenter->alarm = atoi(row[33]); | |
196 | fermenter->setpoint_high = atof(row[34]); | |
197 | fermenter->setpoint_low = atof(row[35]); | |
198 | if (strlen(row[36])) { | |
199 | fermenter->profile_uuid = xstrcpy(row[36]); | |
200 | fermenter->profile_name = xstrcpy(row[37]); | |
201 | fermenter->profile_state = xstrcpy(row[38]); | |
202 | fermenter->profile_percent = atoi(row[39]); | |
203 | fermenter->profile_inittemp_high = atof(row[40]); | |
204 | fermenter->profile_inittemp_low = atof(row[41]); | |
205 | fermenter->profile_steps = xstrcpy(row[42]); | |
206 | } | |
207 | fermenter->stage = xstrcpy(row[43]); | |
208 | ||
209 | if (fermenters == NULL) { | |
210 | fermenters = fermenter; | |
211 | } else { | |
212 | for (tmpf = fermenters; tmpf; tmpf = tmpf->next) { | |
213 | if (tmpf->next == NULL) { | |
214 | tmpf->next = fermenter; | |
215 | break; | |
216 | } | |
217 | } | |
218 | } | |
219 | fcnt++; | |
220 | } | |
221 | mysql_free_result(res_set); | |
222 | } | |
223 | } | |
224 | ||
225 | syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters", ncnt, fcnt); | |
226 | return 0; | |
227 | } | |
228 | ||
229 | ||
230 | ||
231 | void bms_mysql_end(void) | |
232 | { | |
233 | sys_fermenter_list *tmpf, *oldtmpf; | |
234 | sys_node_list *tmpn, *oldtmpn; | |
235 | ||
236 | mysql_close(con); | |
237 | ||
238 | syslog(LOG_NOTICE, "MySQL: disconnected"); | |
239 | if (debug) | |
240 | fprintf(stdout, "MySQL: disconnected\n"); | |
241 | ||
242 | for (tmpf = fermenters; tmpf; tmpf = oldtmpf) { | |
243 | oldtmpf = tmpf->next; | |
244 | if (tmpf->uuid) | |
245 | free(tmpf->uuid); | |
246 | if (tmpf->alias) | |
247 | free(tmpf->alias); | |
248 | if (tmpf->node) | |
249 | free(tmpf->node); | |
250 | if (tmpf->beercode) | |
251 | free(tmpf->beercode); | |
252 | if (tmpf->beername) | |
253 | free(tmpf->beername); | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
254 | if (tmpf->beeruuid) |
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
255 | free(tmpf->beeruuid); |
0 | 256 | if (tmpf->air_address) |
257 | free(tmpf->air_address); | |
258 | if (tmpf->air_state) | |
259 | free(tmpf->air_state); | |
260 | if (tmpf->beer_address) | |
261 | free(tmpf->beer_address); | |
262 | if (tmpf->beer_state) | |
263 | free(tmpf->beer_state); | |
264 | if (tmpf->chiller_address) | |
265 | free(tmpf->chiller_address); | |
266 | if (tmpf->chiller_state) | |
267 | free(tmpf->chiller_state); | |
268 | if (tmpf->heater_address) | |
269 | free(tmpf->heater_address); | |
270 | if (tmpf->cooler_address) | |
271 | free(tmpf->cooler_address); | |
272 | if (tmpf->fan_address) | |
273 | free(tmpf->fan_address); | |
274 | if (tmpf->light_address) | |
275 | free(tmpf->light_address); | |
276 | if (tmpf->door_address) | |
277 | free(tmpf->door_address); | |
278 | if (tmpf->psu_address) | |
279 | free(tmpf->psu_address); | |
280 | if (tmpf->mode) | |
281 | free(tmpf->mode); | |
282 | if (tmpf->stage) | |
283 | free(tmpf->stage); | |
284 | if (tmpf->profile_uuid) | |
285 | free(tmpf->profile_uuid); | |
286 | if (tmpf->profile_name) | |
287 | free(tmpf->profile_name); | |
288 | if (tmpf->profile_state) | |
289 | free(tmpf->profile_state); | |
290 | if (tmpf->profile_steps) | |
291 | free(tmpf->profile_steps); | |
292 | free(tmpf); | |
293 | } | |
294 | for (tmpn = nodes; tmpn; tmpn = oldtmpn) { | |
295 | oldtmpn = tmpn->next; | |
296 | if (tmpn->uuid) | |
297 | free(tmpn->uuid); | |
298 | if (tmpn->node) | |
299 | free(tmpn->node); | |
300 | if (tmpn->group_id) | |
301 | free(tmpn->group_id); | |
302 | if (tmpn->hardwaremake) | |
303 | free(tmpn->hardwaremake); | |
304 | if (tmpn->hardwaremodel) | |
305 | free(tmpn->hardwaremodel); | |
306 | if (tmpn->os) | |
307 | free(tmpn->os); | |
308 | if (tmpn->os_version) | |
309 | free(tmpn->os_version); | |
310 | if (tmpn->firmware) | |
311 | free(tmpn->firmware); | |
312 | if (tmpn->net_address) | |
313 | free(tmpn->net_address); | |
314 | if (tmpn->net_ifname) | |
315 | free(tmpn->net_ifname); | |
316 | free(tmpn); | |
317 | } | |
318 | } | |
319 | ||
320 | ||
321 | ||
322 | void bms_mysql_ping(void) | |
323 | { | |
324 | } | |
325 | ||
326 | ||
327 | ||
328 | void node_mysql_insert(sys_node_list *node) | |
329 | { | |
76
804d45bdaa86
Increased nenory for the nodes query strings.
Michiel Broek <mbroek@mbse.eu>
parents:
43
diff
changeset
|
330 | char *query = malloc(1024), first[21], last[21]; |
0 | 331 | struct tm *mytime; |
332 | ||
333 | mytime = localtime(&node->firstseen); | |
334 | snprintf(first, 20, "%04d-%02d-%02d %02d:%02d:%02d", | |
335 | mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); | |
336 | mytime = localtime(&node->lastseen); | |
337 | snprintf(last, 20, "%04d-%02d-%02d %02d:%02d:%02d", | |
338 | mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); | |
339 | ||
76
804d45bdaa86
Increased nenory for the nodes query strings.
Michiel Broek <mbroek@mbse.eu>
parents:
43
diff
changeset
|
340 | snprintf(query, 1023, |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
341 | "INSERT INTO mon_nodes SET uuid='%s', node='%s', online='%s', group_id='%s', " \ |
0 | 342 | "hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', firstseen='%s', lastseen='%s', " \ |
343 | "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ | |
344 | "net_address='%s', net_ifname='%s', net_rssi='%d'", | |
345 | node->uuid, node->node, node->online ?"Y":"N", node->group_id, | |
346 | node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, first, last, | |
347 | node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, | |
348 | node->net_address, node->net_ifname, node->net_rssi); | |
349 | ||
350 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
351 | syslog(LOG_NOTICE, "MySQL: INSERT INTO mon_nodes error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 352 | } else { |
353 | syslog(LOG_NOTICE, "MySQL: insert new node %s", node->node); | |
354 | } | |
355 | ||
356 | free(query); | |
357 | } | |
358 | ||
359 | ||
360 | ||
361 | void node_mysql_update(sys_node_list *node) | |
362 | { | |
76
804d45bdaa86
Increased nenory for the nodes query strings.
Michiel Broek <mbroek@mbse.eu>
parents:
43
diff
changeset
|
363 | char *query = malloc(1024), last[21]; |
0 | 364 | struct tm *mytime; |
365 | ||
366 | mytime = localtime(&node->lastseen); | |
367 | snprintf(last, 20, "%04d-%02d-%02d %02d:%02d:%02d", | |
368 | mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); | |
369 | ||
76
804d45bdaa86
Increased nenory for the nodes query strings.
Michiel Broek <mbroek@mbse.eu>
parents:
43
diff
changeset
|
370 | snprintf(query, 1023, |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
371 | "UPDATE mon_nodes SET online='%s', hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', lastseen='%s', " \ |
0 | 372 | "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ |
373 | "net_address='%s', net_ifname='%s', net_rssi='%d' WHERE uuid='%s'", | |
374 | node->online ?"Y":"N", node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, last, | |
375 | node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, | |
376 | node->net_address, node->net_ifname, node->net_rssi, node->uuid); | |
377 | ||
378 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
379 | syslog(LOG_NOTICE, "MySQL: UPDATE mon_nodes error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 380 | } |
381 | ||
382 | free(query); | |
383 | } | |
384 | ||
385 | ||
386 | ||
387 | void node_mysql_death(char *node) | |
388 | { | |
389 | char *query = malloc(512); | |
390 | ||
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
391 | snprintf(query, 511, "UPDATE mon_nodes SET online='N' WHERE node='%s'", node); |
0 | 392 | // printf("%s\n", query); |
393 | ||
394 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
395 | syslog(LOG_NOTICE, "MySQL: UPDATE mon_nodes error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 396 | } |
397 | ||
398 | free(query); | |
399 | } | |
400 | ||
401 | ||
402 | ||
403 | void fermenter_mysql_insert(sys_fermenter_list *fermenter) | |
404 | { | |
405 | char *query = malloc(2560); | |
406 | ||
407 | snprintf(query, 2559, | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
408 | "INSERT INTO mon_fermenters SET uuid='%s', alias='%s', node='%s', online='%s', " \ |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
409 | "beercode='%s', beername='%s', beeruuid='%s', " \ |
0 | 410 | "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
411 | "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ | |
412 | "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ | |
413 | "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ | |
414 | "cooler_address='%s', cooler_state='%d', cooler_usage='%lu', " \ | |
415 | "fan_address='%s', fan_state='%d', fan_usage='%lu', " \ | |
416 | "light_address='%s', light_state='%d', light_usage='%lu', " \ | |
417 | "door_address='%s', door_state='%d', " \ | |
418 | "psu_address='%s', psu_state='%d', " \ | |
419 | "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ | |
420 | "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ | |
421 | "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s'", | |
422 | fermenter->uuid, fermenter->alias, fermenter->node, fermenter->online ? "Y":"N", | |
423 | fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
424 | fermenter->beeruuid ? fermenter->beeruuid : "", |
0 | 425 | fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
426 | fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, | |
427 | fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, | |
428 | fermenter->heater_address ? fermenter->heater_address : "", fermenter->heater_state, fermenter->heater_usage, | |
429 | fermenter->cooler_address ? fermenter->cooler_address : "", fermenter->cooler_state, fermenter->cooler_usage, | |
430 | fermenter->fan_address ? fermenter->fan_address : "", fermenter->fan_state, fermenter->fan_usage, | |
431 | fermenter->light_address ? fermenter->light_address : "", fermenter->light_state, fermenter->light_usage, | |
432 | fermenter->door_address ? fermenter->door_address : "", fermenter->door_state, | |
433 | fermenter->psu_address ? fermenter->psu_address : "", fermenter->psu_state, | |
434 | fermenter->mode, fermenter->alarm, fermenter->setpoint_high, fermenter->setpoint_low, | |
435 | fermenter->profile_uuid ? fermenter->profile_uuid : "", fermenter->profile_name ? fermenter->profile_name : "", | |
436 | fermenter->profile_state ? fermenter->profile_state : "", fermenter->profile_percent, | |
437 | fermenter->profile_inittemp_high, fermenter->profile_inittemp_low, | |
438 | fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage); | |
439 | ||
440 | // printf("%s\n", query); | |
441 | ||
442 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
443 | syslog(LOG_NOTICE, "MySQL: INSERT INTO mon_fermenters error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 444 | } else { |
445 | syslog(LOG_NOTICE, "MySQL: insert new fermenter %s/%s", fermenter->node, fermenter->alias); | |
446 | } | |
447 | ||
448 | free(query); | |
449 | } | |
450 | ||
451 | ||
452 | void fermenter_mysql_update(sys_fermenter_list *fermenter) | |
453 | { | |
454 | char *query = malloc(2560); | |
455 | ||
456 | snprintf(query, 2559, | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
457 | "UPDATE mon_fermenters SET online='%s', beercode='%s', beername='%s', beeruuid='%s', " \ |
0 | 458 | "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
459 | "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ | |
460 | "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ | |
461 | "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ | |
462 | "cooler_address='%s', cooler_state='%d', cooler_usage='%lu', " \ | |
463 | "fan_address='%s', fan_state='%d', fan_usage='%lu', " \ | |
464 | "light_address='%s', light_state='%d', light_usage='%lu', " \ | |
465 | "door_address='%s', door_state='%d', " \ | |
466 | "psu_address='%s', psu_state='%d', " \ | |
467 | "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ | |
468 | "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ | |
469 | "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s' WHERE uuid='%s'", | |
470 | fermenter->online ? "Y":"N", fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", | |
192
7f69b43e6084
Implemented beer uuid product in monitor fermenters.
Michiel Broek <mbroek@mbse.eu>
parents:
76
diff
changeset
|
471 | fermenter->beeruuid ? fermenter->beeruuid : "", |
0 | 472 | fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
473 | fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, | |
474 | fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, | |
475 | fermenter->heater_address ? fermenter->heater_address : "", fermenter->heater_state, fermenter->heater_usage, | |
476 | fermenter->cooler_address ? fermenter->cooler_address : "", fermenter->cooler_state, fermenter->cooler_usage, | |
477 | fermenter->fan_address ? fermenter->fan_address : "", fermenter->fan_state, fermenter->fan_usage, | |
478 | fermenter->light_address ? fermenter->light_address : "", fermenter->light_state, fermenter->light_usage, | |
479 | fermenter->door_address ? fermenter->door_address : "", fermenter->door_state, | |
480 | fermenter->psu_address ? fermenter->psu_address : "", fermenter->psu_state, | |
481 | fermenter->mode, fermenter->alarm, fermenter->setpoint_high, fermenter->setpoint_low, | |
482 | fermenter->profile_uuid ? fermenter->profile_uuid : "", fermenter->profile_name ? fermenter->profile_name : "", | |
483 | fermenter->profile_state ? fermenter->profile_state : "", fermenter->profile_percent, | |
484 | fermenter->profile_inittemp_high, fermenter->profile_inittemp_low, | |
485 | fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage, fermenter->uuid); | |
486 | ||
487 | // printf("%s\n", query); | |
488 | ||
489 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
490 | syslog(LOG_NOTICE, "MySQL: UPDATE mon_fermenters error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 491 | } |
492 | ||
493 | free(query); | |
494 | } | |
495 | ||
496 | ||
497 | ||
498 | void fermenter_mysql_death(char *node, char *alias) | |
499 | { | |
500 | char *query = malloc(512); | |
501 | ||
502 | if (alias) | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
503 | snprintf(query, 511, "UPDATE mon_fermenters SET online='N' WHERE node='%s' and alias='%s'", node, alias); |
0 | 504 | else |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
505 | snprintf(query, 511, "UPDATE mon_fermenters SET online='N' WHERE node='%s'", node); |
0 | 506 | |
507 | if (mysql_query(con, query)) { | |
43
dcb9ff8846fa
Renamed monitor database tables
Michiel Broek <mbroek@mbse.eu>
parents:
0
diff
changeset
|
508 | syslog(LOG_NOTICE, "MySQL: UPDATE mon_fermenters error %u (%s))", mysql_errno(con), mysql_error(con)); |
0 | 509 | } |
510 | ||
511 | free(query); | |
512 | } | |
513 | ||
514 |