thermferm/mqtt.c

changeset 514
f5a00ad53329
parent 513
a2732027afb3
child 515
7ab5cf2afc0c
equal deleted inserted replaced
513:a2732027afb3 514:f5a00ad53329
197 dload = NULL; 197 dload = NULL;
198 } 198 }
199 199
200 200
201 201
202 void pub_domoticz_output(int idx, int value) {
203 char *dload = NULL;
204 char sidx[10], sval[10];
205
206 if (idx == 0)
207 return;
208
209 sprintf(sidx, "%d", idx);
210 sprintf(sval, "%d", value);
211
212 dload = xstrcpy((char *)"{\"command\":\"udevice\",\"idx\":");
213 dload = xstrcat(dload, sidx);
214 dload = xstrcat(dload, (char *)",\"nvalue\":");
215 if (value >= 50)
216 dload = xstrcat(dload, (char *)"1");
217 else
218 dload = xstrcat(dload, (char *)"0");
219 dload = xstrcat(dload, (char *)",\"svalue\":\"");
220 dload = xstrcat(dload, sval);
221 dload = xstrcat(dload, (char *)"\"}");
222 publisher(mosq, (char *)"domoticz/in", dload, false);
223 free(dload);
224 dload = NULL;
225 }
226
227
228
202 char *unit_data(units_list *unit, bool birth) 229 char *unit_data(units_list *unit, bool birth)
203 { 230 {
204 char *payload = NULL; 231 char *payload = NULL;
205 char buf[128]; 232 char buf[128];
206 bool comma = false; 233 bool comma = false;
251 payload = xstrcat(payload, unit->heater_address); 278 payload = xstrcat(payload, unit->heater_address);
252 payload = xstrcat(payload, (char *)"\",\"state\":"); 279 payload = xstrcat(payload, (char *)"\",\"state\":");
253 sprintf(buf, "%d", unit->heater_state); 280 sprintf(buf, "%d", unit->heater_state);
254 payload = xstrcat(payload, buf); 281 payload = xstrcat(payload, buf);
255 payload = xstrcat(payload, (char *)"}"); 282 payload = xstrcat(payload, (char *)"}");
256 pub_domoticz_temp(unit->heater_idx, buf); 283 pub_domoticz_output(unit->heater_idx, unit->heater_state);
257 } else { 284 } else {
258 payload = xstrcat(payload, (char *)",\"heater\":null"); 285 payload = xstrcat(payload, (char *)",\"heater\":null");
259 } 286 }
260 287
261 if (unit->cooler_address) { 288 if (unit->cooler_address) {
263 payload = xstrcat(payload, unit->cooler_address); 290 payload = xstrcat(payload, unit->cooler_address);
264 payload = xstrcat(payload, (char *)"\",\"state\":"); 291 payload = xstrcat(payload, (char *)"\",\"state\":");
265 sprintf(buf, "%d", unit->cooler_state); 292 sprintf(buf, "%d", unit->cooler_state);
266 payload = xstrcat(payload, buf); 293 payload = xstrcat(payload, buf);
267 payload = xstrcat(payload, (char *)"}"); 294 payload = xstrcat(payload, (char *)"}");
268 pub_domoticz_temp(unit->cooler_idx, buf); 295 pub_domoticz_output(unit->cooler_idx, unit->cooler_state);
269 } else { 296 } else {
270 payload = xstrcat(payload, (char *)",\"cooler\":null"); 297 payload = xstrcat(payload, (char *)",\"cooler\":null");
271 } 298 }
272 299
273 if (unit->fan_address) { 300 if (unit->fan_address) {
275 payload = xstrcat(payload, unit->fan_address); 302 payload = xstrcat(payload, unit->fan_address);
276 payload = xstrcat(payload, (char *)"\",\"state\":"); 303 payload = xstrcat(payload, (char *)"\",\"state\":");
277 sprintf(buf, "%d", unit->fan_state); 304 sprintf(buf, "%d", unit->fan_state);
278 payload = xstrcat(payload, buf); 305 payload = xstrcat(payload, buf);
279 payload = xstrcat(payload, (char *)"}"); 306 payload = xstrcat(payload, (char *)"}");
280 pub_domoticz_temp(unit->fan_idx, buf); 307 pub_domoticz_output(unit->fan_idx, unit->fan_state);
281 } else { 308 } else {
282 payload = xstrcat(payload, (char *)",\"fan\":null"); 309 payload = xstrcat(payload, (char *)",\"fan\":null");
283 } 310 }
284 311
285 if (unit->door_address) { 312 if (unit->door_address) {
287 payload = xstrcat(payload, unit->door_address); 314 payload = xstrcat(payload, unit->door_address);
288 payload = xstrcat(payload, (char *)"\",\"state\":"); 315 payload = xstrcat(payload, (char *)"\",\"state\":");
289 sprintf(buf, "%d", unit->door_state); 316 sprintf(buf, "%d", unit->door_state);
290 payload = xstrcat(payload, buf); 317 payload = xstrcat(payload, buf);
291 payload = xstrcat(payload, (char *)"}"); 318 payload = xstrcat(payload, (char *)"}");
292 pub_domoticz_temp(unit->door_idx, buf); 319 pub_domoticz_output(unit->door_idx, unit->door_state);
293 } else { 320 } else {
294 payload = xstrcat(payload, (char *)",\"door\":null"); 321 payload = xstrcat(payload, (char *)",\"door\":null");
295 } 322 }
296 323
297 if (unit->light_address) { 324 if (unit->light_address) {
299 payload = xstrcat(payload, unit->light_address); 326 payload = xstrcat(payload, unit->light_address);
300 payload = xstrcat(payload, (char *)"\",\"state\":"); 327 payload = xstrcat(payload, (char *)"\",\"state\":");
301 sprintf(buf, "%d", unit->light_state); 328 sprintf(buf, "%d", unit->light_state);
302 payload = xstrcat(payload, buf); 329 payload = xstrcat(payload, buf);
303 payload = xstrcat(payload, (char *)"}"); 330 payload = xstrcat(payload, (char *)"}");
304 pub_domoticz_temp(unit->light_idx, buf); 331 pub_domoticz_output(unit->light_idx, unit->light_state);
305 } else { 332 } else {
306 payload = xstrcat(payload, (char *)",\"light\":null"); 333 payload = xstrcat(payload, (char *)",\"light\":null");
307 } 334 }
308 335
309 if (unit->psu_address) { 336 if (unit->psu_address) {
311 payload = xstrcat(payload, unit->psu_address); 338 payload = xstrcat(payload, unit->psu_address);
312 payload = xstrcat(payload, (char *)"\",\"state\":"); 339 payload = xstrcat(payload, (char *)"\",\"state\":");
313 sprintf(buf, "%d", unit->psu_state); 340 sprintf(buf, "%d", unit->psu_state);
314 payload = xstrcat(payload, buf); 341 payload = xstrcat(payload, buf);
315 payload = xstrcat(payload, (char *)"}"); 342 payload = xstrcat(payload, (char *)"}");
316 pub_domoticz_temp(unit->psu_idx, buf); 343 pub_domoticz_output(unit->psu_idx, unit->psu_state);
317 } else { 344 } else {
318 payload = xstrcat(payload, (char *)",\"psu\":null"); 345 payload = xstrcat(payload, (char *)",\"psu\":null");
319 } 346 }
320 347
321 payload = xstrcat(payload, (char *)",\"mode\":\""); 348 payload = xstrcat(payload, (char *)",\"mode\":\"");

mercurial