Heizungssteuerung

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
tanzehn
Beiträge: 21
Registriert: 15. Dez 2020 10:03

Heizungssteuerung

Beitrag von tanzehn »

Hallo Leute, ich suche eine Lösung für eine Heizungssteuerung und zwar hab ich momentan diese Rule am laufen die funktioniert echt super

Code: Alles auswählen

rule "Heizungssteuerung Wohnzimmer"

when

  Item WohnRaumtemp changed or 
  Item WohnRaumtempSollSetpoint changed or 
  Item WohnzimmerHeizungSwitch changed
  
then

  if (WohnzimmerHeizungSwitch.state == ON && WohnRaumtemp.state <= WohnRaumtempSollSetpoint.state as Number)

      {
        
      WohnHeizung.sendCommand(ON)
        
      }

  else

      {

      WohnHeizung.sendCommand(OFF)       
        return;
      }

end
Ich möchte jetzt gerne das die Heizung 1 Grad über die Setpointtemperatur heizt und dann ausschaltet und erst wieder einschaltet wenn sie die Setpointtemperatur unterschreitet. Ich hoffe ihr könnt mir helfen bitte. Ist wahrscheinlich für jemanden der programmierkenntnisse hat ein Kinderspiel.

Danke im voraus

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

Re: Heizungssteuerung

Beitrag von udo1toni »

Also, Deine Rule mag super funktionieren, das kann sich aber ganz leicht ändern, wenn der Sollwert nicht gesetzt wurde oder der Messwert ausfällt ;)

Aber sise soll ja ohnehin überarbeitet werden...

Code: Alles auswählen

rule "Heizungssteuerung Wohnzimmer"
when
    Item WohnRaumtemp changed or 
    Item WohnRaumtempSollSetpoint changed or 
    Item WohnzimmerHeizungSwitch changed
then
    var Number nRaumSoll = 16                                // default Solltemperatur, falls das Item noch nicht initialisiert ist
    if(WohnRaumtempSollSetpoint.state instanceof Number)     // falls gültiger Wert vorliegt
        nRaumSoll = WohnRaumtempSollSetpoint.state as Number // Sollwert setzen
    var Number nRaumIst  = 18                                // default Isttemperatur, falls kein gültiger Messwert vorliegt
    if(WohnRaumtemp.state instanceof Number)                 // falls gültiger Wert vorliegt
        nRaumIst = WohnRaumtemp.state as Number              // Istwert setzen
    var sSoll = WohnHeizung.state                            // aktueller Zustand
    if(WohnzimmerHeizungSwitch.state == ON) {                // Heizung freigegeben?
        if(nRaumIst <= nRaumSoll)                            // Solltemperatur unterschritten?
            sSoll = ON                                       // dann Sollzustand ON
        else if(nRaumIst >= nRaumSoll +1)                    // Solltemperatur um mindestens 1 überschritten?
            sSoll = OFF                                      // dann Sollzustand OFF
    } else                                                   // Heizung abgeschaltet?
        sSoll = OFF                                          // dann Sollzustand OFF
    if(WohnHeizung.state != sSoll)                           // Weicht Ist von Soll ab?
        WohnHeizung.sendCommand(sSoll.toString)              // dann Befehl senden
end
Zu Beginn werden die beiden Zahlenwerte in Variablen übernommen. Ansonsten müsste man immer fürchten, dass einer oder beide Werte keine gültige Zahl liefern, womit es dann zu einer NullPointer Exception kommt.
Außerdem müssen wir die beiden Werte zwei mal vergleichen (einmal mit Aufschlag), so dass die Variablen sich schon lohnen.
Weil es insgesamt drei verschiedene Möglichkeiten gibt, was den Ausgang des Vergleichs betrifft, und dann noch drei Eingangswerte verwendet werden müssen (der Schalter zur Freigabe der Heizung), ist es das Einfachste, hier gestaffelt zu vergleichen. dabei nutze ich den aktuellen Status der Heizung als "Neutralstellung".
Ist der Schalter nicht ON, so wird der Sollzustand auf OFF gesetzt.
Ist der Schalter ON, aber die Temperatur über dem oberen Grenzwert (Soll+ 1) wird der Sollzustand ebenfalls auf OFF gesetzt.
Ist der Schalter ON und die Temperatur unterhalb oder gleich dem unteren Grenzwert (Soll), wird der Sollzustand auf OFF gesetzt.
Ist der Schalter ON und die Temperatur zwischen unterem Grenzwert und oberem Grenzwert, so bleibt der Sollzustand auf dem aktuellen Wert.

Zum Schluss muss der aktuelle Wert mit dem Sollwert verglichen werden und bei Bedarf der Steuerbefehl abgesetzt werden (diesen Vergleich könnte man auch einsparen, aber warum sollte man eine eingeschaltete Heizung immer wieder einschalten (oder eine ausgeschaltete Heizung immer wieder ausschalten?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tanzehn
Beiträge: 21
Registriert: 15. Dez 2020 10:03

Re: Heizungssteuerung

Beitrag von tanzehn »

Hallo Udo,

Wow, vielen Danke für die Rule und für die tolle Erklärung der Funktionen. :) Da hab ich jetzt wieder eine menge gelernt.

Antworten