Heizungssteuerung Rules Problem

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
leupy
Beiträge: 78
Registriert: 21. Nov 2018 19:43
Wohnort: Saarlouis

Heizungssteuerung Rules Problem

Beitrag von leupy »

Hallo,
Ich versuche schon mehre Tage meine Regel für eine geplante Heizungssteuerung hin zu bekommen.
Vom haus aus Programmiere ich Roboter und tue mir schwer mit dem Syntax von OpenHab Regeln.
Ins besonderen ist mir die Bedeutung der Klammern nicht ganz geläufig. Wie und wann und mit welcher klammer gearbeitet werden muß.

hier mal meine erstellt Regel die leider nicht läuft, ich denke es liegt an den Zeiten bei den Bedingungen. Habe aber leider keine Ahnung wie ich das machen soll.
Und noch eine Frage zu den variablen von Tag Minute und Stunde. Die hatte ich erst in einer separaten Regel die dann aber laut Log nicht beschrieben wurden. Jetzt hab ich diese in die Regel der Heizung gepackt. Ich wollte die variablen auch noch nutzen für andere Regeln geht das dann ?

Code: Alles auswählen

//--------------------------------------------------- 
// Heizung Wohnzimmer 
//--------------------------------------------------- 
rule "Init Heizung"
when
    System started or Time cron "0 00 21 * * ?"
then
    
    Heizung_W_Soll.postUpdate(21.0)
    Heizung_W_Soll_N.postUpdate(18.0)
    Heizung_E_Soll.postUpdate(21.0)
    Heizung_E_Soll_N.postUpdate(18.0)
    

end
//----------------------------------------------------
rule "Heizung WZ Ist/Soll vergleich"
    when
        
        Item Sonoff85Temp changed or      // Istwert Temp Wohnzimmer
        Item Heizung_W_Soll changed or    // Sollwert Heizung Wohnzimmer    
        Item Heizung_W_Soll_N changed     // Sollwert Nacht Heizung Wohnzimmer  
    then
           var  hour = now.getHourOfDay
           var  min = now.getMinuteOfHour
           var  wd = now.getDayOfWeek
           if (hour >= 05 && min >= 45 && wd <= 5 && hour < 20)               // Wochentags (Mo - Fr 5:45Uhr-20:00Uhr)
                {
                    var double wtsp=(Heizung_W_Soll.state as DecimalType).doubleValue      // Temperatur Soll Tag
                    var double wtsi=(Sonoff85Temp.state as DecimalType).doubleValue
                    if (wtsi < wtsp)
                    {
                    Heizung_W.sendCommand(ON)
                    }
                
                    else    
                    {
                    Heizung_W.sendCommand (OFF)
                    }
                }    
            else if (hour >= 8 && min >= 00 && wd >= 6 && hour < 20)            // Wochende (Sa - So 8:00-20:00Uhr)
                {
                    var double wtsp=(Heizung_W_Soll.state as DecimalType).doubleValue    // Temperatur Soll Tag
                    var double wtsi=(Sonoff85Temp.state as DecimalType).doubleValue
                    if (wtsi < wtsp)
                    {
                    Heizung_W.sendCommand(ON)
                    }
                
                    else 
                    {
                    Heizung_W.sendCommand (OFF)
                    }  
                }           
            else if (hour >= 20 && min <= 0 && hour < 5 && min <=45)                           //Absenkung Nacht 
                {
                    var double wtspN=(Heizung_W_Soll_N.state as DecimalType).doubleValue  // Temperatur Soll Nacht 
                    var double wtsi=(Sonoff85Temp.state as DecimalType).doubleValue
                    if (wtsi < wtspN)
                    {
                    Heizung_W.sendCommand(ON)
                    }
                
                    else    
                    {
                    Heizung_W.sendCommand (OFF)
                    }  
                }           
end
Gruß aus dem Saarland leupy
Saarländer
Raspberry Pi 3 & 4 openHAB3.3
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

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

