NEWS
Schleifen und der Variablen-Scope
-
Moin,
ich wollte für mehrere Devices das immer gleich Verhalten implementieren und bin nun beim Testen darüber gestolpert, dass ich leider den Variablen-Scope in Blockly (der mir vorher nicht so klar war) beachtet habe.
Wenn ich den Blick in die JS-Darstellung von Blockly richtig deute, dann werden alle Variablen zu Beginn des gesamten Skriptes deklariert und sind damit quasi global (für das Skript.
Für meine Anwendung - Tasmota-Results abfangen, Json Parsen und in entsprechenden Datenpunkt schreiben - gewinnt damit leider der letzte Schleifendurchlauf. Ausnahme ist hier die Registrierung des Events (on...), vermutlich, weil dies direkt beim Schleifendurchlauf passiert.Ich wollte für beide Devices jeweils den Trigger 'beobachten', diesen Parsen und in den dazugehörigen Datenpunkt schreiben.
Der Trigger selbst funktioniert, in der Schleife wird dann aber Trigger-Datenpunkt und Trigger-Zielpunkt des letzten Devices genutzt (halt das, was als letztes in den Variablen steht).Gibt es einen Weg. Das doch mit Blockly zu realisieren? Eine JS-Funktion scheint ja auch nicht zu helfen, da deren Variablen direkt auch direkt oben im Skript deklariert werden.
-
-
@sammy-r
Ich habe ein Lösung gefunden, bei ich den inneren Teil der Schleife noch die beiden Datenpunkte ermittelt und dann eine globale Funktion aufruft, die unter der Haube dann auch an ein Blockly weiterleiten kann.Irgendwie unschön, ich benötige die Funktionalität zwar mehrfach, allerdings würde ich gern Logs einbauen und muss manchmal mehr als nur einen einzelnen Datenpunkt setzen.
Ich wäre trotzdem dankbar für einen Tipp, ob das irgendwie schöner geht.
Irgendwie kann ich nicht glauben, dass man in ioBroker eine Liste von gleichen Devices alle einzelne via Copy and Paste anbinden muss.So ganz zuhause bin ich in JS nicht und ich sehe hier auch Vorteile in grafischen Skripten.
-
@paul53 Das war jetzt parallel zu meiner Erkenntnis. Dein Skript muss ich jetzt erst mal durchgehen. Sieht so ganz anders als erwartet aus.
Noch einfacher: Ersetzen von "RESULT" durch "teleperiod" in der Target-ID.
RESULT ist ein fixer Datenpunkt von Tasmota, teleperiod ist von mir angelegt und muss deshalb von mir gesetzt werden (deshalb das JSON-Parsen).Die lokalen Variablen hatte ich gar nicht mehr drauf.
Ich muss mal nachlesen, wo es die überall gibt.Wie komme ich denn an ObjektId und Wert 'mit dem Pfeil davor' ran? Ich bekomme die nicht angezeigt?
Edit: Ich vermute mal, nur bei Schleifen etc, die auf Datenpunkten arbeiten.Das scheint hau laufen:
Danke für den Denkanstoß und das helfen in anderen Posts, an denen ich mich bedient habe