Setpoint einem anderen Setpoint zuweisen

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

Antworten
samo
Beiträge: 2
Registriert: 23. Dez 2023 20:53
Answers: 0

Setpoint einem anderen Setpoint zuweisen

Beitrag von samo »

Hallo,

ich bin openHAB-Neueinsteiger und versuche gerade in der Design-Oberfläche einige Rules zusammenzuklicken. Es geht um eine Steuerung für eine Infrarotheizung, die über einen Fritz!Dect 200 geschaltet werden soll. Das Umschalten zwischen Normalbetrieb und Nachtabsenkung funktioniert schon mal mit statischen Sollwerten. Ich möchte die Sollwerte jedoch ändern können und komme da nicht weiter. Ich habe folgende Sollwerte definiert:
  • Setpoint_Temperature (aktueller Sollwert)

    Code: Alles auswählen

    label: Setpoint Temperature
    type: Number:Temperature
    category: temperature
    groupNames: []
    groupType: None
    function: null
    tags:
      - Temperature
      - Setpoint
  • Comfort_Temperature (Sollwert für Normalbetrieb)

    Code: Alles auswählen

    label: Comfort Temperature
    type: Number:Temperature
    category: temperature_hot
    groupNames: []
    groupType: None
    function: null
    tags:
      - Temperature
      - Setpoint
  • Setback_Temperature (Sollwert für Nachtabsenkung)

    Code: Alles auswählen

    label: Setback Temperature
    type: Number:Temperature
    category: temperature_cold
    groupNames: []
    groupType: None
    function: null
    tags:
      - Temperature
      - Setpoint
Ich möchte nun z.B. beim Aktivieren der Nachtabsenkung den aktuellen Sollwert auf den Sollwert für Nachabsenkung ändern. Zum Ausprobieren habe ich folgende Rule angelegt:

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      itemName: Setpoint_Temperature
      command: Setback_Temperature
    type: core.ItemCommandAction
Wenn ich diese Rule manuell ausführe, passiert jedoch gar nichts. Wenn ich dagegen einen statischen Wert verwende, funktioniert es:

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      itemName: Setpoint_Temperature
      command: "16"
    type: core.ItemCommandAction

Code: Alles auswählen

22:09:10.783 [INFO ] [openhab.event.ItemCommandEvent       ] - Item 'Setpoint_Temperature' received command 16
Diese Lösung ist mir jedoch zu statisch.

In viewtopic.php?p=9545#p9545 steht, dass man über "... .state as Number" auf den Wert eines Setpoints zugreifen kann:

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      itemName: Setpoint_Temperature
      command: Setback_Temperature.state as Number
    type: core.ItemCommandAction
Das funktioniert bei mir aber leider nicht.

Hat jemand eine Idee, wie ich das Problem lösen kann?

VG
von Harka » 24. Dez 2023 04:44
Moin,

um einem Item den Wert eines anderem Item zuzuweisen brauchst Du ein Script. Dazu wählst Du add_Action/Inline_Script/Rule_DSL, fügst folgende Zeile ein und speicherst diese.

Code: Alles auswählen

Setpoint_Temperature.sendCommand(Setback_Temperature.state as Number)
🎄
Gehe zur vollständigen Antwort

Harka
Beiträge: 308
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Setpoint einem anderen Setpoint zuweisen

Beitrag von Harka »

Moin,

um einem Item den Wert eines anderem Item zuzuweisen brauchst Du ein Script. Dazu wählst Du add_Action/Inline_Script/Rule_DSL, fügst folgende Zeile ein und speicherst diese.

Code: Alles auswählen

Setpoint_Temperature.sendCommand(Setback_Temperature.state as Number)
🎄

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Setpoint einem anderen Setpoint zuweisen

Beitrag von peter-pan »

Eine einfache Lösung wäre evtl. die zwei Items über ein "follow"-Profil zu verbinden.
Z.B. hier steuert die Stehlampe ein anderes Gerät mit:

Code: Alles auswählen

Switch    Sonoff_Pow_02  "Stehlampe [MAP(de.map):%s]"   <standard_lamp>         (gEG_Wohnen,gT_OnOff,gLight) ["Switch","Light"]    { channel="mqtt:topic:claudi:pow02:power", channel="mqtt:topic:claudi:TH1601:power" [profile="follow"]}
Allerdings ist mir nicht ganz klar, wie du zu deinen Setpoint-Werten kommst. Soweit mir bekannt ist, hat die Steckdose DECT200 zwar eine Temperaturmessung, aber keine Setpoint-Möglichkeit, zwischen "Comfort" und "Eco" bzw "ON/OFF" . Das kenne ich nur von den Thermostaten von AVM.
Ausserdem verstehe ich noch nicht ganz, was der Auslöser (Trigger) für die Änderung sein soll.

Eine andere Variante mit einer Regel (eigentlich 2) , die ich benutze, ist das Schalten von den Thermostaten in Verbindung mit Fenstersensoren. Dazu verwende ich neben den "normalen" Thermostat-Items aus dem "Thing" zwei ungebundene Items zum Speichern der Zustände vor der Zustandsänderung.

Code: Alles auswählen

Number:Temperature            radiator_valve_04_Set_prev        "Temp Bad vorher [%.1f %unit%]"                                 <heating1>        (gRFritz_04)                                ["Point"]
String                        radiator_valve_04_Mode_prev       "Heizkörper Bad Modus vorher[%s]"                               <dect301>         (gRFritz_04)                                ["Point"]
Die Rules dazu sind:

Code: Alles auswählen

rule "HM Fenster Status Bad Offen"
    when
//    Item Dummy_4 changed to ON or   //Test-Item
    Item HmIP_SWDO_A4E4_1STATECONTACT changed from CLOSED to OPEN
    then
        radiator_valve_04_Set_prev.postUpdate(radiator_valve_04_Set.state)
        radiator_valve_04_Mode_prev.postUpdate(radiator_valve_04_Mode.state)
        radiator_valve_04_Mode.sendCommand("OFF")
        logInfo("homematic"," HM Fenster AUF Status Bad Heizkörper {}", radiator_valve_04_Mode)
        logInfo("homematic"," HM Fenster AUF Status Bad Heizkörper {}", radiator_valve_04_Set)
end
//===============================================================================
rule "HM Fenster Status Bad Geschlossen"
    when
//    Item Dummy_3 changed to ON or   //Test-Item
    Item HmIP_SWDO_A4E4_1STATECONTACT changed from OPEN to CLOSED
    then
    if ((radiator_valve_04_Mode_prev.state == "ECO") || (radiator_valve_04_Mode_prev.state == "COMFORT") || (radiator_valve_04_Mode_prev.state == "OFF")) {
        radiator_valve_04_Mode.sendCommand(radiator_valve_04_Mode_prev.state.toString)
        logInfo("homematic"," HM Fenster ZU(ECO,COMFORT) Status Bad Heizkörper {}", radiator_valve_04_Set)
    }
    if (radiator_valve_04_Mode_prev.state == "ON") {
        radiator_valve_04_Mode.sendCommand(radiator_valve_04_Mode_prev.state.toString)
        radiator_valve_04_Set.sendCommand(radiator_valve_04_Set_prev.state.toString)
        logInfo("homematic"," HM Fenster ZU(ON) Status Bad Heizkörper {}", radiator_valve_04_Set)
    }
end
Vielleicht hilft dir das weiter.

Edit: Ich bin jetzt nicht so firm im UI-Scripting und hab auch grad keine Testmöglichkeit, aber hast du es schon mal mit

Code: Alles auswählen

command: Setback_Temperature.state
probiert?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Antworten