OpenHAB Wärmepumpen Smart-Grid Steuerung
Ich möchte hier kurz erklären, wie am ein Wärmepumpen Smart-Grid Modus Item in openHAB anlegt und dieses mittels Regelwerk dazu bringt die Wärmepumpe entsprechend zu schalten. In meinem Beispiel nutze ich zum Schalten der Wärmepumpen Smart-Grid Modi potentialfreie Shelly Relais.
Voraussetzungen
Als Voraussetzung zu diesem Artikel geht die Einrichtung einer Wärmepumpe die via Shelly Relais in die einzelnen Smart-Grid Modi versetzt wird.
Zusätzlich benötigt ihr eine openHAB Installation, die als Smart Home Schaltzentrale fungiert:
Und hier sollte das Shelly Binding Installiert sein, und die Shelly Relais bereits als Switch Item angelegt sein. Dies geht auch via MQTT. Wichtig am Ende ist, das beide Smart-Grid Eingänge in openHAB schaltbar sind.
Bei mir heißen die beiden Switch Items:
Waermepumpe_SG_ID1_Betrieb
Waermepumpe_SG_ID2_Betrieb
Hier noch der Main-UI Code:
Waermepumpe_SG_ID1_Betrieb
label: Wärmepumpe SG ID1
type: Switch
category: Switch
tags:
- Power
- Switch
Waermepumpe_SG_ID2_Betrieb
label: Wärmepumpe SG ID2
type: Switch
category: Switch
tags:
- Power
- Switch
Waermepumpe_SG_Modus Item anlegen
Zunächst benötigen wir ein String Item, mittels dessen wir den Modus der Wärmepumpe festlegen können. Dafür einfach ein neues String Item in openHAB anlegen. Ich habe es Waermepumpe_SG_Modus
genannt.
label: Wärmepumpe Smart-Grid Modus
type: String
category: heating
tags:
- Power
- Setpoint
Damit ihr dieses auch aus der UI heraus den richtigen Status setzen könnt müsst ihr noch bei Metadata, Command Options und State Description mit folgendem Inhalt hinzufügen:
red=Abgesenkter Betrieb orange=Normaler Betrieb green=Verstärkter Betrieb
openHAB Wärmepumpe Smart-Grid Switch Regel
Jetzt, nachdem wir 2 Shelly Switch Items und ein Item String Item zum einstellen des gewünschten Smart-Grid Modus haben, wollen wir die drei Items miteinander über eine openHAB Regel verheiraten.
Hierzu die folgende Regel erstellen:
Das Inline Script sollte ein Blockly Script sein, welches ihr so zusammen klicken könnt:
Hier noch der Regel Code, den man ggf. zum Copy and Paste nutzen kann.
configuration: {}
triggers:
- id: "1"
configuration:
itemName: Waermepumpe_SG_Modus
type: core.ItemStateChangeTrigger
conditions: []
actions:
- inputs: {}
id: "6"
configuration:
blockSource: <xml xmlns="https://developers.google.com/blockly/xml"><block
type="controls_if" id="LAqpXMS@t-5~`yo1/KgX" x="22" y="-416"><value
name="IF0"><block type="logic_compare" id="yeu@hkA!kUM|m~O5!@*="><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="CT%W1I[8IU[3D)W8a(Eh"><value name="itemName"><shadow type="oh_item"
id="G$h.~cxhb6^A?]/4IlR7"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="ZP#{2ci-ydWc{l|S-]Qb"><mutation itemName="Waermepumpe_SG_Modus"
itemLabel="Wärmepumpe Smart Grid Modus"></mutation><field
name="itemName">Waermepumpe_SG_Modus</field></block></value></block></value><value
name="B"><block type="text" id="hJDsksAP07/9leaMp_OR"><field
name="TEXT">red</field></block></value></block></value><statement
name="DO0"><block type="controls_if" id="06L+*Yv_F=mE-*!Ba~42"><value
name="IF0"><block type="logic_negate" id="4Jd%*:!KKlB%h.T^=xf1"><value
name="BOOL"><block type="logic_operation"
id="Fg,9Yw3_dZ+npxrqb2}4"><field name="OP">AND</field><value
name="A"><block type="logic_compare" id="xQGXCKxA_3Vsqu$--tli"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="Bdc?8#pQM^(.#*k*?)q2"><value name="itemName"><shadow type="oh_item"
id="5~SqWQ!.p(ye)o;$CLfT"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="I#_zf)+0$jsd5C|w6/Sy"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="{3TkUMW%v.}advMdYpUW"><field
name="TEXT">OFF</field></block></value></block></value><value
name="B"><block type="logic_compare" id="Wr;]hI0QQQ1dye/m=ZX("><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="zMQA4f1xu@+XAZ;`Jz3]"><value name="itemName"><shadow type="oh_item"
id="8*wQ]P?`wViF`IRL_Y8|"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="qIJfAG?:wOdB@U-gTC-9"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="65xpRzyx8,b(`QL9#ktZ"><field
name="TEXT">ON</field></block></value></block></value></block></value></block></value><statement
name="DO0"><block type="oh_event" id="qC:9g0K6lAVLDE7u,gZ^"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="T]:0QD0:GyJ+6^r#zcUS"><field
name="TEXT">OFF</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="(ND4w$RP!|Hg5n7OI)*m"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value><next><block
type="oh_sleep" id="DIR@K]5ZfT2J*qmyE(Z%"><field
name="milliseconds">5000</field><next><block type="controls_if"
id="lND2RfSdgM=W$/trCX-f"><value name="IF0"><block type="logic_compare"
id="PY2PBlpV?I8e2XMGxKxl"><field name="OP">EQ</field><value
name="A"><block type="oh_getitem_state" id="-g384Teq)?*fkvRcyQ-0"><value
name="itemName"><shadow type="oh_item"
id="5~SqWQ!.p(ye)o;$CLfT"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="DWw[9GZm[_(F$dH8C7uY"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="(S%7ql0*yldQ-aqfY|ne"><field
name="TEXT">OFF</field></block></value></block></value><statement
name="DO0"><block type="oh_event" id="dkbwA%c)]GMu_+KXa;2/"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="Mr@@-{P;~d=(hhuYr}4c"><field
name="TEXT">ON</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="t$#D)pqnxG;VP#lm7@+)"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></statement></block></next></block></next></block></statement></block></statement><next><block
type="controls_if" id="J-v:L3dG7Ny|TJS9:.65"><value name="IF0"><block
type="logic_compare" id="7WT}a`(*`CB0]qmeWPUc"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="W*2%G63Z4]m,:UibXsr/"><value name="itemName"><shadow type="oh_item"
id="G$h.~cxhb6^A?]/4IlR7"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="_b6=YHAW%ISSMi!$:Tin"><mutation itemName="Waermepumpe_SG_Modus"
itemLabel="Wärmepumpe Smart Grid Modus"></mutation><field
name="itemName">Waermepumpe_SG_Modus</field></block></value></block></value><value
name="B"><block type="text" id="Z1o9_(lXD@QZbB9Titr/"><field
name="TEXT">orange</field></block></value></block></value><statement
name="DO0"><block type="controls_if" id="}su{=k+:;yecW*Si_ocY"><value
name="IF0"><block type="logic_negate" id="aNacx;RWA1x9,ct#l3}S"><value
name="BOOL"><block type="logic_operation"
id="-q-%7;7_-PM8`YB=v42K"><field name="OP">AND</field><value
name="A"><block type="logic_compare" id="E0ix0sUs1,g{)3+$}ZOR"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="VBp/qn)?4/DeYRMpwy/q"><value name="itemName"><shadow type="oh_item"
id="pmn[(HYmQ|IC_d(mt7~*"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="ar49}ROgAu$Th_T_+^Dj"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="Xe8}7|yY#01}yCh2:vN@"><field
name="TEXT">OFF</field></block></value></block></value><value
name="B"><block type="logic_compare" id="=i=koh5)?jikTEC|vd%t"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="=Z^F6#{oOrm5+6gCZIo)"><value name="itemName"><shadow type="oh_item"
id="8*wQ]P?`wViF`IRL_Y8|"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="G~VKvqsVs#h5Z(IZZ}IO"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="3LMwP+_R7#nXR:x7Efo|"><field
name="TEXT">OFF</field></block></value></block></value></block></value></block></value><statement
name="DO0"><block type="oh_event" id="+qy)+E])/k]mrw*eg1~r"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="Q!jl{8G8JQ}6:]NK7nlN"><field
name="TEXT">OFF</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="]SSDD-b;xURRfN=Ic-:v"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value><next><block
type="oh_event" id="N7^n/=%}N;N;x}C8v@Ke"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="-F,9km0Pd0Udxk99f6Q,"><field
name="TEXT">OFF</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="5l2MeO)7K1SUpkkk0ERj"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></next></block></statement></block></statement><next><block
type="controls_if" id="?Br~Olx82=VN:nL+gH8t"><value name="IF0"><block
type="logic_compare" id="2+7(XWj~rdp!4nFK-)WM"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="yctI-)kfZ09Rws`~y@ox"><value name="itemName"><shadow type="oh_item"
id="G$h.~cxhb6^A?]/4IlR7"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="/wmEws+nF-={]@GFC:4g"><mutation itemName="Waermepumpe_SG_Modus"
itemLabel="Wärmepumpe Smart Grid Modus"></mutation><field
name="itemName">Waermepumpe_SG_Modus</field></block></value></block></value><value
name="B"><block type="text" id="uRa;8zi5TSI:F:osY|y9"><field
name="TEXT">green</field></block></value></block></value><statement
name="DO0"><block type="controls_if" id="75~N`p#JGdj|eG*)[b)/"><value
name="IF0"><block type="logic_negate" id="|@xO~H8uDwlvo`)DJ1O7"><value
name="BOOL"><block type="logic_operation"
id="nb{z)na[uY6??Hxlel.v"><field name="OP">AND</field><value
name="A"><block type="logic_compare" id="6Lt^Xtb%3OZ@$xUCJM9M"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="QS+YNFT@~HGpuK6QocRA"><value name="itemName"><shadow type="oh_item"
id="pmn[(HYmQ|IC_d(mt7~*"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="iCfFupj[)NF8wf*x6f-e"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="ET[h|z=BWxfbmA.4Zwx_"><field
name="TEXT">ON</field></block></value></block></value><value
name="B"><block type="logic_compare" id="Tad:R9`?YIRr1dgobJE*"><field
name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
id="Oy*1Z=FLB}#~;X]pkl?7"><value name="itemName"><shadow type="oh_item"
id="8*wQ]P?`wViF`IRL_Y8|"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="z+PTEU.L*(DjQ~S,2Sli"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="8p)y#F19xH{UQ|^(m:iU"><field
name="TEXT">OFF</field></block></value></block></value></block></value></block></value><statement
name="DO0"><block type="oh_event" id="MLbhLUSB1IKTB0Ok}Rwe"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="jv!s/69A`pgk{}jzAIc^"><field
name="TEXT">OFF</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="F(1;5^ky~Pca)L0]3x.s"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value><next><block
type="oh_sleep" id="I{:Cj,S{den%2_(,l[Ik"><field
name="milliseconds">5000</field><next><block type="controls_if"
id="SIt!ygNq(jGPwZ.OP-U-"><value name="IF0"><block type="logic_compare"
id="jCq=euH`9M[1wobGn1J("><field name="OP">EQ</field><value
name="A"><block type="oh_getitem_state" id="BnY*m6n{nW_GMafUMkMm"><value
name="itemName"><shadow type="oh_item"
id="8*wQ]P?`wViF`IRL_Y8|"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="jZ.6sW%nE/h4[jdsrL?w"><mutation itemName="Warmepumpe_SG_ID2_Betrieb"
itemLabel="Wärmepumpe SG ID2"></mutation><field
name="itemName">Warmepumpe_SG_ID2_Betrieb</field></block></value></block></value><value
name="B"><block type="text" id="gfw2,`-L$Ybq$w{]c/Ft"><field
name="TEXT">OFF</field></block></value></block></value><statement
name="DO0"><block type="oh_event" id=".[({.h]JW1)UKS2O,BOx"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="i?8cqf?vrg6EV)bS,|?Y"><field
name="TEXT">value</field></shadow><block type="text"
id="5DcP{aes/o4nWx,amvGl"><field
name="TEXT">ON</field></block></value><value name="itemName"><shadow
type="oh_item" id="!zDK(?]!OW51.!XFlq~^"><mutation itemName="MyItem"
itemLabel="MyItem"></mutation><field
name="itemName">MyItem</field></shadow><block type="oh_item"
id="|VX.fc/W@s7kiMV=1+$:"><mutation
itemName="Waermepumpe_SG_ID1_Betrieb" itemLabel="Wärmepumpe SG
ID1"></mutation><field
name="itemName">Waermepumpe_SG_ID1_Betrieb</field></block></value></block></statement></block></next></block></next></block></statement></block></statement></block></next></block></next></block></xml>
type: application/javascript
script: >
var thread = Java.type('java.lang.Thread')
if (items.getItem('Waermepumpe_SG_Modus').state == 'red') {
if (!(items.getItem('Waermepumpe_SG_ID1_Betrieb').state == 'OFF' && items.getItem('Warmepumpe_SG_ID2_Betrieb').state == 'ON')) {
items.getItem('Waermepumpe_SG_ID1_Betrieb').sendCommand('OFF');
thread.sleep(5000);
if (items.getItem('Waermepumpe_SG_ID1_Betrieb').state == 'OFF') {
items.getItem('Warmepumpe_SG_ID2_Betrieb').sendCommand('ON');
}
}
}
if (items.getItem('Waermepumpe_SG_Modus').state == 'orange') {
if (!(items.getItem('Waermepumpe_SG_ID1_Betrieb').state == 'OFF' && items.getItem('Warmepumpe_SG_ID2_Betrieb').state == 'OFF')) {
items.getItem('Waermepumpe_SG_ID1_Betrieb').sendCommand('OFF');
items.getItem('Warmepumpe_SG_ID2_Betrieb').sendCommand('OFF');
}
}
if (items.getItem('Waermepumpe_SG_Modus').state == 'green') {
if (!(items.getItem('Waermepumpe_SG_ID1_Betrieb').state == 'ON' && items.getItem('Warmepumpe_SG_ID2_Betrieb').state == 'OFF')) {
items.getItem('Warmepumpe_SG_ID2_Betrieb').sendCommand('OFF');
thread.sleep(5000);
if (items.getItem('Warmepumpe_SG_ID2_Betrieb').state == 'OFF') {
items.getItem('Waermepumpe_SG_ID1_Betrieb').sendCommand('ON');
}
}
}
type: script.ScriptAction
Auswählen und Überprüfen des Modus
Nachdem nun alles eingerichtet ist, könnt ihr alles Testen, in dem ihr zum Beispiel einfach Unter Einstellungen das Item Waermepumpe_SG_Modus
öffnet und hier einfach den gewünschten Modus auswählt. So könnt ihr die Wärmepumpen Modi manuell steuern.
Solltet ihr diese automatisch steuern wollen, müsst ihr euch einfach Regeln dazu bauen, zum Beispiel zeitgesteuerte oder aber nach Produktion der PV Anlage oder Strompreis.