NEWS
[Vorlage] Variable Zeitsteuerung mit VIS Editor
-
@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.
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Du hast doch eine Aufzählung, worin alle Rollläden drin stehen.
Nimm ja die Funktion Licht (Hue).......egal, ich mache alles mal neu.
-
@sigi234
Die Aufzählung "Licht" ist bei dir für das, was du steuern möchtest.Du musst im Skript ein paar Zeilen darunter noch eine weitere Aufzählung angeben. Bei mir heißt die "timerconditions". Diese Aufzählung ist für die Bedingungen, die man Hinterlegen kann.
Im ersten Post steht auch nochmal alles beschrieben.
-
vielen Dank für das Bereitstellen deines Timers. Da steckt eine Menge Arbeit dahinter, wenn man die Menge an Codezeilen und die VIS Views genauer betrachtet.
Das ist nicht selbstverständlich, dass jemand sowas einfach so bereit stellt. Tolle Arbeit und sehr professionell gelöst.!Ich habe die aktuellste Version getestet und bin genauso vorgegangen, wie du es im ersten Poste beschrieben hast. Es funktioniert alles einwandfrei.
Eine Bedingung habe ich für meine Terrassentüre ( Xiaomi Türsensor ) auch erfolgreich getestet. Ich kann die Probleme, die Glasfaser hatte nicht nachvollziehen.Wenn ich mir noch was wünschen würde, dann zusätzlich einen Offset in Sekunden definieren zu können.
Ich möchte z.B. meine Rollläden im 5 s Takt nacheinander schalten können. -
@K_o_bold
Danke für deine Tests. Falls dir noch was auffallen sollte, einfach melden.Werde schauen, dass ich folgende Punkte zeitnah integrieren kann:
- Offset mit 5s, 10s, 15s usw.
- Reihenfolge der Geräte in Tabelle über Reihenfolge in "javascript.0.Timer.Devices.Editor.DropDownDevice" editierbar.
Wenn Reihenfolge für Dropdown geändert wird, dann ändert sich auch die Reihenfolge in der Tabelle. Werde dafür das Dropdown-State eine Ebene höher ziehen (nicht unter "Editor").
-
@GiuseppeS
(So... Urlaub leider zu Ende .)Habe dein neues Skript auf meine Bedürfnisse geändert.
Sieht sehr gut aus !!
Alle Bedingungen / Simulationen habe ich wie schon oben Beschrieben genauso auf dein neues überarbeitetes Skript angewandt und es läuft wie es sein soll.
Deine neu eingesetzt Debug Option habe ich mal für mich aktiviert.
Im Log werden auch alle Bedingungen / Schedule protokolliert..Ich werde es dann mal einige Tage einen Dauertest unterziehen .
-
@Glasfaser
Willkommen zurück aus dem Urlaub. Viel Spaß beim Testen. Wenn dir was auffällt, einfach Bescheid geben. Lass den Debug-Switch an, bis du sicher bist dass alles läuft. Betrifft zwar aktuell nur eine Ausgabe (werde bei der nächsten Version weitere als debug drin haben) aber die wäre wichtig für deine letzten Fehlerfällen. -
Habe heute ein kleines Update erstellt:
Die Reihenfolge der Timer innerhalb der Tabelle kann nun über das folgende DropDown State verändert werden:
javascript.0.Timer.Devices.DropDownDevice
Bitte achtet dabei, dass die Semikolons weiterhin korrekt gesetzt sind:
z.B. wird aus"Schlafz.;Balkon_Li;Balkon_Re;Esstisch;Kueche;Bad;Kinderz."
dann
"Schlafz.;Balkon_Li;Balkon_Re;Esstisch;Kueche;Kinderz.;Bad"
Somit sind die letzten beiden Einträge vertauscht. Die Einträge in dieser Liste dienen nicht dazu, die Namen innerhalb der Tabelle zu ändern!
Dieser State bestand eigentlich im Unterordner Editor, aber ich habe ihn eine Ebene höher geholt, damit es leichter zu finden ist.
Bitte beachten, dass die Verlinkung innerhalb der VIS angepasst werden muss, wenn nun das Skript geupdated wird:Wer ein Ordnungs-Fanatiker ist, kann genau das alte State im Unterordner "Editor" löschen. Dieser hat keine Funktion mehr:
javascript.0.Timer.Devices.Editor.DropDownDeviceNicht jedermann ist ein Fan von Log-Ausgaben, die können nun komplett abgestellt werden (stdLog und debugLog auf false setzen).
Offene Punkte für zukünftige Updates:
• Ausführung des nächsten Timers in Objekt ausgeben. Objekt kann dann individuell in der VIS ausgegeben werden.
• 5s, 10s, 15s und 30s als mögliche Offsets rein nehmen, zusätzlich zu den Minuten