Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. 3-Wegeventil 3x hintereinander auf und zu machen mit Blockly

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    3-Wegeventil 3x hintereinander auf und zu machen mit Blockly

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Andreas 9 last edited by Andreas 9

      Hallo, ich komm mal wieder mit blockly nicht klar:
      Ich will ein 3-Wegeventil am Warmwasserspeicher 1x pro Woche bewegen, damit es nicht (wie schon vorgekommen) einrostet. Es soll 3x hintereinander für 3 Min auf und für 3 Min zu gemacht werden. Dazu müssen WWSpeicher und WWPumpe und WWThermostat geschaltet werden.
      Dazu habe ich folgendes Blockly erstellt.
      Leider werden alle Kommandos innerhalb der Wiederholen-Schleife direkt hintereinander ausgeführt. Das timeout funktioniert nicht.
      Was hab ich falsch gemacht? Hat jemand eine Idee?
      Hier das Blockly:
      blockly.jpg
      Hier der Code:

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable type="timeout" id="timeout">timeout</variable>
          <variable type="timeout" id="timeout2">timeout2</variable>
        </variables>
        <block type="schedule" id="cXZ2I8FRwIsL1Uuo9qL:" x="88" y="-512">
          <field name="SCHEDULE">{"time":{"exactTime":true,"start":"11:12"},"period":{"weeks":1,"dows":"[0]"}}</field>
          <statement name="STATEMENT">
            <block type="controls_repeat_ext" id=".AGm^+cS|tM)^an_ckg8">
              <value name="TIMES">
                <shadow type="math_number" id="yEotLT10W)y514oe22@z">
                  <field name="NUM">3</field>
                </shadow>
              </value>
              <statement name="DO">
                <block type="timeouts_cleartimeout" id="_v-Vwch5wth_LWUU:ko/">
                  <field name="NAME">timeout</field>
                  <next>
                    <block type="timeouts_settimeout" id="7gkzxX:8tw-4ps],SfBT">
                      <field name="NAME">timeout</field>
                      <field name="DELAY">3</field>
                      <field name="UNIT">min</field>
                      <statement name="STATEMENT">
                        <block type="control" id="n+WrE78HA@4Xg=embMLc">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">sonoff.0.WWSpeicher.POWER</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="logic_boolean" id="K2HYSR/Y2WZK}TQ(U.rR">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                          <next>
                            <block type="control" id="@P`Mk6%eb_xhaC0HrYxN">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                              <field name="OID">sonoff.0.WWPumpe.POWER</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="logic_boolean" id="ADi9{y|pw==]];efnKL9">
                                  <field name="BOOL">TRUE</field>
                                </block>
                              </value>
                              <next>
                                <block type="control" id="7s=VH*ia3:QJNNRBFE0Y" disabled="true">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">sonoff.0.WWThermostat.POWER</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="logic_boolean" id=".H[G4a/Gt/RG_-avP_ut">
                                      <field name="BOOL">TRUE</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="debug" id="gV0Fl[BoG5OXVrWH#B-I">
                                      <field name="Severity">info</field>
                                      <value name="TEXT">
                                        <shadow type="text" id="Nf!`R3;ka^S2~e-mU9G)">
                                          <field name="TEXT">Dreiwegeventil = EIN</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </statement>
                      <next>
                        <block type="timeouts_cleartimeout" id="_XPp}Ow}jRhmyrNcIyB?">
                          <field name="NAME">timeout2</field>
                          <next>
                            <block type="timeouts_settimeout" id="od~K/bvg:;:]~?LDL-7N">
                              <field name="NAME">timeout2</field>
                              <field name="DELAY">3</field>
                              <field name="UNIT">min</field>
                              <statement name="STATEMENT">
                                <block type="control" id="$4$p]?#3?/KaYsh,Xu4{">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">sonoff.0.WWSpeicher.POWER</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="logic_boolean" id="SMfo*vQ4EkBhOmro*E-+">
                                      <field name="BOOL">FALSE</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="control" id="}wGq{HYso//Qw~(*WNCn">
                                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                      <field name="OID">sonoff.0.WWPumpe.POWER</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="logic_boolean" id="Me;T`EW77OGL{l{I19x(">
                                          <field name="BOOL">FALSE</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="control" id="ra|].]jT@H[yvlKoV8Sl">
                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                          <field name="OID">sonoff.0.WWThermostat.POWER</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="logic_boolean" id="%Qa|C@=^wD,@?/=Cv[^V">
                                              <field name="BOOL">FALSE</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="debug" id="Z-xDa5T`U@+aK~51MN_L">
                                              <field name="Severity">info</field>
                                              <value name="TEXT">
                                                <shadow type="text" id="rySh#%]s]luxZ.8]kVbQ">
                                                  <field name="TEXT">Dreiwegeventil = AUS</field>
                                                </shadow>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </statement>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      Vielen Dank schon mal!

      paul53 A 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @Andreas 9 last edited by paul53

        @andreas-9 sagte: Hat jemand eine Idee?

        Verwende ein Intervall zusammen mit einer Zählvariablen.

        Blockly_temp.JPG

        1 Reply Last reply Reply Quote 0
        • A
          Andreas 9 @Andreas 9 last edited by

          @andreas-9
          Super! Danke!
          Ich teste das gleich mal.
          Noch ne Frage: Wozu ist dann das "wiederhole..."-Blockly?

          A 1 Reply Last reply Reply Quote 0
          • A
            Andreas 9 @Andreas 9 last edited by

            @andreas-9 Funktioniert hervorragend!!!
            Ich frage mich aber doch warum das mit dem "wiederhole"-Blockly nicht funktioniert.
            Viele Grüße ins Forum!

            Asgothian 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Andreas 9 last edited by Asgothian

              @andreas-9 sagte in 3-Wegeventil 3x hintereinander auf und zu machen mit Blockly:

              Ich frage mich aber doch warum das mit dem "wiederhole"-Blockly nicht funktioniert.

              Das ist einfach erklärt:

              der Ausführen Timeout Block macht 2 Dinge:

              • er trägt in eine Liste ein was zur der angegebenen Zeit ausgeführt werden soll
              • er gibt eine Referenz auf diesen Eintrag in der Liste zurück.

              Der stop timeout Block macht genau eins: Er nimmt die Referenz und schaut in der Liste nach - ist da noch was, dann kommt es weg.

              Was deine Schleife also gemacht hat ist
              3 mal nacheinander (schnell) :

              • timeout aus der Liste entfernen
              • timeout in die Liste eintragen, delay 3 minuten
              • timeout2 aus der Liste entfernen
              • timeout2 in die Liste eintragen, delay 3 minuten

              An keiner der Stellen wartet er die 3 Minuten bevor er etwas an der Liste macht 🙂

              Am Ende der Schleife hast du also in der Liste:

              • einen Eintrag timeout, in 3 Minuten schalte die 3 Dinge ein
              • einen Eintrag, timeout2, in 3 Minuten, schalte die 3 Dinge aus

              Da das ganze sequentiell abgearbeitet wurde ist der Zeitpunkt des Ein und Ausschalten um wenige Millisekunden auseinander. Ich denke so 10 -50.

              Sprich ca. 3 Minuten nach Zeitplan-Start werden die 3 Geräte für 10-50 ms eingeschaltet 🙂

              A.

              A 1 Reply Last reply Reply Quote 0
              • A
                Andreas 9 @Asgothian last edited by

                @asgothian
                Na das hast du aber toll erklärt! Vielen Dank!
                Das hab sogar ich kapiert. 😀
                Wie aber arbeitet man denn damit?
                Mit "if timeout ..."?

                paul53 Asgothian 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @Andreas 9 last edited by

                  @andreas-9 sagte: Wie aber arbeitet man denn damit?

                  Mit Pause, wenn man die Abarbeitung der Schleife verzögern will.

                  1 Reply Last reply Reply Quote 0
                  • Asgothian
                    Asgothian Developer @Andreas 9 last edited by

                    @andreas-9 sagte in 3-Wegeventil 3x hintereinander auf und zu machen mit Blockly:

                    @asgothian
                    Na das hast du aber toll erklärt! Vielen Dank!
                    Das hab sogar ich kapiert. 😀
                    Wie aber arbeitet man denn damit?
                    Mit "if timeout ..."?

                    Was meinst du mit 'wie arbeitet man damit' ?

                    Wenn du mehrere Aktionen zeitlich nacheinander haben willst sind Intervalle dein Freund.
                    Wenn eine Aktion darauf warten soll das so ein Timeout abgearbeitet wurde, dann sind 'hilft-states' unter '0_userdata.0' dein Freund (setzen in dem Teil wo der Timeout abgearbeitet wird, Auswerten über Trigger.
                    Wenn du Ressourcen verschwenden willst machst du einen 'heartbeat', sprich ein Intervall das jede Sekunde oder so aktiv wird um irgendwelche Variable zu prüfen

                    Die von @paul53 angesprochene 'pause' funktioniert in der Theorie auch, hat aber den Nachteil das sie nicht (ohne weiteres) abgebrochen werden kannn. Die Pause läuft immer bis zum Ende

                    Ein Skript wie dieses ist also eher ungünstig:
                    Screenshot 2025-03-03 at 10.20.38.png

                    Sobald der Ablauf einmal gestartet wurde läuft der für 150 s ohne eine Chance das er abgebrochen wird - es sei denn jemand beendet das gesamte Skript. Wenn man das gleiche mit Intervallen und/oder timeouts macht kann man bei jeder Aktion das ganze abbrechen.

                    Natürlich kann man da mit extra-Konstruktionen auch einen Abbruch mit einbauen - das ist aber aufwändig und geht gegen das Prinzip einer 'event-basierten' Abarbeitung auf dem der ioBroker aufbaut.

                    A

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      Andreas 9 @Asgothian last edited by

                      @asgothian
                      Na da hab ich jetzt ja viel Stoff zum rumprobbieren!
                      Vielen Dank für die ausführlichen Erklärungen.
                      Sorry, aber mit der Kontext-Hilfe komme ich nicht wirklich zurecht...

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      926
                      Online

                      31.7k
                      Users

                      79.7k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      217
                      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