ioBroker.javascript
ioBroker.javascript copied to clipboard
Blockly "unBind" (aka unsubscribe)
hallo,
wenn ich je nach ausgewähltem Gerät ein Binding zuordnen will, dann scheint das nicht zu funktionieren. Anscheinend werden immer beide Bindings beibehalten. Beim Debuggen erscheinen auf jeden Fall immer abwechselnde Werte von beiden Geräten, obwohl nur die unterschiedlichen Level genommen werden sollten. Beim Thor10 wird dem Binding der Battery-Level von Thor10 zugeordnet und eben beim Galaxy der entsprechende Level.
Hintergrund ist, dass ein Shelly nur zwischen 20 und 80 Prozent geschaltet werden soll. So ist das aber nicht möglich....
Gruß, Thomas
Ok, zwig bitte mal das generierte Javascript. Aus dem Blockly wird ja keiner schlau :-) In der Javascript UI auf den "Blockly | JS" grafik drücken dann schaltet er um.
Weiterhim wichtig: Im Trigger "Automatiken.gerät" nicht den Wert von "Automatiken Gerät" abfragen ... einfach den Wert aus demm Trigger nutzen wie beim zweiten Blockly oben mit Screenshot (und der annahme das das die gleichen IDs sind)
Hi Apollon,
zu dem Wert hast du natürlich Recht. Das ist durch das "Herumprobieren" entstanden. Normalerweise achte ich darauf.
Hier das Javascript:
on({id: "0_userdata.0.Automatiken.Gerät"/Automatiken.Gerät/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("0_userdata.0.Automatiken.Gerät").val == 'Thor10') { setState("0_userdata.0.Automatiken.GeräteLevel"/Automatiken.GeräteLevel/, getState("paw.0.THOR10.info.battery.level").val, true); on({id: 'paw.0.THOR10.info.battery.level', change: "ne"}, function (obj) { setState('0_userdata.0.Automatiken.GeräteLevel', obj.state.val); });} else if (getState("0_userdata.0.Automatiken.Gerät").val == 'Galaxy S7') { setState("0_userdata.0.Automatiken.GeräteLevel"/Automatiken.GeräteLevel/, getState("paw.0.SM-T875.info.battery.level").val, true); on({id: 'paw.0.SM-T875.info.battery.level', change: "ne"}, function (obj) { setState('0_userdata.0.Automatiken.GeräteLevel', obj.state.val); });} });
on({id: "0_userdata.0.Automatiken.GeräteLevel"/Automatiken.GeräteLevel/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") < 20) { setState("shelly.0.SHSW-1#E8DB84D74624#1.Relay0.Switch"/Switch/, true); } else if ((obj.state ? obj.state.val : "") > 80) { setState("shelly.0.SHSW-1#E8DB84D74624#1.Relay0.Switch"/Switch/, false); } });
Und das Ergebnis sieht man im Log des Blocklys. Ich habe einen Debug auf den Datenpunkt Automatiken.GeräteLevel gelegt.
Der Wert springt zwischen den beiden Geräten immer hin und her!
Gruß, Thomas
Ok, now I get it ... you need an unsubscribe ... This is a blockly featre request. In JavaScript itself it is present and possible ... blockly do not have it right now.
This also requires to store the binding id in a variable name and such
Hi Apollon,
ist das nun bereits eine feature request oder muss ich noch etwas machen?
Gruß, Thomas
enhancement heisst "Feature Request". Alles gut.... müssen schauen wann jemand Zeit findet.
Wenn DU so ein skript aktuell haben willst schreib es als JavaScript und nicht Blockly
... wenn ich das mal könnte.....