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. [Solved] Mindestdauer für Logikabfrage (z.B. 20 Min wahr)

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    1
    1
    10

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

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

[Solved] Mindestdauer für Logikabfrage (z.B. 20 Min wahr)

Geplant Angeheftet Gesperrt Verschoben Blockly
7 Beiträge 2 Kommentatoren 309 Aufrufe 1 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.
  • M Offline
    M Offline
    Morgennebel
    schrieb am zuletzt editiert von Morgennebel
    #1

    Moin Moin,

    ich möchte in Blockly triggern, wenn eine Bedingung für einen definierten Zeitraum wahr ist.

    Z.B. Ventilstand von Sensor X ist kleiner als 20% für 20 Minuten.

    Dank Google kann ich auf einmaliges Unterschreiten des Schwellwertes triggern:

    <xml xmlns="https://developers.google.com/blockly/xml">
      <block type="on_ext" id="=qm@$Ij7CE[U}Wl2wcN(" x="188" y="213">
        <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
        <field name="CONDITION">ne</field>
        <field name="ACK_CONDITION"></field>
        <value name="OID0">
          <shadow type="field_oid" id="lm32_6LQZ+#ElSG!`nZ9">
            <field name="oid">javascript.0.Calculated.Heating.ValvesAverage</field>
          </shadow>
        </value>
        <statement name="STATEMENT">
          <block type="controls_if" id="x~JBuYW4FmoO+knH*deB">
            <value name="IF0">
              <block type="logic_operation" id="?s%e?Ln%YLGl]@gT!!6C" inline="false">
                <field name="OP">AND</field>
                <value name="A">
                  <block type="logic_compare" id=":n~D1LRpsAVB:E={Jh#A">
                    <field name="OP">LT</field>
                    <value name="A">
                      <block type="on_source" id="z,Uk442;2*=XT%?kJi9d">
                        <field name="ATTR">state.val</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="math_number" id="9H4iBGWR/S7lb[.tzM+r">
                        <field name="NUM">20</field>
                      </block>
                    </value>
                  </block>
                </value>
                <value name="B">
                  <block type="logic_compare" id="Y9ki}D*8G1.%vuS`oEK^">
                    <field name="OP">GTE</field>
                    <value name="A">
                      <block type="on_source" id="2@l4,m4b]]EbTd,uLYt+">
                        <field name="ATTR">oldState.val</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="math_number" id="u+$n+|M*,BkzVIVIOwmF">
                        <field name="NUM">20</field>
                      </block>
                    </value>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO0">
              <block type="comment" id="z(P5^vmE/F[Ywn|2M*y:">
                <field name="COMMENT">Switch Heizungsprofil</field>
              </block>
            </statement>
          </block>
        </statement>
      </block>
    </xml>
    

    Aber ich habe keinen Lösungsansatz gefunden, das "Alter der letzten Änderung" des Logikvergleiches zu prüfen.

    Gibt es dort eine clevere, mir unbekannte Lösung?

    Danke, -MN

    --
    IOBroker nach 5.5 Jahren FHEM.
    Docker: IOB+redis+InfluxDB mit Devuan 6.0 (Linux).
    OPNSense, Ruckus, Homematic, HeatingControl, Hue, InfluxDB, Kodi, LinkedDevices, LGTV, LGTV11, Luftdaten, MQTT, MiHome-Vaccum, Pi-Hole, Pollenflug, Shelly, Telegram, Vis, Wolf,

    paul53P 1 Antwort Letzte Antwort
    0
    • M Morgennebel

      Moin Moin,

      ich möchte in Blockly triggern, wenn eine Bedingung für einen definierten Zeitraum wahr ist.

      Z.B. Ventilstand von Sensor X ist kleiner als 20% für 20 Minuten.

      Dank Google kann ich auf einmaliges Unterschreiten des Schwellwertes triggern:

      <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on_ext" id="=qm@$Ij7CE[U}Wl2wcN(" x="188" y="213">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="lm32_6LQZ+#ElSG!`nZ9">
              <field name="oid">javascript.0.Calculated.Heating.ValvesAverage</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="x~JBuYW4FmoO+knH*deB">
              <value name="IF0">
                <block type="logic_operation" id="?s%e?Ln%YLGl]@gT!!6C" inline="false">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id=":n~D1LRpsAVB:E={Jh#A">
                      <field name="OP">LT</field>
                      <value name="A">
                        <block type="on_source" id="z,Uk442;2*=XT%?kJi9d">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="9H4iBGWR/S7lb[.tzM+r">
                          <field name="NUM">20</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_compare" id="Y9ki}D*8G1.%vuS`oEK^">
                      <field name="OP">GTE</field>
                      <value name="A">
                        <block type="on_source" id="2@l4,m4b]]EbTd,uLYt+">
                          <field name="ATTR">oldState.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="u+$n+|M*,BkzVIVIOwmF">
                          <field name="NUM">20</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="comment" id="z(P5^vmE/F[Ywn|2M*y:">
                  <field name="COMMENT">Switch Heizungsprofil</field>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      Aber ich habe keinen Lösungsansatz gefunden, das "Alter der letzten Änderung" des Logikvergleiches zu prüfen.

      Gibt es dort eine clevere, mir unbekannte Lösung?

      Danke, -MN

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

      @Morgennebel sagt:

      Ventilstand von Sensor X ist kleiner als 20% für 20 Minuten.

      Blockly_temp.JPG

      <xml xmlns="https://developers.google.com/blockly/xml">
       <variables>
         <variable type="timeout" id="timeout">timeout</variable>
       </variables>
       <block type="on_ext" id="=qm@$Ij7CE[U}Wl2wcN(" x="188" y="213">
         <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
         <field name="CONDITION">ne</field>
         <field name="ACK_CONDITION"></field>
         <value name="OID0">
           <shadow type="field_oid" id="lm32_6LQZ+#ElSG!`nZ9">
             <field name="oid">javascript.0.Calculated.Heating.ValvesAverage</field>
           </shadow>
         </value>
         <statement name="STATEMENT">
           <block type="controls_if" id="x~JBuYW4FmoO+knH*deB">
             <mutation elseif="1"></mutation>
             <value name="IF0">
               <block type="logic_compare" id=":n~D1LRpsAVB:E={Jh#A">
                 <field name="OP">GTE</field>
                 <value name="A">
                   <block type="on_source" id="z,Uk442;2*=XT%?kJi9d">
                     <field name="ATTR">state.val</field>
                   </block>
                 </value>
                 <value name="B">
                   <block type="math_number" id="9H4iBGWR/S7lb[.tzM+r">
                     <field name="NUM">20</field>
                   </block>
                 </value>
               </block>
             </value>
             <statement name="DO0">
               <block type="timeouts_cleartimeout" id="4x0.9pzGqaFw@x(C7JRO">
                 <field name="NAME">timeout</field>
               </block>
             </statement>
             <value name="IF1">
               <block type="logic_compare" id="Y9ki}D*8G1.%vuS`oEK^">
                 <field name="OP">GTE</field>
                 <value name="A">
                   <block type="on_source" id="2@l4,m4b]]EbTd,uLYt+">
                     <field name="ATTR">oldState.val</field>
                   </block>
                 </value>
                 <value name="B">
                   <block type="math_number" id="u+$n+|M*,BkzVIVIOwmF">
                     <field name="NUM">20</field>
                   </block>
                 </value>
               </block>
             </value>
             <statement name="DO1">
               <block type="timeouts_settimeout" id="8M7q(=1M!7N=vuSEvn#K">
                 <field name="NAME">timeout</field>
                 <field name="DELAY">20</field>
                 <field name="UNIT">min</field>
                 <statement name="STATEMENT">
                   <block type="comment" id="z(P5^vmE/F[Ywn|2M*y:">
                     <field name="COMMENT">Switch Heizungsprofil</field>
                   </block>
                 </statement>
               </block>
             </statement>
           </block>
         </statement>
       </block>
      </xml>
      

      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

      M 2 Antworten Letzte Antwort
      0
      • paul53P paul53

        @Morgennebel sagt:

        Ventilstand von Sensor X ist kleiner als 20% für 20 Minuten.

        Blockly_temp.JPG

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable type="timeout" id="timeout">timeout</variable>
         </variables>
         <block type="on_ext" id="=qm@$Ij7CE[U}Wl2wcN(" x="188" y="213">
           <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
           <field name="CONDITION">ne</field>
           <field name="ACK_CONDITION"></field>
           <value name="OID0">
             <shadow type="field_oid" id="lm32_6LQZ+#ElSG!`nZ9">
               <field name="oid">javascript.0.Calculated.Heating.ValvesAverage</field>
             </shadow>
           </value>
           <statement name="STATEMENT">
             <block type="controls_if" id="x~JBuYW4FmoO+knH*deB">
               <mutation elseif="1"></mutation>
               <value name="IF0">
                 <block type="logic_compare" id=":n~D1LRpsAVB:E={Jh#A">
                   <field name="OP">GTE</field>
                   <value name="A">
                     <block type="on_source" id="z,Uk442;2*=XT%?kJi9d">
                       <field name="ATTR">state.val</field>
                     </block>
                   </value>
                   <value name="B">
                     <block type="math_number" id="9H4iBGWR/S7lb[.tzM+r">
                       <field name="NUM">20</field>
                     </block>
                   </value>
                 </block>
               </value>
               <statement name="DO0">
                 <block type="timeouts_cleartimeout" id="4x0.9pzGqaFw@x(C7JRO">
                   <field name="NAME">timeout</field>
                 </block>
               </statement>
               <value name="IF1">
                 <block type="logic_compare" id="Y9ki}D*8G1.%vuS`oEK^">
                   <field name="OP">GTE</field>
                   <value name="A">
                     <block type="on_source" id="2@l4,m4b]]EbTd,uLYt+">
                       <field name="ATTR">oldState.val</field>
                     </block>
                   </value>
                   <value name="B">
                     <block type="math_number" id="u+$n+|M*,BkzVIVIOwmF">
                       <field name="NUM">20</field>
                     </block>
                   </value>
                 </block>
               </value>
               <statement name="DO1">
                 <block type="timeouts_settimeout" id="8M7q(=1M!7N=vuSEvn#K">
                   <field name="NAME">timeout</field>
                   <field name="DELAY">20</field>
                   <field name="UNIT">min</field>
                   <statement name="STATEMENT">
                     <block type="comment" id="z(P5^vmE/F[Ywn|2M*y:">
                       <field name="COMMENT">Switch Heizungsprofil</field>
                     </block>
                   </statement>
                 </block>
               </statement>
             </block>
           </statement>
         </block>
        </xml>
        

        M Offline
        M Offline
        Morgennebel
        schrieb am zuletzt editiert von
        #3

        @paul53 Vielen Dank für die schnelle Hilfe. Gleich ausprobieren...

        Ciao, -MN

        --
        IOBroker nach 5.5 Jahren FHEM.
        Docker: IOB+redis+InfluxDB mit Devuan 6.0 (Linux).
        OPNSense, Ruckus, Homematic, HeatingControl, Hue, InfluxDB, Kodi, LinkedDevices, LGTV, LGTV11, Luftdaten, MQTT, MiHome-Vaccum, Pi-Hole, Pollenflug, Shelly, Telegram, Vis, Wolf,

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @Morgennebel sagt:

          Ventilstand von Sensor X ist kleiner als 20% für 20 Minuten.

          Blockly_temp.JPG

          <xml xmlns="https://developers.google.com/blockly/xml">
           <variables>
             <variable type="timeout" id="timeout">timeout</variable>
           </variables>
           <block type="on_ext" id="=qm@$Ij7CE[U}Wl2wcN(" x="188" y="213">
             <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
             <field name="CONDITION">ne</field>
             <field name="ACK_CONDITION"></field>
             <value name="OID0">
               <shadow type="field_oid" id="lm32_6LQZ+#ElSG!`nZ9">
                 <field name="oid">javascript.0.Calculated.Heating.ValvesAverage</field>
               </shadow>
             </value>
             <statement name="STATEMENT">
               <block type="controls_if" id="x~JBuYW4FmoO+knH*deB">
                 <mutation elseif="1"></mutation>
                 <value name="IF0">
                   <block type="logic_compare" id=":n~D1LRpsAVB:E={Jh#A">
                     <field name="OP">GTE</field>
                     <value name="A">
                       <block type="on_source" id="z,Uk442;2*=XT%?kJi9d">
                         <field name="ATTR">state.val</field>
                       </block>
                     </value>
                     <value name="B">
                       <block type="math_number" id="9H4iBGWR/S7lb[.tzM+r">
                         <field name="NUM">20</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <statement name="DO0">
                   <block type="timeouts_cleartimeout" id="4x0.9pzGqaFw@x(C7JRO">
                     <field name="NAME">timeout</field>
                   </block>
                 </statement>
                 <value name="IF1">
                   <block type="logic_compare" id="Y9ki}D*8G1.%vuS`oEK^">
                     <field name="OP">GTE</field>
                     <value name="A">
                       <block type="on_source" id="2@l4,m4b]]EbTd,uLYt+">
                         <field name="ATTR">oldState.val</field>
                       </block>
                     </value>
                     <value name="B">
                       <block type="math_number" id="u+$n+|M*,BkzVIVIOwmF">
                         <field name="NUM">20</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <statement name="DO1">
                   <block type="timeouts_settimeout" id="8M7q(=1M!7N=vuSEvn#K">
                     <field name="NAME">timeout</field>
                     <field name="DELAY">20</field>
                     <field name="UNIT">min</field>
                     <statement name="STATEMENT">
                       <block type="comment" id="z(P5^vmE/F[Ywn|2M*y:">
                         <field name="COMMENT">Switch Heizungsprofil</field>
                       </block>
                     </statement>
                   </block>
                 </statement>
               </block>
             </statement>
           </block>
          </xml>
          

          M Offline
          M Offline
          Morgennebel
          schrieb am zuletzt editiert von
          #4

          @paul53 Nochmals Danke.

          Diese Lösung funktioniert jedoch nur, wenn sich die Werte nicht schneller als der definierte Zeitraum ändern.

          Beispiel:

          WERT: 22, 2.5 Min, WERT: 19, 2.5 Min, Wert: 17, 2.5 Min, Wert 15, 2.5 Min, Wert 17, 2.5 Min usw.

          D.h. der Wert eiert unterhalb des Schwellwertes, ändert sich jedoch. Jede Änderung führt dann zu einem Neusetzen des timeouts und der Ausführungsteil ("switch Heizungsprofil") wird nicht ausgeführt.

          Der Trigger löst auch nicht aus, wenn beim Start des Scriptes der ValvesAverage-Wert bereits unter 20% (Schwellwert) ist - denn der "vorherige Wert" ist niemals größer als 20...

          Hmmmm....

          Ciao, -MN

          --
          IOBroker nach 5.5 Jahren FHEM.
          Docker: IOB+redis+InfluxDB mit Devuan 6.0 (Linux).
          OPNSense, Ruckus, Homematic, HeatingControl, Hue, InfluxDB, Kodi, LinkedDevices, LGTV, LGTV11, Luftdaten, MQTT, MiHome-Vaccum, Pi-Hole, Pollenflug, Shelly, Telegram, Vis, Wolf,

          paul53P 1 Antwort Letzte Antwort
          0
          • M Morgennebel

            @paul53 Nochmals Danke.

            Diese Lösung funktioniert jedoch nur, wenn sich die Werte nicht schneller als der definierte Zeitraum ändern.

            Beispiel:

            WERT: 22, 2.5 Min, WERT: 19, 2.5 Min, Wert: 17, 2.5 Min, Wert 15, 2.5 Min, Wert 17, 2.5 Min usw.

            D.h. der Wert eiert unterhalb des Schwellwertes, ändert sich jedoch. Jede Änderung führt dann zu einem Neusetzen des timeouts und der Ausführungsteil ("switch Heizungsprofil") wird nicht ausgeführt.

            Der Trigger löst auch nicht aus, wenn beim Start des Scriptes der ValvesAverage-Wert bereits unter 20% (Schwellwert) ist - denn der "vorherige Wert" ist niemals größer als 20...

            Hmmmm....

            Ciao, -MN

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

            @Morgennebel sagte:

            Diese Lösung funktioniert jedoch nur, wenn sich die Werte nicht schneller als der definierte Zeitraum ändern.
            Beispiel:
            WERT: 22, 2.5 Min, WERT: 19, 2.5 Min, Wert: 17, 2.5 Min, Wert 15, 2.5 Min, Wert 17, 2.5 Min usw.

            Nur bei der ersten Änderung 22 --> 19 ist die Bedingung "vorheriger Wert >= 20" erfüllt, also wird der Timer nur dann gestartet.

            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

            M 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @Morgennebel sagte:

              Diese Lösung funktioniert jedoch nur, wenn sich die Werte nicht schneller als der definierte Zeitraum ändern.
              Beispiel:
              WERT: 22, 2.5 Min, WERT: 19, 2.5 Min, Wert: 17, 2.5 Min, Wert 15, 2.5 Min, Wert 17, 2.5 Min usw.

              Nur bei der ersten Änderung 22 --> 19 ist die Bedingung "vorheriger Wert >= 20" erfüllt, also wird der Timer nur dann gestartet.

              M Offline
              M Offline
              Morgennebel
              schrieb am zuletzt editiert von
              #6

              @paul53 Genau.

              Das ist dann zwar eine schicke Lösung, aber nicht eine Lösung für meine Frage :)

              Denn 20 Minuten unter 20% würde auch bei Werten von 17.5, 18, 15, 12, 8, 9 jeweils mit 3 Minuten Unterschied wahr sein oder beim Start des Skriptes mit einem Startwert von unter 20...

              Ich werde Deinen Ansatz nochmals durchgrübeln müssen.

              Danke für den Denkanstoß und die Hilfe.

              Ciao, -MN

              --
              IOBroker nach 5.5 Jahren FHEM.
              Docker: IOB+redis+InfluxDB mit Devuan 6.0 (Linux).
              OPNSense, Ruckus, Homematic, HeatingControl, Hue, InfluxDB, Kodi, LinkedDevices, LGTV, LGTV11, Luftdaten, MQTT, MiHome-Vaccum, Pi-Hole, Pollenflug, Shelly, Telegram, Vis, Wolf,

              paul53P 1 Antwort Letzte Antwort
              0
              • M Morgennebel

                @paul53 Genau.

                Das ist dann zwar eine schicke Lösung, aber nicht eine Lösung für meine Frage :)

                Denn 20 Minuten unter 20% würde auch bei Werten von 17.5, 18, 15, 12, 8, 9 jeweils mit 3 Minuten Unterschied wahr sein oder beim Start des Skriptes mit einem Startwert von unter 20...

                Ich werde Deinen Ansatz nochmals durchgrübeln müssen.

                Danke für den Denkanstoß und die Hilfe.

                Ciao, -MN

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

                @Morgennebel sagte:

                beim Start des Skriptes mit einem Startwert von unter 20...

                Das muss außerhalb des Triggers ausgewertet werden (ohne Timeout).

                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

                583

                Online

                32.7k

                Benutzer

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