Rules: Heizungssteuerung Temperatur

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Oldman
Beiträge: 31
Registriert: 29. Apr 2021 20:05
Answers: 0

Rules: Heizungssteuerung Temperatur

Beitrag von Oldman »

openHAB 3.0.2


ich komme von der Homematic und habe wahrscheinlich einen Denkfehler.
Ich möchte auf Grund eines Thermostatwertes z.b. kleiner 20° C das Heizventil starten.
In Rules bei "When" starte ich "Add Trigger", wähle das Thing TempBar. (das ist ein Homematic Thermometer).
Jetzt kommt mein Problem: Bei Status changed kann ich nur from to auswählen.
Wie kann ich sagen: Wenn aktuelle Temperatur <20° dann Schalte die Heizung ein?

Wo habe ich einen Denkfehler.
openHAB 5.0.0 auf Ubuntu 25.04 (X86-64). DeCONZ. Shelly, IKEA

Benutzeravatar
udo1toni
Beiträge: 15259
Registriert: 11. Apr 2018 18:05
Answers: 244
Wohnort: Darmstadt

Re: Rules: Heizungssteuerung Temperatur

Beitrag von udo1toni »

Du wählst weder from noch to. Stattdessen nutzt Du einfach nur changed. Damit triggert die Rule schon mal bei jeder Änderung.
Nun hast Du zwei Möglichkeiten. Entweder, Du verwendest zwei Rules, in der einen Rule schaltest Du ein, in der anderen aus, dann setzt Du zusätzlich noch ein "but only if" ein, dort definierst Du für die Einschaltrule das kleiner als 20 und für die Ausschaltrule das größer als 21 (z.B.)

Nachteil: Du brauchst jeweils zwei Rules.

Alternativ startest Du ein Script, in dem Du dann entscheidest, ob die Keizung ein-, aus-, oder überhaupt nicht geschaltet wird.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Oldman
Beiträge: 31
Registriert: 29. Apr 2021 20:05
Answers: 0

Re: Rules: Heizungssteuerung Temperatur

Beitrag von Oldman »

Danke schon mal für den Tipp.
Jetzt kommt das nächste Problem: Wie startet die Regel automatisch.
Ich habe folgende Rule, die auf Status IDLE steht und wenn ich auf den Pfeil nach rechts klicke läuft das Script einwandfrei ab.
When
When Thermometer chenged

Then
execute a given script
if item state item Thermometer < "23"
do send command "ON" to item TestschalterOSRAM
openHAB 5.0.0 auf Ubuntu 25.04 (X86-64). DeCONZ. Shelly, IKEA

Benutzeravatar
udo1toni
Beiträge: 15259
Registriert: 11. Apr 2018 18:05
Answers: 244
Wohnort: Darmstadt

Re: Rules: Heizungssteuerung Temperatur

Beitrag von udo1toni »

Zeig mal bitte den Code (Copy&Paste von Text ist besser, als etwas zu tippen, was entfernt etwas mit der Realität zu tun hat).
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Oldman
Beiträge: 31
Registriert: 29. Apr 2021 20:05
Answers: 0

Re: Rules: Heizungssteuerung Temperatur

Beitrag von Oldman »

Hallo und einen schönen Nachmittag

Ich habe den Code mit "Design" erstellt und hier ist der erzeugte Code:

