OpenHAB Wärmepumpen Smart-Grid Steuerung

Aus Laub-Home Wiki

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.