Seite 1 von 1

OH3 rules Heizungssteuerung Problem

Verfasst: 24. Jan 2021 20:44
von exceptio
Hi Forum,

kann mir jemand helfen. Ich versuche ein rule zu erstellen. Die Funktion Heizung an/aus über Zeit und ist/soll Temperatur Vergleich. Finde den Fehler nicht. Habe mir dir rules irgendwo her kopiert kann aber nicht sagen ob sie nur bei mir nicht funktionert.

Code: Alles auswählen

//--------------------------------------------------- 
// Heizung Schlafzimmer
//--------------------------------------------------- 
rule "Init Heizung"
when
    System started or 
    Time cron "0 00 21 * * ?"
then
    Bedroom_Heating.state as Number
    Bedroom_Temperature_N.postUpdate(17)

end

rule "Heizung Schlafzimmer Ist/Soll Vergleich"
when
    Item Bedroom_Temperature changed or                                  // Istwert Temp Wohnzimmer
    Item Bedroom_Heating changed or                                      // Sollwert Heizung Wohnzimmer
    Item Bedroom_Temperature_N                                           // Sollwert Nacht Heizung Wohnzimmer
then
    val Number wtsp = (Bedroom_Heating.state as Number).doubleValue      // Temperatur Soll Tag
    val Number wtspN = (Bedroom_Temperature_N.state as Number).doubleValue   // Temperatur Soll Nacht 
    val Number wtsi = (Bedroom_Temperature.state as Number).doubleValue  // Temperatur Ist 

    val Number hour = now.getHourOfDay
    val Number min = now.getMinuteOfDay
    val Number wd = now.getDayOfWeek

    if(wd <= 5 && min > 5*60+44 && hour < 21)                            // Wochentags (Mo - Fr 5:45Uhr-20:00Uhr)
        Bedroom_Heizung.sendCommand(if(wtsi < wtsp) ON else OFF)
    else if (wd >= 6 && hour > 7 &&  hour < 22)                          // Wochende (Sa - So 8:00-22:00Uhr)
        Bedroom_Heizung.sendCommand(if (wtsi < wtsp) ON else OFF)
    else                                                                 // Absenkung Nacht
        Bedroom_Heizung.sendCommand(if (wtsi < wtspN) ON else OFF)
end
Kann mir jemand Helfen?

Grüße
Sebastian

Re: OH3 rules Heizungssteuerung Problem

Verfasst: 25. Jan 2021 08:32
von udo1toni
Also, wenn Du die Rule in openHAB3 einsetzen willst, musst Du die Aufrufe von now anpassen. Allerdings möchte ich einen anderen Vorschlag machen, nämlich die Umschaltung Tag/Nachtbetrieb über ein Item zu erledigen.
Zusätzlich zu den schon genutzten Items brauchst Du ein weiteres Item, welches als Schalter für Tag/Nachtbetrieb dient. Ich nenne es hier Bedroom_Komfort.

Die Rules sehen dann so aus:

Code: Alles auswählen

//--------------------------------------------------- 
// Heizung Schlafzimmer
//--------------------------------------------------- 
rule "Init Heizung"
when
    System started or                                                     // Ruledatei wurde eingelesen
    Time cron "0 00 21 * * ?"                                             // täglich um 21 Uhr
then
    Bedroom_Temperature_N.postUpdate(17)                                  // Absenktemperatur auf 17 einstellen
end

rule "Tagbetrieb"
when
    Time cron "5 45 5 ? * MON-FRI" or                                     // Montags bis Freitags um 05:45:05 Uhr
    Time cron "5 0 8 ? * SAT-SUN"                                         // Samstags und Sonntags um 08:00:05 Uhr
then
    Bedroom_Komfort.postUpdate(ON)
end

rule "Nachtbetrieb"
when
    Time cron "5 0 21 ? * MON-THU,SUN" or                                 // Sonntags bis Donnerstags um 21:00:05 Uhr
    Time cron "5 0 22 ? * FRI-SAT"                                        // Freitags und Samstags um 22:00:05 Uhr
then
    Bedroom_Komfort.postUpdate(OFF)
end

rule "Heizung Schlafzimmer Ist/Soll Vergleich"
when
    Item Bedroom_Temperature changed or                                   // Istwert Temp Wohnzimmer
    Item Bedroom_Heating changed or                                       // Sollwert Heizung Wohnzimmer
    Item Bedroom_Temperature_N changed or                                 // Sollwert Nacht Heizung Wohnzimmer
    Item Bedroom_Komfort changed                                          // Tag/Nachtbetrieb
then
    var Number wtsp = (Bedroom_Temperature_N.state as Number).doubleValue // Variable für Soll (Nachtabsenkung ist default)
    val Number wtsi = (Bedroom_Temperature.state as Number).doubleValue   // Temperatur Ist 
    var heat = OFF                                                        // Heizen (default OFF)
    if(Bedroom_Komfort.state == ON)                                       // Falls Komfortbetrieb
        wtsp = (Bedroom_Heating.state as Number).doubleValue              // Temperatur Soll Tag

    if(wtsp > wtsi)                                                       // Falls Soll höher als Ist
        heat = ON                                                         // Heizung an

    if(Bedroom_Heizung.state != heat)                                     // Falls Zustand Heizung von Soll abweicht
        Bedroom_Heizung.sendCommand(heat)                                 // Heizung umschalten
end
Das sieht nach mehr Code aus, letztlich ist es aber wesentlich klarer, was wo passiert. Die Rule verhält sich leicht anders als das Original, sie greift nämlich nur dann steuernd ein, wenn dies notwendig ist, das Original sendet jedes Mal einen Befehl an die Heizung, auch wenn diese schon passend ist.
Dieses Rulepaket sollte auch in OH3 laufen, notfalls sogar, wenn man die Rules über die UI erstellt.