NEWS
Skript quasi per Skript aktivieren / deaktivieren
-
morgen
mal eine generelle Fragewenn ich in einen Raum gehe und der Bewegungsmelder registriert das dan geht das Licht für 5 Minuten an und dann wieder aus
wenn ich ich jetzt beim Betreten des Raumes einen Schalter drücke soll das Licht angehen aber das quasi automatische Skript deaktiviert werden und das Licht "ewig" brennen
beim erneuten Schalter drücken soll das Licht aus gehen und das Skript wieder aktiviert werden
hoffe ich hab mich da verständlich ausgedrückt
geht das
Lg
-
Beim Schalter drücken eine Variable setzen z.B. vDeaktiviereAuto = true
und jegliche Timer/Intervalle welche das Licht wieder ausstellen löschen.
Bei der Logik die bei Bewegung aktiviert wird, also im Trigger der Bewegung einfach den Rest nur ausführen wenn vDeaktiviereAuto == false.Beim zweiten betätigen des Schalters einfach die Variable wieder auf false setzen.
Hierbei kommt es natürlich auf verschiedene Dinge an.
Ist der Lichtschalter smart? Ist eine smarte Birne verbaut oder schaltet z.B. nur ein Shelly die Lampe? Reagiert der Bewegungsmelder schon bevor man überhaupt an den Schalter kommen kann? Das muss alles beachtet werden, irgendwer hatte hier auch schonmal so ein Thema -
@Kaiser-Franz-Josef sagte in Skript quasi per Skript aktivieren / deaktivieren:
einen Schalter drücke soll das Licht angehen aber das quasi automatische Skript deaktiviert
Das geht recht einfach. Deine JS/Blocklys liegen alle in den Objekten (je nach Instanz und Ordnerstruktur) z.B. unter
javascript.0.scriptEnabled.common.xxxxxxx.xxxxx
Steht der DP auf true ist dein Skript enabled/startet/ist gestartet, setzt du ihn auf false wird das Skript disabled/angehalten.
-
@SBorg Ich kann technisch nicht wirklich erklären wieso, aber diverse Entwickler die Ahnung haben raten davon ab und eher zu einer Variable die so etw steuert.
-
@CruziX das ist ganz einfach, warum man scripte nie stoppen sollte, sondern Variablen benutzen:
a) Wenn ein Script angehalten ist, und es nicht mehr startet, dann funktioniert gar nichts mehr.
b) In der Übersicht deiner Scripte weisst du ja dann nie, ob ein Script absichtlich von dir selbst oder von einem anderen Script abgeschaltet wurde
c) Programmiertechnisch ist es echt sowas von simpel, mit Variablen zu arbeiten, gerade bei iobroker geht das doch einfach und auch Scriptübergreifend.Genau das Beispiel hier hatten wir schon oft genug, und es ist total simpel, hier ein Beispiel aus dem Forum, weiss nicht mehr, von wem das war:
-
@CruziX Das hängt davon ab wie dein Blockly aufgebaut ist. Viele setzten bspw. einfach nur einen Timeout. Der läuft aber beim beenden des Blocklys munter weiter. Startet man dann das Blockly neu kommt es uU. zu einem nicht sofort offensichtlichem Fehler. Deswegen sollte man vor dem setzen des Timeouts diesen sicherheitshalber immer löschen. So steht der auch wirklich auf Null (oder was auch immer) und nicht auf einem undefiniertem Restwert
-
@SBorg sagte in Skript quasi per Skript aktivieren / deaktivieren:
@CruziX Das hängt davon ab wie dein Blockly aufgebaut ist. Viele setzten bspw. einfach nur einen Timeout. Der läuft aber beim beenden des Blocklys munter weiter. Startet man dann das Blockly neu kommt es uU. zu einem nicht sofort offensichtlichem Fehler. Deswegen sollte man vor dem setzen des Timeouts diesen sicherheitshalber immer löschen. So steht der auch wirklich auf Null (oder was auch immer) und nicht auf einem undefiniertem Restwert
Ja klar, da stimme ich zu. Das gehört meistens mit zu der Verwendung von Timeouts/Intervallen, wenn diese erstellt werden -> sicherstellen, dass kein weiterer läuft
-
@ilovegym Würde ich eh immer so machen. War mir jetzt nur nicht sicher ob es wirklich technische Gründe hat.