NEWS
[Vorlage] Variable Zeitsteuerung mit VIS Editor
-
Zu den Bedingungen: Gab es zufällig eine kurzzeitige mehrfache Änderung der Bedingungen, so wie ein Flackern? Nicht, dass bestimmte Wartezeiten im Skript eine Analyse verzögert und dann vermeintlich ältere States auswertet.
Nein kein flattern bekannt, die Terrassentür wurde nur einmal geöffnet. ( Bedingung1 : Schloss auf / Bedingung 2: Tür auf )
-
@Glasfaser
Gerade geprüft: Ist zwischen 20:24 Uhr und 20:51 Uhr sicher nichts weiter im Log?
Um 20:24 Uhr werden die schedules gesetzt. Um 20:51 Uhr wurden keine neuen schedules gesetzt. Aber es hätten definitiv die alten gelöscht werden müssen. Das Löschen ist quasi ohne If-Bedingungen. Wenn schedule existent, dann löschen... Das ist bei dir anscheinend nicht passiert. Erklären kann ich mir das aber auch nicht.
Werde im Skript noch eine "else" Log-Ausgabe hinzufügen, um sowas besser nachzuvollziehen. Else zu "if (cronArr[scheduleNr])". -
Ich habe nur im Log diese beiden Meldungen , seitdem ich die Tür geöffnet habe.
-
Wenn ich daheim bin werde ich die oben genannte Bedingung "if (cronArr[scheduleNr])" überarbeiten. Die hat bei dir anscheinend nicht gegriffen.
Kannst evtl selbst testen mit: if (cronArr[scheduleNr] != null). Null vllt. groß schreiben. Habe noch eine andere Idee als workaround zur weiteren Absicherung, muss ich aber selbst machen. Nur blöd wenn die Ursache unbekannt ist. -
Ich kann es Simulieren , die Bedingungen werden nicht beachtet :
15:32 Uhr - Eine 3. Uhrzeit für runter um 15:36 Uhr erstellt
15:33 Uhr - Tür auf
15:34 Uhr - Bedingung wurde rot
15:35 Uhr - Rollladen fuhr runter15:36 Uhr - Tür zu gemacht , da Rollladen runter und Rollladen hochgefahren
15:38 Uhr - Bedingung wurde grün
15:38 Uhr - Neue Uhrzeit eingestellt für 15:41 Uhr
15:39 Uhr - Tür auf
15:40 Uhr - Bedingung wurde rot
15:41 Uhr - Rollladen fuhr runter und Rollladen wieder hochgefahren
////
15:50 Uhr - Eine 4. Uhrzeit für hoch um 15:56 Uhr erstellt
15:51 Uhr - Tür auf
15:52 Uhr - Bedingung wurde rot
14:56 Uhr - Rollladen fuhr hochhier der Log ab 15:30 Uhr
Nachtrag : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Sehr komisch !!!???????
habe Timer 3 und 4 gelöscht ,
dann zufällig bei Tür auf , also wo die zwei Bedingungen vorhanden sind ( Bedingung rot )16:51 Uhr - Uhrzeit für runter um 16:53 Uhr erstellt ( Timer 3 )
16:53 Uhr - Rollladen blieb oben ( Bedingung natürlich noch rot ) -
@GiuseppeS
Habe ein Nachtrag , siehe oben -
@Glasfaser
Es ist in den Logs genau sichtbar, dass das Löschen der Timer anscheinend nicht immer funktioniert.
Beim letzten Test ist das Löschen immer vorhanden, bevor eine Validierung stattfindet. Daher IO.
Bei den fehlerhaften Fällen werden die Timer nicht gelöscht, obwohl die Bedingungen den Trigger ausgeführt hatten.Es wird bei Änderungen der Bedingungen immer der korrekte Timer getriggert.
Eine erneute Erstellung wird auch immer vermieden wenn die Bedingungen insgesamt false sind.
Das aber vorliegende Löschen der Timer wird nicht durchgeführt. Wie oben erwähnt, werde ich die Abfrage, ob Timer xy vorhanden ist, anders gestalten. Aber zunächst muss ich schauen, dass ich den Fehler reproduzieren kann.Dein letzter Stand ist, dass ein Reproduzieren des Fehlers nicht immer klappt, oder?
Am Sonntag werde ich hoffentlich dazu kommen ein paar Tests durchzuführen.
-
@Glasfaser
Sehe glaub eine Systematik.Es gibt unterschiedliche Fälle, wie ein Timer (sowohl löschen als auch erstellen) getriggert wird:
- Durch Button in Vis Popup
- Tägliches Triggern über Cron in Funktion recalc
- Triggern über geänderte Bedingungen
Beim hier genannten letzten Fall läuft wohl was schief.
Als du den letzten Test gemacht hast, wurden zwischen Timer-Erstellung und gewünschter Timer-Ausführung die Bedingungen nicht geändert (waren dauerhaft false). Es funktionierte alles wie gewünscht.
Bei den NIO Fällen waren die Bedingungen der Trigger für die Schedules. Timer waren gesetzt und eine Änderung der Bedingungen sollte den Timer löschen, was aber nicht funktionierte.
Vielleicht kann ich was im Skript auf die schnelle finden.
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Dein letzter Stand ist, dass ein Reproduzieren des Fehlers nicht immer klappt, oder?
Wie ich oben beschrieben haben ist der Fehler immer Reproduzierbar.
Was komisch ist bei meinen Nachtragsanhang , das wenn die Tür auf ist also die Bedingungen vorhanden sind und ich den Timer ändere/bzw, einen neuen erstelle es wie oben beschrieben zu der eingestellten Uhrzeit auch der Rollladen nicht runterfährt. -
@Glasfaser
Ok, dann ist es wie in meinem letzten Post beschrieben und auf diese Art reproduzierbar.
Geänderte Bedingungen löschen nicht zuvor gesetzte Timer.
Werde schauen was ich finden kann... -
Mache in Ruhe …dich auf die suche ... wo der Fehler ist ,
ich habe mein Datenpunkt / Skript für den Terrassenrollladen erstmal wieder aktiviert wie vor deinen Änderungen im Skript , da ich ab morgen im Urlaub bin .War auch eine harte Nuss die ich dir zur Erweiterung des Skripts gegeben habe
-
@Glasfaser
Dieses ToDo hatte ich allerdings schon länger auf der Liste, aber mit mangelhafter Motivation
Aber keine Sorge, debuggen mach ich gern, auch wenn es bedeutet, dass zuvor etwas nicht perfekt lief -
@Glasfaser
Ich versuche gerade den Fehler zu reproduzieren, bisher erfolglos.Meine Vorgehensweise:
- Bedingung wäre erfüllt aber Timer ist noch inaktiv
- Timer wird aktiviert; schedule wird laut log erstellt da Bedingung erfüllt
- States werden verändert damit Bedingungen = false werden
- Im nächsten Cron-Durchlauf wird Änderung des States der Bedingung erkannt und Darstellung der Bedingung wird rot
-> schedule wird laut log gelöscht und nicht neu erstellt
Das entspricht doch deinen Tests wo es wiederholt nicht geklappt hat, oder?
Ich kann zwar gerade nichts am Skript testen aber zumindest das Reproduzieren wäre möglich...Edit:
Habe jetzt unterschiedliche Wege probiert.- Timer aktiviert / deaktiviert während Bedingung immer true war.
- Bedingung true / false während Timer dauerhaft Aktiviert war
- Test wie Original-Post aber Bedingung zunächst false, dann true und danach wieder false.
Kann den Fehler einfach nicht reproduzieren. Kannst du dein Original Skript hochladen?
In der Zwischenzeit grübel ich mal weiter. Morgen geht wieder der Flug gen Heimat, da gibt's genug Wartezeit -
Hier das Skript , nur der Name Device wurde auf RollladenTerrassentuer geändert und
setState("javascript.0.Timer.RollladenTerrassentuer.Editor.Device", "Timer.RollladenTerrassentuer.Editor.Verschluss", true); in den Gänsefüßchen RollladenTerrassentuer
-
@Glasfaser
Ich konnte nichts auffälliges in deinem Skript finden. Kann mir weiterhin nicht erklären wieso es bei dir dieses Verhalten gibt. Ich schau mal ob ich dein Skript ohne großen Aufwand bei mir zum Laufen bringen kann.Habe eben übrigens ein kleines Update des Skripts hochgeladen. Diesmal gezippt Datei, damit die Umlaute weiterhin passen.
Habe ein paar Kleinigkeiten angepasst (siehe Edit im Post 1).Kann bitte eine Person, die auch das Skript nutzt, testen ob die Bedingungen alle zum gewünschten Ergebnis führen: werden die Timer korrekt gesetzt bzw. gelöscht? Ich kann leider weiterhin nicht die Fehlerfälle von @Glasfaser reproduzieren.
Danke
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Kann bitte eine Person, die auch das Skript nutzt, testen ob die Bedingungen alle zum gewünschten Ergebnis führen: werden die Timer korrekt gesetzt bzw. gelöscht?
Skript aktualisiert,
Skript Fehler:javascript.0 2019-07-14 20:15:00.017 error at listOnTimeout (timers.js:263:5) javascript.0 2019-07-14 20:15:00.017 error at tryOnTimeout (timers.js:300:5) javascript.0 2019-07-14 20:15:00.017 error at ontimeout (timers.js:436:11) javascript.0 2019-07-14 20:15:00.017 error at Timeout._onTimeout (C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:501:7) javascript.0 2019-07-14 20:15:00.017 error at C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:543:11 javascript.0 2019-07-14 20:15:00.017 error at Job.invoke (C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:173:10) javascript.0 2019-07-14 20:15:00.017 error at Job.nodeSchedule.scheduleJob [as job] (C:\ioBroker\node_modules\iobroker.javascript\lib\sandbox.js:1191:34) javascript.0 2019-07-14 20:15:00.017 error at Object.compareCond (script.js.Sigi.Timer_Licht:71:30) javascript.0 2019-07-14 20:15:00.017 error at JSON.parse (<anonymous>:null:null) javascript.0 2019-07-14 20:15:00.017 error Error in callback: SyntaxError: Unexpected end of JSON input javascript.0 2019-07-14 20:15:00.014 info script.js.Test.Countdown_Datum: NaN Resttage (NaN Wochen) bis zum (Sigi) javascript.0 2019-07-14 20:14:00.007 info script.js.Test.Countdown_Datum: NaN Resttage (NaN Wochen) bis zum (Sigi) javascript.0 2019-07-14 20:14:00.005 error at Timer.processTimers (timers.js:223:10) javascript.0 2019-07-14 20:14:00.005 error at listOnTimeout (timers.js:263:5) javascript.0 2019-07-14 20:14:00.005 error at tryOnTimeout (timers.js:300:5) javascript.0 2019-07-14 20:14:00.005 error at ontimeout (timers.js:436:11) javascript.0 2019-07-14 20:14:00.005 error at Timeout._onTimeout (C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:501:7) javascript.0 2019-07-14 20:14:00.005 error at C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:543:11 javascript.0 2019-07-14 20:14:00.005 error at Job.invoke (C:\ioBroker\node_modules\iobroker.javascript\node_modules\node-schedule\lib\schedule.js:173:10) javascript.0 2019-07-14 20:14:00.005 error at Job.nodeSchedule.scheduleJob [as job] (C:\ioBroker\node_modules\iobroker.javascript\lib\sandbox.js:1191:34) javascript.0 2019-07-14 20:14:00.005 error at Object.compareCond (script.js.Sigi.Timer_Licht:71:30) javascript.0 2019-07-14 20:14:00.005 error at JSON.parse (<anonymous>:null:null) javascript.0 2019-07-14 20:14:00.005 error Error in callback: SyntaxError: Unexpected end of JSON input javascript.0 2019-07-14 20:13:22.994 error at Timer.processTimers (timers.js:223:10) javascript.0 2019-07-14 20:13:22.994 error at listOnTimeout (timers.js:263:5) javascript.0 2019-07-14 20:13:22.994 error at tryOnTimeout (timers.js:300:5) javascript.0 2019-07-14 20:13:22.994 error at ontimeout (timers.js:438:13) javascript.0 2019-07-14 20:13:22.994 error at Timeout._onTimeout (C:\ioBroker\node_modules\iobroker.javascript\lib\sandbox.js:1886:34) javascript.0 2019-07-14 20:13:22.994 error at Object.main (script.js.Sigi.Timer_Licht:820:5) javascript.0 2019-07-14 20:13:22.994 error at createConditionsJSON (script.js.Sigi.Timer_Licht:48:50) javascript.0 2019-07-14 20:13:22.994 error Error in callback: TypeError: Cannot read property 'common' of null javascript.0 2019-07-14 20:13:22.993 warn Object "enum.functions.timerconditions" does not exist
-
@sigi234
Die Aufzählung "timerconditions" existiert bei dir nicht. Daher diese Fehler.
Auf welcher Version warst du? Noch die ohne variable Bedingungen?
Dann wäre es auch wichtig das Popup-View einzulesen. Außerdem wäre es wichtig die States alle zu löschen.- Skript stoppen
- PopUp View importieren
- Alle Objekte unter javascript.0.timer löschen
- Aufzählung "timerconditions" erstellen und states für die Bedingungen reinziehen, z.B. sowas wie AtHome was jeder in ähnlicher Form nutzt
- Skript neu starten (2 Mal)
Falls du die Bedingungen nicht nutzen willst, kannst du auch einfach wieder das alte Script weiternutzen.
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Falls du die Bedingungen nicht nutzen willst, kannst du auch einfach wieder das alte Script weiternutzen.
Hab ich jetzt nicht mehr.............
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Aufzählung "timerconditions" erstellen und states für die Bedingungen reinziehen, z.B. sowas wie AtHome was jeder in ähnlicher Form nutzt
Wie genau?
-
@sigi234
Du hast doch eine Aufzählung, worin alle Rollläden drin stehen.
Jetzt muss eine neue Aufzählung erstellt werden. Kannst du nennen wie du magst. Hier sollten Objekte/States rein kommen, die als Bedingung für die spätere Ausführung der Timer genutzt werden sollen.
Hast du Türkontakte? Die wären z.B. sinnvoll.
Den Namen der neuen Aufzählung gibst du oben im Script an. So wie du es mit den Rollläden auch gemacht hattest.Wenn noch etwas unklar ist, bitte genau beschreiben was unklar ist.