NEWS
Erkennen wenn Zigbee Geräte offline sind
-
Hallo,
ich versuche Warnungen auszugeben wenn Zigbee Geräte Offline sind. Die Quality hilft hier nicht, da die Werte mit Abbruch der Verbindung einfrieren auf den letzten Stand.
bisher habe ich immer über die Ableitung der Werte bzw. über die Zeitstempel versucht zu erkennen ob Zigbee Geräte Offline sind. Mit dem Update des Zigbee Adapters kam die neue Variable "Available" hinzu. Leider ist die auch true,w enn ich die Batterie aus dem Gerät nehme.Hat jemand einen Tipp? Kann man irgendwie die Geräte "anpingen" oder ein Auslesen anstoßen, so dass man quasi erwarten kann, dass sich der Zeitstempel des wertes ändert und man so sagen kann das Gerät antwortet nicht.
Nils
-
@jmeister79 der available Wert sollte jetzt gehen in 1.1.1
ansonsten kannst du dir den letzten übertragenen bestätigten Wert holen.. ein aktives Ping der Geräte ist nicht möglich
-
@arteck ich werds ausprobieren.
Übrigens sehr gute Arbeit von euch beim Zigbee Adapter. Das Binding und alles ist jetzt sooo viel besser. Ich hatte jetzt ne ganze weile nicht geupdatet und war echt baff von den ganzen verbesserungen!
Gute Arbeit.
Nils
-
@arteck Hab 1.1.1 Installiert aber ich kann keine Änderung feststellen.
Alle Objekte verbleiben auf ihrem letzten empfangenen Wert.Ich habe es getestet indem ich zb aus einem Xiaomi Bewegungsmelder die Batterie rausnehme.
Meine Erwartungshaltung wäre nun, dass irgendwann available "FALSE" werden würde. es bleibt aber true.
Ist meine Erwartung heir richtig oder funktioniert das so nicht.
Zu deinem zweiten Tipp:
Der letzte übertragene bestätigte wäre dann ja sehr alt und daran würde ich dann einen Timeout festmachen (?). bei diversen sensoren sind die bestätigten werte alle sehr alt sofern sie sich nicht ändern.Nils
-
@jmeister79 mach mal die netzkarte auf.. der müsste dann alle geräte nochmal durchgehen
wobei bei batteriebtriebenen weiss nicht genau -
Hi,
ich kann bestätigen, dass batteriebetriebene Sensoren hier anders reagieren als Sensoren mit Netzanbindung.Einer meiner Schalter die am Netz hängen wechseln available auf FALSE wenn man ihnen den saft abdreht.
Batteriesensoren bleiben auf dem letzten Wert.
Ich hatte nun versucht den Zeitstempel von "available" auszulesen. Aber batteriebetriebene Werte verbleiben heir auch auf dem Zeitpunkt wann er zuletzt Online gegangen ist. Die anderen States wie "click" oder "temp" etc bekommen natürlich ständig neue Werte.Das wäre schön gewesen, da "available" die einzige Gemeinsamkeit ist, die alle Zigbeesensoren haben. Denn mein script parst mit einer vor schleife durch das Array der Zigbeesensoren.
Stündlich
var text='Zigbee Offline Sensor(s): '; var cnt = 0; setState("javascript.0.Alerts.SensorOffline",false); //reset before testing for (var i = 0; i < arrayLength; i++) { // for every array object var name; //wenn ein sensor false wird und vorher true war dann setze eine meldung ab if (getState(sensor_array[i]+".available").val===false && sensorstate_array[i] === true){ name = getObject(sensor_array[i]).common.name; text = text+name; cnt++; if (cnt > 1) { text = text+", "; } setState("javascript.0.Alerts.SensorOffline", true); } sensorstate_array[i] = getState(sensor_array[i]+".available").val; /* auskommentiert weil jetzt .available verfügbar ist var then; var now; var result; //berechnen der einzelnen differenzen now = new Date().getTime(); then = getDateObject(getState(sensor_array[i]+".link_quality").ts).getTime(); result = now - then; if ((new Date().getTime() - getDateObject(getState(sensor_array[i]+".link_quality").ts).getTime()) > 14400000) { //if answer is older than 4 hours //console.log('Eingeschlafen :'+sensor_array[i]+" - "+result); name = getObject(sensor_array[i]).common.name setState("javascript.0.Logbuch.LogText", 'Sensor '+name+' ist eingeschlafen'); setState("javascript.0.Alerts.SensorOffline", true); } */ }