Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Wert schwankt

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wert schwankt

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

      Hallo, ich versuche eine Info zu erhalten, wenn der analoger Wert Boiler Temperatur eine gewisse Schwelle erreicht.
      leider schwankt der Wert und die Schwelle wird sehr oft getroffen und dadurch ausgelöst.
      Eine Alternative wie ich aus einem anderen Beitrag gefunden habe mit timeout bringt kein Ergebnis. Vielleicht fällt jemand der Fehler auf?

      Als einfachste Möglichkeit sehe ich: Schicke eine Nachricht und dann warte 3 Stunden, bis dahin ist der Temp Wert wieder gestiegen oder wegen Urlaub noch tiefer. Aber wie umsetzen?

      Hier kommen 100 Meldungen innerhalb weniger Minuten:
      e93ff90a-6f7e-421b-96fd-64b5939c33a8-image.png

      <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on" id="gD(1_b5fzS?6{cw2:scS" x="-1088" y="-663">
          <field name="OID">alias.0.DBs.Boiler_Temperatur</field>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <statement name="STATEMENT">
            <block type="controls_if" id="sQcoID9NRwTd#?InBp9P">
              <value name="IF0">
                <block type="logic_operation" id="A;]iaK(k`aKa%g1)Lp%1" inline="false">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id="H$a]jAlOr1HhA_,2=Q$!">
                      <field name="OP">LTE</field>
                      <value name="A">
                        <block type="on_source" id="kR8twC{(ak7:?[IDhe]t">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="DL8T]3(e%+#|KZX*G0m,">
                          <field name="NUM">37</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_compare" id="tD9=a@:Xo|;]W)V;`Al,">
                      <field name="OP">GT</field>
                      <value name="A">
                        <block type="on_source" id="Jf=bg7p720cLx{Uyc$o-">
                          <field name="ATTR">oldState.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="(:rG#h#PcW-(A2Vdd{1`">
                          <field name="NUM">37</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="telegram" id="`_~eUdL[1xeTzP:/$*6b">
                  <field name="INSTANCE"></field>
                  <field name="LOG"></field>
                  <field name="SILENT">FALSE</field>
                  <field name="PARSEMODE">default</field>
                  <field name="ESCAPING">FALSE</field>
                  <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field>
                  <value name="MESSAGE">
                    <shadow type="text" id="bjPAMWuo)=)O.fAAkSmm">
                      <field name="TEXT">text</field>
                    </shadow>
                    <block type="text_join" id="_eRFGS)2(LF^pxJ/o1K~" inline="false">
                      <mutation items="3"></mutation>
                      <value name="ADD0">
                        <block type="text" id="Oe9tw#HA6C)mKPDKaU8L">
                          <field name="TEXT">Boiler hat </field>
                        </block>
                      </value>
                      <value name="ADD1">
                        <block type="on_source" id="cr@YI!WG(d$wegJ02lX,">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="ADD2">
                        <block type="text" id="M!8l(6^uRUu2pl=ssVh%">
                          <field name="TEXT">°C.</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      Hier kommt keine Meldung, obwohl genauso aufgebaut wie bei jemand anderem scheinbar funktioniert:
      d06103c6-c500-469f-8cb6-23b6025a0c15-image.png

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable type="timeout" id="timeout2">timeout2</variable>
        </variables>
        <block type="on" id="gD(1_b5fzS?6{cw2:scS" x="-1088" y="-663">
          <field name="OID">alias.0.DBs.Boiler_Temperatur</field>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <statement name="STATEMENT">
            <block type="timeouts_cleartimeout" id="Z0Rd;a*.f|G/W-c#,u`z">
              <field name="NAME">timeout2</field>
              <next>
                <block type="controls_if" id="sQcoID9NRwTd#?InBp9P">
                  <value name="IF0">
                    <block type="logic_operation" id="A;]iaK(k`aKa%g1)Lp%1" inline="false">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_compare" id="H$a]jAlOr1HhA_,2=Q$!">
                          <field name="OP">LTE</field>
                          <value name="A">
                            <block type="on_source" id="kR8twC{(ak7:?[IDhe]t">
                              <field name="ATTR">state.val</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id="DL8T]3(e%+#|KZX*G0m,">
                              <field name="NUM">37</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="tD9=a@:Xo|;]W)V;`Al,">
                          <field name="OP">GT</field>
                          <value name="A">
                            <block type="on_source" id="Jf=bg7p720cLx{Uyc$o-">
                              <field name="ATTR">oldState.val</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id="(:rG#h#PcW-(A2Vdd{1`">
                              <field name="NUM">37</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="timeouts_settimeout" id="9mmD,LSeN+Vtgil~@scs">
                      <field name="NAME">timeout2</field>
                      <field name="DELAY">1000</field>
                      <field name="UNIT">ms</field>
                      <statement name="STATEMENT">
                        <block type="telegram" id="`_~eUdL[1xeTzP:/$*6b">
                          <field name="INSTANCE"></field>
                          <field name="LOG"></field>
                          <field name="SILENT">FALSE</field>
                          <field name="PARSEMODE">default</field>
                          <field name="ESCAPING">FALSE</field>
                          <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field>
                          <value name="MESSAGE">
                            <shadow type="text" id="bjPAMWuo)=)O.fAAkSmm">
                              <field name="TEXT">text</field>
                            </shadow>
                            <block type="text_join" id="_eRFGS)2(LF^pxJ/o1K~" inline="false">
                              <mutation items="3"></mutation>
                              <value name="ADD0">
                                <block type="text" id="Oe9tw#HA6C)mKPDKaU8L">
                                  <field name="TEXT">Boiler hat </field>
                                </block>
                              </value>
                              <value name="ADD1">
                                <block type="on_source" id="cr@YI!WG(d$wegJ02lX,">
                                  <field name="ATTR">state.val</field>
                                </block>
                              </value>
                              <value name="ADD2">
                                <block type="text" id="M!8l(6^uRUu2pl=ssVh%">
                                  <field name="TEXT">°C.</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </statement>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </statement>
        </block>
      </xml>
      
      T T paul53 MartinP 4 Replies Last reply Reply Quote 0
      • T
        ticaki Developer @Mika 0 last edited by ticaki

        @mika-0

        Quark... hatte nicht den ganze Beitrag gelesen.

        1. Nimm eine Variable und
        2. Prüfe vor dem senden der Nachricht ob sie wahr ist, wenn wahr nicht senden, sonst senden
        3. setzte die Variable nach dem Senden auf wahr
        4. Starte einen Timeout über 3 Stunden der die Variable auf false setzt.
        1 Reply Last reply Reply Quote -1
        • T
          TT-Tom @Mika 0 last edited by

          @mika-0

          wie kommt der Wert in dein System?

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

            @mika-0 sagte: Schicke eine Nachricht und dann warte 3 Stunden

            Blockly_temp.JPG

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

              @paul53 OK Danke. Wird getestet.
              @TT-Tom Wert kommt von LOGO als Analogwert, ioBroker liest nur ein.
              @ticaki Danke, fuchse ich mich parallel rein. Will ja besser werden dank euch!

              paul53 T 2 Replies Last reply Reply Quote 0
              • paul53
                paul53 @Mika 0 last edited by

                @mika-0 sagte: fuchse ich mich parallel rein.

                Das von mir gezeigte Blockly entspricht dem Vorschlag von @ticaki mit dem Unterschied, dass die Timervariable als Sperrvariable dient.

                1 Reply Last reply Reply Quote 0
                • T
                  TT-Tom @Mika 0 last edited by

                  @mika-0 sagte in Wert schwankt:

                  Wert kommt von LOGO als Analogwert, ioBroker liest nur ein.

                  mit wieviel Kommastellen arbeitet der Analogwert, ich würde da auf Null gehen damit sollte der Wert auch ruhiger werden.

                  M 1 Reply Last reply Reply Quote 0
                  • MartinP
                    MartinP @Mika 0 last edited by MartinP

                    @mika-0 Solche Zitterei-Probleme löst man in der Regel mit einer "Hysterese".

                    Beispiel:
                    Es gibt zwei Zustände - "Überschritten" und "Unterschritten“

                    Im Zustand "Unterschritten":
                    Bei Erreichen der Schwelltemperatur wird "Überschritten" als Zustand gesetzt und gemeldet.

                    Im Zustand "Überschritten":
                    Bei Unterschreiten von Schwelltemperatur - Hysterese wird "Unterschritten" als Zustand gesetzt und gemeldet.
                    Als Hysterese könnte man 0,5...2 °C wählen.

                    Rechenbeispiel
                    Schwellwert 50°C, Hysterese 1°C Ausgangszustand "Unterschritten"

                    Messtemperatur überschreitet 50°C -> Wechsel auf "Überschritten"

                    Messtemperatur sinkt auf 49,5°C -> nix passiert, da größer als (50-1)

                    Messtemperatur sinkt weiter auf 48,6°C -> Wechsel auf "Unterschritten"

                    Messtemperatur steigt auf 49,5°C -> nix passiert, da kleiner 50°C

                    paul53 1 Reply Last reply Reply Quote 1
                    • paul53
                      paul53 @MartinP last edited by

                      @martinp sagte: Solche Zitterei-Probleme löst man in der Regel mit einer "Hysterese".

                      Ich halte eine Hysterese auch für besser als eine Sperre durch lange Verzögerung.

                      Blockly_temp.JPG

                      MartinP T 2 Replies Last reply Reply Quote 0
                      • MartinP
                        MartinP @paul53 last edited by MartinP

                        @paul53 Danke für das Blockly Beispiel. Sehr übersichtlich und verblüffend einfach.
                        Vielleicht lohnt es, sich doch etwas mehr mit Blockly zu beschäftigen.
                        Meist bin ich derzeit schnell an einem Punkt, wo ich auf Javascript umschalte.
                        Blockly scheint erst einfach, aber irgendwann hat man den Eindruck, es gibt mehr Blockly Blocktypen, als chinesische Schriftzeichen, und fühlt sich als C++ Programmierer selbst bei Javascript wohler😉

                        1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer @paul53 last edited by ticaki

                          @paul53
                          Ich würde beides machen.

                          1. falls die Gegenmaßnahme nicht greift
                          2. wenn man die Nachricht übersieht.

                          Muss der TE aber entscheiden, der kennt sich und die Anlage 😊

                          1 Reply Last reply Reply Quote 0
                          • M
                            Mika 0 @TT-Tom last edited by

                            @TT-Tom Ich arbeite nur mit vollen Grad. Trotzdem schwankt eben ein Wert bei Wasserentnahme.

                            @paul53 Der Aufbau in deinem Bild ist ja einwandfrei! Kein zeitlicher Einfluss. Über Variable, einfach CLEVER. Getestet und funktioniert.

                            @ticaki Die Meldung ist nicht kriegsentscheidend. Man kann dann einfach bei genug Sonne selbsts im ioBroker die Boiler Heizung aktivieren. Entweder über Wärmepumpe oder händisch Heizstab.

                            DANKE AN ALLE!

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            940
                            Online

                            31.9k
                            Users

                            80.2k
                            Topics

                            1.3m
                            Posts

                            5
                            12
                            474
                            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