thermferm/server.c

changeset 678
cc49115e769e
parent 677
c867eb3f7fc1
child 680
8b3c86124a08
equal deleted inserted replaced
677:c867eb3f7fc1 678:cc49115e769e
567 567
568 568
569 /* 569 /*
570 * GLOBAL GET 570 * GLOBAL GET
571 * GLOBAL PUT 571 * GLOBAL PUT
572 * GLOBAL JSON
572 */ 573 */
573 int cmd_global(int s, char *buf) 574 int cmd_global(int s, char *buf)
574 { 575 {
575 char *opt, *kwd, *val, ibuf[SS_BUFSIZE]; 576 char *opt, *kwd, *val, ibuf[SS_BUFSIZE];
576 int ival, rlen; 577 int ival, rlen;
586 if (strcmp(opt, (char *)"HELP") == 0) { 587 if (strcmp(opt, (char *)"HELP") == 0) {
587 srv_send(s, (char *)"100 Help text follows:"); 588 srv_send(s, (char *)"100 Help text follows:");
588 srv_send(s, (char *)"Recognized commands:"); 589 srv_send(s, (char *)"Recognized commands:");
589 srv_send(s, (char *)"GLOBAL GET Get global settings"); 590 srv_send(s, (char *)"GLOBAL GET Get global settings");
590 srv_send(s, (char *)"GLOBAL PUT Put global settings"); 591 srv_send(s, (char *)"GLOBAL PUT Put global settings");
592 srv_send(s, (char *)"GLOBAL JSON Get global json settings");
591 srv_send(s, (char *)"."); 593 srv_send(s, (char *)".");
592 return 0; 594 return 0;
593 } 595 }
594 596
595 if (strcmp(opt, (char *)"GET") == 0) { 597 if (strcmp(opt, (char *)"GET") == 0) {
612 srv_send(s, (char *)"MQTT_PORT,%d", Config.mqtt_port); 614 srv_send(s, (char *)"MQTT_PORT,%d", Config.mqtt_port);
613 srv_send(s, (char *)"MQTT_USER,%s", Config.mqtt_username); 615 srv_send(s, (char *)"MQTT_USER,%s", Config.mqtt_username);
614 srv_send(s, (char *)"MQTT_PASS,%s", Config.mqtt_password); 616 srv_send(s, (char *)"MQTT_PASS,%s", Config.mqtt_password);
615 srv_send(s, (char *)"WEBSOCKET_PORT,%d", Config.websocket_port); 617 srv_send(s, (char *)"WEBSOCKET_PORT,%d", Config.websocket_port);
616 srv_send(s, (char *)"."); 618 srv_send(s, (char *)".");
619 return 0;
620 }
621
622 if (strcmp(opt, (char *)"JSON") == 0) {
623 char *payload = NULL, tbuf[64];
624 struct utsname ubuf;
625
626 payload = xstrcpy((char *)"{\"type\":\"global\",\"name\":\"");
627 payload = xstrcat(payload, Config.name);
628 payload = xstrcat(payload, (char *)"\",\"node\":\"");
629 if (uname(&ubuf) == 0) {
630 payload = xstrcat(payload, ubuf.nodename);
631 payload = xstrcat(payload, (char *)"\",\"os\":\"");
632 payload = xstrcat(payload, ubuf.sysname);
633 payload = xstrcat(payload, (char *)"\",\"os_version\":\"");
634 payload = xstrcat(payload, ubuf.release);
635 } else {
636 payload = xstrcat(payload, (char *)"Unknown\",\"os\":\"Unknown\",\"os_version\":\"Unknown");
637 }
638 payload = xstrcat(payload, (char *)"\",\"FW\":\"");
639 payload = xstrcat(payload, (char *)VERSION);
640 payload = xstrcat(payload, (char *)"\"");
641
642 if (Config.temp_address || Config.hum_address) {
643 payload = xstrcat(payload, (char *)",\"THB\":{");
644 if (Config.temp_address) {
645 payload = xstrcat(payload, (char *)"\"temperature\":");
646 sprintf(tbuf, "%.1f", Config.temp_value / 1000.0);
647 payload = xstrcat(payload, tbuf);
648 }
649 if (Config.temp_address && Config.hum_address)
650 payload = xstrcat(payload, (char *)",");
651 if (Config.hum_address) {
652 payload = xstrcat(payload, (char *)"\"humidity\":");
653 sprintf(tbuf, "%.1f", Config.hum_value / 1000.0);
654 payload = xstrcat(payload, tbuf);
655 }
656 payload = xstrcat(payload, (char *)"}");
657 }
658
659 payload = xstrcat(payload, (char *)"}");
660 srv_send(s, (char *)"213 Global json data follows:");
661 srv_send(s, payload);
662 srv_send(s, (char *)".");
663 free(payload);
664 payload = NULL;
617 return 0; 665 return 0;
618 } 666 }
619 667
620 if (strcmp(opt, (char *)"PUT") == 0) { 668 if (strcmp(opt, (char *)"PUT") == 0) {
621 int mqtt_reconnect = 0; 669 int mqtt_reconnect = 0;
1533 srv_send(s, (char *)"440 No such unit"); 1581 srv_send(s, (char *)"440 No such unit");
1534 return 0; 1582 return 0;
1535 } 1583 }
1536 1584
1537 if (strcmp(opt, (char *)"JSON") == 0) { 1585 if (strcmp(opt, (char *)"JSON") == 0) {
1586 syslog(LOG_NOTICE, "UNIT JSON %s", param);
1538 for (unit = Config.units; unit; unit = unit->next) { 1587 for (unit = Config.units; unit; unit = unit->next) {
1539 if (strcmp(param, unit->uuid) == 0) { 1588 if (strcmp(param, unit->uuid) == 0) {
1540 char *payload, *payloadu; 1589 char *payload, *payloadu;
1541 1590
1542 srv_send(s, (char *)"213 Unit json data follows:"); 1591 srv_send(s, (char *)"213 Unit json data follows:");
1543 payload = xstrcpy((char *)"{\"fermenter\":"); 1592
1544 payloadu = unit_data(unit, true); 1593 payload = xstrcpy((char *)"{\"type\":\"fermenter\",\"unit\":\"");
1594 payload = xstrcat(payload, unit->alias);
1595 payload = xstrcat(payload, (char *)"\",\"metric\":");
1596 payloadu = unit_data(unit, false);
1545 payload = xstrcat(payload, payloadu); 1597 payload = xstrcat(payload, payloadu);
1546 payload = xstrcat(payload, (char *)"}"); 1598 payload = xstrcat(payload, (char *)"}");
1547 srv_send(s, payload); 1599 srv_send(s, payload);
1548 free(payload); 1600 free(payload);
1549 free(payloadu); 1601 free(payloadu);

mercurial