triggers:
- id: "3"
configuration:
itemName: Temperature2TZ2000a476raq2
type: core.ItemStateChangeTrigger
conditions:
- inputs: {}
id: "4"
configuration:
itemName: TestschalterOSRAM_OnOff
state: OFF
operator: <
type: core.ItemStateCondition
actions:
- inputs: {}
id: "2"
configuration:
blockSource: <xml xmlns="https://developers.google.com/blockly/xml"><block
type="controls_if" id="GcWQevSU-Mu6=4cfJ)T*" x="279" y="268"><value
name="IF0"><block type="logic_compare" id="xx+jSrQ/Y_JK$7711hId"><field
name="OP">LT</field><value name="A"><block type="oh_getitem_state"
id="H-J]q/xTO5jbn9}YIxvY"><value name="itemName"><shadow type="oh_item"
id="A/qfm[iWiG?ZqqzqR;5+"><field
name="itemName">Temperature2TZ2000a476raq2_Temperature</field></shadow></value></block></value><value
name="B"><block type="text" id="c=DM0Vy75z[]~b}9@Y(0"><field
name="TEXT">23</field></block></value></block></value><statement
name="DO0"><block type="oh_event" id="[ZoyoR3F_}s~j[LqIl#e"><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="NBl;V9~i[|(HI30IPMP?"><field
name="TEXT">ON</field></shadow></value><value name="itemName"><shadow
type="oh_item" id="Ya229n?.o91wwzvXH=P4"><field
name="itemName">TestschalterOSRAM</field></shadow></value></block></statement></block></xml>
type: application/javascript
script: >
if
(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState()
< '23') {
events.sendCommand('TestschalterOSRAM', 'ON');
}
type: script.ScriptAction
- inputs: {}
id: "1"
configuration:
blockSource: <xml xmlns="https://developers.google.com/blockly/xml"><block
type="controls_if" id="I=x(1OjRujp#kdZ5xr+;" x="204" y="65"><value
name="IF0"><block type="logic_compare" id="riVMNBd@-+j^cmr}@l,c"><field
name="OP">GT</field><value name="A"><block type="oh_getitem_state"
id="Dm7K#N#14UnkqOR#Tj^)"><value name="itemName"><shadow type="oh_item"
id="YL?8[^}j8!R6v+}y/Xg^"><field
name="itemName">Temperature2TZ2000a476raq2_Temperature</field></shadow></value></block></value><value
name="B"><block type="text" id="V,e;L9yU(`vPDnk@0g~U"><field
name="TEXT">23</field></block></value></block></value><statement
name="DO0"><block type="oh_event" id="9F09EnV~6KT0TkkULPT("><field
name="eventType">sendCommand</field><value name="value"><shadow
type="text" id="2zGu+%S;GxM8yY0t8}`/"><field
name="TEXT">OFF</field></shadow></value><value name="itemName"><shadow
type="oh_item" id="t^v]%8o6J}Czk63XJ~5n"><field
name="itemName">TestschalterOSRAM</field></shadow></value></block></statement></block></xml>
type: application/javascript
script: >
if
(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState()
> '23') {
events.sendCommand('TestschalterOSRAM', 'OFF');
}
type: script.ScriptAction


------
Servus
Dieter
openHAB 5.0.0 auf Ubuntu 25.04 (X86-64). DeCONZ. Shelly, IKEA

Benutzeravatar
udo1toni
Beiträge: 15259
Registriert: 11. Apr 2018 18:05
Answers: 244
Wohnort: Darmstadt

Re: Rules: Heizungssteuerung Temperatur

Beitrag von udo1toni »

Du hättest den Code besser in Code Tags gefasst. Der Code wurde von der Forensoftware falsch umgebrochen. Korrekt wird der Code so aussehen:

Code: Alles auswählen

triggers:
- id: "3"
  configuration:
  itemName: Temperature2TZ2000a476raq2
  type: core.ItemStateChangeTrigger
  conditions:
  - inputs: {}
  id: "4"
    configuration:
    itemName: TestschalterOSRAM_OnOff
    state: OFF
    operator: <
    type: core.ItemStateCondition
    actions:
    - inputs: {}
    id: "2"
      configuration:
      blockSource: <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="controls_if" id="GcWQevSU-Mu6=4cfJ)T*" x="279" y="268">
          <value name="IF0">
            <block type="logic_compare" id="xx+jSrQ/Y_JK$7711hId">
              <field name="OP">LT</field>
              <value name="A">
                <block type="oh_getitem_state" id="H-J]q/xTO5jbn9}YIxvY">
                  <value name="itemName">
                    <shadow type="oh_item" id="A/qfm[iWiG?ZqqzqR;5+">
                      <field name="itemName">Temperature2TZ2000a476raq2_Temperature</field>
                    </shadow>
                  </value>
                </block>
              </value>
              <value name="B">
                <block type="text" id="c=DM0Vy75z[]~b}9@Y(0">
                  <field name="TEXT">23</field>
                </block>
              </value>
            </block>
          </value>
          <statement name="DO0">
            <block type="oh_event" id="[ZoyoR3F_}s~j[LqIl#e">
              <field name="eventType">sendCommand</field>
              <value name="value">
                <shadow type="text" id="NBl;V9~i[|(HI30IPMP?">
                  <field name="TEXT">ON</field>
                </shadow>
              </value>
              <value name="itemName">
                <shadow type="oh_item" id="Ya229n?.o91wwzvXH=P4">
                  <field name="itemName">TestschalterOSRAM</field>
                </shadow>
              </value>
            </block>
          </statement>
        </block>
      </xml>
      type: application/javascript
      script: >
        if(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState() < '23') {
          events.sendCommand('TestschalterOSRAM', 'ON');
        }
    type: script.ScriptAction
    - inputs: {}
    id: "1"
      configuration:
      blockSource: <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="controls_if" id="I=x(1OjRujp#kdZ5xr+;" x="204" y="65">
          <value name="IF0">
            <block type="logic_compare" id="riVMNBd@-+j^cmr}@l,c">
              <field name="OP">GT</field>
              <value name="A">
                <block type="oh_getitem_state" id="Dm7K#N#14UnkqOR#Tj^)">
                  <value name="itemName">
                    <shadow type="oh_item" id="YL?8[^}j8!R6v+}y/Xg^">
                      <field name="itemName">Temperature2TZ2000a476raq2_Temperature</field>
                    </shadow>
                  </value>
                </block>
              </value>
              <value name="B">
                <block type="text" id="V,e;L9yU(`vPDnk@0g~U">
                  <field name="TEXT">23</field>
                </block>
              </value>
            </block>
          </value>
          <statement name="DO0">
            <block type="oh_event" id="9F09EnV~6KT0TkkULPT(">
              <field name="eventType">sendCommand</field>
              <value name="value">
                <shadow type="text" id="2zGu+%S;GxM8yY0t8}`/">
                  <field name="TEXT">OFF</field>
                </shadow>
              </value>
              <value name="itemName">
                <shadow type="oh_item" id="t^v]%8o6J}Czk63XJ~5n">
                  <field name="itemName">TestschalterOSRAM</field>
                </shadow>
              </value>
            </block>
          </statement>
        </block>
      </xml>
      type: application/javascript
      script: >
        if(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState() > '23') {
          events.sendCommand('TestschalterOSRAM', 'OFF');
        }
    type: script.ScriptAction
