bmsd/nodes.c

changeset 572
7a03181d29a3
parent 502
a8a6901b5a99
child 578
e75ce5bbda73
--- a/bmsd/nodes.c	Sat Dec 14 21:04:47 2019 +0100
+++ b/bmsd/nodes.c	Sun Dec 15 15:08:09 2019 +0100
@@ -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)
@@ -247,11 +247,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 +277,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);
+                    }
+		}
+	    }
 	}
     }
 }

mercurial