NEWS
Wert schwankt
-
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:
<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:
<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>
-
Quark... hatte nicht den ganze Beitrag gelesen.
- Nimm eine Variable und
- Prüfe vor dem senden der Nachricht ob sie wahr ist, wenn wahr nicht senden, sonst senden
- setzte die Variable nach dem Senden auf wahr
- Starte einen Timeout über 3 Stunden der die Variable auf false setzt.
-
wie kommt der Wert in dein System?
-
@mika-0 sagte: Schicke eine Nachricht und dann warte 3 Stunden
-
-
-
@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.
-
@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
-
@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.
-
@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 -
@paul53
Ich würde beides machen.- falls die Gegenmaßnahme nicht greift
- wenn man die Nachricht übersieht.
Muss der TE aber entscheiden, der kennt sich und die Anlage
-
@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!