Hi,
ich habe einen Osram Smart+ MiniSwitch, der wohl etwas komplizierter ist, weswegen ich nun ein Blockly für ihn schreiben will, tue mich aber schwer.
Der Schalter: https://www.zigbee2mqtt.io/devices/AC0251100NJ_AC0251700NJ.html
Ich kann ihn sowohl mit einem CC2531 über den zigbee Adapater als auch mit einen ConBeeII über Phoscon pairen.
In Blockly stehe ich total am Anfang, war aber soweit, dass ich die Werte vom CC2531/zigbee Adapter auslesen konnte und entsprechend ein anderes device steuern konnte. Da war dieser Thread natürlich hilfreich:
https://forum.iobroker.net/topic/32323/gelöst-skript-für-osram-switch-mini-state-up-down-circle
Da ich nur ein Device ein- oder auschalten will, egal wie der Wert vorher war, ist das bei mir ein sehr kleines vereinfachtes Skript ggü dem o.a. Thread.
Leider hat mein CC2531 einen richtig schlechtem Empfang. So bin ich auf den ConBee Stick gewechselt und habe das Skript entsprechend auf den Deconz Adapater und entsprechendes Objekt angepasst. Die Tastendrücke werden auch schön in ioborker angezeigt. Nur seit dem geht das Skript nicht mehr. Es passiert einfach nix mehr.
Vielleicht liegt es an den Werten, die ich auslesen will. Obwohl die Tastenwerte eigentlich nur statt up/down/circle nun 1,2,3 benannt sind und es auch einen Wert für die letzte Tastenaktion gibt. (siehe Screenshot des Objekts)
Die Tasten spezifischen Einträge (z.B. 1 -> release_press) wechseln immer nur für weniger als 1 Sekunde von false auf true sind also flüchtig. Wenn ich die im Blockly auswähle, scheint nix im Skript ausgewertet zu werden, egal ob ich den Block auf "wurde geändert" oder "wurde aktualisiert" setze. M.E. würde beides ja stimmen. Ebenso gibt es den Wert "buttonpressed" der Wert des letzten Tastendrucks auch kurz anzeigt, um dann wieder auf Null zu gehen.
Es gibt aber auch noch einen übergeordneten Wert "buttonevent", der dauerhaft jeweils die letzte Aktion bereit bereithält. (z.B. 1001 für die Taste 1, und kurzes Drücken, 1002: Langes Drücken Start, 1003: Langes Drücken Release)
Auch mit diesem habe ich es versucht.
Wer kann mir mit Code oder Erklärung helfen?
Warum kann ich im Skript nicht einfach anderen Objektwert nehmen?
Welche der gelb markierten Werte könnte man in Blockly verwenden bzw. warum klappen die untern drei "flüchtigen" Werte nicht oder wie würde es mit diesen klappen?
Warum klappt noch nicht mal der dauerhafte obere Wert "buttonevent" in meinem Blockly?
Hier die Screenshot mit den Objektwerten, dem Blockly und als Code.
on({id: "deconz.0.Sensors.16.buttonevent.1.release_press"/*Release after press*/, change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("deconz.0.Sensors.16.buttonevent.1.release_press").val == true) {
setState("meross.0.xxxxxc5.0"/*All*/, true);
}
if (getState("deconz.0.Sensors.16.buttonevent.2.release_press").val == true) {
setState("meross.0.xxxxxc5.0"/*All*/, false);
}
});
on({id: "deconz.0.Sensors.16.buttonevent"/*Lightify Switch Mini 16 buttonevent*/, change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("deconz.0.Sensors.16.buttonevent").val == '1002') {
setState("meross.0.xxxxxc5.0"/*All*/, true);
}
if (getState("deconz.0.Sensors.16.buttonevent").val == '2002') {
setState("meross.0.xxxxxc5.0"/*All*/, false);
}
});