Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [Vorlage] Variable Zeitsteuerung mit VIS Editor

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

[Vorlage] Variable Zeitsteuerung mit VIS Editor

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vistemplate
919 Beiträge 47 Kommentatoren 279.4k Aufrufe 75 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • smartboartS 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 Offline
    G Offline
    GiuseppeS
    schrieb am zuletzt editiert von
    #630

    @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 ;-)

    smartboartS 1 Antwort Letzte Antwort
    0
    • G GiuseppeS

      @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 ;-)

      smartboartS Offline
      smartboartS Offline
      smartboart
      schrieb am zuletzt editiert von smartboart
      #631

      @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 Antwort Letzte Antwort
      1
      • M Offline
        M Offline
        mhtl
        schrieb am zuletzt editiert von
        #632

        Weitere Bedingungen würde ich auch nutzen.

        Danke für das tolle Script!

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          GiuseppeS
          schrieb am zuletzt editiert von GiuseppeS
          #633

          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...

          smartboartS GlasfaserG sigi234S 3 Antworten Letzte Antwort
          3
          • G 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...

            smartboartS Offline
            smartboartS Offline
            smartboart
            schrieb am zuletzt editiert von
            #634

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

            1 Antwort Letzte Antwort
            1
            • G 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...

              GlasfaserG Offline
              GlasfaserG Offline
              Glasfaser
              schrieb am zuletzt editiert von
              #635

              @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:

              Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

              1 Antwort Letzte Antwort
              0
              • G 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...

                sigi234S Online
                sigi234S Online
                sigi234
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #636

                @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?

                Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                Immer Daten sichern!

                G 1 Antwort Letzte Antwort
                0
                • sigi234S sigi234

                  @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 Offline
                  G Offline
                  GiuseppeS
                  schrieb am zuletzt editiert von
                  #637

                  @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.

                  sigi234S 1 Antwort Letzte Antwort
                  0
                  • G GiuseppeS

                    @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.

                    sigi234S Online
                    sigi234S Online
                    sigi234
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #638

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

                    1x Editor-View

                    Habs jetzt begriffen. :grinning:

                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Immer Daten sichern!

                    1 Antwort Letzte Antwort
                    0
                    • G Offline
                      G Offline
                      gender
                      schrieb am zuletzt editiert von gender
                      #639

                      @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 Antwort Letzte Antwort
                      0
                      • G 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 Offline
                        G Offline
                        GiuseppeS
                        schrieb am zuletzt editiert von GiuseppeS
                        #640

                        @gender
                        Diesen Fall habe ich tatsächlich nicht bedacht. Dass die Bedingung wahr wird, dann falsch und bevor der Random durch ist, wieder wahr.

                        Ein Grund für dieses Verhalten ist wie folgt:
                        Ich hatte bedacht, wenn die Bedingung true ist und bis zum Ende des Randoms wieder false wird, sollte der Timer weiterhin im Hintergrund verbleiben, da das Gerät nicht verfahren wurde. Doppelte Ausführung wird bisher nicht verhindert.

                        Aber eine Umsetzung bzw Lösung ist gar kein Problem. Die grundsätzliche Frage lautet nun:
                        Wann müsste der Hintergrund-Timer gelöscht werden, wenn der Random beginnt oder wenn das Gerät tatsächlich angesteuert wird? Dass keine doppelten Random Countdowns gestartet werden, stellt kein Problem dar. Ich würde bevorzugen, den Hintergrund Timer weiterhin erst zu löschen, wenn tatsächlich das Gerät gesteuert wird.

                        Deine flackernde Bedingung kann aber weiterhin ein Problem darstellen: wenn die Bedingung true ist und kurz vor Ablauf Random false wird (und bleibt), dann wird das Gerät nicht angesteuert. Dieses Verhalten kann ich auf Skript-Seite nicht lösen, da als Bedingung auch Türsensoren genutzt werden können.

                        Bzgl. des Helligkeitssensors kann ich dir empfehlen eine Hystere zu nutzen und den Helligkeitssensor virtuell neu anzulegen und in Skripten diesen zu verwenden.
                        Damit meine ich, dass Richtungswechsel vom Ist-Wert erst auf das virtuelle Gerät übernommen wird, wenn Differenz x überschritten wird.
                        Könnte in JS ziemlich fix umgesetzt werden.

                        1 Antwort Letzte Antwort
                        0
                        • G Offline
                          G Offline
                          gender
                          schrieb am zuletzt editiert von gender
                          #641

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

                          Diesen Fall habe ich tatsächlich nicht bedacht. Dass die Bedingung wahr wird, dann falsch und bevor der Random durch ist, wieder wahr.

                          Hi und danke für die schnelle Rückmeldung.

                          Also meine Bedingung (der Helligkeitssensor) flackert nicht. Ich benutzte einen Average-Wert (also eine Zahl), die abends wirklich kontinuierlich runtergeht.
                          Ich habe die Bedinung auf < 5 gesetzt und auch gestern, als ein weiterer Random-Timer angesetzt wurde (obwohl es schon einen gab), hatte sich an der erfüllten Bedingung nichts geändert bzw. der Helligkeitswert hatte sich natürlich geändert, ist einfach nur kleiner geworden (und hatte damit die Bedingung nach wie vor erfüllt).

                          Daher war ja meine Vermutung, dass du die Berechnung bzw. das Setzen des (nachträglichen) Random-Timers in deinem Skript grundsätzlich bei Änderung des Wertes (und nicht nach erfüllt/nicht erfüllt), der für die eingetragene Bedingung steht, durchführen lässt.

                          G 1 Antwort Letzte Antwort
                          0
                          • G gender

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

                            Diesen Fall habe ich tatsächlich nicht bedacht. Dass die Bedingung wahr wird, dann falsch und bevor der Random durch ist, wieder wahr.

                            Hi und danke für die schnelle Rückmeldung.

                            Also meine Bedingung (der Helligkeitssensor) flackert nicht. Ich benutzte einen Average-Wert (also eine Zahl), die abends wirklich kontinuierlich runtergeht.
                            Ich habe die Bedinung auf < 5 gesetzt und auch gestern, als ein weiterer Random-Timer angesetzt wurde (obwohl es schon einen gab), hatte sich an der erfüllten Bedingung nichts geändert bzw. der Helligkeitswert hatte sich natürlich geändert, ist einfach nur kleiner geworden (und hatte damit die Bedingung nach wie vor erfüllt).

                            Daher war ja meine Vermutung, dass du die Berechnung bzw. das Setzen des (nachträglichen) Random-Timers in deinem Skript grundsätzlich bei Änderung des Wertes (und nicht nach erfüllt/nicht erfüllt), der für die eingetragene Bedingung steht, durchführen lässt.

                            G Offline
                            G Offline
                            GiuseppeS
                            schrieb am zuletzt editiert von
                            #642

                            @gender
                            Ahhh, jetzt kommt die Erleuchtung. Ich ging von einem wechselnden Wert und somit wechselndem Status der Bedingung aus, aber (du hast Recht) tatsächlich wird auch bei weiter fallendem Wert erneut getriggert.

                            Werde es heute im Laufe des Nachmittags oder morgen korrigieren. Es kann dann nur ein Random gestartet werden.

                            1 Antwort Letzte Antwort
                            1
                            • G Offline
                              G Offline
                              GiuseppeS
                              schrieb am zuletzt editiert von GiuseppeS
                              #643

                              EDIT: Bug bemerkt... Vis hatte nicht aktualisiert...

                              1 Antwort Letzte Antwort
                              0
                              • G Offline
                                G Offline
                                GiuseppeS
                                schrieb am zuletzt editiert von GiuseppeS
                                #644

                                Changelog 18.07.2020 (Skript)

                                • Bugfixes: Falls Random-Minuten auch für gemerkte Timer genutzt wird (bgTimerWithRandom = true), wird eine doppelte Ausführung verhindert.
                                • Der Fall "Random-Minuten für gemerkte Timer" wird nun vollumfänglich unterstützt; d.h. der Countdown wird unterbrochen im Falle von "Reset durch nachfolgenden Timer" oder falls das Ziel-Gerät anderweitig verändert wurde.

                                Übrigens: falls ein gemerkter Timer mit Random-Minuten nachträglich erfüllt wird und die evtl. spätere Ausführung auch mit Random erfolgt (bgTimerWithRandom = true), dann wird in der Tabelle die Bedingungsnummer vom Timer grün blinkend dargestellt, da der Random-Countdown startet. So komplex wie der letzte Satz ist mittlerweile auch der Code :laughing:
                                Ich hoffe die Bedienung leidet nicht unter den vielen Möglichkeiten.

                                @gender
                                Bin gespannt ob nun alles funktioniert. Das ist echt krass wie viele unterschiedliche Fälle beachtet/getestet werden können. Brauche bald eine Checkliste...

                                1 Antwort Letzte Antwort
                                0
                                • G Offline
                                  G Offline
                                  gender
                                  schrieb am zuletzt editiert von
                                  #645

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

                                  Bin gespannt ob nun alles funktioniert. Das ist echt krass wie viele unterschiedliche Fälle beachtet/getestet werden können. Brauche bald eine Checkliste...

                                  Vielen Dank für deine schnelle Korrektur.
                                  Gestern Abend hat alles funktioniert. Die Bedingung wurde nachträglich erfüllt... der Random-Timer wurde nur einmal gesetzt und die Bedingung hat grün geblinkt ;-)
                                  Sieht also soweit gut aus.

                                  Mir würden übrigens noch weitere Fälle einfallen ;-) (z.B. habe ich bei mir die Besonderheit, dass das große Wohnzimmerfenster von zwei Rolladen geschlossen wird und die fährt man üblicherweise zusammen runter. Folglich bräuchte man quasi eine "Gruppe", damit die beiden zur gleichen Zeit herunterfahren, wenn die Zeit zufällig sein soll), aber ich bin so wie es ist jetzt sehr zufrieden. DANKE.

                                  G 1 Antwort Letzte Antwort
                                  0
                                  • G gender

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

                                    Bin gespannt ob nun alles funktioniert. Das ist echt krass wie viele unterschiedliche Fälle beachtet/getestet werden können. Brauche bald eine Checkliste...

                                    Vielen Dank für deine schnelle Korrektur.
                                    Gestern Abend hat alles funktioniert. Die Bedingung wurde nachträglich erfüllt... der Random-Timer wurde nur einmal gesetzt und die Bedingung hat grün geblinkt ;-)
                                    Sieht also soweit gut aus.

                                    Mir würden übrigens noch weitere Fälle einfallen ;-) (z.B. habe ich bei mir die Besonderheit, dass das große Wohnzimmerfenster von zwei Rolladen geschlossen wird und die fährt man üblicherweise zusammen runter. Folglich bräuchte man quasi eine "Gruppe", damit die beiden zur gleichen Zeit herunterfahren, wenn die Zeit zufällig sein soll), aber ich bin so wie es ist jetzt sehr zufrieden. DANKE.

                                    G Offline
                                    G Offline
                                    GiuseppeS
                                    schrieb am zuletzt editiert von
                                    #646

                                    @gender
                                    Das mit dem Gruppieren versteh ich. Hab das selbe Thema mit meinem Balkon; sind auch zwei Rollläden. Das Gruppieren im Skript wäre umsetzbar, allerdings macht es außerhalb des Skripts mehr Sinn. Mit dem "Scenes Adapter" können nicht nur Szenen sondern auch Gruppen erstellt werden.
                                    Diese neue Scene-Gruppe könnte wiederum in die Skript Aufzählung hinzugefügt werden; Skript neustarten, fertig.

                                    Da es eine dauerhafte Gruppe ist, würde eine Umsetzung innerhalb des Skripts nur die Komplexität erhöhen, ohne Mehrwert. Schließlich besteht nie der Bedarf, diese Gruppe in VIS spontan aufzulösen.

                                    P.S.:
                                    Um ein Gerät aus dem Skript bzw aus der VIS zu löschen, bitte so vorgehen: in VIS alle Timer des Geräts mit Button DEL löschen. Dann Skript stoppen, Gerät aus der Aufzählung entfernen und Skript wieder starten.

                                    Ich hatte es bisher am Balkon so hingenommen, dass beide getrennt voneinander fahren, aber werde heute Nachmittag meinen Vorschlag selbst umsetzen ;-)

                                    1 Antwort Letzte Antwort
                                    0
                                    • smartboartS Offline
                                      smartboartS Offline
                                      smartboart
                                      schrieb am zuletzt editiert von smartboart
                                      #647

                                      @GiuseppeS

                                      Hi Giuseppe....
                                      Wenn ich selbst weitere Bedingungen hinzufügen möchte, reicht es aus folgende Scriptteile einfach fortlaufend hinzuzufügen?

                                      createState("Timer.Editor.Condition3");
                                      createState("Timer.Editor.Cond3State");
                                      createState("Timer.Editor.Cond3Comp");
                                      createState("Timer.Editor.Cond3Value");
                                      createState("Timer.Editor.Cond3Result");
                                      
                                      EditSubsArr[4] = on({id: ["javascript." + instance + ".Timer.Editor.Cond3Comp","javascript." + instance + ".Timer.Editor.Cond3State","javascript." + instance + ".Timer.Editor.Cond3Value"], change: "any", ack: false}, function (obj) {
                                              var ConditionJSON = JSON.parse(getState("javascript." + instance + ".Timer.Editor.ConditionJSON").val);
                                              var Cond3State = getState("javascript." + instance + ".Timer.Editor.Cond3State").val
                                              var Cond3Comp = getState("javascript." + instance + ".Timer.Editor.Cond3Comp").val
                                              var Cond3Value = getState("javascript." + instance + ".Timer.Editor.Cond3Value").val
                                              var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                                              setState("javascript." + instance + ".Timer.Editor.Condition3", strCond3);
                                              if (Cond3State != "" && Cond3Comp != "" && Cond3Value != "") {
                                                  setState("javascript." + instance + ".Timer.Editor.Cond3Result", eval(strCond3));
                                              }
                                          });
                                              case 3:
                                                  strEval1 = eval(DeviceJSON.Conditions[1].ConditionStr);
                                                  strEval2 = eval(DeviceJSON.Conditions[2].ConditionStr);
                                                  strEval3 = eval(DeviceJSON.Conditions[3].ConditionStr);
                                                  sumEval = (strEval1 && strEval2 && strEval3);
                                                  break;
                                      
                                      
                                                  "3":{
                                                      "ConditionStr": "",
                                                      "CondState": "",
                                                      "CondComp": "==",
                                                      "CondValue": ""
                                                  }
                                      
                                      
                                      
                                      
                                      
                                      
                                      G 1 Antwort Letzte Antwort
                                      0
                                      • smartboartS smartboart

                                        @GiuseppeS

                                        Hi Giuseppe....
                                        Wenn ich selbst weitere Bedingungen hinzufügen möchte, reicht es aus folgende Scriptteile einfach fortlaufend hinzuzufügen?

                                        createState("Timer.Editor.Condition3");
                                        createState("Timer.Editor.Cond3State");
                                        createState("Timer.Editor.Cond3Comp");
                                        createState("Timer.Editor.Cond3Value");
                                        createState("Timer.Editor.Cond3Result");
                                        
                                        EditSubsArr[4] = on({id: ["javascript." + instance + ".Timer.Editor.Cond3Comp","javascript." + instance + ".Timer.Editor.Cond3State","javascript." + instance + ".Timer.Editor.Cond3Value"], change: "any", ack: false}, function (obj) {
                                                var ConditionJSON = JSON.parse(getState("javascript." + instance + ".Timer.Editor.ConditionJSON").val);
                                                var Cond3State = getState("javascript." + instance + ".Timer.Editor.Cond3State").val
                                                var Cond3Comp = getState("javascript." + instance + ".Timer.Editor.Cond3Comp").val
                                                var Cond3Value = getState("javascript." + instance + ".Timer.Editor.Cond3Value").val
                                                var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                                                setState("javascript." + instance + ".Timer.Editor.Condition3", strCond3);
                                                if (Cond3State != "" && Cond3Comp != "" && Cond3Value != "") {
                                                    setState("javascript." + instance + ".Timer.Editor.Cond3Result", eval(strCond3));
                                                }
                                            });
                                                case 3:
                                                    strEval1 = eval(DeviceJSON.Conditions[1].ConditionStr);
                                                    strEval2 = eval(DeviceJSON.Conditions[2].ConditionStr);
                                                    strEval3 = eval(DeviceJSON.Conditions[3].ConditionStr);
                                                    sumEval = (strEval1 && strEval2 && strEval3);
                                                    break;
                                        
                                        
                                                    "3":{
                                                        "ConditionStr": "",
                                                        "CondState": "",
                                                        "CondComp": "==",
                                                        "CondValue": ""
                                                    }
                                        
                                        
                                        
                                        
                                        
                                        
                                        G Offline
                                        G Offline
                                        GiuseppeS
                                        schrieb am zuletzt editiert von
                                        #648

                                        @smartboart
                                        Ich müsste mir das am PC genauer anschauen. Was definitiv fehlt ist die Auswertung der Bedingungen:

                                        function condEval(DeviceJSON){
                                        ... 
                                        }
                                        

                                        Da eine zukünftige Version höhere Anzahl von Bedingungen unterstützen soll, müsste ich genau diese Funktion mit einem generischen Ansatz programmieren.
                                        Es wären einige Neuerungen notwendig...

                                        Vorerst kannst du es probieren, selbst die Erweiterung einzupflegen 😉 können in der Testphase auch chatten, wenns zeitlich passt.

                                        Aktuell bin ich dabei, eine HTML Ansicht des Editors zu erstellen. Es geht voran, aber mühselig, dass es gut ausschaut 😂
                                        Im nächsten Schritt muss der html Code im Skript erstellt werden.
                                        Das Projekt dauert daher noch ca. 2 Wochen.

                                        smartboartS 1 Antwort Letzte Antwort
                                        0
                                        • G GiuseppeS

                                          @smartboart
                                          Ich müsste mir das am PC genauer anschauen. Was definitiv fehlt ist die Auswertung der Bedingungen:

                                          function condEval(DeviceJSON){
                                          ... 
                                          }
                                          

                                          Da eine zukünftige Version höhere Anzahl von Bedingungen unterstützen soll, müsste ich genau diese Funktion mit einem generischen Ansatz programmieren.
                                          Es wären einige Neuerungen notwendig...

                                          Vorerst kannst du es probieren, selbst die Erweiterung einzupflegen 😉 können in der Testphase auch chatten, wenns zeitlich passt.

                                          Aktuell bin ich dabei, eine HTML Ansicht des Editors zu erstellen. Es geht voran, aber mühselig, dass es gut ausschaut 😂
                                          Im nächsten Schritt muss der html Code im Skript erstellt werden.
                                          Das Projekt dauert daher noch ca. 2 Wochen.

                                          smartboartS Offline
                                          smartboartS Offline
                                          smartboart
                                          schrieb am zuletzt editiert von
                                          #649

                                          @GiuseppeS

                                          danke für das Anbgebot...hab jetzt überall mal angepasst wo ich denke dass es sinn macht...
                                          Mit Vortlaufenden Nummern macht aber im Code an den

                                          EditSubsArr[5]
                                          

                                          spätesten Robleme, da dise bereits vortlaufend sind...
                                          Für ene 4 Bedingung müsste nach meiner denke dann für den EditSubsArr[] ne ander Nummer herhalten..
                                          Worauf das wieder Auswirkungen hat, steige ich noch nicht durch....

                                          G 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          338

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe