NEWS
Pool Chlorgenerator Steuerung
-
Hi Zs,
ich habe folgende Herausforderung
Ich bekomme von meinem Pool etwa stündlich Daten per Sigfox / MQTT
Ich habe eine Pumpe und einen intex-chlorgenerator an einem Shelly 2.5 hängen.Die pumpe schalte ich mit einem simplen Trigger Morgens ein und Abends aus da momentan die Wärmepumpe eh durchlaufen muss.
Chlor möchte ich aber in einem recht engen Fenster von 720 bis 780 mV als Redox-Spannung halten. Das entspricht etwa einer Laufzeit von 50 Min.
aktuell schalte ich den Shelly ein bei Unterschreitung und stumpf nach 50 Minuten wieder aus.Ich habe nun ein Blockly erstellt, dass den Wert prüft und dann einschaltet bzw bei Erreichen des Maximalwertes wieder ausschaltet.
Was mir fehlt ist eine Art Sicherheitsabschaltung nach 50 Minuten aber nur wenn der Max-Wert wirklich erreicht oder aber die letzte Änderung mehr als 75 Min her ist.
Hat jemand eine Lösung dazu?hier mal mein Ansatz:
(die 2. Und-Bedingung ist die Prüfung ob die Pumpe läuft, sonst funkioniert der Generator nicht)<xml xmlns="https://developers.google.com/blockly/xml"> <block type="comment" id="8_E*([YkOs$r.8,onj8p" x="-837" y="163"> <field name="COMMENT">Pumpe Ein</field> <next> <block type="schedule" id="w#7):F;6N(giY,%`+r|("> <field name="SCHEDULE">0 7 * * *</field> <statement name="STATEMENT"> <block type="control" id="2sNd(=:!XjyU^J{m|-{U"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="E+J|Y]-4rApqwPzOyX~H"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="comment" id="m:[*]QErQlF?p8iK{b:!"> <field name="COMMENT">Pumpe Aus</field> <next> <block type="schedule" id="Nx(uN0@FAl@%=J21puJ?"> <field name="SCHEDULE">0 23 * * *</field> <statement name="STATEMENT"> <block type="control" id="?}4t1cLeF^VzS9Hz|/)K"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="b?$Nln9Znzp8B:4Iggn]"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <next> <block type="comment" id="^TP4q#?0cVWJ#H~vc*fk"> <field name="COMMENT">Chlorgenerator</field> <next> <block type="on" id="zXT1JH!~UKCcwLrEJhpF"> <field name="OID">blueconnect.0.orp.value</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="}M;m*5M?9JY=7)V@X7(S"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="p*YbWP:v#41|jRrDVI~X" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="*]hzE,yI:DSm55wyCh8%" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="Fb-Jc6FBd)9(_MEAk*KH"> <field name="OP">LTE</field> <value name="A"> <block type="on_source" id="_Dv7(B@G+jc;w`,}q;Sy"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="get_value" id="5Ff].YB:mE^PD?q6rhRt"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Min</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="axFljj2y#RDtPl.xCKwd"> <field name="OP">GT</field> <value name="A"> <block type="on_source" id="ET|W7H)tT~bd)V%vE@62"> <field name="ATTR">oldState.val</field> </block> </value> <value name="B"> <block type="get_value" id="=xMQK$dU?r8-w[;Wg,yl"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Min</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Mnz1rP8j5BZ}o:0F}w~."> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="?gzuP+dxjXIMpJk%nAe$"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> </block> </value> <value name="B"> <block type="logic_boolean" id="nLu-w^;-YC`wp8*Dj|sV"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="pushover" id="Y.@GGssym_|v3e}lg(vl" collapsed="true"> <field name="INSTANCE"></field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="pmX@O66|Ks.:}NJrPAmW"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="3E$HwLWFU]lV`?kb7D)d"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id="2Y0b**WcLsz[Bo6SYqFr"> <field name="TEXT">Chlorinator wurde eingeschaltet </field> </block> </value> <value name="ADD1"> <block type="text_newline" id="9;vPyOERBTH%JO]}b)a#"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="text" id="7$VvEV.Rr{08Qo^-Rsz?"> <field name="TEXT">Der Redox-Wert beträgt </field> </block> </value> <value name="ADD3"> <block type="get_value" id="7tZaZ@rVd!W~-8nz#r.,"> <field name="ATTR">val</field> <field name="OID">blueconnect.0.orp.value</field> </block> </value> <value name="ADD4"> <block type="text" id="|_[K5?Xe@y4tE0%=09lD"> <field name="TEXT"> mV</field> </block> </value> </block> </value> <next> <block type="control" id="5DCV8o+S|b1t5kn.d]xd"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="2sVgyfyL~eb/{J8vI/k7"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="lSjgX^-xpn{vx|s+B8mw"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">50</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="FDVa5dhV}_;]M5k[bZkN"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="zrkq0VNE}AD3a;]Z#RgQ" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="6Gy)JP;z~[P~5hV]Ep{9" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="ZGF#}xZe69K(7aT_eIpd"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="!c3D(6J[r(b3d4~9ieRl"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="get_value" id="*Q5{mZSdiAxmpejG-Vor"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Max</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="x6i|WKFeOD=Gi~(NPb[="> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="=7t{_=kPg_Ovb0j!wT5J"> <field name="ATTR">oldState.val</field> </block> </value> <value name="B"> <block type="get_value" id="F-Tp0PtJB?G/tVUHJXQ]"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Max</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="bE:lC;GjD-H;HK@*_9kv"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="jl$=K%i9eb*(ci8o@eA@"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> </block> </value> <value name="B"> <block type="logic_boolean" id="s.!BSls!b%VFB_BT@DJN"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="n8iLAbI@sR?$mHAy;^e_"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="@`YxUpH})HFnko,i^Cm?"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>```
-
@soerenkaiser99
Entweder wird die Pumpe zu festen Zeiten geschaltet oder durch einen 2-Punkt-Regler. Die Regelung kann man dabei auf einen Zeitraum einschränken. -
@paul53 meinst du mit 2 Punkt-Regler meine und-Bedingung? Die Pumpe ist in dem Beispiel nur sekundär. Die läuft von Morgens 7 bis Abends 23... Ist also momentan fast immer wahr obwohl die Einschränkung nicht zwischen 23 und 7 auch interessant ist.
In dem Skript geht es aber eigentlich um den Chlorgenerator und Prüfung der Abschaltung bei erreichen des Wertes - maximal jedoch nach 75 Minuten Hast du dazu einen Tipp für mich?
lieben Dank schon mal!
-
@soerenkaiser99 sagte: In dem Skript geht es aber eigentlich um den Chlorgenerator und Prüfung der Abschaltung bei erreichen des Wertes
Vorschlag mit der Notabschaltung nach 75 Minuten durch den Trigger auf Relay1:
-
@paul53 ich glaub da reden wir aneinander vorbei.
Der Shelly hat 2 Relais. An Relais 0 hängt die Poolpumpe. Die läuft von 7-23 Uhr.
An Relais 1 hängt der Chlorgenerator. Für diesen muss aber die Pumpe laufen sonst geht der Chlorgenerator auf Störung
-
@soerenkaiser99 sagte: Der Shelly hat 2 Relais.
Sorry, das habe ich übersehen. Habe oben korrigiert.
-
@paul53 Dank dir vielmals! Habs grad nachgebaut und werd morgen berichten
-
@soerenkaiser99 und wo ist der Bericht ?
-
@mymeyer Sorry
vor lauter planschen war ich ein wenig inaktiv in all den Gruppen und Foren die man bei schlechtem Wetter so besucht und dann ist es mir durchgegangen
Das Skript läuft nun seid knapp 1 Monat ohne Probleme. Ich hänge mal ein bild von unserem Blueconnect ran. Da sieht man den ORP Wert in 30 tagen. Normalerweise passt es schon ganz gut, nur wenn die Sonne kanllt und sehr viel uv Strahlung da ist sackt er Mittags komplett ab. ich würde es die Tage noch mit ner UV abfrage beim daswetter adapter kombinieren und entsprechend die Laufzeit verlängern ohne auszuschalten aber an sich ist auch das nicht nötig da der Wert Abends immer hoch geht und dann komplett desinfiziert wird. Bei und liegt der fcl immer zwischen 0,3 und 1,8 dass passt gut bei dem Wetter.
hier ist nochmal das Skript
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="fY|a$gWyt(nK=4FWvBcK">Chlor</variable> </variables> <block type="comment" id="8_E*([YkOs$r.8,onj8p" x="-1137" y="-137"> <field name="COMMENT">Pumpe Ein</field> <next> <block type="schedule" id="w#7):F;6N(giY,%`+r|("> <field name="SCHEDULE">0 5 * * *</field> <statement name="STATEMENT"> <block type="control" id="2sNd(=:!XjyU^J{m|-{U"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="E+J|Y]-4rApqwPzOyX~H"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="comment" id="m:[*]QErQlF?p8iK{b:!"> <field name="COMMENT">Pumpe Aus</field> <next> <block type="schedule" id="Nx(uN0@FAl@%=J21puJ?"> <field name="SCHEDULE">0 23 * * *</field> <statement name="STATEMENT"> <block type="control" id="?}4t1cLeF^VzS9Hz|/)K"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="b?$Nln9Znzp8B:4Iggn]"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <next> <block type="comment" id="^TP4q#?0cVWJ#H~vc*fk"> <field name="COMMENT">Chlorgenerator</field> <next> <block type="on" id="zXT1JH!~UKCcwLrEJhpF"> <field name="OID">blueconnect.0.6c8a05da-08d5-4c46-9af3-7c5168f66123.orp.value</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="}M;m*5M?9JY=7)V@X7(S"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="*]hzE,yI:DSm55wyCh8%" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="Fb-Jc6FBd)9(_MEAk*KH"> <field name="OP">LTE</field> <value name="A"> <block type="on_source" id="_Dv7(B@G+jc;w`,}q;Sy"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="get_value" id="5Ff].YB:mE^PD?q6rhRt"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Min</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Mnz1rP8j5BZ}o:0F}w~."> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="?gzuP+dxjXIMpJk%nAe$"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay0.Switch</field> </block> </value> <value name="B"> <block type="logic_boolean" id="nLu-w^;-YC`wp8*Dj|sV"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="@1AyOFRBxYqlgRN;o+{:"> <field name="VAR" id="fY|a$gWyt(nK=4FWvBcK">Chlor</field> <value name="VALUE"> <block type="logic_boolean" id="^1@#5:F+S,cqs#zz.i_4"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="ZGF#}xZe69K(7aT_eIpd"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="!c3D(6J[r(b3d4~9ieRl"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="get_value" id="*Q5{mZSdiAxmpejG-Vor"> <field name="ATTR">val</field> <field name="OID">javascript.0.Pool.Filteranlage.Chlor_Max</field> </block> </value> </block> </value> <statement name="DO1"> <block type="variables_set" id="0-Xy2fzz#X365Z]W!@n/"> <field name="VAR" id="fY|a$gWyt(nK=4FWvBcK">Chlor</field> <value name="VALUE"> <block type="logic_boolean" id="7I=GRKU*UFS,8HoV/-ZN"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <next> <block type="controls_if" id="N#,gr`#,^dtI,D~Jv.y*"> <value name="IF0"> <block type="logic_compare" id="axFljj2y#RDtPl.xCKwd"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="Q];`2Ei$}!NtHiiB776u"> <field name="VAR" id="fY|a$gWyt(nK=4FWvBcK">Chlor</field> </block> </value> <value name="B"> <block type="get_value" id="=xMQK$dU?r8-w[;Wg,yl"> <field name="ATTR">val</field> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="n8iLAbI@sR?$mHAy;^e_"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="WPIe;S9LxdS!).z4cY=N"> <field name="VAR" id="fY|a$gWyt(nK=4FWvBcK">Chlor</field> </block> </value> </block> </statement> </block> </next> </block> </statement> <next> <block type="on_ext" id="RnNqePkHjN:vvE,EweE3"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="mP9g^HP]%ns+6ch7ZhS#"> <field name="oid">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> </shadow> </value> <statement name="STATEMENT"> <block type="pushover" id="Y.@GGssym_|v3e}lg(vl"> <field name="INSTANCE"></field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="pmX@O66|Ks.:}NJrPAmW"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="3E$HwLWFU]lV`?kb7D)d"> <mutation items="5"></mutation> <value name="ADD0"> <block type="text" id="2Y0b**WcLsz[Bo6SYqFr"> <field name="TEXT">Chlorinator wurde eingeschaltet </field> </block> </value> <value name="ADD1"> <block type="text_newline" id="9;vPyOERBTH%JO]}b)a#"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="text" id="7$VvEV.Rr{08Qo^-Rsz?"> <field name="TEXT">Der Redox-Wert beträgt </field> </block> </value> <value name="ADD3"> <block type="get_value" id="7tZaZ@rVd!W~-8nz#r.,"> <field name="ATTR">val</field> <field name="OID">blueconnect.0.6c8a05da-08d5-4c46-9af3-7c5168f66123.orp.value</field> </block> </value> <value name="ADD4"> <block type="text" id="|_[K5?Xe@y4tE0%=09lD"> <field name="TEXT"> mV</field> </block> </value> </block> </value> <next> <block type="control" id="lSjgX^-xpn{vx|s+B8mw"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">shelly.0.SHSW-25#C46476#1.Relay1.Switch</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">75</field> <field name="UNIT">min</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="FDVa5dhV}_;]M5k[bZkN"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@soerenkaiser99 sagte in Pool Chlorgenerator Steuerung:
Blueconnect
Hallo @SoerenKaiser99 Danke für deine Info. Eine Frage habe ich dazu wie arbeitet dein Chlorgenerator ? Ich habe den von Intex Chlorinator 26668 GS mit einer Timer Uhr und wenn man den um eine bestimmte Uhrzeit einschaltet starte er immer um diese Zeit.(Jeden Tag) Ich weiß jetzt nicht wie sich das Gerät verhält wenn ich Abends den kompletten Strom weg nehmen und Morgens wieder anlege.
Eigentlich möchte ich die Laufzeit auch lieber nach der Tageshochtemperatur steuern. Aktuell bin ich mir nicht sicher ob das überhaupt mit dem Intex Chlorinator 26668 GS geht. Deswegen die Frage was für ein Gerät benutzt Du ?
-
@mymeyer Ich habe den Chlorgenerator auf 12 Stunden und mache es dann mit dem blueconnect.. Wenn ORP-Wert unter 720 schalte und nach 50 min wieder aus. Mein intex erzeugt 11g / Std das passt normalerweise... der Blueconnect misst etwa jede Stunde und dann schaltet er eben wieder ein und würde erneut 12 Stunden laufen.
Das einzige Problem daran wäre die Polumkehrung. Die vergisst er durch das ausschalten jedes mal. Ich habe sehr viel Regenwasser zum Auffüllen aus unser Zisterne genutzt daher kaum Kalk. Sonst müsstest du die von Hand anwerfen oder manuell entkalken wenn du Kalkhaltiges Wasser hast.
Wir haben diesen Chlori https://amzn.to/3hqYgPK
-
@soerenkaiser99 Hallo, Okay ich habe den Mittleren von Intex für 27000l Wasser. Unser hat 20000l damit sollte die Anlage reichen. Leider habe ich noch keine Automatische Messung von PH und Chlor bin noch auf der Suche nach dem richtigen Gerät "Gut und nicht zu teuer"
. Vielleicht hole ich mir den PH-803W dafür. Aber deine Pumpe läuft immer volle 12 Stunden was ja nicht immer nötig ist bei kalten Temperaturen. Meine Steuerung für die Pumpe checkt die Tages Temperaturen und entscheidet danach die Laufzeit zwischen 4 und 12 Stunden.
Hast du den BlueConnect SAL im Einsatz ? Der kostet aktuell knapp 450€. Ganz schön happig.
-
@mymeyer
ich habe für schlechtwetterphasen einen block der die tageshöchsttemperatur morgens beim daswetter adapter checkt und dann den wert durch 2 teilt und als laufzeit festlegt. Das geht bei mir aber nur wenn die wärmepumpe nicht laufen soll, daher schlechtwetterblokfür einen oder 2 tage stell ich das nicht um, da gibt viel zu viel Energie verloren aber wenn es so jetzt eine Woche lang schlechter ist dann stelle ich die Wärmepumpe aus und lasse die Pumpe nur nach dem Wetter laufen. Hier läuft sie abends mindestens 4 Stunden und in der Zeit wird auch der chlorinator zu geschaltet und morgens den Rest der nötigen Laufzeit.
ja ich hab den blueconnect salt. hab ihn im Angebot für 369 geschossen aber auch des ist eigentlich noch teuer.. daür funktioniert die anbindung an den iob super