Re: Heizungssteuerung Rules Problem

Beitrag von udo1toni »

Die Rule ist an einigen Stellen unnötig kompliziert. Hier eine bereinigte Fassung:

Code: Alles auswählen

//--------------------------------------------------- 
// Heizung Wohnzimmer 
//--------------------------------------------------- 
rule "Init Heizung"
when
    System started or 
    Time cron "0 00 21 * * ?"
then
    Heizung_W_Soll.postUpdate(21.0)
    Heizung_W_Soll_N.postUpdate(18.0)
    Heizung_E_Soll.postUpdate(21.0)
    Heizung_E_Soll_N.postUpdate(18.0)
end
//----------------------------------------------------

rule "Heizung WZ Ist/Soll vergleich"
when
    Item Sonoff85Temp changed or                                        // Istwert Temp Wohnzimmer
    Item Heizung_W_Soll changed or                                      // Sollwert Heizung Wohnzimmer
    Item Heizung_W_Soll_N changed                                       // Sollwert Nacht Heizung Wohnzimmer
then
    val Number wtsp = (Heizung_W_Soll.state as Number).doubleValue      // Temperatur Soll Tag
    val Number wtspN = (Heizung_W_Soll_N.state as Number).doubleValue   // Temperatur Soll Nacht 
    val Number wtsi = (Sonoff85Temp.state as Number).doubleValue

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

    if(wd <= 5 && min > 5*60+44 && hour < 20)                           // Wochentags (Mo - Fr 5:45Uhr-20:00Uhr)
        Heizung_W.sendCommand(if(wtsi < wtsp) ON else OFF)
    else if (wd >= 6 && hour > 7 &&  hour < 20)                         // Wochende (Sa - So 8:00-20:00Uhr)
        Heizung_W.sendCommand(if (wtsi < wtsp) ON else OFF)
    else                                                                // Absenkung Nacht
        Heizung_W.sendCommand(if (wtsi < wtspN) ON else OFF)
