NEWS
Test Adapter Z-Wave 2 (v1.7.x)
-
@EvilEls Mit deinen Nodes dürfte alles in Ordnung sein.
Es gibt noch einen Zustand, in dem der Adapter nicht auf Schlüsselanfragen der Nodes reagiert. Daraufhin wollen die auch nicht antworten.
Ich muss da noch ein bisschen umbauen, hoffentlich klappt das übers Wochenende. -
@EvilEls alpha.2 ist demnächst verfügbar. Kannst du mir damit nochmal ein Log machen bitte?
-
Hi @AlCalzone!
Danke für die neue Version!Verhalten der Node 4 ist jetzt besser. Ich konnte sie jetzt öfter schalten bevor sie gestorben ist. Leider kommt sie noch nicht zuverlässig wieder.
Nachdem ich den Schalter betätigt hatte, war sie wieder alive und ging nach ein paar Schaltungen wieder tot.
Ich habe das Gefühl, dass wann immer ich auf einen Wert targetValue schalte der gerade bei auch currentValue gesetzt ist (also currentValue = 0 und ich stelle targetValue = 0, die Wahrscheinlichkeit höher ist, dass die Node stirbt, als wenn ich den Wert tatsächlich verändere.
Probleme hat heute beim Testdurchgang Node 3 gemacht, die sonst die Referenz für gutes Benehmen ist. Interview kam nicht zustande. Alle Schaltungen sind fehlgeschlagen.Beim zweiten Anlauf sah alles anders aus.
zwave2.0 2020-09-11 21:17:08.604 info (16792) Node 4: interview completed, all values are updated zwave2.0 2020-09-11 21:17:08.603 info (16792) Node 4: ready to use zwave2.0 2020-09-11 21:17:08.603 info (16792) All nodes are ready to use zwave2.0 2020-09-11 21:16:50.539 info (16792) Node 3: interview completed, all values are updated zwave2.0 2020-09-11 21:16:50.537 info (16792) Node 3: ready to use zwave2.0 2020-09-11 21:16:50.510 info (16792) Node 2: interview completed, all values are updated zwave2.0 2020-09-11 21:16:50.509 info (16792) Node 2: ready to use zwave2.0 2020-09-11 21:16:27.995 info (16792) Node 5: interview completed, all values are updated zwave2.0 2020-09-11 21:16:27.994 info (16792) Node 5: ready to use zwave2.0 2020-09-11 21:15:30.498 info (16792) Node 5 is alive zwave2.0 2020-09-11 21:15:30.465 info (16792) Node 4 is alive zwave2.0 2020-09-11 21:15:30.450 info (16792) Node 3 is alive zwave2.0 2020-09-11 21:15:30.410 info (16792) Node 2 is alive zwave2.0 2020-09-11 21:15:30.302 info (16792) Node 1 is alive zwave2.0 2020-09-11 21:15:30.288 info (16792) Node 1: interview completed, all values are updated zwave2.0 2020-09-11 21:15:30.286 info (16792) Node 1: ready to use zwave2.0 2020-09-11 21:15:30.237 info (16792) The driver is ready. Found 5 nodes. zwave2.0 2020-09-11 21:15:28.072 info (16792) starting. Version 1.7.0-alpha.2 in /opt/iobroker/node_modules/iobroker.zwave2, node: v12.18.3, js-controller: 3.1.6
Die Interviews waren sehr zügig fertig und alle Geräte alive.
Und siehe da, Node 3 macht wieder den Strahlemann und lässt sich vorbildlich bedienen. Selbst wenn sie nach einem Schaltvorgang kurz hängt, fängt sie sich wieder und bekommt es hin nicht wegzusterben.Dagegen weiter Land unter bei Node 4. Taumelt nicht mehr ganz so viel zwischen dead-alive beim Schalten, aber stirbt doch noch zuverlässig nach x Schaltungen weg und kommt zum Teil sehr lange nicht wieder. Oder gar erst nach Schalter Betätigung.
Hier die Logs dazu:
2020-09-11_02.zipLessons learned: Wenn das Interview beim Start des Adapter nicht erfolgreich ist, sollte die Node vllt gar nicht erst freigegeben werden, da durch versuchte Schaltbefehle gar kein Interview mehr zustande kommt und die Node unbenutzbar bleibt.
Besten Dank und viele Grüße!
PS: Habe es heute leider nicht geschafft den Node 4 Harware Klon zu bestromen. Mal sehn ob ich das WE dazu komme
-
@AlCalzone sorry, will nicht nerven, aber eine Sache viel mir noch ein.
Wie entscheidet der Adapter, wann ein Kommando als fehlgeschlagen eingestuft wird? Wartet er auf ein Callback?
Das die Node 4 hier immer stirbt beim Schalten ist ja nur ein Problem was die Node hat.
Es gibt da ja auch noch dieses, dass der currentValue nicht oder erst eine Schaltung verspätet gesetzt wird:Beim ersten Schaltversuch mittels Änderung von targetValue im iobroker, hat das Gerät tatsächlich das Licht geschalten. Allerdings hat der currentValue sich nicht verändert.
https://forum.iobroker.net/topic/34414/test-adapter-z-wave-2-v1-3-x/62
bzw.
https://github.com/ioBroker/ioBroker.zwave/issues/84#issue-498239421
Erst bei nochmaligen Schalten, zog der currentValue zum targetValue gleich.Könnte das uU irgendwie zusammenhängen?
-
@EvilEls Ne das hat alles mit der Verschlüsselung zu tun. Zur Verschlüsselung ist ständig ein Austausch einmaliger Schlüssel nötig. Daher wird vor jeder Nachricht eine weitere Anfrage nach einem aktuellen Einmalschlüssel geschickt
Im aktuellen Log ist es so, dass Node 3 anfangs nicht auf die verschlüsselten Kommandos antwortet. Daraufhin denkt der Adapter, Node 3 wäre nicht verschlüsselt und versucht, unverschlüsselt mit ihm zu reden. Das mag Node 3 aber nicht, da er doch verschlüsselt ist, und ignoriert die Kommunikationsversuche.
Hier müsste der Adapter merken, dass Node 3 dennoch verschlüsselt kommuniziert und wieder verschlüsselt Verbindung aufnehmen.Node 4 scheint etwas sturer zu sein. Ich kann mindestens 2x eine Situation identifizieren, bei der der Adapter nach einem Schlüssel fragt und eine Antwort darauf erwartet. Stattdessen sendet Node 4 ebenfalls eine Schlüsselanfrage und wartet darauf, dass der Adapter eine Antwort sendet. Damit sind wir in einer Patt-Situation und der Adapter stuft den Node als tot ein.
@EvilEls sagte in Alpha-Test Adapter Z-Wave 2 (v1.7.x):
Wie entscheidet der Adapter, wann ein Kommando als fehlgeschlagen eingestuft wird? Wartet er auf ein Callback?
Das ist etwas komplizierter. Der Nachrichtenfluss ist in etwa wie folgt (ohne Verschlüsselung)
Adapter -> Stick: Nachricht XYZ senden Stick -> Node: (sendet Nachricht) Stick -> Adapter: Sendebestätigung Node -> Stick: Empfangsbestätigung Stick -> Adapter: Empfangsbestätigung (oder Info über Ausbleiben der Bestätigung) ... Node -> Stick: Antwort auf Nachricht Stick -> Adapter: Antwort auf Nachricht
Wenn entweder die Bestätigung oder eine Antwort ausbleibt, versucht der Adapter noch 2x zu senden, dann wird der Node als tot eingestuft.
Bei Verschlüsselung wird dieser Prozess je Frage-Antwort-Spiel mehrfach durchgeführt, jeder dieser Schritte erwartet eine Sende- und Empfangsbestätigung:
Adapter -> Node: Anfrage Einmalschlüssel Node -> Adapter: Antwort auf Anfrage Adapter -> Node: Verschlüsselte Nachricht ... Node -> Adapter: Anfrage Einmalschlüssel Adapter -> Node: Antwort auf Anfrage Node -> Adapter: Antwort auf verschlüsselte Nachricht
Bei Node 4 passiert ab und zu folgendes:
Adapter -> Node: Anfrage Einmalschlüssel Node -> Adapter: Anfrage Einmalschlüssel Adapter: wartet auf Antwort, versucht es kurz darauf erneut Node: wartet ebenfalls auf Antwort, versucht es erneut. ...
In diesem Fall müsste der Adapter nachgeben und direkt die Antwort senden. Dann wäre Node 4 zufrieden und sollte hoffentlich die Antwort auf unsere Nachricht senden.
-
@AlCalzone hab vielen Dank für die super Erklärung!
Wenn ich was Testen kann und/oder du Logs brauchst, bitte einfach Bescheid geben.
Danke noch mal für deine großartige Arbeit hier! -
@AlCalzone
Ist es geplant einen Z-Wave Stick auch per Serial-ID wie beim "alten" Z-Wave Adapter auswählen zu können anstatt der festen Vorgabe?Feste Vorgabe: z.B. /dev/ttyACM1
Serial-ID: /dev/serial/by-id/...Grüße
Marcel -
@Marsx79 Müsste ich mir anschauen wie das geht. Bisher nutzt der Adapter eine eingebaute Funktion hierfür. Du kannst es aber mit einem Trick jetzt schon machen:
Adapter stoppen, Konfiguration auf, Pfad bearbeiten, speichern, Adapter starten. -
@AlCalzone
Super hat funktioniert. Ist genau das was ich wollte. Danke dir! -
Hallo,
habe den Adapter mittlerweile etwas testen können und insgesamt kommt er mir deutlich langsamer wie die Version 1.6 vor. Wenn ich mehrere Schaltvorgänge hintereinander durchführte, sind Wartezeiten von ca. 10s keine Seltenheit.
Meine Netzwerkkarte lädt leider auch nicht.
und im Zwave-Js ordner ist das Zwave-Log nicht mehr vorhanden, hier habe ich wohl eine änderung verpasst, bin mit der suchfunktion durch die vergangenen Threads aber auch nicht weiter gekommen.
Was ich bei dem Adapter wirklich vermisse ist ein Datenpunkt der sich gut für Vis eigenet.
z.B. hat man bei den Fibaro FGS223 (und so ziemlich allen anderen aktoren) Target Value und Current Value (oder ähnlich)
Wenn ich jetzt an einem normalen schalter den Aktor bediene wird dieser wert nicht ins Vis übernommen, weil sich nur der Current Value ändert. (Was ja wohl auch das erwartete Verhalten von openzwave ist). Aktuell synchronisiere ich das mit einem Skript, was leider auch ab und an zu Fehlauslösungen führt.
evtl kann man das hier dann noch mal anders implementieren? also einen Datenpunkt der sowohl den ist zustand zeit und sich schalten lässt?Skript für die Status-Sync (ja aus blockly konvertiert )
on({id: "zwave2.1.Node_021.Binary_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_021.Binary_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_020.Binary_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_020.Binary_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_018.Multilevel_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_018.Multilevel_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_014.Binary_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_014.Binary_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_027.Binary_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_027.Binary_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_037.Binary_Switch.currentValue"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_037.Binary_Switch.targetValue"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); }); on({id: "zwave2.1.Node_038.Binary_Switch.currentValue_001"/*Current value (Endpoint 1)*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("zwave2.1.Node_038.Binary_Switch.targetValue_001"/*Target value (Endpoint 1)*/, (obj.state ? obj.state.val : "")); });
Beispiel aktuelle Vis Schaltfläche
hier nochmal die Logs
200915 Harry94.rar -
@Harry94 Das Log solltest du jetzt in
/opt/iobroker/node_modules/iobroker.zwave2/build
finden. Das brauche ich, um dein Problem zu identifizieren.Wenn ich mehrere Schaltvorgänge hintereinander durchführte, sind Wartezeiten von ca. 10s keine Seltenheit.
Ich wette, da ist noch was faul.
Aktuell synchronisiere ich das mit einem Skript, was leider auch ab und an zu Fehlauslösungen führt.
Schau dir mal die Alias-Funktion an. Damit kannst du das wesentlich stabiler und flexibler machen (z.B. wenn du mal ein Gerät tauschen musst). Wurde auch schon in den Test-Threads hier diskutiert.
Dein Wunsch steht schon auf meiner Liste, für ältere Geräte ohne getrenntes Reporting der Werte kann das schon Sinn machen. -
Danke für den Hinweis,
hab den adapter sogar mal installiert, hatte aber bisher noch keine Zeit in richtig einzurichen. Das Skript habe ich mal zu zeiten von Version 0.7 oder so gemacht und seither nicht mehr angefasstlog anbei
zwave-2065.rar -
v1.7.0-alpha.3 ist in Kürze verfügbar. Changelog siehe oben!
-
Vielen Dank für deine tolle Arbeit,
das wird wieder ausführlich getestet.Ich hätte da noch ein Luxus-Problemchen:
Wenn ich den Adapter neu starte, werden bei meinem HeatIt PushButton 8 alle Szenen Getriggert.
Heißt folgendes passiert2020-09-23 22:01:41.545 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_003 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 003","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"003","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891301385,"_id":"zwave2.1.Node_036.Central_Scene.scene_003","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:41.673 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_007 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 007","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"007","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891301648,"_id":"zwave2.1.Node_036.Central_Scene.scene_007","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:41.747 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_008 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 008","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"008","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891301736,"_id":"zwave2.1.Node_036.Central_Scene.scene_008","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:41.777 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_005 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 005","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"005","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891301765,"_id":"zwave2.1.Node_036.Central_Scene.scene_005","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:41.874 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_006 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 006","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"006","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891301847,"_id":"zwave2.1.Node_036.Central_Scene.scene_006","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:42.239 - debug: zwave2.1 (19223) object zwave2.1.Node_039.Central_Scene.scene_001 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 001","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown","3":"KeyPressed2x","4":"KeyPressed3x"}},"native":{"nodeId":39,"valueId":{"commandClass":91,"property":"scene","propertyKey":"001","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891302028,"_id":"zwave2.1.Node_039.Central_Scene.scene_001","acl":{"object":1638,"state":1638,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2020-09-23 22:01:42.318 - debug: zwave2.1 (19223) object zwave2.1.Node_036.Central_Scene.scene_001 changed: {"type":"state","common":{"role":"value","read":true,"write":false,"name":"Scene 001","type":"number","min":0,"max":255,"states":{"0":"KeyPressed","1":"KeyReleased","2":"KeyHeldDown"}},"native":{"nodeId":36,"valueId":{"commandClass":91,"property":"scene","propertyKey":"001","endpoint":0}},"from":"system.adapter.zwave2.1","user":"system.user.admin","ts":1600891302175,"_id":"zwave2.1.Node_036.Central_Scene.scene_001","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
Da Mein Skript dazu (auszugsweise) so aussieht:
on({id: "zwave2.1.Node_036.Central_Scene.scene_007"/*Scene 007*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 0) { setState("deconz.0.Lights.1.on"/*On/Off light 1 on*/, true); } });
löst es bei Aktualisierung aus.
Das umstellen auf Trigger "Änderung " bringt leider keinen Erfolg, da ich dann, spätestens wenn ich jede taste 1 mal gedrückt habe keine Auslösung mehr erziele.
Wäre es jetzt möglich, dass der Adapter beim Starten den Wert auf " " also leer setz? oder 255? so dass das auch der Standardwert ist wenn keine Aktion stattfindet?
Ich meine das war bei der AEON Labs ZW088 auch so ähnlich gelöst? (kann gerade nicht testen da Batterie leer)
Danke schonmal
-
@Harry94 Das ist in der Tat eine schwierige Entscheidung...
Die Tasten werden beim Start abgefragt, damit die Werte "richtig" sind und man z.B. korrekt auf Änderung triggern kann. In deinem Log sehe ich nur die Object-Änderungen, nicht die Wertänderungen. Kannst du mir bitte mal den entsprechenden Ausschnitt aus dem Objekt-Browser zeigen, nachdem das Interview durch ist? Also mit Werten, so wie es aktuell passiert?Edit: In der kommenden Version wird das über den Quality-Parameter (
obj.state.q
) gelöst. Dann muss man auch nicht mit erfundenen Werten pfuschen, die nicht in der Spezifikation sind. Wie das dann geht, steht hier: https://github.com/AlCalzone/ioBroker.zwave2/blob/master/docs/en/FAQ.md#help-all-my-scripts-trigger-after-an-adapter-restart -
Version
1.7.0-alpha.5
ist in Kürze verfügbar. Enthalten ist eine Überarbeitung des Feldes zur Eingabe der seriellen Schnittstelle und ein Fix für Geräte, die perBasic CC
ihre Werte-Updates senden.
Würde mich freuen, wenn jemand mit den dead-alive-Problemen diese Version testen kann, da ich recht bald die "fertige"1.7.0
releasen will. -
@AlCalzone Guten Abend, schön Abend...
Herzlichen Dank für deine großartige Arbeit!
Ich habe eben die alpha 4 angeschaut.Beim ersten Blick in die Logs hab ich ein bisschen einen Schreck bekommen
Da ploppten unzählige solcher Nachrichten für zwei Adapter auf.Die Interviews gingen aber zügig und trotz dass meine liebe Problem-Node 4 wieder ein wenig zwischen Leben und Tot wandelte, hat sie sich schließlich doch gefangen und war alive und erreichbar. Es scheint sogar, dass das Problem mit den nicht aktualisierenden
currentValue
's verschwunden ist.
Die Node ging glaube ich zwischenzeitlich mal kurz auf dead, fing sich aber schnell wieder und war wirklich erstmalig überhaupt verlässlich zu steuern
Hier die Logs:
2020-09-24_1.7.0-alpha.4.zipBesten Dank nochmals!
-
@AlCalzone sagte in Alpha-Test Adapter Z-Wave 2 (v1.7.x):
Version
1.7.0-alpha.5
ist in Kürze verfügbar. Enthalten ist eine Überarbeitung des Feldes zur Eingabe der seriellen Schnittstelle und ein Fix für Geräte, die perBasic CC
ihre Werte-Updates senden.
Würde mich freuen, wenn jemand mit den dead-alive-Problemen diese Version testen kann, da ich recht bald die "fertige"1.7.0
releasen will.Da kommt man ja gar nicht hinterher mit Testen!
-
@EvilEls Danke dafür schon mal. Die Hälfte der Warnungen sollte eigentlich nicht sein - das könnte aber auch ein JS-Controller-Bug sein.
q
nutzt fast kein Adapter :D.
Die andere Hälfte ist "ok", daAssociations
undMulti Channel Associations
gar nicht im Objekt-Baum auftauchen sollte. Permanent diese Warnung sollte natürlich auch nicht sein. -
@EvilEls sagte in Alpha-Test Adapter Z-Wave 2 (v1.7.x):
Die Node ging glaube ich zwischenzeitlich mal kurz auf dead
Ok, einen kleinen Bug haben wir noch. Wenn der Node auf eine Anfrage nach dem Key nicht antwortet, wird die eigentliche Nachricht erneut versucht, aber der Node trotzdem direkt als tot markiert.
Dadurch läuft dann auch das Interview mehrfach parallel - aber das steht eh noch auf meiner Agenda.