20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
21 *****************************************************************************/ |
21 *****************************************************************************/ |
22 |
22 |
23 #include "thermferm.h" |
23 #include "thermferm.h" |
24 #include "delay.h" |
24 #include "delay.h" |
|
25 #include "xutil.h" |
|
26 #include "websocket.h" |
25 #include "simulator.h" |
27 #include "simulator.h" |
26 |
28 |
27 int my_simulator_state = 0; |
29 int my_simulator_state = 0; |
28 |
30 |
29 #ifdef USE_SIMULATOR |
31 #ifdef USE_SIMULATOR |
30 |
32 |
31 extern sys_config Config; |
33 extern sys_config Config; |
|
34 extern const char DEVPRESENT[4][6]; |
32 |
35 |
33 int my_simulator_shutdown = 0; |
36 int my_simulator_shutdown = 0; |
34 int SIMcooling = 0; |
37 int SIMcooling = 0; |
35 int SIMheating = 0; |
38 int SIMheating = 0; |
36 int SIMfan = 0; |
39 int SIMfan = 0; |
37 int SIMlight = 0; |
40 int SIMlight = 0; |
|
41 |
|
42 |
|
43 /* |
|
44 * Return json data for one simulator |
|
45 */ |
|
46 char *simulator_json(simulator_list *simulator) |
|
47 { |
|
48 char *payload, buf[64]; |
|
49 |
|
50 payload = xstrcpy((char *)"{\"uuid\":\""); |
|
51 payload = xstrcat(payload, simulator->uuid); |
|
52 payload = xstrcat(payload, (char *)"\",\"name\":\""); |
|
53 payload = xstrcat(payload, simulator->name); |
|
54 payload = xstrcat(payload, (char *)"\",\"simno\":"); |
|
55 sprintf(buf, "%d", simulator->simno); |
|
56 payload = xstrcat(payload, buf); |
|
57 payload = xstrcat(payload, (char *)",\"volume_air\":"); |
|
58 sprintf(buf, "%d", simulator->volume_air); |
|
59 payload = xstrcat(payload, buf); |
|
60 payload = xstrcat(payload, (char *)",\"volume_beer\":"); |
|
61 sprintf(buf, "%d", simulator->volume_beer); |
|
62 payload = xstrcat(payload, buf); |
|
63 payload = xstrcat(payload, (char *)",\"room\":{\"tempaddress\":\""); |
|
64 payload = xstrcat(payload, simulator->room_tempaddress); |
|
65 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
66 sprintf(buf, "%.1f", simulator->room_temperature); |
|
67 payload = xstrcat(payload, buf); |
|
68 payload = xstrcat(payload, (char *)",\"humaddress\":\""); |
|
69 payload = xstrcat(payload, simulator->room_humaddress); |
|
70 payload = xstrcat(payload, (char *)"\",\"humidity\":"); |
|
71 sprintf(buf, "%.1f", simulator->room_humidity); |
|
72 payload = xstrcat(payload, buf); |
|
73 |
|
74 payload = xstrcat(payload, (char *)"},\"air\":{\"address\":\""); |
|
75 payload = xstrcat(payload, simulator->air_address); |
|
76 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
77 sprintf(buf, "%.4f", simulator->air_temperature); |
|
78 payload = xstrcat(payload, buf); |
|
79 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
80 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->air_present]); |
|
81 payload = xstrcat(payload, (char *)"\"},\"beer\":{\"address\":\""); |
|
82 |
|
83 payload = xstrcat(payload, simulator->beer_address); |
|
84 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
85 sprintf(buf, "%.4f", simulator->beer_temperature); |
|
86 payload = xstrcat(payload, buf); |
|
87 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
88 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->beer_present]); |
|
89 payload = xstrcat(payload, (char *)"\"},\"beer2\":{\"address\":\""); |
|
90 |
|
91 payload = xstrcat(payload, simulator->beer_address2); |
|
92 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
93 sprintf(buf, "%.4f", simulator->beer_temperature2); |
|
94 payload = xstrcat(payload, buf); |
|
95 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
96 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->beer_present2]); |
|
97 payload = xstrcat(payload, (char *)"\"},\"chiller\":{\"address\":\""); |
|
98 |
|
99 payload = xstrcat(payload, simulator->chiller_address); |
|
100 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
101 sprintf(buf, "%.4f", simulator->chiller_temperature); |
|
102 payload = xstrcat(payload, buf); |
|
103 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
104 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->chiller_present]); |
|
105 payload = xstrcat(payload, (char *)"\"},\"cooler\":{\"address\":\""); |
|
106 |
|
107 payload = xstrcat(payload, simulator->cooler_address); |
|
108 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
109 sprintf(buf, "%.4f", simulator->cooler_temp); |
|
110 payload = xstrcat(payload, buf); |
|
111 payload = xstrcat(payload, (char *)",\"time\":"); |
|
112 sprintf(buf, "%d", simulator->cooler_time); |
|
113 payload = xstrcat(payload, buf); |
|
114 payload = xstrcat(payload, (char *)",\"size\":"); |
|
115 sprintf(buf, "%.4f", simulator->cooler_size); |
|
116 payload = xstrcat(payload, buf); |
|
117 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
118 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->cooler_present]); |
|
119 payload = xstrcat(payload, (char *)"\",\"power\":"); |
|
120 sprintf(buf, "%d", simulator->cooler_power); |
|
121 payload = xstrcat(payload, buf); |
|
122 payload = xstrcat(payload, (char *)"},\"heater\":{\"address\":\""); |
|
123 |
|
124 payload = xstrcat(payload, simulator->heater_address); |
|
125 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
|
126 sprintf(buf, "%.4f", simulator->heater_temp); |
|
127 payload = xstrcat(payload, buf); |
|
128 payload = xstrcat(payload, (char *)",\"time\":"); |
|
129 sprintf(buf, "%d", simulator->heater_time); |
|
130 payload = xstrcat(payload, buf); |
|
131 payload = xstrcat(payload, (char *)",\"size\":"); |
|
132 sprintf(buf, "%.4f", simulator->heater_size); |
|
133 payload = xstrcat(payload, buf); |
|
134 payload = xstrcat(payload, (char *)",\"present\":\""); |
|
135 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->heater_present]); |
|
136 payload = xstrcat(payload, (char *)"\",\"power\":"); |
|
137 sprintf(buf, "%d", simulator->heater_power); |
|
138 payload = xstrcat(payload, buf); |
|
139 payload = xstrcat(payload, (char *)"},\"fan\":{\"address\":\""); |
|
140 |
|
141 payload = xstrcat(payload, simulator->fan_address); |
|
142 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
|
143 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->fan_present]); |
|
144 payload = xstrcat(payload, (char *)"\",\"power\":"); |
|
145 sprintf(buf, "%d", simulator->fan_power); |
|
146 payload = xstrcat(payload, buf); |
|
147 payload = xstrcat(payload, (char *)"},\"light\":{\"address\":\""); |
|
148 |
|
149 payload = xstrcat(payload, simulator->light_address); |
|
150 payload = xstrcat(payload, (char *)"\",\"present\":\""); |
|
151 payload = xstrcat(payload, (char *)DEVPRESENT[simulator->light_present]); |
|
152 payload = xstrcat(payload, (char *)"\",\"power\":"); |
|
153 sprintf(buf, "%d", simulator->light_power); |
|
154 payload = xstrcat(payload, buf); |
|
155 payload = xstrcat(payload, (char *)"},\"frigo_isolation\":"); |
|
156 |
|
157 sprintf(buf, "%.4f", simulator->frigo_isolation); |
|
158 payload = xstrcat(payload, buf); |
|
159 |
|
160 payload = xstrcat(payload, (char *)",\"timestamp\":"); |
|
161 sprintf(buf, "%ld", (long)simulator->timestamp); |
|
162 payload = xstrcat(payload, buf); |
|
163 payload = xstrcat(payload, (char *)"}"); |
|
164 |
|
165 return payload; |
|
166 } |
|
167 |
|
168 |
|
169 |
|
170 void simulator_ws(void) |
|
171 { |
|
172 bool comma = false; |
|
173 char *payload = NULL, *payloadu = NULL; |
|
174 simulator_list *simulator; |
|
175 |
|
176 payload = xstrcpy((char *)"{\"type\":\"simulator\",\"metric\":["); |
|
177 for (simulator = Config.simulators; simulator; simulator = simulator->next) { |
|
178 if (comma) |
|
179 payload = xstrcat(payload, (char *)","); |
|
180 payloadu = simulator_json(simulator); |
|
181 payload = xstrcat(payload, payloadu); |
|
182 comma = true; |
|
183 free(payloadu); |
|
184 payloadu = NULL; |
|
185 } |
|
186 payload = xstrcat(payload, (char *)"]}"); |
|
187 ws_broadcast(payload); |
|
188 free(payload); |
|
189 payload = NULL; |
|
190 } |
|
191 |
38 |
192 |
39 |
193 |
40 void *my_simulator_loop(void *threadid) |
194 void *my_simulator_loop(void *threadid) |
41 { |
195 { |
42 simulator_list *simulator; |
196 simulator_list *simulator; |