NEWS
Zigbee Scene button als Schalter
-
Ich bin gerade dabei, IoBroker so langsam einzurichten. Ich habe etliche Tuya Steckdosen und ein Tuya Zigbee Gateway am Tuya Adapter, was auch soweit funktioniert.
Nun will ich ein paar Taster platzieren, um Dinge zu schalten. Also drücken schaltet ein, drücken schaltet aus. Das habe ich versuchsweise mit WemosD1 und MQTT aufgebaut, läuft. Nun habe ich ein paar Zigbee Sachen gekauft. Unter anderem https://www.aliexpress.com/item/1005004988714663.html
Ich dachte, das ist das gleiche in Zigbee. Aber ich bekomme als Werte nur 0 bei einfachen Click, 1 bei doppelclick, und 2 bei longpress. Ich möchte aber mit einfachem Drücken einschalten und auch wieder ausschalten. Wie kann ich das in JS realisieren?
-
@gutty
Prinzipiell sollte das so funktionieren - ungetestet!on({id: "tuya.0.LoraTap.click", change: "ne"}, async function (obj) { var value = obj.state.val; if(value == 0) { setState("tuya.0.DeineLampe.On", !getState("tuya.0.DeineLampe.On").val, false); } }
-
@codierknecht ja, das wäre ja zu einfach.
Der Wert 0 ändert sich ja nicht, der Datenpunkt bleibt einfach auf 0. Ich habe ausprobiert und ihn nach setState auf 4 gestellt, das ein erneuter click ihn wieder auf 0 stellt. Das schien zu gehen, nur dummerweise schickt das gateway(?) alle paar Sekunden oder Minuten immer wieder 0, was dann die Lampe unerwünscht schaltet. Click und doppelclick bringen das erwünschte Ergebnis, aber schlechter WAF. -
@gutty
OK, dann steht also in dem DP nur der zuletzt abgesetzte Wert und wird zu allem Übel auch noch vom Gateway ständig aktualisiert.
Gibt es noch einen anderen DP, der sich wirklich nur beim Click ändert?
Auf den könnte man triggern und aus dem Status dann einfach lesen, ob 1x, 2x oder 2x geklickt wurde. -
@codierknecht Nein, dummerweise nicht. Kurioserweise kann ich aber in der Smart life app ohne iobroker per einfachem click eine Steckdose toggeln.
-
@gutty
Und was passiert dann am DP?
Ändert der (vielleicht nur für einen Augenblick) mal den Wert?Log doch mal mit was da so passiert:
on({id: "tuya.0.LoraTap.click", change: "any"}, async function (obj) { console.log('Auslöser: ' + obj.state.from); console.log('Wert: ' + obj.state.val); }
-
@codierknecht sagte in Zigbee Scene button als Schalter:
Also, ich habe das Skript geändert zu
console.log("Routine gestartet"); on({id: 'tuya.0.bf0a3a1dcb9c1a20d5clm5.1'/*switch type 1*/, change: "any"}, async function (obj) { console.log('Auslöser: ' + obj.state.from); console.log('Wert: ' + obj.state.val); });
Dann um 12:07:50 den Knopf gedrückt:
6.4.2023, 12:07:46.559 [info ]: javascript.0 (97325) Stop script script.js.Ordner_1.Taster1 6.4.2023, 12:07:46.564 [info ]: javascript.0 (97325) Start javascript script.js.Ordner_1.Taster1 6.4.2023, 12:07:46.570 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Routine gestartet 6.4.2023, 12:07:46.570 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 6.4.2023, 12:07:50.848 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:07:50.848 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:08:07.225 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:08:07.225 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:08:07.362 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:08:07.362 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:09:07.480 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:09:07.480 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:09:07.637 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:09:07.637 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:10:07.855 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:10:07.855 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:10:07.992 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:10:07.992 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:11:08.104 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:11:08.104 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:11:08.250 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:11:08.250 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:12:08.369 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:12:08.369 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:12:08.512 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:12:08.512 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:13:08.712 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:13:08.712 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0 6.4.2023, 12:13:08.859 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Auslöser: system.adapter.tuya.0 6.4.2023, 12:13:08.859 [info ]: javascript.0 (97325) script.js.Ordner_1.Taster1: Wert: 0
Und wie man sieht, feuert der Adapter jede Minute erneut den Wert 0.
Mache ich dann einen Doppelclick, ändert sich der wert auf 1 und wird auch immer wieder gefeuert. -
@gutty
Dann sieht das mit dem einfachen Klick alleine schlecht aus.
Eine Änderung von "any" nach "ne" hilft ja auch nicht - der Wert ändert sich ja nicht.Was natürlich problemlos gehen sollte, wäre mit 1 Klick ein- und mit Doppelklick ausschalten.
Aber das ist ja nicht das was Du willst. -
@codierknecht ja, mit einfachem und doppel click, das geht, und so habe ich es momentan. Aber das ist auch Mist. Wenn ich über einfachen click einschalte, und z.B. über Siri ausschalte, geht die Lampe ja durch die Wiederholung des Schaltzustandes wieder an. Das muss ich noch rausprogrammieren.
-
@codierknecht Ich habe einen unschönen Workaround gefunden. Die Tasmota geflashte S20 habe ich gegen ein Tuya Smart Plug (die man nicht mehr Tasmota flashen kann) getauscht. Den kann ich in der App und mit der Remote control (Scene Button) toggeln und gleichzeitig per IoBroker abrufen und steuern.
-
@gutty wenn ich das jetzt nicht völlig falsch verstehe, dann willst Du doch einfach den Taster kurz drücken, dann Licht an, dann wieder drücken, dann Licht wieder aus, korrekt?
Dann wäre doch der Workaround,
wenn Status 1 und Licht aus, mache Licht an
und das Gegenteil wäre dann,
wenn Status 1 und Licht an, dann mache Licht ausSo mache ich das mit den HueWall Switches, welche auch nur kurz eine Wertänderung haben.
-
@toralt Nein, das geht bei dem Button nicht.
Es gibt 3 Zustände (enum, 0-2):
0 = einfacher Click
1 = Doppelclick
2 = longpressder Datebpunkt im IoBroker ändert sich nicht, wenn man ein weiteres mal clickt. Er bleibt auf 0. Erschwerdend kommt hinzu, dass vom Zigbee Gateway, wo der Taster dran hängt, alle Minute der aktuelle Zustand (in meinem Fall 0) gesendet wird. Also ich setze manuell in Objekte den Zustand auf z.B. 5, ist er eine Minute später automatisch wieder auf 0 und es wird ungewollt die Schaltaktion ausgelöst, da ja eine Zustandsänderung erkannt wird.
Der Zustand bleibt solange auf 0, bis ein Doppelclick oder longpress erkannt wird. Deswegen geht ja auch click=einschalten, doppelclick = ausschaltenGibt es bei Ali o.ä. Zigbee Taster, die einfach nur 0/1 toggeln?