NEWS
Variablen bleiben gefüllt oder Variablen zurücksetzen
-
Hallo zusammen,
Das angehängte Blockly verwende ich um meine Rollos in einem bestimmten Zeitbreich herunter zu fahren.
Das funktioniert soweit ganz prima.
In dem Blockly wird auch geprüft, ob alle Rollos herunter gefahren wurden. Wenn nicht, wird eben die Variable "openRollo" raufgezählt" und die Varibale rolloName wird entsprechend gefüllt.
Auch das funktioniert.Allerdings scheint es mir so, dass die Variablen openRollo und rolloName gefüllt bzw > 0 bleiben, wenn einmal der Fall eingetreten ist das ein Rollo nicht heruntergefahren werden konnte. Denn: Sobald dies einmal passiert, bekomme ich fortan jeden Abend die Info das ein Rollo nicht heruntergefahren werden konnte und zwar immer das/die selbe/n wie zuvor. Daher die Vermutung das die Variablen gefüllt bleiben. Leider weiß ich nicht wo man das nachsehen kann. Unter Objekte finde ich die zumindest nicht.
Jetzt habe ich in das Blockly noch einen Trigger eingebaut, der die Variablen rolloName und openRollo Nachts um 02 Uhr auf ihren Inhalt prüft und diese ggf zurücksetzt. Kann man das so machen? Oder ist die Variable jetzt nicht doppelt vertreten? Könnte man hier im Prinzip auf die Variablen ohne den Trigger verzichten?
-
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Daher die Vermutung das die Variablen gefüllt bleiben. L
Natürlich bleiben die Werte von Variablen so lange bestehen bis sie geändert werden oder das Skript neu gestartet wird
Das ist ja auch deren Sinn -
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Jetzt habe ich in das Blockly noch einen Trigger eingebaut, der die Variablen rolloName und openRollo Nachts um 02 Uhr auf ihren Inhalt prüft und diese ggf zurücksetzt. Kann man das so machen? Oder ist die Variable jetzt nicht doppelt vertreten? Könnte man hier im Prinzip auf die Variablen ohne den Trigger verzichten?
- Gibt es irgend einen Grund die Variable
openRollo
nicht zu Beginn der Funktion Shutdown-Herbst-Winter auf 0 zu setzen ? - Die gleiche Frage für den variable
rolloName
(mit Wert "") - Warum
Pause 1 Min
? Besser wäre ein Konstrukt mitstop timeout
gefolgt vontimeout 1 min
, und dann im Timeout alles was sich aktuell hinter dem Pause Baustein befindet.
A.
- Gibt es irgend einen Grund die Variable
-
@homoran sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Daher die Vermutung das die Variablen gefüllt bleiben. L
Natürlich bleiben die Werte von Variablen so lange bestehen bis sie geändert werden oder das Skript neu gestartet wird
Das ist ja auch deren SinnDanke. Dann hatte ich das schonmal richtig verstanden...
@asgothian sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Jetzt habe ich in das Blockly noch einen Trigger eingebaut, der die Variablen rolloName und openRollo Nachts um 02 Uhr auf ihren Inhalt prüft und diese ggf zurücksetzt. Kann man das so machen? Oder ist die Variable jetzt nicht doppelt vertreten? Könnte man hier im Prinzip auf die Variablen ohne den Trigger verzichten?
- Gibt es irgend einen Grund die Variable
openRollo
nicht zu Beginn der Funktion Shutdown-Herbst-Winter auf 0 zu setzen ? - Die gleiche Frage für den variable
rolloName
(mit Wert "") - Warum
Pause 1 Min
? Besser wäre ein Konstrukt mitstop timeout
gefolgt vontimeout 1 min
, und dann im Timeout alles was sich aktuell hinter dem Pause Baustein befindet.
A.
Ähm... ach so... ja... wenn die Funktion angestoßen wird (jeden Tag zum Sonnenuntergang, dann werden auch die Variablen zurück gesetzt... Das macht Sinn... Danke!
Die Pause ist drinn, da die Rollos eine gewisse Zeit benötigen bis Sie unten sind. Erst dann ist der nötige Wert erreicht. Lässt man die Pause weg wird das Blockly eben ohne Pause abgearbeitet Variablen werden jedes Mal "falsch" befüllt (Rollos sind noch nicht zueende gefahren). Das Resultat ist jedes mal eine Info-Mail obwohl alles ordnungsgemäß geplappt hat.
Warum kein Timeout? Keine Ahnung... Wusste nicht dass das besser ist. Warum ist das besser?
Ich habs mal anggepasst:
- Gibt es irgend einen Grund die Variable
-
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Warum kein Timeout? Keine Ahnung... Wusste nicht dass das besser ist. Warum ist das besser?
Das Stichwort für die Antwort ist "synchrone" und "asynchrone" Ausführung.
Das Skript mit "Pause" ist synchron aufgebaut. Die Pause wartet 1 min. und blockiert die angeforderten Ressourcen bis es weiter geht. Sollte das Skript ein 2. mal gestartet werden wenn die Pause noch läuft so läuft dieses dann doppelt, da das erste Skript noch nicht beendet ist.
Bei der Verwendung des Timeout werden nur Teile der Ressourcen beibehalten bis der Timeout abgelaufen ist. Das vollständige Skript wird beendet - nur der Teil der im "timeout" steht wird für eine spätere Abarbeitung vorgesehen. Wenn in diesem Fall das Skript ein 2. mal gestartet wird wenn der Timeout noch nicht abgelaufen ist sorgt das "stop Timeout" dafür das die "alte" Markierung zur späteren Abarbeitung entfernt wird bevor eine neu eingetragen wird.
In diesem speziellen Fall hast Du damit wenig Probleme - auch mit dem Pause Baustein wird das Skript stabil laufen. Es geht da eher um die "best practice". Im Allgemeinen ist das arbeiten mit Timeouts und Events besser als mit Pausen da der gesamte ioBroker auf dem Prinzip der event-getriebenen asynchronen Abarbeitung aufsetzt.
A.
-
@asgothian sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
@slang-0 sagte in Variablen bleiben gefüllt oder Variablen zurücksetzen:
Warum kein Timeout? Keine Ahnung... Wusste nicht dass das besser ist. Warum ist das besser?
Das Stichwort für die Antwort ist "synchrone" und "asynchrone" Ausführung.
Das Skript mit "Pause" ist synchron aufgebaut. Die Pause wartet 1 min. und blockiert die angeforderten Ressourcen bis es weiter geht. Sollte das Skript ein 2. mal gestartet werden wenn die Pause noch läuft so läuft dieses dann doppelt, da das erste Skript noch nicht beendet ist.
Bei der Verwendung des Timeout werden nur Teile der Ressourcen beibehalten bis der Timeout abgelaufen ist. Das vollständige Skript wird beendet - nur der Teil der im "timeout" steht wird für eine spätere Abarbeitung vorgesehen. Wenn in diesem Fall das Skript ein 2. mal gestartet wird wenn der Timeout noch nicht abgelaufen ist sorgt das "stop Timeout" dafür das die "alte" Markierung zur späteren Abarbeitung entfernt wird bevor eine neu eingetragen wird.
In diesem speziellen Fall hast Du damit wenig Probleme - auch mit dem Pause Baustein wird das Skript stabil laufen. Es geht da eher um die "best practice". Im Allgemeinen ist das arbeiten mit Timeouts und Events besser als mit Pausen da der gesamte ioBroker auf dem Prinzip der event-getriebenen asynchronen Abarbeitung aufsetzt.
A.
Hi,
Vielen Dank für die ausführliche Erklärung. Stehe noch ganz am Anfang, damit kommt man aber weiter!