thermferm/websocket.c

Sat, 20 Apr 2024 11:48:20 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 20 Apr 2024 11:48:20 +0200
changeset 692
6d97eb820cc1
parent 684
b2265c7e5707
child 693
3518c07737d8
permissions
-rw-r--r--

Fixed two compiler warnings on arm platform

675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file websocket.c
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief WebSockets interface
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * @author Michiel Broek <mbroek at mbse dot eu>
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * Copyright (C) 2024
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * Michiel Broek <mbroek at mbse dot eu>
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * This file is part of the mbsePi-apps
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 * This is free software; you can redistribute it and/or modify it
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * under the terms of the GNU General Public License as published by the
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * Free Software Foundation; either version 2, or (at your option) any
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * later version.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 * bms is distributed in the hope that it will be useful, but
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * General Public License for more details.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 * along with ThermFerm; see the file COPYING. If not, write to the Free
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 #include "thermferm.h"
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 #include "xutil.h"
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
29 #include "devices.h"
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30 #include "websocket.h"
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 #include <libwebsockets.h>
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 extern sys_config Config;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 extern int debug;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
36 extern const char UNITMODE[5][8];
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
37 extern const char UNITSTAGE[4][12];
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
38 //extern const char PROFSTATE[5][6];
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
39 //extern const char TEMPSTATE[3][8];
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 int my_ws_shutdown = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 int my_ws_state = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 struct lws_context *context;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 int ws_clients = 0;
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
45 long ws_pingno = 0;
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 time_t last_msg = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 pthread_mutex_t ws_mutex;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 /*
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 * Based on lws-mirror-protocol
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53 #define MAX_MESSAGE_QUEUE 512
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 #define WS_INBUF 2048
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 /*
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 * one of these created for each message
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 struct a_message {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 void *payload; /* is malloc'd */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 size_t len;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 };
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 static struct a_message ringbuffer[MAX_MESSAGE_QUEUE];
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 static int ringbuffer_head;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
72 void fermenter_ws_receive(char *buf)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
73 {
680
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
74 struct json_object *val, *val2, *jobj, *profile;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
75 units_list *unit;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
76 bool changed;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
77
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
78 jobj = json_tokener_parse(buf);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
79 json_object_object_get_ex(jobj, "unit", &val);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
80
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
81 for (unit = Config.units ; unit; unit = unit->next) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
82 if (strcmp((char *)json_object_get_string(val), unit->alias) == 0) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
83 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
84 * Setpoints
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
85 * {"type":"fermenter","unit":"unit0","setpoint_low":20.3,"setpoint_high":20.7}
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
86 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
87 if ((unit->mode == UNITMODE_FRIDGE) || (unit->mode == UNITMODE_BEER)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
88 changed = false;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
89 if (json_object_object_get_ex(jobj, "setpoint_low", &val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
90 if (unit->PID_heat->SetP != json_object_get_double(val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
91 changed = true;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
92 syslog(LOG_NOTICE, "ws: unit %s setpoint low from %.1f to %.1f", unit->alias, unit->PID_heat->SetP, json_object_get_double(val));
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
93 unit->PID_heat->SetP = json_object_get_double(val);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
94 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
95 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
96 if (json_object_object_get_ex(jobj, "setpoint_high", &val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
97 if (unit->PID_cool->SetP != json_object_get_double(val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
98 changed = true;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
99 syslog(LOG_NOTICE, "ws: unit %s setpoint high from %.1f to %.1f", unit->alias, unit->PID_cool->SetP, json_object_get_double(val));
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
100 unit->PID_cool->SetP = json_object_get_double(val);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
101 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
102 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
103 if (changed) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
104 if (unit->mode == UNITMODE_FRIDGE) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
105 unit->fridge_set_lo = unit->PID_heat->SetP;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
106 unit->fridge_set_hi = unit->PID_cool->SetP;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
107 } else {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
108 unit->beer_set_lo = unit->PID_heat->SetP;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
109 unit->beer_set_hi = unit->PID_cool->SetP;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
110 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
111 unit->mqtt_flag |= MQTT_FLAG_DATA;
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
112 return;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
113 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
114 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
115
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
116 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
117 * Unit mode
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
118 * {"type":"fermenter","unit":"unit0","mode":"NONE"}
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
119 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
120 if (json_object_object_get_ex(jobj, "mode", &val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
121 for (int i = 0; i < 5; i++) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
122 if (strcmp((char *)json_object_get_string(val), UNITMODE[i]) == 0) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
123 if (unit->mode != i) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
124 unit->mqtt_flag |= MQTT_FLAG_DATA;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
125 /* Initialize log if the unit is turned on */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
126 if ((unit->mode == UNITMODE_OFF) && (i != UNITMODE_OFF)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
127 unit->mqtt_flag |= MQTT_FLAG_BIRTH;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
128 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
129 if (i == UNITMODE_PROFILE) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
130 /* Do some checks and refuse profile mode cannot be set */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
131 if (unit->profile_uuid == NULL) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
132 syslog(LOG_NOTICE, "ws: unit %s refuse mode profile, not loaded", unit->alias);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
133 break;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
134 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
135 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
136 syslog(LOG_NOTICE, "ws: unit %s mode to %s", unit->alias, UNITMODE[i]);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
137 unit->mode = i;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
138 if ((unit->mode != UNITMODE_OFF) && ! unit->event_msg)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
139 unit->event_msg = xstrcpy((char *)UNITMODE[i]);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
140 /* Allways turn everything off after a mode change */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
141 unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
142 unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
143 unit->heater_state = unit->cooler_state = unit->fan_state = unit->light_state = unit->light_timer = 0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
144 unit->heater_wait = unit->cooler_wait = unit->fan_wait = unit->light_wait = 0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
145 device_out(unit->heater_address, unit->heater_state);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
146 device_out(unit->cooler_address, unit->cooler_state);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
147 device_out(unit->fan_address, unit->fan_state);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
148 device_out(unit->light_address, unit->light_state);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
149 if (unit->mode == UNITMODE_PROFILE) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
150 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
151 * Set a sane default until it will be overruled by the
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
152 * main processing loop.
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
153 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
154 unit->prof_target_lo = unit->profile_inittemp_lo;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
155 unit->prof_target_hi = unit->profile_inittemp_hi;;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
156 unit->prof_fridge_mode = 0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
157 unit->prof_state = PROFILE_OFF;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
158 unit->prof_started = unit->prof_paused = unit->prof_primary_done = 0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
159 unit->prof_peak_abs = unit->prof_peak_rel = 0.0;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
160 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
161 }
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
162 return;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
163 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
164 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
165 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
166
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
167 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
168 * Unit stage
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
169 * {"type":"fermenter","unit":"unit0","stage":"SECONDARY"}
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
170 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
171 if (json_object_object_get_ex(jobj, "stage", &val)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
172 for (int i = 0; i < 4; i++) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
173 if (strcmp((char *)json_object_get_string(val), UNITSTAGE[i]) == 0) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
174 if (unit->stage != i) {
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
175 syslog(LOG_NOTICE, "ws: unit %s: stage to %s", unit->alias, UNITSTAGE[i]);
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
176 unit->mqtt_flag |= MQTT_FLAG_DATA;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
177 unit->stage = i;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
178 if ((unit->mode != UNITMODE_OFF) && ! unit->event_msg)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
179 unit->event_msg = xstrcpy((char *)UNITSTAGE[i]);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
180 }
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
181 return;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
182 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
183 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
184 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
185
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
186 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
187 * Unit heater and cooler switch
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
188 * {"type":"fermenter","unit":"unit0","heater_state":100,"cooler_state":0}
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
189 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
190 if ((json_object_object_get_ex(jobj, "heater_state", &val)) &&
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
191 (json_object_object_get_ex(jobj, "cooler_state", &val2)) &&
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
192 (unit->mode == UNITMODE_NONE)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
193 if (json_object_get_int(val) != unit->heater_state)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
194 unit->heater_state = json_object_get_int(val);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
195 if (json_object_get_int(val2) != unit->cooler_state)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
196 unit->cooler_state = json_object_get_int(val2);
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
197 if (unit->heater_state && unit->cooler_state)
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
198 unit->heater_state = unit->cooler_state = 0; // Safety
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
199 unit->mqtt_flag |= MQTT_FLAG_DATA;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
200 syslog(LOG_NOTICE, "ws: unit %s heater_state to %d, cooler_state to %d", unit->alias, unit->heater_state, unit->cooler_state);
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
201 return;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
202 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
203
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
204 /*
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
205 * Unit fan switch
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
206 * {"type":"fermenter","unit":"unit0","fan_state":0}
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
207 */
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
208 if ((json_object_object_get_ex(jobj, "fan_state", &val)) && (unit->mode == UNITMODE_NONE)) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
209 if (json_object_get_int(val) != unit->fan_state)
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
210 unit->fan_state = json_object_get_int(val);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
211 unit->mqtt_flag |= MQTT_FLAG_DATA;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
212 syslog(LOG_NOTICE, "ws: unit %s fan_state to %d", unit->alias, unit->fan_state);
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
213 return;
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
214 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
215
680
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
216 /*
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
217 * We don't implement "light", "product", "profile" download here.
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
218 * But "profile" commands are implemented. That means a profile
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
219 * must be installed by bmsd via mqtt.
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
220 * {"type":"fermenter","unit":"unit0","profile":{"command":"pause"}}
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
221 * off pause start abort done
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
222 */
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
223 if ((json_object_object_get_ex(jobj, "profile", &profile)) && (unit->mode == UNITMODE_PROFILE)) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
224 if (json_object_object_get_ex(profile, "command", &val)) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
225 char *cmd = xstrcpy((char *)json_object_get_string(val));
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
226 syslog(LOG_NOTICE, "ws: profile command `%s'", cmd);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
227 if ((! strcmp(cmd, (char *)"off")) && (unit->prof_state == PROFILE_DONE)) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
228 unit->prof_state = PROFILE_OFF;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
229 syslog(LOG_NOTICE, "ws: unit %s profile to OFF", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
230 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
231 } else if (! strcmp(cmd, (char *)"pause")) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
232 if (unit->prof_state == PROFILE_RUN) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
233 unit->prof_state = PROFILE_PAUSE;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
234 syslog(LOG_NOTICE, "ws: unit %s profile to PAUSE", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
235 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
236 } else if (unit->prof_state == PROFILE_PAUSE) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
237 unit->prof_state = PROFILE_RUN;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
238 syslog(LOG_NOTICE, "ws: unit %s profile resume RUN", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
239 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
240 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
241 } else if (! strcmp(cmd, (char *)"start")) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
242 if (unit->prof_state == PROFILE_OFF) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
243 unit->prof_state = PROFILE_RUN;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
244 unit->prof_started = time(NULL);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
245 unit->prof_paused = unit->prof_primary_done = 0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
246 unit->prof_peak_abs = unit->prof_peak_rel = 0.0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
247 syslog(LOG_NOTICE, "ws: unit %s profile start RUN", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
248 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
249 if (! unit->event_msg)
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
250 unit->event_msg = xstrcpy((char *)"Profile start");
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
251 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
252 } else if (! strcmp(cmd, (char *)"abort")) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
253 if ((unit->prof_state == PROFILE_RUN) || (unit->prof_state == PROFILE_PAUSE)) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
254 unit->prof_state = PROFILE_OFF;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
255 unit->prof_started = unit->prof_paused = unit->prof_primary_done = 0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
256 unit->prof_peak_abs = unit->prof_peak_rel = 0.0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
257 syslog(LOG_NOTICE, "ws: unit %s profile ABORT", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
258 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
259 if (! unit->event_msg)
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
260 unit->event_msg = xstrcpy((char *)"Profile abort");
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
261 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
262 } else if (! strcmp(cmd, (char *)"done")) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
263 if (unit->prof_state == PROFILE_DONE) {
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
264 unit->prof_state = PROFILE_OFF;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
265 unit->prof_started = unit->prof_paused = unit->prof_primary_done = 0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
266 unit->prof_peak_abs = unit->prof_peak_rel = 0.0;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
267 syslog(LOG_NOTICE, "ws: unit %s profile OFF", unit->alias);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
268 unit->mqtt_flag |= MQTT_FLAG_DATA;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
269 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
270 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
271 free(cmd);
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
272 cmd = NULL;
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
273 }
683
d48733bf1529 Fixed fermenter switches in NONE mode. Som other small bugfixes.
Michiel Broek <mbroek@mbse.eu>
parents: 682
diff changeset
274 return;
680
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
275 }
8b3c86124a08 Increased server buffersize from 1024 to 4096. Added DEVICE JSON <uuid> command. Added websocket response fermenter profile. The fermenter monitor screen is ready (maybe).
Michiel Broek <mbroek@mbse.eu>
parents: 678
diff changeset
276
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
277 return;
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
278 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
279 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
280 syslog(LOG_NOTICE, "fermenter_ws_receive(%s)", buf);
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
281 }
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
282
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
283
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
284 void pong_ws_receive(char *buf)
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
285 {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
286 struct json_object *val, *jobj;
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
287
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
288 jobj = json_tokener_parse(buf);
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
289 json_object_object_get_ex(jobj, "pong", &val);
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
290 long ws_pongno = json_object_get_int(val);
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
291 if (ws_pongno != ws_pingno) {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
292 syslog(LOG_NOTICE, "ws: ping/pong error %ld/%ld", ws_pingno, ws_pongno);
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
293 }
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
294 }
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
295
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
296
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 static int callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298 {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 struct per_session_data__lws_mirror *pss = (struct per_session_data__lws_mirror *)user;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 int n, m;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301 char buf[WS_INBUF + 1];
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 switch (reason) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305 case LWS_CALLBACK_ESTABLISHED: {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306 ws_clients++;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
307 pss->ringbuffer_tail = ringbuffer_head;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308 pss->wsi = wsi;
676
09b5efe0c633 Add stylesheet, about page. Add menu for fermenters. Add websocket port setup to the config server.
Michiel Broek <mbroek@mbse.eu>
parents: 675
diff changeset
309 syslog(LOG_NOTICE, "Websocket: new client, now %d", ws_clients);
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 case LWS_CALLBACK_PROTOCOL_DESTROY:
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314 syslog(LOG_NOTICE, "Websocket: protocol cleaning up");
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315 for (n = 0; n < sizeof ringbuffer / sizeof ringbuffer[0]; n++)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316 if (ringbuffer[n].payload)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317 free(ringbuffer[n].payload);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320 case LWS_CALLBACK_SERVER_WRITEABLE:
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 while (pss->ringbuffer_tail != ringbuffer_head) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322 m = ringbuffer[pss->ringbuffer_tail].len;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 n = lws_write(wsi, (unsigned char *)ringbuffer[pss->ringbuffer_tail].payload + LWS_PRE, m, LWS_WRITE_TEXT);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324 if (n < 0) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325 syslog(LOG_NOTICE, "ws: ERROR %d writing", n);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326 return -1;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328 if (n < m)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 syslog(LOG_NOTICE, "ws: partial write %d vs %d", n, m);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331 if (pss->ringbuffer_tail == (MAX_MESSAGE_QUEUE - 1))
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 pss->ringbuffer_tail = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333 else
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334 pss->ringbuffer_tail++;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336 if (((ringbuffer_head - pss->ringbuffer_tail) & (MAX_MESSAGE_QUEUE - 1)) == (MAX_MESSAGE_QUEUE - 15))
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337 lws_rx_flow_allow_all_protocol(lws_get_context(wsi), lws_get_protocol(wsi));
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
338
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
339 if (lws_send_pipe_choked(wsi)) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
340 lws_callback_on_writable(wsi);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
341 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
342 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
343 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
344 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
345
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
346 case LWS_CALLBACK_RECEIVE:
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
347
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
348 memcpy(buf, in, len);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
349 buf[len] = '\0';
692
6d97eb820cc1 Fixed two compiler warnings on arm platform
Michiel Broek <mbroek@mbse.eu>
parents: 684
diff changeset
350 syslog(LOG_NOTICE, "ws: received %ld bytes %s", (long)len, buf);
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
351 /*
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
352 * These are send by bmsapp to bmsd. Then bmsd resends these via MQTT.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
353 * Do we want to change that? Or use it for the new web pages.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
354 * {"node":"rpi01","group_id":"fermenters","control":"reboot"}
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
355 * {"node":"rpi01","group_id":"fermenters","control":"rebirth"}
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
356 */
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
357 if (strncmp(buf, (char *)"{\"type\":\"fermenter\",", 20) == 0) {
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
358 fermenter_ws_receive(buf);
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
359 } else if (strncmp(buf, (char *)"{\"type\":\"device\",", 17) == 0) {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
360
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
361 } else if (strncmp(buf, (char *)"{\"type\":\"global\",", 17) == 0) {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
362
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
363 #ifdef USE_SIMULATOR
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
364 } else if (strncmp(buf, (char *)"{\"type\":\"simulator\",", 20) == 0) {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
365
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
366 #endif
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
367 } else if (strncmp(buf, (char *)"{\"pong\":", 8) == 0) {
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
368 pong_ws_receive(buf);
678
cc49115e769e Better websocket broadcast messages. Added GLOBAL JSON command to the server. Better logic to trigger websocket and mqtt data updates for the fermenter units. Websocket receive added fermenter mode, stage, setpoints, switches. Added more css styles for the fermenter screen. Added the fermenter screen php and javascript.
Michiel Broek <mbroek@mbse.eu>
parents: 676
diff changeset
369 }
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
370
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
371 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
372
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
373 case LWS_CALLBACK_CLOSED:
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
374 ws_clients--;
676
09b5efe0c633 Add stylesheet, about page. Add menu for fermenters. Add websocket port setup to the config server.
Michiel Broek <mbroek@mbse.eu>
parents: 675
diff changeset
375 syslog(LOG_NOTICE, "Websocket: del client, now %d", ws_clients);
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
376 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
377
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
378 default:
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
379 break;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
380 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
381
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
382 return 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
383 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
384
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
385
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
386
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
387 static struct lws_protocols protocols[] = {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
388 { "thermferm-protocol", callback_ws, sizeof(struct per_session_data__lws_mirror), WS_INBUF },
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
389 { NULL, NULL, 0, 0 } /* terminator */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
390 };
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
391
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
392
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
393 /*
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
394 * {"node":"host","group":"group","online":1,"lastseen":"datetime","temperature":20.5,"humidity":47,"ip":"ipaddr","rssi":-1}
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
395 * {"device":"fermenters","node":"seaport","unit":"unit0","online":1,"mode":"FRIDGE","yeast_lo":12.0,"yeast_hi":24.0,"air":19.875,"beer":19.812,"chiller":1.500,"heater":100,"cooler":0,"fan":100,"light":0,"door":0,"sp_lo":17.0,"sp_hi":17.5,"alarm":0,"stage":"PRIMARY"}
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
396 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
397 void ws_broadcast(char *msg)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
398 {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
399 int len, err;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
400
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
401 err = pthread_mutex_lock(&ws_mutex);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
402 if (err) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
403 syslog(LOG_NOTICE, "ws_broadcast pthread_mutex_lock error %d", err);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
404 } else {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
405
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
406 len = strlen(msg);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
407 if (ringbuffer[ringbuffer_head].payload)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
408 free(ringbuffer[ringbuffer_head].payload);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
409
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
410 ringbuffer[ringbuffer_head].payload = malloc(LWS_PRE + len);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
411 ringbuffer[ringbuffer_head].len = len;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
412 memcpy((char *)ringbuffer[ringbuffer_head].payload + LWS_PRE, msg, len);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
413 if (ringbuffer_head == (MAX_MESSAGE_QUEUE - 1))
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
414 ringbuffer_head = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
415 else
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
416 ringbuffer_head++;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
417
684
b2265c7e5707 Updated dependencies. Devices json data is created in de devices source for all places where it is needed. Added devices_ws function to broadcast all devices, to be used when any device is changed. The devices loop detects changes in input values and calls devices_ws if so. The server uses the general devices json data.
Michiel Broek <mbroek@mbse.eu>
parents: 683
diff changeset
418 syslog(LOG_NOTICE, "ws: broadcast buffer=%d len=%d", ringbuffer_head, len);
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
419
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
420 lws_callback_on_writable_all_protocol(context, &protocols[0]);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
421 err = pthread_mutex_unlock(&ws_mutex);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
422 if (err) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
423 syslog(LOG_NOTICE, "ws_broadcast pthread_mutex_unlock error %d", err);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
424 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
425 last_msg = time(NULL);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
426 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
427 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
428
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
429
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
430
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
431 /*
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
432 * Called every 45 seconds.
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
433 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
434 void ws_check(void)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
435 {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
436 time_t now = time(NULL);
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
437 char buf[64];
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
438
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
439 if (((int)now - (int)last_msg) > 45) {
682
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
440 snprintf(buf, 63, "{\"ping\":%ld}", ++ws_pingno);
f82be2bd472f Websocket ping/pong uses sequence numbers.
Michiel Broek <mbroek@mbse.eu>
parents: 680
diff changeset
441 ws_broadcast(buf);
675
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
442 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
443 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
444
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
445
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
447 void *my_ws_loop(void *threadid)
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
448 {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
449 struct lws_context_creation_info info;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
450 int n = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
451
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
452 my_ws_state = 1;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
453 memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
454 info.port = Config.websocket_port;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
455 info.protocols = protocols;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
456 info.gid = -1;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
457 info.uid = -1;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
458 info.keepalive_timeout = 900;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
459 info.options = LWS_SERVER_OPTION_VALIDATE_UTF8;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
461 context = lws_create_context(&info);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
463 if (context == NULL) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 syslog(LOG_NOTICE, "libwebsocket_create_context() failed");
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 my_ws_state = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 return (void *)1;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 syslog(LOG_NOTICE, "Websocket: server started port %d", info.port);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470 /*
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
471 * Loop forever until external shutdown variable is set.
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
472 */
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 while (n >= 0 && ! my_ws_shutdown) {
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
474
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475 n = lws_service(context, 50);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
476 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
477 lws_context_destroy(context);
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
478
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
479 my_ws_state = 0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
480 syslog(LOG_NOTICE, "Websocket: server stopped");
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 return (void *)0;
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
482 }
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
483
825210ba2707 Added websockets to thermferm. Started new www directory for websocket enabled web. The init script now waits until thermferm is completely stopped.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
484

mercurial