NEWS
Blockly zur Klimaanlagensteuerung
-
Hallo zusammen,
brandneu in dem Thema hab ich mal ein Blockly zusammengebastelt und frage mich, ob das so funktionieren kann.
-Ich habe den ganzen Post nochmal neu geschrieben da ich noch ein wenig an dem Skript rumgefummelt habe-
Soll folgendermaßen funktionieren:
Bei Ertrag der PV von über 2kw und Raumtemp über 23°C ->ON,COOL; 22°C
Bei Ertrag der PV von über 2kw und Raumtemp unter 18°C ->ON, HEAT, 20°C
Bei Ertrag der PV von unter 2kw -> OFFDie 2kw sind als Platzhalter zu verstehen.
Ob das ganze jetzt so funktioniert wie ich hoffe, kann ich schwer beurteilen. Was denkt ihr dazu? Kann das so laufen, oder müsste beim Ausschalten noch eine Verzögerung rein?
Danke im Vorraus.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="xW0ZcE:gY6TdwVOn4eHp" x="-537" y="-287"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="~$T@X}`Rc)0%MBF(Oda_"> <field name="oid">plenticore.0.devices.local.Pv_P</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="-`%JJ,PPuK1KH=8G=t])"> <field name="oid">melcloud.0.devices.83637267.control.power</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="vK5WSb|^+[qgawPhp|j~"> <value name="IF0"> <block type="logic_operation" id="+zH[i[@`(4JSR,~.:}WN" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="GX(ahl8$Q0!,LhS#x]q%"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="p]95!XiOGC`e/+~:|=g]"> <field name="ATTR">val</field> <field name="OID">melcloud.0.devices.83637267.control.power</field> </block> </value> <value name="B"> <block type="logic_boolean" id="LJF}C8-iiDN*S6r{WWkx"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="+d1A}e.)0kM_dhNc(^8I" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="#~`P6gezq}45^eyI6m%d"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="`P8c0^qS}Rt$8@SL+%2V"> <field name="ATTR">val</field> <field name="OID">melcloud.0.devices.83637267.info.roomTemp</field> </block> </value> <value name="B"> <block type="math_number" id="StzsS`]rTd^^o%sd4x)Z"> <field name="NUM">20</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="5}UKyGXf.79[Tl(M,?VZ"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="=@4J~uEHC)/l3Xo.%FoL"> <field name="ATTR">val</field> <field name="OID">plenticore.0.devices.local.Pv_P</field> </block> </value> <value name="B"> <block type="math_number" id="FiKa3{SClUYV*I^.d`+u"> <field name="NUM">2000</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="6k^[!wL6`/;=`g^BJ1ht"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.power</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Qd1x=`PDQXM1e3Z__)Pz"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="fnuGjj[rJlm/s5UU^??e"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.mode</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="+}4~o9{lH=pZI(}!`~0G"> <field name="NUM">1</field> </block> </value> <next> <block type="control" id="X7RqjDDKrvR;9Z4EZ1iT"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.targetTemp</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="a[Gzc[uX1kUQgyl/O_Lm"> <field name="NUM">0</field> </block> </value> <next> <block type="whatsapp-cmb" id="w*%@6}n?h6U=*^5g9`p6"> <field name="INSTANCE"></field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="@+H$}h{|CfaMEutPym7n"> <field name="TEXT">Schlafzimmer wird auf 20°C geheizt.</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="controls_if" id="%y`b*J_S%Y(:`YK~y9_P"> <value name="IF0"> <block type="logic_operation" id="9y!X;%i:p`FFv?qCE!Ew" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="V~aPn,s^5h*VpJ}BfknZ"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id=":7?DZjogWM4!%v+H9bPS"> <field name="ATTR">val</field> <field name="OID">melcloud.0.devices.83637267.control.power</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/,-gyd)C@cQ5/[31;0{9"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="@oiHY9s3{F.,IUh+3By]" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="b~kVBs!_I-u?e{IpkPsO"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="Ht|q)bcev`(a7e|8U#li"> <field name="ATTR">val</field> <field name="OID">melcloud.0.devices.83637267.info.roomTemp</field> </block> </value> <value name="B"> <block type="math_number" id="agauU$ieQKaA84^rbT5."> <field name="NUM">23</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="rj4tPYucf%BOw@ZqfcM="> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="R3$9vd}jYe=fhL[]jyuw"> <field name="ATTR">val</field> <field name="OID">plenticore.0.devices.local.Pv_P</field> </block> </value> <value name="B"> <block type="math_number" id="tLR+^s1Z-8A1Ge99zdIU"> <field name="NUM">2000</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="QWcjo3@pB~.%DbB7horS"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.power</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="YaNhT(KSz2(|Lm]2K~WI"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="i(tk)Xn)U_-2Npye8p6("> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.mode</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="{MMFn?fB7i?qk%,lU%pN"> <field name="NUM">3</field> </block> </value> <next> <block type="control" id=";={r}Z9Wja)tloRiV3{4"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.targetTemp</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="FyAcd}D=I6cBBvQSYk7Y"> <field name="NUM">22</field> </block> </value> <next> <block type="whatsapp-cmb" id="V{x[o*Sd?[yTF^B7lpbA"> <field name="INSTANCE"></field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="nv|S*v0;%t@8rB_r*#-+"> <field name="TEXT">Schlafzimmer wird auf 22°C gekühlt.</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="controls_if" id="Nk0d?.KW+zWU[}Tp@wl8"> <value name="IF0"> <block type="logic_operation" id="F++GU3]b.JXKz![{S:Pf"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id=",wdczM+P6,XZ3`7Q3r*m"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="b@ihhg6jo3pO9a2aSeTp"> <field name="ATTR">val</field> <field name="OID">plenticore.0.devices.local.Pv_P</field> </block> </value> <value name="B"> <block type="math_number" id="`}g@,@SJe.n!Erv/a6*8"> <field name="NUM">2000</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="#/g_T=_Q]1z4#q`]v!af"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="j=UH55aJ?`8whO8R2BDm"> <field name="ATTR">val</field> <field name="OID">melcloud.0.devices.83637267.control.power</field> </block> </value> <value name="B"> <block type="logic_boolean" id=";Mb8-*,!y~lzLdD1[y^N"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="_pc}2B22y%K(M=E:`X6-"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">melcloud.0.devices.83637267.control.power</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="!x1Wgsas9RA3d}~-y@Oo"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="whatsapp-cmb" id="]NOq`bmmS2[xv=A~C1f3"> <field name="INSTANCE"></field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="C}I6p#_/.%{!dxE@_pLl"> <field name="TEXT">AC OFF</field> </shadow> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> <block type="comment" id="Gwsr(n?4Dg%$mE2?bFxK" x="-88" y="-287"> <field name="COMMENT">powergen</field> <next> <block type="comment" id=",%m,`U;p[l:=gT]K,w(8"> <field name="COMMENT">ACpowerstate</field> </block> </next> </block> <block type="comment" id=",)qryg!l:hH@EBt1KzBn" x="162" y="-188"> <field name="COMMENT">Operation Mode 1: Heizen</field> <next> <block type="comment" id="dZeb(!=qYdulxaiz~11;"> <field name="COMMENT">Operation Mode 2: Trocknen</field> <next> <block type="comment" id="4}y{U.ja}Xr6Q]sD5IR)"> <field name="COMMENT">Operation Mode 3: Kühlen</field> <next> <block type="comment" id="OHN[O5jX2n~5VRn2Xn-#"> <field name="COMMENT">Operation Mode 5: Automatik</field> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@linguist bitte auch die Blocklys als Screenshot einstellen
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1 -
@homoran Verzeihung. Editiert.
-
@linguist sagte: Kann das so laufen, oder müsste beim Ausschalten noch eine Verzögerung rein?
Ohne Verzögerungen und Hysterese wird im Grenzbereich der PV-Leistung ständig ein- und ausgeschaltet. Was soll der "ACPowerstate" im Trigger?
EDIT: Besser so:
Man sollte als Raumtemperatur nicht die intern gemessene Temperatur des Klimagerätes nehmen.
-
@paul53 Hallo und vielen Dank für deine Hilfestellung. Raumtemp des Klimagerätes ist nur temporär, da ich aktuell nichts anderes habe. Gucke gerade noch nach einem externen Temperaturfühler.
Ich DACHTE, "ACPowerstate" im Trigger würde ggf gegen ständiges ein- und ausschalten helfen. Aber wie gesagt, ich bin noch kompletter Neuling und versuche mein bestes & zu lernen.
Mir fehlt der Baustein "setze X auf". Wo finde ich diesen?
EDIT: Ich könnte natürlich einfach deinen Code kopieren, aber zu Lernzwecken wollte ich es gerne selber "zusammenstecken" was du gepostet hast.
-
@linguist sagte: Mir fehlt der Baustein "setze X auf". Wo finde ich diesen?
Die Variable muss erst erstellt werden, dann wird auch "setze Variable auf" angeboten.
-
@paul53 Das hängt mir ja zu hoch. Muss ich mir wohl mal ein Tutorial anschauen.
-
@paul53 Soweit so gut, ich glaube ich habe verstanden wie man die Variable nutzt, zumindest in deinem Beispiel.
Ich bin mir nahezusicher dass ich völlig daneben liege, aber müssten bei den beiden Werte abfragen der powergen die <> nicht verdreht sein? Sprich >3000 schalte ein, <3000 schalte aus?
-
@linguist sagte: nicht verdreht sein? Sprich >3000 schalte ein, <3000 schalte aus?
Er schaltet bei >3000 ein und bei <2000 aus: Es ist der sonst-Zweig, in dem geschaltet wird. Zwischen 2000 und 3000 W werden lediglich die Verzögerungen gestoppt.
-
@paul53 Vielen Dank für deine Geduld mit mir.
Ich steige so langsam dahinter glaube ich. Anhand von welchem Wert wird die Abschaltung gesteuert? Ich finde die Bedingung zum Abschalten nicht.Falls "powergen" >=2000 stoppe delayOff, ansonsten falls delayOff nicht gesetzt mache delayOff in 5min ->falls Wert von ACPower (müsste nicht hier noch was stehen?) steuere Power mit false.
Falls du keine Lust hast das zu erklären kann ich das vollkommen verstehen, bin trotzdeim heilfroh über deine Hilfestellungen.
-
@linguist sagte: delayOff in 5min ->falls Wert von ACPower (müsste nicht hier noch was stehen?) steuere Power mit false.
Das ist die Abschaltung nach 5 Minuten (große Wolke oder Abend): Falls eingeschaltet (Wert von "ACPower" ist wahr) dann steuere "ACPower" mit falsch.
-
Ergo da müsste noch ein "ist wahr" hinter den Wert von Power?
-
@linguist sagte: Ergo da müsste noch ein "ist wahr" hinter den Wert von Power?
Nein, das Ergebnis eines jeden Vergleichs ist falsch oder wahr. Der Wert des Datenpunktes ist schon falsch oder wahr, also ist ein Vergleich sinnlos. "falls" prüft auf wahr.
-
@paul53 "falls" prüft auf wahr.
Das isses. Jetzt hats geklickt. Dessen war ich mir nicht bewusst. DANKE!
-
@paul53
OFFTOPIC: Um noch kurz auf deine Anfangs getätige Aussage zurückzukommen: gibt es einen empfehlenswerten Temperatursensor? Shelly HT hatte ich im Auge, scheint aber nicht sehr berauschend zu sein. -
@linguist sagte: gibt es einen empfehlenswerten Temperatursensor?
Das hängt davon ab, welche Protokolle Du empfangen kannst. WiFi ist nichts für batteriebetriebene Sensoren.
-
@paul53 Noch keine. Frei in der Auswahl.
-
@linguist sagte: Noch keine.
Fritzbox vorhanden? Falls ja, schau mal FRITZ!DECT 440 an (gut ablesbares Display).
-
@paul53 sieht gut aus, wenn auch reichlich teuer für "nur" einen TempSensor. Vielleicht fällt mir noch eine weiter Verwendung für die Taster ein.
Vielen Dank! -
@linguist sagte: gerne selber "zusammenstecken" was du gepostet hast.
Ändere noch die Abfrage der Temperaturen, damit das Klimagerät auch einschaltet, wenn die ganze Zeit die PV-Leistung > 3000 W ist und die Temperatur erst später auf > 23°C steigt.