Mit den Einrückungen bin ich mir nicht zu 100% sicher, beim xml-Teil ist es nicht wichtig, erhöht aber die Lesbarkeit, im yaml-Teil des Codes sind sie hingegen essentieller Bestandteil.

Der wesentliche Teil der Rule ist ohnehin der "übersetzte" Code unterhalb des Script-Tags, und er ist tatsächlich nur zweimal drei Zeilen lang, eigentlich sind es sogar nur jeweils zwei Zeilen:

Code: Alles auswählen

if(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState() < '23') {
    events.sendCommand('TestschalterOSRAM', 'ON');
}
if(itemRegistry.getItem('Temperature2TZ2000a476raq2_Temperature').getState() > '23') {
    events.sendCommand('TestschalterOSRAM', 'OFF');
}
Und was mir dabei auffällt: die Zahlen stehen in Anführungszeichen. Gewöhnlich bedeutet das, der wert ist als String zu betrachten. Ein String kann nicht "größer" oder "kleiner" sein als ein anderer String (jedenfalls nicht, ohne dass man vorher Vereinbarungen über die Art des Vergleichs getroffen hat). Da ich noch nicht mit Blockly gearbeitet habe, kann ich nicht beurteilen, ob das ein Eingabefehler ist oder eine Missinterpretation meinerseits.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Oldman
Beiträge: 31
Registriert: 29. Apr 2021 20:05
Answers: 0

Re: Rules: Heizungssteuerung Temperatur

Beitrag von Oldman »

So, ich habe wieder mal Zeit um mich um mein OPenHAB zu kümmern.
Ich habe meinen Thermostat gewechselt. (TUYA raus und Homematic rein.)
------------------------------------------------
Wenn ich die Rule angelegt habe, dann zeigt mir openHAB den Status IDLE (grün).
Klicke ich auf den blauen Pfeil, dann wechselt der Status auf RUNNING(gelb),
dar Strom wird ein oder ausgeschalten
und der Status geht zurück auf IDLE.

Ich nehme daher an, dass alles richtig erstellt wurde.

Jetzt meine (dumme) Frage: Muss ich die Rule irgendwo aktivieren (so wie bei Homamatic), denn automatisch schaltet sich beim Temperaturwechsel gar nichts? Oder wo kann ich weiter suchen?
openHAB 5.0.0 auf Ubuntu 25.04 (X86-64). DeCONZ. Shelly, IKEA

Oldman
Beiträge: 31
Registriert: 29. Apr 2021 20:05
Answers: 0

Re: Rules: Heizungssteuerung Temperatur // Gelöst

Beitrag von Oldman »

Ich habe meinen Fehler gefunden:

Bei der Bedingung hatte ich "a thing status changes" angeklickt.
richtig war:
"an item state changes".

und jetzt geht es .
openHAB 5.0.0 auf Ubuntu 25.04 (X86-64). DeCONZ. Shelly, IKEA

Antworten