NEWS
Blockly Skript button "drücken" simulieren
-
Hallo zusammen,
ich benötige Hilfe bei einem Blockly-Skript.
Der Harmony-Adapter legt in den Objekten für die Geräte Objekte mit der Rolle "button" an, womit man quasi einen Tastendruck simulieren kann.
Ich möchte nun aus Blockly heraus einen solchen Tastendruck simulieren.Ich weiss, dass dies bereits hier und hier besprochen wurde, allerdings die Lösung funktioniert bei mir nicht.
So sieht mein Blockly aus.Egal, ob ich das Modul "steuere", "aktualisiere" verwende, es passiert einfach nichts.
Mir ist auch aufgefallen, dass der Zeitstempel sich nicht ändert.Habe ich irgendwas übersehen?
-
@blade-of-fire
Was sind die Trigger-Datenpunkte ? -
@paul53
Das sind die harmony activities. Die haben den Status 1 beim starten, 2 wenn aktiv.
Ich hatte eine debug modul an die Stelle gesetzt, wo der Wert = 2 reinläuft, und der wird definitiv erreicht. -
Bin ich tatsächlich der einzige, der dieses Problem hat?
-
@blade-of-fire Ich bin nicht der Blockly-Held, aber funktioniert es denn direkt per JS?
Lege mal ein reines JS an mit nur diesem Inhalt (Datenpunkt natürlich anpassen ) :setState("Datenpunkt vom Button",true);
Wenn du es dann speicherst und startest sollte es den Button dann einmalig "drücken".
-
@blade-of-fire Zeig doch mal die Datenpunkt-Objektstruktur von channel1, channel2 und LG-Fernseher.PowerOn mit Werten.
-
@blade-of-fire ich habe hier z.B. Eject beim BD-Player. Das ist auch ein Button
das funktioniert einwandfrei
-
läuft das Script auch?
Hast du mal versucht direkt im Datenpunkt eine 1 zu schreiben?
-
@SBorg
Ich habe das getestet mit verschiedenen Befehlen (die als Objekte angelegt wurden). Leider auch hier kein Erfolg.setState("harmony.0.Harmony_Wohnzimmer.LG-Fernseher.PowerToggle", 1); console.log('test');
Die Debug message kommt, aber es passiert nichts.
Dabei wird folgendes geloggt:
javascript.0 2020-11-26 17:27:42.573 info (544) script.js.common.Debug.Skript_1: registered 0 subscriptions and 0 schedules javascript.0 2020-11-26 17:27:42.573 info (544) script.js.common.Debug.Skript_1: test javascript.0 2020-11-26 17:27:42.573 warn (544) at script.js.common.Debug.Skript_1:1:1 javascript.0 2020-11-26 17:27:42.573 warn (544) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1358:20) javascript.0 2020-11-26 17:27:42.572 warn (544) State "harmony.0.Harmony_Wohnzimmer.LG-Fernseher.PowerToggle" not found
Das "State "..." not found wundert mich ein wenig, weil die ID auf jeden Fall da ist.
Aber vielleicht liegt genau da der Hase im Pfeffer.@MCU
Channel1 und Channel2 können wir glaube ich außen vor lassen. Die werden wir gewünscht geschaltet.
Den Button PowerOn habe ich blöderweise gelöscht. Muss mal schauen, wie ich den wieder da reingeladen bekomme (vermutlich die Instanz neu erstellen..). Aber das Problem bezieht sich sowieso auf auf alle Buttons von Harmony. Der Button "PowerToggle" sieht so aus:{ "from": "system.adapter.harmony.0", "user": "system.user.admin", "ts": 1606220786316, "common": { "name": "LG-Fernseher:PowerToggle", "role": "button", "type": "number", "min": 0, "write": true, "read": true }, "native": { "action": "{", "name": "PowerToggle", "label": "Power Toggle", "controlGroup": "Power", "deviceId": "72103782" }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "harmony.0.Harmony_Wohnzimmer.LG-Fernseher.PowerToggle", "type": "state" }
@Nordischerjung
Das Skript läuft definitiv. Wenn manuell eine 1 eintrage, dann wird korrekt geschaltet.Wie gesagt, habe ich die Vermutung, dass es mit dem "not found" zusammenhängt.
Zur Info: Ich habe bisher schon einige Skripte laufen und die machten bisher keine Probleme. Muss wohl irgendwie mit dem harmony zusammenhängen.
-
@blade-of-fire du könntest mal zum testen den Block "Wert" aus dem Trigger Bereich gegen einen Systemblock Wert von ObjectID tauschen.
Du hast drei Trigger, es kann sein, dass der WERT nicht der des gewünschten Triggers ist
-
@blade-of-fire sagte:
Das "State "..." not found wundert mich ein wenig,
Was ergibt im Log ?
log(existsState("harmony.0.Harmony_Wohnzimmer.LG-Fernseher.PowerToggle"));
-
@blade-of-fire wieso steht denn dann in deinem Blockly noch "PowerOn"?
@blade-of-fire sagte in Blockly Skript button "drücken" simulieren:
Den Button PowerOn habe ich blöderweise gelöscht. Muss mal schauen, wie ich den wieder da reingeladen bekomme
Objektbaum löschen - Instanz neu starten
-
@Homoran
Ich hatte das in der Zwischenzeit versehentlich gelöscht, als ich den Screenshot gemacht hatte, war es aber noch vorhanden. -
Das war jetzt wohl tatsächlich die Lösung.
Ich habe den gesamten Harmony Objektbaum gelöscht und die Instanz neu gestartet.
Nachdem alles wieder angelegt war, habe ich einfach nochmal das Skript gestartet und siehe da, es funktioniert!!!Woran das jetzt lag ist wohl schwer zu sagen, aber hautpsache, es funktioniert jetzt
-
@blade-of-fire sagte in Blockly Skript button "drücken" simulieren:
und siehe da, es funktioniert!!!
Gottseidank!!!
Dann bitte den Thread als [gelöst] markieren