NEWS
Wenn, dann mit Intervall
-
@paul53 Hi Paul, danke für den Tipp, aber das Blockly funktioniert halt nicht. Daher habe ich den Thread aufgemacht.
Der Heizstab wird einfach nicht angesteuert. Daher denke ich ist das Blockly im Aufbau falsch. Über Nodered kann ich das ansteuern, möchte das aber über Blockly machen -
@mika-0 Moin
und warum musst du alle 250ms ein True senden? Kannst du nicht einfach ein dauerhaftes True senden?
-
@mika-0 sagte: Der Heizstab wird einfach nicht angesteuert.
Versuche es mal so:
EDIT: Sind bei S7 Status-Rückmeldung und Steuerung nicht getrennte Datenpunkte, wobei die Steuerung per Taster erfolgt, der toggled?
-
@paul53 Hey paul53 Gute Neuigkeiten. Die Ansteuerung wird nun durch dein Blockly ausgeführt. Leider fehlt tatsächlich ein ständiges Senden des true Befehls alle 250ms. Das heißt die Ansteuerung wird immer kurz gestoppt.
Durch einen Test eines anderen Blockly konnte ich das bestätigen. Ich habe nun bei dem "setze heizstab auf wahr" den Intervall alle 250ms gesetzt. Das hat nicht zum Erfolg geführt. Dann habe ich nochmals den Intervall2 alle 250ms weiter unten eingefügt, nun geht es.
Kannst du mir erklären, wozu der untere Bereich sein soll?
Habs umkreist, was mir unklar ist.
Und leider kam unten noch eine Meldung in rot:
error javascript.0 (24999) Script script.js.Boiler.Boiler_Stufe_Heizstab is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!
Verstehe ich das richtig, dass die 250ms wohl zu oft sind? Mache ich mir das System dadurch ggf. langsamer?
-
@mika-0 sagte: fehlt tatsächlich ein ständiges Senden des true Befehls alle 250ms.
Wenn nicht alle 250 ms true gesendet wird, schaltet der Heizstab aus?
Dann macht man es anders:Explizit ausschalten muss man dann nicht.
-
@paul53 Vielen Dank 1. für die Ausführung, 2. für die Schnelle. Du bist da richtig fit drin... Es ist mir schon etwas peinlich, aber dein -->und<--
finde ich nicht in meinem Logik Baum:
Lösung HIER gefunden:
https://forum.iobroker.net/topic/11160/gelöst-blockly-wo-finde-ich-mehrfach-und-oder-baustein/3 -
@mika-0 sagte: dass die 250ms wohl zu oft sind?
Nein, 250 ms sind nicht zu oft (240 mal pro Minute). Ohne die Sperre "und nicht Intervall" werden mehrere Intervalle ausgeführt und das ist dann zu oft.
-
@paul53 Hallo
die bestehende Funktion funktioniert und nun soll das ganze auch für den Winterbetrieb eingerichtet werden.
Anforderungen:
Von Oktober bis April & (Juli zum testen)
Wenn EG und OG nicht im Urlaub (also false)
Wenn die Boiler Temperatur <40°C, dann im 30 Sekunden Zyklus den Boiler mit true ansteuern und Benachrichtung via Telegram
Wenn 44°C erreicht sind, dann Ansteuerung false 1x senden und Benachrichtigung via Telegram.Ich schätze ich habs einfach nur falsch verschachtelt, finde aber den Fehler nicht, warum weder die Ansteuerung, noch die Benachrichtigung funktioniert.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="interval" id="Intervall2">Intervall2</variable> </variables> <block type="comment" id="u%Qs)Ra|32C#MuW{OQ!R" x="-1238" y="-1763"> <field name="COMMENT">Winter Okt bis Apr tagsüber</field> <next> <block type="comment" id="lMD}VHS@6N9Vre]A4XT("> <field name="COMMENT">Boiler heizen Stufe 1</field> <next> <block type="comment" id="8SDlv%bc1{v%_!YL7j)?"> <field name="COMMENT">und Meldung Telegram</field> <next> <block type="schedule" id="0XFQ^|f9iPK`Y?.E80X0"> <field name="SCHEDULE">{"time":{"start":"08:00","end":"21:00","mode":"minutes","interval":1},"valid":{"from":"23.07.2023"},"period":{"months":"[1,2,3,4,7,10,11,12]"}}</field> <statement name="STATEMENT"> <block type="on_ext" id="B_p5*DB2]q|-zC!utzLz"> <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="mZBe{I5w-26?dTie%E3O"> <field name="oid">s7.0.DBs.DB1.Ganzes_Haus_Urlaub_aktiv_EG_und_OG</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="./x^-CNKT-wuZpq^SO~:"> <value name="IF0"> <block type="logic_compare" id=")m]e[=Z+}f8$~[u+wx/e"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="Q8qU*iu:oSjgPfy:z}H5"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="./HR#HQ$m-BmtC}Sd@{*"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="on_ext" id="*!KW2`];m:ZuRYJg+Ay~"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="Y4r16$k35;+^M!|TJ*pH"> <field name="oid">s7.2.DBs.DB1.Boiler_Temperatur</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="bkXSJ@;Zi0+Or/Kinr5g"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="mJV{5c:$zhWs8LoXvz_t"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="_5%PFrhlehX}))%}+Qa-"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="(?m)$%[o(_):)GhQ}c2;"> <field name="NUM">44</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="+[OPP*Gw/xDa;)$3I#H5"> <field name="COMMENT">Wert darüber = AUS. Trennung durch PUNKT</field> <next> <block type="timeouts_clearinterval" id="]LcW}O)A^EL82=Qs?Yr{"> <field name="NAME">Intervall2</field> <next> <block type="control" id="s)0vtL3If^E:@4`1Sq^D"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">s7.2.DBs.DB1.Boiler_Stufe_1_WP_Ansteuerung_(Dauersignal)</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="P7_$oiUeHQQJ6,R*DG4V"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="telegram" id="{jIWCJ{(YJAi`0},-kBz"> <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 xmlns="http://www.w3.org/1999/xhtml" type="text"> <field name="TEXT">text</field> </shadow> <block type="text" id="4Uiko`OhmkU.j;_;2:nX"> <field name="TEXT">Boiler wird Stufe 1 ausgeschaltet</field> </block> </value> <next> <block type="comment" id="{.-5(d{3OK~,6kcRnZ=P"> <field name="COMMENT">Wert darunter = EIN. Trennung durch PUNKT</field> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="auQ;~B8$^(nF*$rmT$Md" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="9IZ3OVrf+}o@5u[KKTa%"> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="7uO,|_^i@TJ*e4`TIyz$"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="3XDV@z`FT|uq;?[Z335["> <field name="NUM">40</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="t}az-X108YA/-Ha}Y-E#"> <value name="BOOL"> <block type="timeouts_getinterval" id="YW,hI{dww`#lhQRW;L:F"> <field name="NAME">Intervall2</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="timeouts_setinterval" id="k?O.(g5bMS4HKaUEUHW)"> <field name="NAME">Intervall2</field> <field name="INTERVAL">35</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id="Cj5cdB/[RTwYm?ja`qMo"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">s7.2.DBs.DB1.Boiler_Stufe_1_WP_Ansteuerung_(Dauersignal)</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="o0es{gF#!26A5tz9yt^*"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="telegram" id="M3L*_=w/Q,@GgP9lH#Kt"> <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 xmlns="http://www.w3.org/1999/xhtml" type="text" id="6Mj}ciK/[}a8S]ri+g*K"> <field name="TEXT">text</field> </shadow> <block type="text" id="-Zt##V7@O*o:j|:]|n)m"> <field name="TEXT">Boiler wird Stufe 1 angesteuert</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> </statement> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@mika-0 sagte: dann im 30 Sekunden Zyklus den Boiler mit true ansteuern und Benachrichtung via Telegram
Weshalb Boiler alle 30 s ansteuern? Wirklich alle 30 s eine Nachricht?
@mika-0 sagte in Wenn, dann mit Intervall:
falsch verschachtelt,
Ja, keine Trigger innerhalb von Triggern verwenden!!
Vorschlag: -
@paul53 dein Versuch hat im ersten Schritt nicht funktioniert. Ich schau aber erstmal selbst.
Und ja, die Ansteuerung will ich zyklisch haben. Hintergrund: Wenn PV Überschuss, dann aufheizen.
Sollte ein Aktivierungsbefehl gesendet werden, und die Kommunikation bricht ab oder der Pi würde sich aufhängen, kann niemand die Aufheizphase unterbrechen. Wenn ich aber zyklisch eine Nachricht senden muss, bsp. alle 30 Sek, dann wird die Aufheizfunktion nach etwas mehr als 30 Sekunden unterbrochen.
Melde mich wenn ich weiterkomme, oder auch nicht. Danke vorab