end
Die wichtigste Änderung besteht in den Zeit-Bedingungen. Wenn Du auf Minute der Stunde großer null prüfst, gilt das für alle Stunden, nicht nur für die 5-Uhr-Stunde. Eine Möglichkeit wäre die Prüfung auf ((now.stunde = 5 && now.minute > 44) || now.stunde > 5) && now.stunde < 20, die pragmatische Variante ist die, welche ich in der Rule eingebaut habe, auf die Minute des Tags zu prüfen.
Die Bedingung für Nacht soll an jedem Wochentag gelten, , aber natürlich in unterschiedlichen Zeitfenstern. Da die beiden ersten Bedingungen schon die Tag-Zeiten ausgesiebt haben, sollte die dritte Möglichkeit für alle anderen Fälle gelten.
Die Variablenzuordnung erfolgt in jedem Fall, also kann man sie auch gleich vor das erste if setzen. Die Zuweisung von Tag und Nacht kostet nicht wirklich Zeit.
Primitives sollte man vermeiden, openHAB benötigt um Zehnerpotenzen mehr Zeit für die Erstellung einer Primitive Variablen als für das entsprechende Objekt.
Number ist DecimalType vorzuziehen, ebenso für den Variablentyp. Da die Werte während der Laufzeit erzeugt und nicht geändert werden, kann man auch eine Konstante nutzen. Wenn Du die Werte allerdings global verwenden willst, musst Du die Variable global definieren, das heißt oberhalb der ersten Rule in der Datei. Allerdings kannst Du nur die Variable definieren, aber keinen dynamischen Wert zuweisen (das muss weiterhin zu Beginn der Rule erfolgen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
leupy
Beiträge: 78
Registriert: 21. Nov 2018 19:43
Wohnort: Saarlouis

Re: Heizungssteuerung Rules Problem

Beitrag von leupy »

Hallo udo1toni,
vielen dank für deine Arbeit und Hilfe, und ein Lob an das Forum das mir bis jetzt immer weitergeholfen hat.
Auf die Lösung währe ich von selbst nicht gekommen.
Gruß leupy
Saarländer
Raspberry Pi 3 & 4 openHAB3.3
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

Benutzeravatar
leupy
Beiträge: 78
Registriert: 21. Nov 2018 19:43
Wohnort: Saarlouis

Re: Heizungssteuerung Rules Problem

Beitrag von leupy »

Hallo noch ein mal zu dem Thema.
Hat Jemand noch eine Idee wie ich eine "Pulsweitenmodulation, hin bekomme beim einschalten der Heizung.
Ich wollte die Heizkörper über einen Stellantrieb (Wachsmotor) ansteuern.
Damit ich nicht nur eine 2 Punkt Reglung habe, wollte ich dass mit Pulsweitenmodulation realisieren.
Ich dachte an 2 Timer mit Merker :idea: die dann bei Unterschreiten der Temperatur 10 min einschalten aber auch eine Pausen zeit von 10 min haben obwohl die Temperatur unterschritten ist.
Gruß leupy
Saarländer
Raspberry Pi 3 & 4 openHAB3.3
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

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

Re: Heizungssteuerung Rules Problem

Beitrag von udo1toni »

Kann man alles machen, aber ob das sinnvoll ist? openHAB ist eigentlich nicht zum Regeln gedacht. Aber sei's drum...

Code: Alles auswählen

// Globale Variablen werden zu Beginn der Datei definiert

var Timer tPWM = null                                    // ein Timer
var Boolean bPWM = false                                 // ON- oder OFF-Phase
var Number nPWM = 0                                      // ON-Puls in %

rule "Heizung PWM"
when
    System started
then
    tPWM?.cancel
    tPWM = createTimer(now.plusMillis(100),[|
        var Integer nTime = 0
        if(!(nPWM instanceof Number)) {
            nPWM = 0
            logWarn("pwm","PWM ungültig! [} keine Zahl!",nPWM)
        } else if(nPWM < 0) {
            logWarn("pwm","PWM ungültig! [} negativ! Setze nPWM auf 0!",nPWM)
            nPWM = 0
        } else if(nPWM > 100) {
            logWarn("pwm","PWM ungültig! [} über 100! Setze nPWM auf 100!",nPWM)
            nPWM = 100
        }
        bPWM = !bPWM
        if(bPWM) {
            heizung.sendCommand(ON)
            nTime = 6*nPWM
        } else {
            heizung.sendCommand(OFF)
            nTime = 6*(100-nPWM)
        }
        if(nTime == 0) nTime = 1
        if(nTime == 600) nTime = 599
        tPWM.reschedule(now.plusSeconds(nTime))
    ])
end
Dier Code erzeugt einen Timer, der abwechselnd das Ventil in ON- und OFF-Zustand schaltet und sich danach selbst erneut startet. Dabei wird abwechselnd entweder die ON-Pulsweite oder die OFF-Pulsweite als Grundlage verwendet (die OFF-Pulsweite ergibt sich aus 100-ON-Pulsweite).
jeder 2. Timerablauf findet also immer exakt 10 Minuten später statt (es sei denn, man verstellt die Pulsweite, dann verschiebt sich der Puls einmalig). In der regelstufe musst Du nun die globale Variable nPWM auf einen Integer Wert zwischen 0 und 100 setzen.
Die Rule läuft tatsächlich nur ein einziges Mal, nämlich, wenn das System startet. Sie legt den Timer an, der ab diesem Zeitpunkt unabhängig vor sich hin werkelt.
falls man die Rules bearbeitet, wird system startet wieder ausgeführt, obwohl openHAB gar nicht neu gestartet wurde. Deshalb muss die Rule zu Beginn sicherstellen, dass kein laufender Timer existiert.
Der Timer Code switcht zwischen den 2 Phasen ON und OFF und merkt sich, in welcher Phase er gerade ist (das geht bequem über bPWM, ein Boolean Merker)
Anschließend wird nPWM auf gültigen Zahlenraum geprüft. Falls ungültige Werte verwendet werden, setzt der Code einen gültigen Wert zwischen 0 und 100.
Nach dem Switchen wird die zu verwendende Pulsweite bestimmt. Für die Grenzwerte 0 und 600 muss die Zeit angepasst werden, da der Timer nicht zuverlässig auf now geplant werden kann. Man könnte alternativ den Gültigkeitsbereich für nPWM auf 1 bis 99 festlegen (oder man ändert den Code der Rule dahingehend ab, dass das Ventil nur dann gesteuert wird, wenn nPWM weder 0 noch 100 sind und einfach der Timer so lange nur die 100%-Seite ausführt, bis der Wert wieder unterschritten wird. Das erschien mir nun aber als unnötig kompliziert ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Heizungssteuerung Rules Problem

Beitrag von udo1toni »

So, hat mir jetzt natürlich keine Ruhe gelassen...

Code: Alles auswählen

// Globale Variablen werden zu Beginn der Datei definiert

var Timer tPWM = null                                            // ein Timer
var Boolean bPWM = false                                         // ON- oder OFF-Phase
var Number nPWM = 0                                              // ON-Puls in %

rule "Heizung PWM"
when
    System started                                               // Rule wird nur zur Initialisierung benötigt
then
    tPWM?.cancel                                                 // falls Timer bereits vorhanden, entfernen
    tPWM = createTimer(now.plusMillis(100), [|                   // Timer erzeugen und nach 100Millisekunden starten
        var Integer nTime = 0                                    // Hilfsvariable
        bPWM = !bPWM                                             // zwischen ON- und OFF-Phase wechseln
        if(!(nPWM instanceof Number)) {                          // keine gültige Zahl
            logWarn("pwm","nPWM ungültig! {}",nPWM)
            nPWM = 0                                             // setze auf 0
        } else if (nPWM < 0) {                                   // kein gültiger Wert
            logWarn("pwm","nPWM ungültig! {} ist kleiner 0",nPWM)
            nPWM = 0                                             // setze auf 0
        } else if (nPWM > 100) {                                 // kein gültiger Wert
            logWarn("pwm","nPWM ungültig! {} ist größer 100",nPWM)
            nPWM = 100                                           // setze auf 100
        }
        switch (nPWM.intValue) {                                 // unterscheide zwischen
            case 0: {                                            // 0 -> OFF
                nTime = 600                                      // fix 10 Minuten
                if(heizung.state != OFF)                         // Falls Heizung nicht OFF
                    heizung.sendCommand(OFF)                     // Heizung OFF
            }
            case 100: {                                          // 100 -> ON
                nTime = 600                                      // fix 10 Minuten
                if(heizung.state != ON)                          // Falls Heizung nicht ON
                    heizung.sendCommand(ON)                      // Heizung ON
            }
            default: {                                           // 1 bis 99 -> phasenabhängig ON oder OFF
                nTime = 6 * if(bPWM) nPWM else 100-nPWM          // falls ON-Phase normale Pulsweite, sonst invertierte Pulsweite
                if(heizung.state != if(bPWM) ON else OFF)        // Falls Heizung in ON-Phase nicht ON bzw. in OFF-Phase nicht OFF
                    heizung.sendCommand(if(bPWM) ON else OFF)    // Heizung auf korrekte Phase
            }
        }
        tPWM.reschedule(now.plusSeconds(nTime))                  // Timer erneut in nTime Sekunden ausführen
    ])
end
Kommt ohne Schummelzeit aus ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
leupy
Beiträge: 78
Registriert: 21. Nov 2018 19:43
Wohnort: Saarlouis

Re: Heizungssteuerung Rules Problem

Beitrag von leupy »

Hallo und Danke nochmal für die Unterstützung.
Wenn ich das richtig verstehe muss ich doch dann die PWM Regel starten wenn aus der Ersten Heizungsreglung die Heizung auf On gesetzt wird.
Das Erreiche ich doch dann, wenn ich als Bedingung bei der PWM Regel zu "System started or Item Heizung_W.state =ON" hinzufüge.
(In der Regel PWM sind natürlich noch die Heizungs Nahmen angepasst worden)
Nachtrag
Meine erste Idee geht so ja nicht da je die PWM Regel das Item nach 10 min auf OFF setzt und dann die regel nicht mehr läuft.
Meine zweite Idee ist dann, ich muss mit der Ersten Regel eine Bolen Variable auf True setzen und die in der PWM dann verarbeiten als Startbedinung.
Liege ich damit Richtig oder bin ich wieder zu kompliziert unterwegs :?
gruß leupy
Saarländer
Raspberry Pi 3 & 4 openHAB3.3
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

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

Re: Heizungssteuerung Rules Problem

Beitrag von udo1toni »

Nein? Ich habe das extra in die Rule als Kommentar rein geschrieben. Die Rule "Heizung PWM" wird exakt einmal ausgeführt, nämlcih, wenn das System startet. Da es sich nicht vermeiden lässt, wird ide Rule aus ausgeführt, wenn die Rules-Datei gespeichert wird, weshalb die Rule dann dafür sorgt, dass der PWM-Timer neu angelegt wird.

Die Steuerung erfolgt aussschließlich über den Stellwert nPWM, das ist die Pulslänge in %.
  • nPWM = 0 -> es wird nicht geheizt
  • nPWM = 100 -> die Heizung ist dauerhaft an.
  • nPWM = 50 -> die Hälfte der Zeit wird geheizt (also 5 Minuten an, 5 Minuten aus).
Die Rule legt einen Timer an, der sich um die Puls/Pausensteuerung kümmert. Dieser Timer startet sich selbst, wenn er ausgeführt wird. Lies Dir den Code genau durch. Meine Kommentare sind knapp gehalten, sollten aber erklären, wozu jede einzelne Zeile da ist.

Ich hab noch eine kleine Optimierung vorgenommen, deshalb hier nochmal der Code:

Code: Alles auswählen

// Globale Variablen werden zu Beginn der Datei definiert

var Timer tPWM = null                                            // ein Timer
var Boolean bPWM = false                                         // ON- oder OFF-Phase
var Number nPWM = 0                                              // ON-Puls in %

rule "Heizung PWM"
when
    System started                                               // Rule wird nur zur Initialisierung benötigt
then
    tPWM?.cancel                                                 // falls Timer bereits vorhanden, entfernen
    tPWM = createTimer(now.plusMillis(100), [|                   // Timer erzeugen und nach 100Millisekunden starten
        var Integer nTime = 0                                    // Hilfsvariable Pulsweite
        var sHeiz = OFF                                          // Hilfsvariable Sollzustand
        bPWM = !bPWM                                             // zwischen ON- und OFF-Phase wechseln
        if(!(nPWM instanceof Number)) {                          // keine gültiger Wert? (keine Zahl)
            logWarn("pwm","nPWM ungültig! {}",nPWM)
            nPWM = 0                                             // setze auf 0
        } else if (nPWM < 0) {                                   // kein gültiger Wert? (kleiner 0)
            logWarn("pwm","nPWM ungültig! {} ist kleiner 0",nPWM)
            nPWM = 0                                             // setze auf 0
        } else if (nPWM > 100) {                                 // kein gültiger Wert? (größer 100)
            logWarn("pwm","nPWM ungültig! {} ist größer 100",nPWM)
            nPWM = 100                                           // setze auf 100
        }
        switch (nPWM.intValue) {                                 // unterscheide zwischen
            case 0: {                                            // 0 -> OFF
                nTime = 600                                      // fix 10 Minuten
                sHeiz = OFF                                      // Sollzustand OFF
            }
            case 100: {                                          // 100 -> ON
                nTime = 600                                      // fix 10 Minuten
                sHeiz = ON                                      // Sollzustand ON
            }
            default: {                                           // 1 bis 99 -> phasenabhängig ON oder OFF
                nTime = 6 * if(bPWM) nPWM else 100-nPWM          // falls ON-Phase normale Pulsweite, sonst invertierte Pulsweite
                sHeiz = if(bPWM) ON else OFF                     // Sollzustand phasenabhängig
            }
        }
        if(heizung.state != sHeiz)                               // Falls Heizung nicht auf Sollstatus
            heizung.sendCommand(sHeiz)                           // Heizung auf Sollstatus
        tPWM.reschedule(now.plusSeconds(nTime))                  // Timer erneut in nTime Sekunden ausführen
    ])
end
Die Rule wird nur zum initialisieren des Timers benötigt.
Wenn der Timer abläuft, wird das Lambda ausgeführt (der Teil in [])
Das Lambda teilt sich groß in drei Abschnitte:
  1. Variablen initialisieren, Phase umkehren und Prüfung des Eingangswerts auf Plausibilität (Wertebereich ganze Zahl [0 - 100] )
  2. Sollzustand und Phasenlänge bestimmen
  3. Heizung aus Sollzustand setzen und Timer erneut planen
Die einzige vorzunehmende Anpassung der Rule ist das verwendete Item heizung (das ist das Ventil, ON -> Ventil geöffnet OFF -> Ventil geschlossen)
Natürlich könne man die Phasenlänge noch anpassen, aber eine Frequenz von 1/600 Hz ist für thermische Ventile eine gängige Größe.

Was noch fehlt, ist eine Rule, die in Abhängigkeit der Temperatur die Pulsweite setzt. Ich habe weder von Fuzzy Logic noch von PI-Regelung Ahnung :).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
leupy
Beiträge: 78
Registriert: 21. Nov 2018 19:43
Wohnort: Saarlouis

Re: Heizungssteuerung Rules Problem

Beitrag von leupy »

Hallo,
das heißt für mich ich muss in der Regel von der Zeitsteuerung nicht mehr die Heizung einschalten sondern die Variable "var Number nPWM = 0 "
auf einen gewünschten Wert setzen z.B.

if(wd <= 5 && min > 5*60+44 && hour < 20) // Wochentags (Mo - Fr 5:45Uhr-20:00Uhr)
var Number nPWM = (if(wtsi < wtsp) 100 else 0)
Saarländer
Raspberry Pi 3 & 4 openHAB3.3
Asus Touchscreen Wandeinbau
Win 10 Rechner zum Visualisieren
Sonoff Aktoren mit Tasmota
Sonoff RF Bridge
MiLight
Shelly 1 und 2

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

Re: Heizungssteuerung Rules Problem

Beitrag von udo1toni »

In Deinem Posting viewtopic.php?f=15&t=2662#p12813 hast Du doch selbst den Wunsch nach einer PWM geäußert. Wenn man PWM zur Verfügung hat, setzt man nicht 0 oder 100, sondern abhängig von der Differenz zur Solltemperatur einen Wert zwischen 0 und 100. Übertemperatur -> 0; korrekte Temperatur -> niedriger Grundwert (der müsste entweder ermittelt werden, oder die Regelung muss das adaptiv machen, z.B. mittels Fuzzy Logic, aber meinetwegen 10); Temperatur zu niedrig -> mehr als Grundwert, z.B. 50; viel zu niedrige Temperatur -> 100. Das macht man gewöhnlich über eine Pi-Regelung. Das wäre auch in einer separaten Rule gut aufgehoben. Diese Rule wiederum wird über Solltemperatur und verschiedene Parameter wie Raumtemperatur, Außentemperatur, Drift usw. gesteuert. Die Zeitsteuerung als oberste Ebene setzt dann nur die Solltemperatur.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten