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.
    • G
      GiuseppeS @smartboart last edited by

      @smartboart
      Jetzt hab ich es erst gesehen. Dein State Condition1 ist leer. Deshalb die Fehlermeldung. Es gibt ein Trigger im Skript, sobald etwas bei den Bedingungen eingegeben wird, muss ein String erstellt und anschließend evaluiert werden. So schaut der Trigger aus:

          on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
              var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
              var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
              var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
              var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
              var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
              setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
              if (Cond1State != "" && Cond1Comp != "" && Cond1Value != "") {
                  setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
              }
          });
      

      Passt hier evtl etwas nicht mit deiner JavaScript Instanz 1 statt 0? Hast du oben im Trigger das angepasst? Hatte ich ursprünglich aus Blockly übernommen, deshalb ist es mit Regexp statt Array...

      smartboart 2 Replies Last reply Reply Quote 2
      • smartboart
        smartboart @GiuseppeS last edited by smartboart

        @GiuseppeS ahhhhhh!!!!Du bis spitze........ja den hab ich übersehen.....klar....hatte einfach über die suchfunktion alles mit javascript.0 ersetzt gegen javascript.1....das javascript\.0\.Timer\ ist mir natürlich durch die lappen gegangen..... Sorry sorry
        Danke euch beiden für die Geduld...

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

          @GiuseppeS Richtig tolles Script!
          Damit kann ich mal locker 15 - 20 Scripte von mir einsparen

          Ist noch geplant über die Bedingungen abschalten zu lassen? Also entweder wie jetzt nach zeit und bedingung erfüllt und vor erreichen der Zeit wenn Bedingung erfüllt?
          Das wäre das i Tüpfelchen...
          EDIT: und noch ein paar bedingungen Zusätzlich...

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

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

            .......ja den hab ich übersehen.

            Na ... dann ist ja gut das der Fehler behoben ist 😉

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

              @smartboart

              Geplant ist es nicht, dass rein über Bedingungen geschaltet wird. Da gäbe es einfach zu viele verschiedene Wünsche bzw Abhängigkeiten. Dann wäre dieses Skript ein Ersatz für Blockly. Einfache "wenn dies, dann tu jenes" ist mit Blockly auch schnell erledigt und Bedarf keiner Editierung in VIS. Dieses Skript hatte ich ursprünglich erstellt, um die Uhrzeiten meiner Rollläden schnell über VIS anzupassen, dann kamen Bedingungen hinzu und zum Schluss die verzögerte Ausführung.

              Aktuelle Planung für Updates:

              • Bei verzögerte Ausführung aufgrund nachträglich erfüllter Bedingungen, auch Random optional beachten.
              • auch wenn das Skript mehrfach genutzt wird, wird das Editor-View nur einmalig verwendet. Mehrfachnutzung somit vereinfacht.
              • Aufgrund heutiger Erfahrung: Instanz von JavaScript wird im Skript automatisch übernommen 😉 (Views müssten dennoch angepasst werden)

              Letzten Punkt mache ich noch rein, die ersten Beiden sind bereits umgesetzt und ausgetestet.

              Bzgl. weiterer Bedingungen, d.h. mehr als drei:
              Grundsätzlich sehr einfach erweiterbar. Aber mir ging der Platz im PopUp Menü aus 😂. Ich nutze diese Tabelle auf dem Smartphone und mehr als drei Bedingungen bekomme ich nicht unter.

              Ein Gedanke mit dem ich spiele: Editor in HTML umsetzen. Bedeutet, dass die eigentliche Tabelle zum Editor wird, aber das wird sehr umfangreich im Code. Daher überlege ich noch...

              Ansonsten, bei Ideen, einfach melden. Wenn's mit den drei Bedingungen öfters hakt, kann ich mir da noch was einfallen lassen. Evtl. hat ein anderer User auch ein Schmerz mit nur drei Bedingungen?

              @Glasfaser
              Deine Unterstützung bei Problemfällen ist einzigartig 👍

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

                @GiuseppeS

                Danke ...gebe nur Vorlagen 😉 ..... den Rest kannst du machen 😁

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

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

                  Wenn's mit den drei Bedingungen öfters hakt, kann ich mir da noch was einfallen lassen. Evtl. hat ein anderer User auch ein Schmerz mit nur drei Bedingungen

                  Danke für die Ausführungen... Ich melde mich schon mal für weitere Bedingungen...

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

                    Haette noch ne Idee... In meinen Scripten verabeite ich Bedingungen auch innerhalb einer Zeitspanne.. Is time in range... Ist ein globales Script hier aus dem forum... Waere das nicht noch was für die Zeitsteuerung? Also wenn Zeit in Bereich und Bedingungen erfüllt wird geschaltet...

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

                      @smartboart
                      Grundsätzlich wäre es schon möglich; Beispiel:

                      Zeitspanne 18 bis 19h, Licht einschalten wenn niemand daheim.

                      Timer 1 um 18h einschalten, Bedingung: nichtDaheim==true, Timer merken

                      Timer 2 um 19h, Licht ausschalten.

                      Wenn Timer 2 ausgeführt wird, obwohl Timer 1 noch im Hintergrund auf gültige Bedingung wartet, wird Timer 1 aus dem Hintergrund gelöscht.

                      Nachteil hierbei ist: Gerät wird definitiv mit Timer 2 gesetzt, An oder Aus (z.B.).

                      Abhilfe: Könnte bei Sollwerten "Reset" hinzufügen. Dieser würde nur einen evtl gemerkten Timer löschen, aber das Gerät an sich würde nicht geschaltet werden.

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

                        @GiuseppeS ja... Oder... Ein zusätzlichen state für die aktivierung Zeit in Bereich Auswahl im setup menue.. Wenn der aktiv geschaltet wird, wird die das "bis Zeit setup" sichtbar und die Funktion Zeit in Bereich aktiv also vorhandener timer wird zu start Zeit und zusätzlicher zu Endzeit... Werden die Bedingungen nicht erfüllt innerhalb dessen, schaltet eben nix..Eine zusätzliche aus Programmierung würde einfach ins leere abgesetzt... Kann man aber mit dem zu schaltenden aktor mit sich selbst verriegelt, wenn man das moechte
                        .. Also wenn ein dann aus...

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

                          @smartboart
                          Grundsätzlich verstehe ich deinen Ansatz, allerdings müsste ich in diesem Fall sehr viel erweitern + beachten.

                          Ende der Zeitspanne: hier müsste auch Astro und manuelle Angabe möglich sein. Wenn das Ende erst am Folgetag stattfindet, wird's komplizierter.

                          Ein größeres Problem ist die VIS: wohin mit dem Switch, den drei Zeit-Eingabefeldern + zugehörigem Text?
                          Außerdem ist die Größe des PopUps nicht dynamisch, d.h. der Platz für die Eingaben der Zeitspannen muss immer vorgehalten werden. Ich habe gesehen, du hast es mit einem vollständigem View umgesetzt, da hast du natürlich mehr Platz.

                          Wie weiter oben erwähnt, kann ich anbieten, den Sollwert "Reset" hinzuzufügen, der den Hintergrund-Timer ausschließlich löscht ohne dass ein Sollwert an das Gerät gesendet wird. Wenn das für dich in Frage kommt, kurze Rückmeldung. Wenn du hierbei eher blockly nutzen willst, passt es aber auch 😉

                          Gestern hatte ich mal recherchiert, wie Dropdown Menüs und Zeiteingaben direkt in html umgesetzt werden können. Denke, dass ich mittelfristig das zusätzliche View mit dem Editor entfallen lassen könnte. Aber das muss ich noch austesten. Idee: Die Timer-Tabelle wird dann vollständig zum Editor. Alternative Idee: der Editor wird unterhalb des zu editierenden Timers als zusätzliche 2-3 Zeilen eingeblendet. Html ist aber bei mir viel try-and-error. Muss schauen wie ich es seitens Code integrieren kann.
                          Jedenfalls könnte man mit dem html Editor mehr dynamisch unterbringen, dann können wir das Thema "Zeitspanne" nochmal bereden 😉

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

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

                            blockly nutzen willst, passt es aber auch

                            Blocky benutze ich nicht , schreibe meine Skripte mit javascript...Den Vorschlag den Timer zu merken und bei erfüllung der Bedingungen zu schalten finde finde ich aber gut!Ja ich schalte meine views mittels state um, und habe den Konfigurator als view realisiert.Dadurch habe ich natürlich gut reden, weil jede menge platz...
                            Screenshot_20200716_123305_de.ozerov.fully.jpg

                            dasmit dem XML ist ne super idee, aber mich stört die konfiguration über pop up nicht...im gegenteil finde das sogar übersichtlicher..Ist für mich also nicht so relevant...
                            wenn ich 3 Wünsche frei hätte würde ich

                            1. weitere Bedingungen wählen

                            2. Timer merken und bei Erfüllung der Bedingung schalten. Mit dem nächsten Ausbefehl den merker zurück setzen.

                            3. sind doch nur 2 🙂

                            1 Reply Last reply Reply Quote 1
                            • M
                              mhtl last edited by

                              Weitere Bedingungen würde ich auch nutzen.

                              Danke für das tolle Script!

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

                                Neues Update ist hochgeladen:

                                Changelog 16.07.2020 (Skript + Main-View + Editor-View)

                                • Selbes Editor-View (PopUp) für mehrer Timer nutzbar! State-Verlinkungen geändert!
                                • Neue Variable definiert: bgTimerWithRandom (optional) => Random-Minuten auch für gemerkte Timer nutzen?
                                • Instanz wird im Skript dynamisch gesetzt. Skript in Javascript-Instanz ">0" lauffähig!
                                • Sollwert-DropDown wurde mit "Reset" erweitert. Im Hintergrund befindliche Timer (gemerkt) können durch diese Sollwert-Vorgabe im nachfolgenden Timer gelöscht werden. Gerät wird nicht aktiv mit Sollwert "Reset" gesteuert.
                                • Im Mainview State-Verlinkungen zu den drei Buttons "ADD", "DEL" und "EDIT" geändert.

                                Für ein manuelles Update wird folgendes Vorgehen empfohlen:

                                • Editor-PopUp neu importieren mit Namen "cardTimerEditor"
                                • Alte Editor-Views können gelöscht werden
                                • Drei Buttons im Mainview neu importieren (State-Verlinkungen geändert, auch Bedingungen in Sichtbarkeit). Die einzelnen drei Widgets können hier unten im Post separat geladen werden. Bei neuem Import, bitte beachten, dass die EDITOR-Button Widget-ID im Skript ggf. aktualisiert werden muss.
                                • Folgende gelb markierte States können gelöscht werden:
                                  ManUpdateTimer_DelStates.png

                                Widgets.zip


                                Idee für das nächste Update

                                • Editor-PopUp entfällt in VIS. Für die Timer-Editierung wechselt die Timer-Tabelle ihren html Inhalt in eine Editor-Ansicht. Somit entstehen ganz neue dynamische Möglichkeiten; temporär nicht genutzte Felder entfallen komplett, Anzahl Bedingungen dynamisch über "+" erweiterbar (bis 5 oder 6 Stück) und wer weiß was mir noch einfällt.
                                • Optional wird es möglich sein, dennoch ein PopUp zu nutzen (PopUp-Inhalt = 1 HTML Widget). Grund: Wenn die Split-Ansicht genutzt wird (z.B. User Glasfaser), wird im Tabellen-Widget nicht genug Platz vorhanden sein.

                                Die Umsetzung wird etwas Zeit in Anspruch nehmen. Zunächst den Roh-HTML Code austesten, dass der Editor nach was ausschaut und im zweiten Step diesen Code generisch im Skript erstellen lassen...

                                smartboart Glasfaser sigi234 3 Replies Last reply Reply Quote 3
                                • smartboart
                                  smartboart @GiuseppeS last edited by

                                  @GiuseppeS Wahnsinn... Bist ja schneller als die Polizei erlaubt... Top!!! 👍 👍 👍
                                  Werde es testen wenn ich wieder am PC sitze...

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

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

                                    Grund: Wenn die Split-Ansicht genutzt wird (z.B. User Glasfaser),

                                    Finde ich ja nett ... das du an mich denkst 🙂 👍

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

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

                                      Neues Update ist hochgeladen:

                                      Sehe ich das noch Richtig, das ich für jede weitere Funktion ein : Skript + Main-View + Editor-View brauche?

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

                                        @sigi234
                                        Meine Angaben zum Changelog beziehen sich darauf, was angepasst werden muss. Letztes Update betrifft somit alle drei Komponenten.

                                        Wenn mit der letzten Version mehrere Timer-Tabellen erstellt werden sollen (Beispiel mit 2 Tabellen) , wird benötigt:

                                        • 2x Skript
                                        • 2x Mainview mit Timer-Tabelle
                                        • 1x Editor-View

                                        Wenn das Skript mehrfach genutzt wird, muss der Editor nicht mehr vervielfacht werden. Bedeutet wiederum, dass im duplizierten Mainview weniger Anpassungen notwendig werden. Drei Buttons bleiben zum Beispiel immer identisch.

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

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

                                          1x Editor-View

                                          Habs jetzt begriffen. 😀

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

                                            @GiuseppeS
                                            Erstmal vielen Dank für die schnelle Aufnahme meines Feature-Request bezüglich der Random-Zeit, nachdem eine Bedingung nachträglich erfüllt ist.

                                            Habe das natürlich gleich getestet und folgendes (falsches) Verhalten ist mir aufgefallen:
                                            Grundsätzlich wird, nachdem eine Bedingung nachträglich erfüllt wurde, nach einer Random-Zeit die Aktion tatsächlich ausgeführt (sagen wir nach Random-10 Minuten soll Rollade A runterfahren). Sehr gut.
                                            Das hat bei mir auch funktioniert. Allerdings wurde dann später, nach dem die Rollade bereits runtergefahren war, nochmal versucht, die Rollade runterzufahren (obwohl sie schon runtergefahren war).

                                            Der Log sagt, dass in der Zeit, in der der (nachträgliche) Random bereits läuft, die Überprüfung, ob ein Random-Wert zum Runterfahren bestimmt werden soll, weiterhin bzw. nochmals passiert. Das hat zur Folge, dass weitere Random-Zeiten zum Runterfahren berechnet werden, solande die jeweilige Rollade nicht tatsächlich runtergefahren ist. Und das bedeutet dann natürlich, dass irgendwann die Rollade runtergefahren ist und dann dies aber nochmals passiert (da die weitere Random-Timer dann später durchgeführt werden).

                                            Hier ein Auszug aus meinem Log für zwei Rolladen: Bei der Rollade "Arbeitszimmer" wird zweimal der Timer ausgeführt. Bei der Rollade "Wohnzimmer" wird kein weiterer Timer gesetzt, da hier die berechnete Random-Zeit nur 1 Minute betragen hat.
                                            Wie wird denn die Berechnung getriggert? Ich nehme an, sobald sich der Wert der gesetzten Bedingung ändert. Das ist bei mir ja ein Helligkeitssensor, der natürlich dann öfters triggert.

                                            * 2020-07-17 22:03:45.378  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Arbeitszimmer.Rollade:1.LEVEL (0) -> Timer wird in 4 Minuten ausgeführt. Bedingung(en) nachträglich erfüllt!
                                            * 2020-07-17 22:03:45.383  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Wohnzimmer.RolladeRechts:1.LEVEL (0) -> Timer wird in 1 Minuten ausgeführt. Bedingung(en) nachträglich erfüllt!
                                            
                                            * 2020-07-17 22:04:45.786  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Wohnzimmer.RolladeRechts:1.LEVEL (0) -> Timer ausgeführt. Bedingung(en) nachträglich erfüllt!
                                            
                                            %(#ff0000)[* 2020-07-17 22:06:26.167  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Arbeitszimmer.Rollade:1.LEVEL (0) -> Timer wird in 14 Minuten ausgeführt. Bedingung(en) nachträglich erfüllt!]
                                            
                                            * 2020-07-17 22:07:45.383  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Arbeitszimmer.Rollade:1.LEVEL (0) -> Timer ausgeführt. Bedingung(en) nachträglich erfüllt!
                                            * 2020-07-17 22:20:26.168  - info: javascript.0 (506) script.js.common.VIS.RolladenCtrl: Timer: Arbeitszimmer.Rollade:1.LEVEL (0) -> Timer ausgeführt. Bedingung(en) nachträglich erfüllt!
                                            
                                            G 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            510
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            template vis
                                            47
                                            919
                                            229450
                                            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