thermferm/mqtt.c

changeset 675
825210ba2707
parent 669
daa22055cd3d
child 678
cc49115e769e
equal deleted inserted replaced
674:6cabc02f4c8d 675:825210ba2707
26 #include "rdconfig.h" 26 #include "rdconfig.h"
27 #include "devices.h" 27 #include "devices.h"
28 #include "xutil.h" 28 #include "xutil.h"
29 #include "delay.h" 29 #include "delay.h"
30 #include "mqtt.h" 30 #include "mqtt.h"
31 #include "websocket.h"
32
31 33
32 extern sys_config Config; 34 extern sys_config Config;
33 extern int debug; 35 extern int debug;
34 extern int my_shutdown; 36 extern int my_shutdown;
35 extern int my_reboot; 37 extern int my_reboot;
1212 free(payloadu); 1214 free(payloadu);
1213 payloadu = NULL; 1215 payloadu = NULL;
1214 free(topic); 1216 free(topic);
1215 topic = NULL; 1217 topic = NULL;
1216 } 1218 }
1219
1220 /*
1221 * Build and send websocket message.
1222 */
1223 payload = xstrcpy((char *)"{\"fermenter\":");
1224 payloadu = unit_data(unit, true);
1225 payload = xstrcat(payload, payloadu);
1226 payload = xstrcat(payload, (char *)"}");
1227 ws_broadcast(payload);
1228 free(payload);
1229 payload = NULL;
1230 free(payloadu);
1231 payloadu = NULL;
1217 } 1232 }
1218 1233
1219 1234
1220 1235
1221 void publishDBirth(units_list *unit) 1236 void publishDBirth(units_list *unit)
1385 free(payload); 1400 free(payload);
1386 payload = NULL; 1401 payload = NULL;
1387 free(topic); 1402 free(topic);
1388 topic = NULL; 1403 topic = NULL;
1389 } 1404 }
1405 }
1406
1407
1408 void node_ws(void)
1409 {
1410 char *payload = NULL, buf[64];
1411 struct utsname ubuf;
1412
1413 payload = xstrcpy((char *)"{\"thermferm\":{");
1414
1415 if (uname(&ubuf) == 0) {
1416 payload = xstrcat(payload, (char *)"\"node\":\"");
1417 payload = xstrcat(payload, ubuf.nodename);
1418 payload = xstrcat(payload, (char *)"\",\"os\":\"");
1419 payload = xstrcat(payload, ubuf.sysname);
1420 payload = xstrcat(payload, (char *)"\",\"os_version\":\"");
1421 payload = xstrcat(payload, ubuf.release);
1422 payload = xstrcat(payload, (char *)"\"");
1423 } else {
1424 payload = xstrcat(payload, (char *)"\"node\":\"Unknown\",\"os\":\"Unknown\",\"os_version\":\"Unknown\"");
1425 }
1426 payload = xstrcat(payload, (char *)",\"FW\":\"");
1427 payload = xstrcat(payload, (char *)VERSION);
1428 payload = xstrcat(payload, (char *)"\"");
1429
1430 if (Config.temp_address || Config.hum_address) {
1431 payload = xstrcat(payload, (char *)",\"THB\":{");
1432 if (Config.temp_address) {
1433 payload = xstrcat(payload, (char *)"\"temperature\":");
1434 sprintf(buf, "%.1f", Config.temp_value / 1000.0);
1435 payload = xstrcat(payload, buf);
1436 }
1437 if (Config.temp_address && Config.hum_address)
1438 payload = xstrcat(payload, (char *)",");
1439 if (Config.hum_address) {
1440 payload = xstrcat(payload, (char *)"\"humidity\":");
1441 sprintf(buf, "%.1f", Config.hum_value / 1000.0);
1442 payload = xstrcat(payload, buf);
1443 }
1444 payload = xstrcat(payload, (char *)"}");
1445 }
1446
1447 payload = xstrcat(payload, (char *)"}}");
1448 ws_broadcast(payload);
1449 free(payload);
1450 payload = NULL;
1390 } 1451 }
1391 1452
1392 1453
1393 1454
1394 void publishNData(bool birth, int flag) 1455 void publishNData(bool birth, int flag)
1592 payload = xstrcat(payload, (char *)"\"}"); 1653 payload = xstrcat(payload, (char *)"\"}");
1593 publisher(mosq, (char *)"domoticz/in", payload, false); 1654 publisher(mosq, (char *)"domoticz/in", payload, false);
1594 free(payload); 1655 free(payload);
1595 payload = NULL; 1656 payload = NULL;
1596 } 1657 }
1658
1659 node_ws();
1597 } 1660 }
1598 1661
1599 1662
1600 1663
1601 void mqtt_connect(void) 1664 void mqtt_connect(void)

mercurial