Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Verzögerung funktioniert nicht richtig

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Verzögerung funktioniert nicht richtig

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

      Irgendwie habe ich da ein Problem.
      Überschuss_Power sind Modbusregister, welche alle 30 Sekunden aktualisiert werden.
      Der 1. Block: Hier kann ich noch nicht sagen, ob er die gleiche Fehlfunktion wie Block 2 hat.
      Der 2. Block:
      Eigentlich sollte GPIO24 auf low geschaltet werden, wenn länger als 3 Minuten Überschuss_Power kleiner als 10 ist.
      2020-10-17 13_27_50-javascript - ioBroker.jpg
      Jetzt habe ich aber folgenden Verhalten festgestellt:
      Sobald Überschuss_Power einmal unter 10 ist, schaltet GPIO24 nach 3 Minuten auf low, auch wenn alle anderen Werte dazwischen größer als 10 sind.
      Was habe ich da falsch gemacht?

      Macht es eigentlich einen Unterschied, ob ich die 2 Blöcke zusammenhänge? (kein weißer Bereich mehr dazwischen)

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Manuel001 last edited by paul53

        @Manuel001 sagte in Verzögerung funktioniert nicht richtig:

        Was habe ich da falsch gemacht?

        Es wird nicht verhindert, dass bei Aktualisierung mit Werten unter 10 weitere Timer gestartet werden. Versuche es mal so:

        Blockly_temp.JPG

        Wert und vorheriger Wert findet man unter "Trigger".

        @Manuel001 sagte in Verzögerung funktioniert nicht richtig:

        Macht es eigentlich einen Unterschied, ob ich die 2 Blöcke zusammenhänge? (kein weißer Bereich mehr dazwischen)

        Nein.

        Keine gleichen Trigger doppelt verwenden (Ressourcen-Verschwendung). Alle Abfragen sollten innerhalb eines Triggers erfolgen.

        M 1 Reply Last reply Reply Quote 0
        • M
          Manuel001 @paul53 last edited by

          @paul53 Danke für die schnelle Rückmeldung.
          Aber ist das wirklich so? Es ist ja nicht das Problem, dass der Timer neu oder zusätzlich gestartet wird, sondern nicht gestoppt wird.
          Oder habe ich es falsch verstanden?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Manuel001 last edited by

            @Manuel001 sagte:

            Es ist ja nicht das Problem, dass der Timer neu oder zusätzlich gestartet wird, sondern nicht gestoppt wird.

            Gestoppt wird nur bei Werten >= 10. Bei Werten unter 10 (z.B. 9, 8, 7) wird bei jedem Trigger ein neuer Timer gestartet. Es kann aber nur 1 Timer gestoppt werden, die anderen laufen weiter.

            M 1 Reply Last reply Reply Quote 0
            • M
              Manuel001 @paul53 last edited by

              @paul53 Es wird also praktisch mein Timer "timeout4" nicht neu gestartet sondern weitere Timer unter dem gleichen Namen? Gibt es da keine elegantere Möglichkeit, dass man nur einen Timer hat den man dann entweder startet, stoppt oder neustartet?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Manuel001 last edited by paul53

                @Manuel001 sagte:

                weitere Timer unter dem gleichen Namen?

                Ja.

                @Manuel001 sagte in Verzögerung funktioniert nicht richtig:

                Gibt es da keine elegantere Möglichkeit,

                Man kann mit jedem Trigger den Timer stoppen, was aber dazu führen kann, dass die Zeit nie abläuft, wenn innerhalb der Verzögerungszeit immer wieder getriggert wird.

                Variante mit der Timer-Variablen als Sperr-Variable:

                Blockly_temp.JPG

                Hinweis: Erst eine Dummy-Variable erstellen und diese zuweisen. Anschließend in die Javascript-Ansicht und wieder zurück wechseln. Nun die Timer-Variable selektieren.

                M 1 Reply Last reply Reply Quote 0
                • M
                  Manuel001 @paul53 last edited by

                  @paul53 Danke für die Unterstützung. Soweit verstehe ich es jetzt. Aber noch für Dummys: Variable habe ich erstellt, aber wie zuweisen?

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Manuel001 last edited by paul53

                    @Manuel001 sagte:

                    Variable habe ich erstellt, aber wie zuweisen?

                    Blockly_temp.JPG

                    Nach Wechsel in JS-Ansicht und zurück:

                    Blockly_temp.JPG

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      Manuel001 @paul53 last edited by

                      @paul53 Danke.
                      Das müsste doch jetzt so funktionieren?:
                      2020-10-17 21_33_53-javascript - ioBroker.jpg
                      Aber irgendwie geht das noch immer nicht.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Manuel001 last edited by paul53

                        @Manuel001 sagte:

                        Das müsste doch jetzt so funktionieren?:

                        Ja, sollte: Nach 3 Minuten >= 400 schalten auf true und nach 3 Minuten < 10 schalten auf false.
                        Poste mal den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Manuel001 @paul53 last edited by

                          @paul53

                          code_text
                          var timeout3, timeout_Ladegeraet_ein, timeout4, timeout_Ladegeraet_aus;
                          
                          
                          on({id: 'modbus.1.holdingRegisters.1002_Überschuss', change: "any"}, function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("modbus.1.holdingRegisters.1002_Überschuss").val < 400) {
                              (function () {if (timeout_Ladegeraet_ein) {clearTimeout(timeout_Ladegeraet_ein); timeout_Ladegeraet_ein = null;}})();
                            } else if (!timeout_Ladegeraet_ein) {
                              timeout_Ladegeraet_ein = setTimeout(function () {
                                setState("rpi2.1.gpio.24.state"/*GPIO 24*/, true);
                              }, 60000);
                            }
                            if (getState("modbus.1.holdingRegisters.1002_Überschuss").val >= 10) {
                              (function () {if (timeout_Ladegeraet_aus) {clearTimeout(timeout_Ladegeraet_aus); timeout_Ladegeraet_aus = null;}})();
                            } else if (!timeout_Ladegeraet_aus) {
                              timeout_Ladegeraet_aus = setTimeout(function () {
                                setState("rpi2.1.gpio.24.state"/*GPIO 24*/, false);
                              }, 60000);
                            }
                          });
                          
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Manuel001 last edited by

                            @Manuel001
                            Ist das der vollständige Code ? Es sind die Variablen timeout3 und timeout4 deklariert, die nirgends verwendet werden ?

                            M 1 Reply Last reply Reply Quote 0
                            • M
                              Manuel001 @paul53 last edited by

                              @paul53
                              Ja ist der vollständige code. timeout3 und 4 waren nur in einem deaktiviertem Block in Verwendung. Ich habe jetzt diesen Block gelöscht. Dann sind diese Variablen verschwunden und jetzt funktioniert es. Danke!
                              Darf das sein, dass ein deaktivierter Block diese Auswirkung hat?

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              418
                              Online

                              32.0k
                              Users

                              80.4k
                              Topics

                              1.3m
                              Posts

                              2
                              13
                              394
                              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