Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Vorlage] Variable Zeitsteuerung mit VIS Editor

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Variable Zeitsteuerung mit VIS Editor

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mic
      Mic Developer last edited by

      Passt 🙂 Habe oben meine Nachricht noch korrigiert und ergänzt...

      Glasfaser 1 Reply Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @Mic last edited by Glasfaser

        @Mic

        Danke für die Tipps , kann man immer gebrauchen 😐

        1 Reply Last reply Reply Quote 0
        • G
          GiuseppeS last edited by

          Update ist raus: 15.09.2019 v2

          • Log-Ausgabe wird über Variable "logPraefix" manipuliert. Default-Wert = "Timer: ", was somit der aktuellen Ausgabe entspricht.
          1 Reply Last reply Reply Quote 1
          • A
            ak1 last edited by

            Ich möchte nochmal zu dem Thema „Anwesenheitssimulation“ nachhaken.
            Ich habe beispielsweise einen Timer, der an Wochentagen um 06:05 +- 3 Min (Zufall) das Licht im Bad einschaltet. Ein zweiter Timer schaltet es dann gegen 06:25 (wieder +- ein paar Minuten) aus.
            Das funktioniert soweit problemlos und passt auch für viele Monate im Jahr. Allerdings gibt es eine Zeit im Sommer, da ist der Sonnenaufgang so früh, da würde man gar kein Licht anschalten. Hat jemand einen Ansatz, wie man ggf. Bedingungen gestalten kann, die z.B. Die aktuelle Zeit und Astro-Zeiten berücksichtigen?
            Möglicherweise denke ich ja auch viel zu kompliziert.

            VG
            ak1

            G 1 Reply Last reply Reply Quote 0
            • G
              GiuseppeS @ak1 last edited by

              @ak1
              Ich würde ein Object namens Daylight erstellen, dass true bzw false in Abhängigkeit der Astro Zeit aufweist.
              Wenn Uhrzeit zwischen sunrise und sunset = true
              Ansonsten false.
              Dieses Object dann als weitere Bedingung in Timer einbinden.

              1 Reply Last reply Reply Quote 0
              • A
                ak1 last edited by

                @GiuseppeS
                Das klingt gut und logisch. Ein Skript würde dann den Wert dieses Objektes setzen. Was wäre ein geeigneter Trigger, um so ein Skript auszulösen? Oder müsste das Skript einfach zyklisch alle paar Minuten laufen lassen?

                G Glasfaser 2 Replies Last reply Reply Quote 0
                • G
                  GiuseppeS @ak1 last edited by GiuseppeS

                  @ak1
                  Würde selbst alle 5 Minuten triggern. Dadurch hat man zwar eine größere Abweichung zwischen Object und Realität aber mir würde es genügen.

                  Edit:
                  Hatte hier alternativ eine weitere Lösung beschrieben. Aber war eher unnötig kompliziert. Falls schon gelesen, bitte ignorieren.

                  1 Reply Last reply Reply Quote 0
                  • Glasfaser
                    Glasfaser @ak1 last edited by

                    @ak1 sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

                    ….Hat jemand einen Ansatz, wie man ggf. Bedingungen gestalten kann, die z.B. Die aktuelle Zeit und Astro-Zeiten berücksichtigen?
                    ….

                    Ganz einfach …. nimm dieses Skript/Datenpunkte , als Bedingung :
                    .
                    1.JPG

                    .
                    Skript:

                    // Astro im VIS anzeigen und Datenpunkt true/false setzen
                    
                    schedule('* * * * *', getAstroValues );  // 
                    var idSunset =  'javascript.0.Astrovis.sunset';
                    var idSunrise =  'javascript.0.Astrovis.sunrise';
                    var idSunriseEnd =  'javascript.0.Astrovis.sunriseEnd';
                    var idDusk =  'javascript.0.Astrovis.dusk';
                    var idgoldenHourEnd =  'javascript.0.Astrovis.goldenHourEnd';
                    
                    
                    var idAstro_Sunset =  'javascript.0.Astrovis.Astro_Sunset';
                    var idAstro_SunriseEnd =  'javascript.0.Astrovis.Astro_SunriseEnd';
                    var idAstro_Sunrise =  'javascript.0.Astrovis.Astro_Sunrise';
                    var idAstro_Dusk =  'javascript.0.Astrovis.Astro_Dusk';
                    var idAstro_GoldenHourEnd =  'javascript.0.Astrovis.Astro_GoldenHourEnd';
                    
                    createState(idSunrise, {type: 'string',name: 'Sonnenaufgang', def: ''});
                    createState(idSunriseEnd, {type: 'string',name: 'Sonnenaufgangende', def: ''});
                    createState(idSunset , {type: 'string',name: 'Sonnenuntergang', def: ''});
                    createState(idDusk , {type: 'string',name: 'Sonnenuntergangspät', def: ''});
                    createState(idgoldenHourEnd , {type: 'string',name: 'goldenHourEnd', def: ''});
                    
                    
                    createState(idAstro_Sunset , {type: 'mixed',name: 'Astro_Sunset', def: 'false'});
                    createState(idAstro_SunriseEnd , {type: 'mixed',name: 'Astro_SunriseEnd', def: 'false'});
                    createState(idAstro_Sunrise , {type: 'mixed',name: 'Astro_Sunrise', def: 'false'});
                    createState(idAstro_Dusk , {type: 'mixed',name: 'Astro_Dusk', def: 'false'});
                    createState(idAstro_GoldenHourEnd , {type: 'mixed',name: 'Astro_GoldenHourEnd', def: 'false'});
                    
                    
                    function getAstroValues() {
                     //setState(idSunrise, getAstroDate("sunrise").toLocaleTimeString() );
                     setState(idSunriseEnd, getAstroDate("sunriseEnd").toLocaleTimeString('de-DE', { hour12: false }));
                     setState(idSunset, getAstroDate("sunset").toLocaleTimeString('de-DE', { hour12: false }));
                     setState(idDusk, getAstroDate("dusk").toLocaleTimeString('de-DE', { hour12: false }));
                     setState(idgoldenHourEnd, getAstroDate("goldenHourEnd").toLocaleTimeString('de-DE', { hour12: false }));
                     setState(idSunrise, getAstroDate("sunrise").toLocaleTimeString('de-DE', { hour12: false }));
                    
                    
                    }
                    
                    // jede Nacht um 2:02 aktualisieren
                    schedule('2 2 * * *', getAstroValues );
                    
                    
                    // Test - Direktausführung
                    getAstroValues();
                    

                    1 Reply Last reply Reply Quote 0
                    • A
                      ak1 last edited by

                      @GiuseppeS
                      @Glasfaser

                      Vielen Dank! Das war wieder sehr hilfreich.

                      VG
                      ak1

                      1 Reply Last reply Reply Quote 0
                      • A
                        ak1 last edited by ak1

                        Hallo zusammen,

                        wie bekomme ich das repariert?

                        2019-10-02 21:03:00.011 warn at Timer.processTimers (timers.js:223:10) javascript.1
                        2019-10-02 21:03:00.011 warn at listOnTimeout (timers.js:263:5) javascript.1
                        2019-10-02 21:03:00.011 warn at tryOnTimeout (timers.js:300:5) javascript.1
                        2019-10-02 21:03:00.011 warn at ontimeout (timers.js:438:13) javascript.1
                        2019-10-02 21:03:00.011 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1856:34) javascript.1
                        2019-10-02 21:03:00.011 warn at Object.<anonymous> (script.js.common.Anwesenheitssimulation.AS_Bad:54:11) javascript.1
                        2019-10-02 21:03:00.011 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1276:20) javascript.1
                        2019-10-02 21:03:00.009 warn State "control.0.presence_abscence.AS_Bad_2" not found
                        

                        Es gibt den State/das Objekt "AS_Bad_2" nicht mehr. Es gibt auch keinen Timer mehr dazu und auch kein Überbleibsel in der Aufzählung "Timers".
                        Allerdings hatte ich den Fehler gemacht, entsprechende Timer zu löschen, dann das Objekt zu entfernen und anschließend das Zeitsteuerungsskript neu zu starten. Erst dann ist mir aufgefallen, dass ich noch eine "AS_Bad_2"-Leiche in der Aufzählung habe.

                        Ich dachte ich hätte nun alles korrigiert, aber diese Warnung taucht immer wieder auf.

                        Kann ich das irgendwo bereinigen?

                        Danke und Gruß
                        ak1

                        sigi234 1 Reply Last reply Reply Quote 0
                        • sigi234
                          sigi234 Forum Testing Most Active @ak1 last edited by

                          @ak1 sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

                          javascript.1

                          Hast du 2 JS?

                          A 1 Reply Last reply Reply Quote 0
                          • A
                            ak1 @sigi234 last edited by

                            @sigi234
                            Ja, habe ich. Auf dem Adapter .0 läuft normalerweise alles, was schon "produktiv" ist. Auf .1 laufen die Skripte, an denen ich noch am Basteln bin.

                            sigi234 1 Reply Last reply Reply Quote 0
                            • sigi234
                              sigi234 Forum Testing Most Active @ak1 last edited by

                              @ak1 sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

                              @sigi234
                              Ja, habe ich. Auf dem Adapter .0 läuft normalerweise alles, was schon "produktiv" ist. Auf .1 laufen die Skripte, an denen ich noch am Basteln bin.

                              Leg den DP noch mal an.

                              control.0.presence_abscence.AS_Bad_2

                              A 1 Reply Last reply Reply Quote 0
                              • A
                                ak1 @sigi234 last edited by

                                @sigi234
                                Habe ich jetzt nochmal gemacht. Ich habe ihn auch in "Timers" Aufzählung aufgenommen.
                                Mal sehen, ob sich die Warnung irgendwann wiederholt. Ich meine, sie kam bislang nur einmal täglich.

                                Noch als Hintergrundinformation: Ich benutze die Zeitsteuerung ja für eine Anwesenheitssimulation. Und ich möchte da durch die Timer nicht unmittelbar Lampen schalten. Vielmehr schalte ich von mir angelegte Objekte/States, die dann wieder mein Skripte für Küche, Bad, ... triggern. Das gibt mir mehr Flexibilität und funktioniert eigentlich sehr gut.

                                1 Reply Last reply Reply Quote 0
                                • G
                                  GiuseppeS last edited by GiuseppeS

                                  @ak1
                                  Wenn Du ein Gerät über die Vis löschst (d.h. alle Timer löschen), dann wird das Gerät auch aus dem Haupt JSON gelöscht.
                                  Beim jedem Neustart des Scripts wird die hinterlegte Aufzählung durchlaufen, wenn vermeintlich neue Geräte in der Aufzählung vorhanden sind, werden diese Geräte mit den beiden Default Timer erstellt. War das bei dir auch der Fall oder wurde aufgrund der Leiche schon mit Fehlern abgebrochen? Hätte mMn noch stattfinden müssen.
                                  Ansonsten mal TimerJSON hier anfügen. Dann kann man da noch rein schauen.

                                  Nachdem du den Fehlerfall hattest, hast du mal den PC neu gestartet? Würde ich empfehlen, manchmal laufen irgendwelche alten fehlerhaften Codes im JS wenn nicht neu gestartet wird. Liegt vllt an der JS Sandbox Funktionalität. Der User Glasfaser hatte zumindest auch schonmal merkwürdiges Verhalten, was mit Neustart behoben wurde.

                                  Glasfaser 1 Reply Last reply Reply Quote 0
                                  • Glasfaser
                                    Glasfaser @GiuseppeS last edited by

                                    @GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

                                    Nachdem du den Fehlerfall hattest, hast du mal den PC neu gestartet? Würde ich empfehlen, manchmal laufen irgendwelche alten fehlerhaften Codes im JS wenn nicht neu gestartet wird. Liegt vllt an der JS Sandbox Funktionalität.

                                    Da kann ich ein Liedchen von singen …. Link Text

                                    Der User Glasfaser hatte zumindest auch schonmal merkwürdiges Verhalten, was mit Neustart behoben wurde.

                                    Jipp … der Tip war 👍

                                    1 Reply Last reply Reply Quote 0
                                    • A
                                      ak1 last edited by

                                      Besten Dank für die Hinweise. Im Timer JSON war keine Spur von AS_Bad_2 zu finden. Aber wie gesagt, ich habe jetzt den besagten Datenpunkt nochmal angelegt. Das Skript hat ihn beim Neustart auch ordentlich gefunden. Außerdem habe ich meine ioBroker-(virtuelle)-Maschine neu gestartet. Ich bin mir tatsächlich nicht sicher, ob ich das vorher gemacht hatte.
                                      Jetzt warte ich erstmal, dann lösche ich die beiden Standardtimer für AS_Bad_2, nehme den Datenpunkt aus der Aufzählung, lösche den Datenpunkt und starte dann das Skript nochmal. Ich hoffe, dass dann AS_Bad_2 nicht mehr als Zombie umhergeht 😉

                                      1 Reply Last reply Reply Quote 0
                                      • G
                                        GiuseppeS last edited by

                                        Nur ein kleiner Hinweis bzgl. Sommerzeit/Winterzeit:

                                        Astro-Zeiten wurden laut Vorlage immer um 15:05 Uhr neu berechnet und um 15:10 Uhr mit Funktion recalc() verwendet. Diese Zeiten stehen in den Zeilen 481/482.

                                        Heute Morgen hatte es den Nachteil, dass die oft genutzten Sunrise Zeiten noch in Sommerzeit waren. Bitte die Zeiten in den Zeilen 481/482 anpassen. Mit 4:00 Uhr und 4:01 Uhr sollte nichts mehr schief gehen:

                                            // Astro-Zeiten werden täglich aktualisiert, anschließend neu Berechnung der Timer
                                            schedule('0 4 * * *', setAstro);
                                            schedule('1 4 * * *', recalc);
                                        

                                        Im ersten Post habe ich das bereits angepasst. Weiterhin viel Spaß mit dem Skript.

                                        Glasfaser 1 Reply Last reply Reply Quote 1
                                        • Glasfaser
                                          Glasfaser @GiuseppeS last edited by

                                          Skripte wurden geändert …

                                          @GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

                                          ….. Weiterhin viel Spaß mit dem Skript.

                                          Funktioniert super …… Danke .

                                          1 Reply Last reply Reply Quote 0
                                          • dbweb
                                            dbweb last edited by

                                            Absolut super das script, sehr brauchbar, vielen Dank für deine Arbeit! Müsste eigendlich ein Adapter sein, Zeitschaltungen braucht doch fast jeder für sein SmartHome, gibt es Bestrebungen in die Richtung?

                                            Eine kleine Frage hätte ich noch:
                                            Wäre es möglich, das Überwachen einer Bedingung einzubauen? D.h. wenn wegen einer Bedingung nicht geschaltet wird, die Bedingung dann aber wegfällt und noch geschaltet sein sollte, er nachträglich noch schaltet?
                                            Also z.B. Rollladen soll von 15-17 Uhr geschlossen sein, wird aber nicht da um 15Uhr die Türe offen ist. Um 15:30 Uhr wird die Türe geschlossen, und Rolladen soll dann runterfahren.
                                            Hab das bisher über ein zusatzscript und Datenpunkt mit "sollzustand" gelöst den ich jeweils prüfe, finde ich aber etwas unschön, da ich dann ja die Bedingung gleich weglassen könnte.

                                            G 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            874
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            template vis
                                            47
                                            919
                                            233822
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo