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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Mehrere (separate) Timeouts in einer Statemachine

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    993

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Mehrere (separate) Timeouts in einer Statemachine

Geplant Angeheftet Gesperrt Verschoben Blockly
15 Beiträge 5 Kommentatoren 483 Aufrufe 4 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.
  • H HaJoLu069

    @paul53 Danke - das ist ein sehr guter Tipp
    denn meine Vermutung ist und bleibt, daß anscheinend nicht mehr als 1 Timeout innerhalb einer Funktion wirklich funktioniert

    denn bisher haben wir Timeouts kaum in unserem Scripten im Einsatz

    Daa Blockly die Timer-Variable bei Ablauf automatisch auf Null setzt, davon war ich ausgegangen - mein erster Ansatz war 3 Timer (in jedem Status einer) OHNE ein Stop

    Deine andere Fragen beantworte ich Dir gleich.

    AsgothianA Offline
    AsgothianA Offline
    Asgothian
    Developer
    schrieb am zuletzt editiert von
    #6

    @hajolu069 sagte in Mehrere (separate) Timeouts in einer Statemachine:

    denn meine Vermutung ist und bleibt, daß anscheinend nicht mehr als 1 Timeout innerhalb einer Funktion wirklich funktioniert

    Das ist eindeutig falsch.. Ich habe Skripte mit mehreren Timeouts in Funktionen im Einsatz.

    A.

    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

    H 1 Antwort Letzte Antwort
    1
    • paul53P paul53

      @hajolu069 sagte: Blockly NICHT mit mehreren "Sonst Falls" Fällen umgehen kann

      Der Javascript-Code zeigt, dass Blockly es kann.
      Was macht die Funktion EinfahrtLicht_StatusNext?
      Wodurch wird die gezeigte Funktion aufgerufen?

      H Offline
      H Offline
      HaJoLu069
      schrieb am zuletzt editiert von
      #7

      @paul53 Die StatusNext macht nichts anderes als "bei Änderung" die lokale Variable und anschließend die globale Variable (0_userdata.0-Bereich) auf den angeforderten Wert zu ändern
      UND damit ist auch die 2. Frage beantwortet, denn die gezeigte Funktion wird durch den Trigger bei Änderung von der globalen Variable aufgerufen

      meine Debug-Informationen zeigen auch, daß die Ablaufsteuerung / Statemachine sauber funktioniert - bis auf die "Timeouts"

      Daher werde ich Deinen Ansatz ausprobieren und dann Rückmeldung geben.

      Ist denn irgendwo schon bekannt geworden, daß ein abgelaufener Timer in einem Script einen 2. Timer nicht mehr zulässt ?
      Man muß es ja nur wissen, um "Workarounds" zu entwickeln - mein Ansatz wäre dies dann auch über eine "globale Variable" zu lösen, die man auf "true" setzt, um einen Timeout aufzuziehen (ähnlich Deiner Lösung - nur eben in einem Trigger, der nur bei Änderung auf True Aktionen auslöst und als erstes sich selber auf False ändert - die Dauer kann ja dann ruhig weiterhin lokal bleiben, weil globale Zugriffe deutlich mehr Zeit und Speicher kosten)

      Dieser "Workaround mit globaler Variable" hätte den Charme, daß man an beliebigen Stellen im Code einen neuen Timeout aufziehen kann - wenn man dann unterschiedliches "Handling" durch den Timeout benötigt, muß man dieses auch wieder über eine "Handle"-Funktion abarbeiten und die Stati (oder für jene, die Namen brauchen auch namentliche Stati) in diesem Handle dann ausführen, während man zuvor (vor Setzen des Timeouts) eine lokale Variable beschreibt, die den "Status" (also die später auszuführenden Schritte im "Handle") beinhaltet.

      Klingt vielleicht kompliziert, ist es aber nicht wirklich.

      HomoranH paul53P 2 Antworten Letzte Antwort
      0
      • H HaJoLu069

        @paul53 Die StatusNext macht nichts anderes als "bei Änderung" die lokale Variable und anschließend die globale Variable (0_userdata.0-Bereich) auf den angeforderten Wert zu ändern
        UND damit ist auch die 2. Frage beantwortet, denn die gezeigte Funktion wird durch den Trigger bei Änderung von der globalen Variable aufgerufen

        meine Debug-Informationen zeigen auch, daß die Ablaufsteuerung / Statemachine sauber funktioniert - bis auf die "Timeouts"

        Daher werde ich Deinen Ansatz ausprobieren und dann Rückmeldung geben.

        Ist denn irgendwo schon bekannt geworden, daß ein abgelaufener Timer in einem Script einen 2. Timer nicht mehr zulässt ?
        Man muß es ja nur wissen, um "Workarounds" zu entwickeln - mein Ansatz wäre dies dann auch über eine "globale Variable" zu lösen, die man auf "true" setzt, um einen Timeout aufzuziehen (ähnlich Deiner Lösung - nur eben in einem Trigger, der nur bei Änderung auf True Aktionen auslöst und als erstes sich selber auf False ändert - die Dauer kann ja dann ruhig weiterhin lokal bleiben, weil globale Zugriffe deutlich mehr Zeit und Speicher kosten)

        Dieser "Workaround mit globaler Variable" hätte den Charme, daß man an beliebigen Stellen im Code einen neuen Timeout aufziehen kann - wenn man dann unterschiedliches "Handling" durch den Timeout benötigt, muß man dieses auch wieder über eine "Handle"-Funktion abarbeiten und die Stati (oder für jene, die Namen brauchen auch namentliche Stati) in diesem Handle dann ausführen, während man zuvor (vor Setzen des Timeouts) eine lokale Variable beschreibt, die den "Status" (also die später auszuführenden Schritte im "Handle") beinhaltet.

        Klingt vielleicht kompliziert, ist es aber nicht wirklich.

        HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von
        #8

        @hajolu069 sagte in Mehrere (separate) Timeouts in einer Statemachine:

        ist es aber nicht wirklich.

        hat aber einige Pitfalls.
        ggf. wird der Wert in den Datenpunkt erst/schon geschrieben, wenn die nächste Stufe abgefragt wird.

        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @hajolu069 sagte in Mehrere (separate) Timeouts in einer Statemachine:

          denn meine Vermutung ist und bleibt, daß anscheinend nicht mehr als 1 Timeout innerhalb einer Funktion wirklich funktioniert

          Das ist eindeutig falsch.. Ich habe Skripte mit mehreren Timeouts in Funktionen im Einsatz.

          A.

          H Offline
          H Offline
          HaJoLu069
          schrieb am zuletzt editiert von
          #9

          @asgothian Das ist schön für Dich - sagt mir nur, daß es NICHT GRUNDSÄTZLICH ein Problem ist, sondern nur bei mir - hilft mir aber bei meiner Fehlersuche (denn die States werden sauber (und auch jeweils nur EINMALIG durchlaufen - und damit sauber gewechselt und ausgeführt) rein gar nichts, weil Fakt ist, bei mir wird NUR der 1. Timeout ordentlich ausgeführt und die weiteren ignoriert und der dort enthaltene Code SOFORT (OHNE Wartezeit) ausgeführt.

          @Asgothian bist Du Dir denn auch sicher, daß Deine multiplen Timeouts so sind, daß 1 Timeout bereits abgelaufen ist, ehe die anderen gestartet werden sollen - das ist nämlich bei mir in der Programmierung der Fall.
          Wenn Du Deine Timeouts vielleicht startest EHE auch nur einer davon abgelaufen ist, könnte es sein, daß dieser "Fall" richtig gut funktioniert - nur im Falle von einem "abgelaufenen Timeout" macht Blockly Fehler beim Starten von weiteren Timeouts und sie gelten dann alle als bereits abgelaufen (oder werde gar nicht erst gestartet, sondern "ignoriert").
          Dein Fall wäre z.B. der Fall, wenn Du mit "geschachtelten" Timeouts arbeitest.

          Und vielleicht ist das ja auch die Ursache für MEIN Problem, daß Blockly so programmiert wurde, daß bei mehreren Timerouts, davon ausgegangen wurde, daß diese in sich verschachtelt sind und der 1. Timeout als "Master" für die anderen Timeouts angesehen wird und diese dann automatisch beendet, wenn er endet (nur so eine Vermutung eines Programmierers mit 25 Jahren Programmier-Erfahrung in div. Sprachen [angefangen bei Assembler über C bis hin zu C#, aber auch diverse Script-Sprachen - auch WebAssembly-Erfahrung ist dabei und jahrelanges embeded Programmieren]).

          HomoranH MartinPM AsgothianA 3 Antworten Letzte Antwort
          0
          • H HaJoLu069

            @asgothian Das ist schön für Dich - sagt mir nur, daß es NICHT GRUNDSÄTZLICH ein Problem ist, sondern nur bei mir - hilft mir aber bei meiner Fehlersuche (denn die States werden sauber (und auch jeweils nur EINMALIG durchlaufen - und damit sauber gewechselt und ausgeführt) rein gar nichts, weil Fakt ist, bei mir wird NUR der 1. Timeout ordentlich ausgeführt und die weiteren ignoriert und der dort enthaltene Code SOFORT (OHNE Wartezeit) ausgeführt.

            @Asgothian bist Du Dir denn auch sicher, daß Deine multiplen Timeouts so sind, daß 1 Timeout bereits abgelaufen ist, ehe die anderen gestartet werden sollen - das ist nämlich bei mir in der Programmierung der Fall.
            Wenn Du Deine Timeouts vielleicht startest EHE auch nur einer davon abgelaufen ist, könnte es sein, daß dieser "Fall" richtig gut funktioniert - nur im Falle von einem "abgelaufenen Timeout" macht Blockly Fehler beim Starten von weiteren Timeouts und sie gelten dann alle als bereits abgelaufen (oder werde gar nicht erst gestartet, sondern "ignoriert").
            Dein Fall wäre z.B. der Fall, wenn Du mit "geschachtelten" Timeouts arbeitest.

            Und vielleicht ist das ja auch die Ursache für MEIN Problem, daß Blockly so programmiert wurde, daß bei mehreren Timerouts, davon ausgegangen wurde, daß diese in sich verschachtelt sind und der 1. Timeout als "Master" für die anderen Timeouts angesehen wird und diese dann automatisch beendet, wenn er endet (nur so eine Vermutung eines Programmierers mit 25 Jahren Programmier-Erfahrung in div. Sprachen [angefangen bei Assembler über C bis hin zu C#, aber auch diverse Script-Sprachen - auch WebAssembly-Erfahrung ist dabei und jahrelanges embeded Programmieren]).

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #10

            @hajolu069 sagte in Mehrere (separate) Timeouts in einer Statemachine:

            daß diese in sich verschachtelt sind und der 1. Timeout als "Master" für die anderen Timeouts angesehen wird und diese dann automatisch beendet, wenn er endet

            falsche Vermutung!
            dann startet er erst due inneren Timeouts

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • H HaJoLu069

              @asgothian Das ist schön für Dich - sagt mir nur, daß es NICHT GRUNDSÄTZLICH ein Problem ist, sondern nur bei mir - hilft mir aber bei meiner Fehlersuche (denn die States werden sauber (und auch jeweils nur EINMALIG durchlaufen - und damit sauber gewechselt und ausgeführt) rein gar nichts, weil Fakt ist, bei mir wird NUR der 1. Timeout ordentlich ausgeführt und die weiteren ignoriert und der dort enthaltene Code SOFORT (OHNE Wartezeit) ausgeführt.

              @Asgothian bist Du Dir denn auch sicher, daß Deine multiplen Timeouts so sind, daß 1 Timeout bereits abgelaufen ist, ehe die anderen gestartet werden sollen - das ist nämlich bei mir in der Programmierung der Fall.
              Wenn Du Deine Timeouts vielleicht startest EHE auch nur einer davon abgelaufen ist, könnte es sein, daß dieser "Fall" richtig gut funktioniert - nur im Falle von einem "abgelaufenen Timeout" macht Blockly Fehler beim Starten von weiteren Timeouts und sie gelten dann alle als bereits abgelaufen (oder werde gar nicht erst gestartet, sondern "ignoriert").
              Dein Fall wäre z.B. der Fall, wenn Du mit "geschachtelten" Timeouts arbeitest.

              Und vielleicht ist das ja auch die Ursache für MEIN Problem, daß Blockly so programmiert wurde, daß bei mehreren Timerouts, davon ausgegangen wurde, daß diese in sich verschachtelt sind und der 1. Timeout als "Master" für die anderen Timeouts angesehen wird und diese dann automatisch beendet, wenn er endet (nur so eine Vermutung eines Programmierers mit 25 Jahren Programmier-Erfahrung in div. Sprachen [angefangen bei Assembler über C bis hin zu C#, aber auch diverse Script-Sprachen - auch WebAssembly-Erfahrung ist dabei und jahrelanges embeded Programmieren]).

              MartinPM Online
              MartinPM Online
              MartinP
              schrieb am zuletzt editiert von
              #11

              @hajolu069 Wer ruft denn EinfahrtLicht_StatusHandle auf?
              Initial durch einen Datenpunkt-Trigger das Wecken aus Idle, und das Weiterschalten dann über EinfahrtLicht_StatusNext?

              Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
              Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
              Linux pve 6.17.9-1-pve
              6 GByte RAM für den Container
              Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
              Remote-Access über Wireguard der Fritzbox

              H 1 Antwort Letzte Antwort
              0
              • H HaJoLu069

                @asgothian Das ist schön für Dich - sagt mir nur, daß es NICHT GRUNDSÄTZLICH ein Problem ist, sondern nur bei mir - hilft mir aber bei meiner Fehlersuche (denn die States werden sauber (und auch jeweils nur EINMALIG durchlaufen - und damit sauber gewechselt und ausgeführt) rein gar nichts, weil Fakt ist, bei mir wird NUR der 1. Timeout ordentlich ausgeführt und die weiteren ignoriert und der dort enthaltene Code SOFORT (OHNE Wartezeit) ausgeführt.

                @Asgothian bist Du Dir denn auch sicher, daß Deine multiplen Timeouts so sind, daß 1 Timeout bereits abgelaufen ist, ehe die anderen gestartet werden sollen - das ist nämlich bei mir in der Programmierung der Fall.
                Wenn Du Deine Timeouts vielleicht startest EHE auch nur einer davon abgelaufen ist, könnte es sein, daß dieser "Fall" richtig gut funktioniert - nur im Falle von einem "abgelaufenen Timeout" macht Blockly Fehler beim Starten von weiteren Timeouts und sie gelten dann alle als bereits abgelaufen (oder werde gar nicht erst gestartet, sondern "ignoriert").
                Dein Fall wäre z.B. der Fall, wenn Du mit "geschachtelten" Timeouts arbeitest.

                Und vielleicht ist das ja auch die Ursache für MEIN Problem, daß Blockly so programmiert wurde, daß bei mehreren Timerouts, davon ausgegangen wurde, daß diese in sich verschachtelt sind und der 1. Timeout als "Master" für die anderen Timeouts angesehen wird und diese dann automatisch beendet, wenn er endet (nur so eine Vermutung eines Programmierers mit 25 Jahren Programmier-Erfahrung in div. Sprachen [angefangen bei Assembler über C bis hin zu C#, aber auch diverse Script-Sprachen - auch WebAssembly-Erfahrung ist dabei und jahrelanges embeded Programmieren]).

                AsgothianA Offline
                AsgothianA Offline
                Asgothian
                Developer
                schrieb am zuletzt editiert von Asgothian
                #12

                @hajolu069 sagte in Mehrere (separate) Timeouts in einer Statemachine:

                @Asgothian bist Du Dir denn auch sicher, daß Deine multiplen Timeouts so sind, daß 1 Timeout bereits abgelaufen ist, ehe die anderen gestartet werden sollen - das ist nämlich bei mir in der Programmierung der Fall.
                Wenn Du Deine Timeouts vielleicht startest EHE auch nur einer davon abgelaufen ist, könnte es sein, daß dieser "Fall" richtig gut funktioniert - nur im Falle von einem "abgelaufenen Timeout" macht Blockly Fehler beim Starten von weiteren Timeouts und sie gelten dann alle als bereits abgelaufen (oder werde gar nicht erst gestartet, sondern "ignoriert").
                Dein Fall wäre z.B. der Fall, wenn Du mit "geschachtelten" Timeouts arbeitest.

                In kurz, ja. Allerdings bin ich nicht zu Hause und kann / will das Skript nicht posten. Deswegen hab ich Deinen Ansatz vereinfacht und mit Log-Ausgaben nachgebaut.
                Skript:

                Screenshot 2025-09-28 at 13.10.19.png

                Log:

                2025-09-28 13:09:50.706 - info: javascript.0 (615) script.js.Skript_1: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                2025-09-28 13:09:51.707 - info: javascript.0 (615) script.js.Skript_1: debug from first timeout: 2
                2025-09-28 13:09:52.209 - info: javascript.0 (615) script.js.Skript_1: debug from second timeout: 3
                2025-09-28 13:09:57.211 - info: javascript.0 (615) script.js.Skript_1: debug from third timeout: 4
                2025-09-28 13:09:57.222 - info: javascript.0 (615) script.js.Skript_1: debug from last timeout: 5
                

                Die Timestamps im Log zeigen deutlich das alles so ist wie es soll

                • Der erste Log-EIntrag kommt 1001 ms nach Start
                • der nächste dann 502 ms später
                • der dritte dann 5002 ms danach
                • und der letzte 11 ms später - so wie die Timeouts auch gesetzt sind.

                Dein Problem muss liegen bei

                • der Verschachteln von 2 Funktionen (EinfahrtLicht_statusHandle und EinfahrtLicht_statusNext)
                • der globalen Variable einfahrtlicht_status

                In dem Umfeld passiert etwas das du uns nicht gezeigt hast welches für den von Dir beschriebenen Effekt verantwortlich ist.

                A.

                ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                1 Antwort Letzte Antwort
                0
                • H HaJoLu069

                  @paul53 Die StatusNext macht nichts anderes als "bei Änderung" die lokale Variable und anschließend die globale Variable (0_userdata.0-Bereich) auf den angeforderten Wert zu ändern
                  UND damit ist auch die 2. Frage beantwortet, denn die gezeigte Funktion wird durch den Trigger bei Änderung von der globalen Variable aufgerufen

                  meine Debug-Informationen zeigen auch, daß die Ablaufsteuerung / Statemachine sauber funktioniert - bis auf die "Timeouts"

                  Daher werde ich Deinen Ansatz ausprobieren und dann Rückmeldung geben.

                  Ist denn irgendwo schon bekannt geworden, daß ein abgelaufener Timer in einem Script einen 2. Timer nicht mehr zulässt ?
                  Man muß es ja nur wissen, um "Workarounds" zu entwickeln - mein Ansatz wäre dies dann auch über eine "globale Variable" zu lösen, die man auf "true" setzt, um einen Timeout aufzuziehen (ähnlich Deiner Lösung - nur eben in einem Trigger, der nur bei Änderung auf True Aktionen auslöst und als erstes sich selber auf False ändert - die Dauer kann ja dann ruhig weiterhin lokal bleiben, weil globale Zugriffe deutlich mehr Zeit und Speicher kosten)

                  Dieser "Workaround mit globaler Variable" hätte den Charme, daß man an beliebigen Stellen im Code einen neuen Timeout aufziehen kann - wenn man dann unterschiedliches "Handling" durch den Timeout benötigt, muß man dieses auch wieder über eine "Handle"-Funktion abarbeiten und die Stati (oder für jene, die Namen brauchen auch namentliche Stati) in diesem Handle dann ausführen, während man zuvor (vor Setzen des Timeouts) eine lokale Variable beschreibt, die den "Status" (also die später auszuführenden Schritte im "Handle") beinhaltet.

                  Klingt vielleicht kompliziert, ist es aber nicht wirklich.

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #13

                  @hajolu069 sagte: die lokale Variable und anschließend die globale Variable (0_userdata.0-Bereich) auf den angeforderten Wert zu ändern
                  UND damit ist auch die 2. Frage beantwortet, denn die gezeigte Funktion wird durch den Trigger bei Änderung von der globalen Variable aufgerufen

                  Begriffserklärung: Die Variable einfahrtLicht_status ist eine globale Variable im Skript und "0_userdata.0-Bereich" ist ein Datenpunkt.

                  Anstelle des rekursiven Aufrufs der Funktion setzt du den Datenpunkt "0_userdata.0-Bereich" auf den geänderten Wert, der anschließend triggert, um die Funktion aufzurufen. Etwa so:

                  Blockly_temp.JPG

                  Der Trigger auf "ist größer als letztes" verhindert den Trigger auf den Wert 0.

                  EDIT: Als Funktionsparameter ist einfahrtLicht_status eine lokale Variable innerhalb der Funktion:

                  Blockly_temp.JPG

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  1
                  • MartinPM MartinP

                    @hajolu069 Wer ruft denn EinfahrtLicht_StatusHandle auf?
                    Initial durch einen Datenpunkt-Trigger das Wecken aus Idle, und das Weiterschalten dann über EinfahrtLicht_StatusNext?

                    H Offline
                    H Offline
                    HaJoLu069
                    schrieb am zuletzt editiert von
                    #14

                    @martinp Ja genau - der "lokale / interne" Status wird beim Ändern auch immer auf einem "Datenpunkt" abgespeichert und DESSEN Änderung ruft dann den Handle auf - wie man so Statemachinen eben baut mit Blockly.

                    Idle - ist der Initiale Status
                    und Idle wird automatisch immer dann eingenommen, wenn man über den letzten Status hinaus wechseln wollte - von daher ist StatusNext ein

                    • Speichere neuen Status (aktueller + 1) temporär ab
                    • prüfe ob temporärer Wert > als maxStatus ist, falls "ja", setze temporären Wert auf 0
                    • schreibe temporären Wert auf lokale Variable und anschließend auf Datenpunkt-Kopie, damit der Trigger wieder ausgelöst wird

                    ach ja - und wenn man die LichtSteuerung aufstarten will (Wallbox wurde eingeschaltet oder Lichtschranke hat ausgelöst - wobei eine zeitliche Überprüfung auf Sonnenaufgang-Start und Sonnenuntergang-Ende erfolgt, damit nur bei "Dunkelheit" das Aufstarten aktiviert wird), dann wird der Status auf 1 gesetzt, damit die Ablauf-Steuerung / Statemachine angestoßen wird und ihre Stati bis wieder "Idle" automatisch durchläuft.

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • H HaJoLu069

                      @martinp Ja genau - der "lokale / interne" Status wird beim Ändern auch immer auf einem "Datenpunkt" abgespeichert und DESSEN Änderung ruft dann den Handle auf - wie man so Statemachinen eben baut mit Blockly.

                      Idle - ist der Initiale Status
                      und Idle wird automatisch immer dann eingenommen, wenn man über den letzten Status hinaus wechseln wollte - von daher ist StatusNext ein

                      • Speichere neuen Status (aktueller + 1) temporär ab
                      • prüfe ob temporärer Wert > als maxStatus ist, falls "ja", setze temporären Wert auf 0
                      • schreibe temporären Wert auf lokale Variable und anschließend auf Datenpunkt-Kopie, damit der Trigger wieder ausgelöst wird

                      ach ja - und wenn man die LichtSteuerung aufstarten will (Wallbox wurde eingeschaltet oder Lichtschranke hat ausgelöst - wobei eine zeitliche Überprüfung auf Sonnenaufgang-Start und Sonnenuntergang-Ende erfolgt, damit nur bei "Dunkelheit" das Aufstarten aktiviert wird), dann wird der Status auf 1 gesetzt, damit die Ablauf-Steuerung / Statemachine angestoßen wird und ihre Stati bis wieder "Idle" automatisch durchläuft.

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #15

                      @hajolu069 sagte: schreibe temporären Wert auf lokale Variable und anschließend auf Datenpunkt-Kopie, damit der Trigger wieder ausgelöst wird

                      Vorschlag:

                      Blockly_temp.JPG

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      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

                      555

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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