diff -r 9d1aa6f3a4da -r 4d01937ae7af bmsd/nodes.c --- a/bmsd/nodes.c Fri Oct 18 13:20:35 2019 +0200 +++ b/bmsd/nodes.c Fri May 01 16:37:31 2020 +0200 @@ -3,7 +3,7 @@ * @brief Handle nodes status * @author Michiel Broek * - * Copyright (C) 2018-2019 + * Copyright (C) 2018-2020 * * This file is part of the bms (Brewery Management System) * @@ -34,7 +34,7 @@ extern int debug; extern sys_fermenter_list *fermenters; extern sys_co2meter_list *co2meters; - +extern sys_ispindel_list *ispindels; void node_birth_data(char *topic, char *payload) @@ -82,6 +82,7 @@ node->gps_latitude = node->gps_longitude = node->gps_altitude = 0.0; node->net_address = node->net_ifname = NULL; node->net_rssi = 0; + node->interval = 300; } /* @@ -111,6 +112,9 @@ free(node->uuid); node->uuid = xstrcpy((char *)json_object_get_string(val)); } + if (json_object_object_get_ex(metric, "interval", &val)) { + node->interval = json_object_get_int(val); + } if (json_object_object_get_ex(metric, "properties", &metric2)) { if (json_object_object_get_ex(metric2, "hardwaremake", &val)) { if (node->hardwaremake) @@ -214,6 +218,7 @@ printf("GPS %.5f %.5f %.5f\n", node->gps_latitude, node->gps_longitude, node->gps_altitude); printf("net %s:%s\n", node->net_ifname, node->net_address); printf("rssi %d\n", node->net_rssi); + printf("interval %d\n", node->interval); } } @@ -247,11 +252,14 @@ sys_node_list *tmpn; sys_fermenter_list *tmpf; sys_co2meter_list *tmpc; + sys_ispindel_list *tmpi; time_t now = time(NULL); for (tmpn = nodes; tmpn; tmpn = tmpn->next) { - if (tmpn->online && ((now - tmpn->lastseen) > 600)) { - syslog(LOG_NOTICE, "Timeout node `%s/%s'", tmpn->group_id, tmpn->node); +// if (debug) +// printf("%-20s online %s %ld %d\n", tmpn->node, tmpn->online ? "yes":"no ", tmpn->lastseen, tmpn->interval); + if (tmpn->online && ((now - tmpn->lastseen) > (tmpn->interval * 2 + 5))) { // 2 times interval + 5 seconds + syslog(LOG_NOTICE, "Timeout node `%s/%s' after %ld seconds", tmpn->group_id, tmpn->node, (now - tmpn->lastseen)); tmpn->online = false; node_mysql_death(tmpn->node); @@ -274,6 +282,16 @@ } } } + + for (tmpi = ispindels; tmpi; tmpi = tmpi->next) { + if (strcmp(tmpi->node, tmpn->node) == 0) { + if (tmpi->online) { + syslog(LOG_NOTICE, "Timeout ispindel %s", tmpi->node); + tmpi->online = false; + ispindel_mysql_death(tmpi->node); + } + } + } } } }