NEWS
Test Adapter Z-Wave 2 (v1.7.x)
-
@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. -
@AlCalzone hier die Logs vom ersten Anlaufen der alpha 5
Ich weiß nicht, ob ich die Meldung, dass alle Nodes ready sind nur nicht im Logwust gesehen habe, oder ob sie nicht kam.
Ich habe irgendwann einfach angefangen die Nodes zu Testen.Bei Node 3 alles wie gehabt. Keine Problem. Alles top.
Node 4 ist vor/während des Interview kurz weg gewesen, kam aber wieder.
Allerdings konnte ich die Node nicht steuern. Beim ersten Versuch ging sie gleich dead und blieb auch so. Nachdem ich aber den physischen Schalter bemüht habe, lief auch die Node problemlos.
Allerdings scheint das Problem mit den nicht aktualisiertencurrentValue
doch noch da zu sein. Es scheint aber so, als würde es bei kleineren Sprüngen (50 auf 30 zb) weniger oft vorkommen, als bei großen Änderungen zb (99 auf 0) <- in diesen Fällen bleibt dercurrentValue
dann auch mal irgendwo in der Mitte hängen.
Ich glaube, dass könnte sogar mit in den Logs zu sehen sein, für Node 4.Ich lasse die alpha 5 nun drauf und werde sehen, ob morgen früh die Lichter aus- und die Rollos hoch gehen
Ich bin sehr zuversichtlich und gebe dann noch einmal Meldung. Ggf. mit Logs.
Besten Dank noch Mal und Gute Nacht (dann irgendwann)!
-
@EvilEls Die Interviews sind alle durchgelaufen - das hast du nur übersehen.
Das mit currentValue scheint ebenfalls nur ein Symptom zu sein, nicht die Ursache. So 100% läuft es mit der Kommunikation noch nicht rund. Ich sehe zwei Probleme, vermute aber, das liegt an dem Problem, was ich oben beschrieben habe.Als nächste Schritte schlage ich vor:
- Ich fixe den beschriebenen Bug (wird vermutlich dann alpha 6)
- Du testest und machst mir einen Log.
- Je nachdem, wie das Verhalten ist, drehen wir noch eine Runde.
-
-
@EvilEls alpha 6 ist auf dem Weg