NEWS
Neustart eines Adapters nachdem der .alive - Wert auf FALSE geht
-
Hallo,
habe bei mir das Problem, dass der zigbee-Adapter zwar immer mit Verbunden mit zigbee anzeigt, aber manchmal die Verbindung zum Host und das Lebenszeichen verliert.
Ein manueller Start des Adapters schafft Abhilfe, aber automatisch wäre doch schöner
Mein zigbee-Stick hängt an einem Raspberry Pi3 als Host, mein Hauptsystem läuft in einer Dockerinstallation auf meinem Synology.
Feststellbar, ob er noch läuft geht zB mit system.adapter.zigbee.0.alive
Beim zigbee.0.info.connection bleibt er ja bei "True".
Ich hab hier im Forum schon etwas gesucht und auch ein Script gefunden, aber irgendwie hat dies nicht funktioniert.
Hab ich da ein Denkfehler, oder schaut dieses Script nur beim Scriptstart einmalig und danach nie wieder?
Wenn dem so ist, wie kann ich es schaffen, dass dies oder ein anderes Script, wie ein Watchdog den Wert überprüft und wenn dieser auf "False" wechselt (eventuell mit einer Hysterese - Zeitspanne ), den Adapter wieder neustartet.
! ````
on({id: "system.adapter.zigbee.0.alive", val: false}, function (obj) {
//Timeout: Nach 2,5 Sekunden Adapter abschalten
timeout = setTimeout(function () {
// Adapter erstmal ausschalten, um ganz sicher zug ehen.
console.log('########## ZigBee SCRIPT-SAFETY-SHUTDOWN 4 #########');
var obj = getObject("system.adapter.zigbee.0");
obj.common.enabled = false;
setObject("system.adapter.zigbee.0", obj);
}, 2500);//Timeout2: Nach 5 Sekunden Adapter neu starten timeout2 = setTimeout(function(){ console.log('########## ZigBee SCRIPT-RESTART 4 #########'); var obj2 = getObject("system.adapter.zigbee.0"); obj2.common.enabled = true; setObject("system.adapter.zigbee.0", obj2); clearTimeout(timeout2); }, 5000);
});
-
Script sieht in ordnung aus, irgendwas imlog ?
-
Hm … macht das Sinn?
Alive wird vom Adapter-prozes geschrieben iund bei einem sauberen Ende des prozesses auf false gesetzt. Wenn die Instanz generell aktiviert ist dann übernimmt der js-controller einige neue Startversuche automatisch! Also das Skript ist da eher unnötig.
-
Kann es sein, dass du die Zustände verwechselst?
.alive gibt eigentlich an, ob der Adapterprozess läuft
.connection sollte angeben (sofern implementiert), ob der Adapter mit seinem Gerät/Service/… verbunden ist.
Wie ich das sehe, sollte eher ein Neustart des Adapters erfolgen, wenn .connection einige Zeit false ist.
-
Sorry der späten Rückmeldung, komme momentan nicht jeden Tag dazu hier reinzuschauen bzw zu Hause zu sein.
Es gibt ja folgende Zustände:
Jetzt habe ich ab und zu das Phänomen, dass zwar der Punkt 3: Verbunden mit zigbee vorhanden ist "wahr", aber die oberen beiden Punkte Verbunden mit Host und Lebenszeichen fehlen.
Bisher habe ich in meiner Vis zum testen den Punkt:
zigbee.0.info.connection mir anzeigen lassen, aber dies ist ja der 3. Wert und der war ja in meinem Fall "wahr".
Deswegen habe ich mir gedacht, schau mal auf einen der anderen beiden Werte:
system.adapter.zigbee.0.alive
oder
system.adapter.zigbee.0.connected
Die werden ja "false" bei meinem Problem.
Mein Construct ist ja so, dass ich mein Hauptsystem ioBroker auf mein Synology laufen habe, da der aber zu weit weg sitzt für zigbee, habe ich im Wohnraum noch ein RPi3 mit eben dem CC2531 zigbee geflashten Stick dran und dort als "nebenhost" ioBroker drauf habe.
Das Hauptsystem sieht auch den HOST ohne Probleme.
Ich möchte halt den kompletten Adapter neustarten lassen, wenn der sich weghängt.
Anscheinend passiert ja wohl was, dass der js-controller den nicht neustartet.
Mit einem Log kann ich gerade nicht dienen, habe von dem letzten Mal keines mehr und seit 7 Tagen ist ruhig, da habe ich nur einiges rumprobiert jetzt.
Aber ich mein da stand nur was von zigbee teminated drin.
Warum auch immer.
Wenn ich @apollon77 richitg verstehe, müsste der js-controller das quasi wie ein Watchdog überwachen und neustarten?
Momentan tritt das Problem auch nicht auf.
Eine Verständnisfrage noch, wenn ich ein Javascript gebastelt habe bzw mit Blockly etwas, wie bekomme ich das hin, dass es auch alle x-Minuten auch angestossen wird?
Danke
-
wie bekomme ich das hin, dass es auch alle x-Minuten auch angestossen wird? `
https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#setinterval -
Deswegen habe ich mir gedacht, schau mal auf einen der anderen beiden Werte:
system.adapter.zigbee.0.alive
oder
system.adapter.zigbee.0.connected `
Ok, dann hast du tatsächlich Recht und der Adapter hängt sich wohl auf. Sinnvoll wäre es dann aber wohl, das Problem zu melden, damit der Entwickler nach der Ursache suchen und diese beheben kann.Bei der Überprüfung per Skript solltest du auch checken, ob der Adapter möglicherweise gerade manuell deaktiviert wurde (system.adapter.zigbee.0 - Objekt => common.enabled)
-
Ok, dann hast du tatsächlich Recht und der Adapter hängt sich wohl auf. Sinnvoll wäre es dann aber wohl, das Problem zu melden, damit der Entwickler nach der Ursache suchen und diese beheben kann. `
Da gebe ich Dir Recht, aber mein Problem war, dass es bisher 3x passiert ist, ohne das ich da war bzw ich erst ein paar Tage später da war und ich natürlich nicht so clever war, sofort alles im Log mir zu speichern und dann war es weg
Und es ist ja jetzt auch lustig, kaum schaut man intensiver hin und achtet drauf, passiert es nicht mehr. :lol:
Brauchte wohl Aufmerksamkeit.
Nichtsdestotrotz möchte ich ja auch etwas mehr kennenlernen, deswegen sind ja so kleine Scripts auch gut zum üben.
@paul53 : Danke für den Link