Regel für Heizung im Gartenhaus

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo Zusammen,

ich habe folgendes Problem in meinem Gartenhaus findet jeden Samstag zur Bundesligazeit ab 15:30 Uhr ein Rudelschauen statt, zur Heizung verwende ich im Winter einen 2KW und eine 500Watt Stromheizung, die ich im Herbst mit Sonhoff Basics (jetzt Tasmota 6.3) ans Smarthome angebunden habe. Das schalten vom Smartphone geht ohne Probleme und ich verwende für Samstags folgende Regel

Code: Alles auswählen

rule          "Heizung im Gartenhaus um 14:45 Uhr ein"

when
        Time cron "0 45 14 1/1 * ? * SAT"
    then     
        GF_Gartenhaus_Steckdose_2KW.sendCommand(ON)
        GF_Gartenhaus_Steckdose_500W.sendCommand(ON)


end
rule            "Heizung im Gartenhaus  um 19:00Uhr aus"
    
    when
        Time cron "0 0 19 1/1 * ? *"
    then
        GF_Gartenhaus_Steckdose_2KW.sendCommand(OFF)
        GF_Gartenhaus_Steckdose_500W.sendCommand(OFF)
        

end        

rule            "Heizung im Gartenhaus  um 23:45Uhr aus"
    
    when
        Time cron "0 45 23 1/1 * ? *"
    then
        GF_Gartenhaus_Steckdose_2KW.sendCommand(OFF)
        GF_Gartenhaus_Steckdose_500W.sendCommand(OFF)
        

end        

Der zweite Schaltpunkt ist für die CL gedacht, was eher selten vor kommt, da schalte ich die Heizung dann via Smartphone ein, soweit so gut. Nun zum Problem, an einigen Tagen kommen nur 6-8 Leute und an einigen Tagen sind 20 Mann da, was dann dazu führt das es recht warm wird und ich immer die Heizungen aus und an machen muss.

Mir schwebt vor, das ich mir einen Xiaomi Aqara Temperature, Humidity & Pressure Sensor bestelle und diesen dann zum regeln verwende. Als Beispiel: Heizung an wenn der Temperaturwert im Gartenhaus auf unter 20,5 Grand sinkt und Heizung aus wenn es 23 Grad sind, ich habe schon im Netz gesucht leider habe ich nichts richtiges gefunden...vielen Dank für Eure Vorschläge!

vG. Isostar

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

Re: Regel für Heizung im Gartenhaus

Beitrag von udo1toni »

Dein erster Time cron Ausdruck ist schlicht falsch, der kann so nicht funktionieren.

Der zweite und dritte Time cron Ausdruck sehen ok aus, sind aber auch unnötig kompliziert.

Code: Alles auswählen

Time cron "0 45 14 ? 10-12,1-3 SAT" // Um 14:45:00, samstags von Oktober bis März
Time cron "0 0 19 * * ?" Um 19:00:00, täglich
Time cron "0 45 23 * * ?" Um 23:45:00, täglich
Die einzelnen Stellen sind s m h T M W J, s=Sekunde, m=Minute, h=Stunde, T=Tag im Monat, M=Monat im Jahr, W=Wochentag, J=Jahr, wobei das Jahr optional ist, also nicht angegeben werden muss.

Da es sich doch um ordentliche Verbraucher handelt, wäre es sinnvoll, die beiden Geräte nacheinander einzuschalten, mit einigen Sekunden Abstand. Beim Ausschalten ist des eher egal, obwohl es acuh da zu Spannungsspitzen kommen kann.

Haben die Geräte keinen eingebauten Thermostaten? Das wäre - schon wegen der Betriebssicherheit - sehr wichtig.
Was passiert an den spielfreien Wochenenden?

Damit das Ganze mit exterenen Thermostaten funktioniert, brauchst Du halt ein paar Items, die die Ist- und Solltemperatur und dne Zustand halten. Weiterhin Brauchst Du nun ein Item, welches den Zustand hält, ob grundsätzlich geheizt werden soll. Ungefähr so:

Code: Alles auswählen

Switch Spieltag "Heizung [%s]" // kein Binding, kein Channel
Switch Heizen "Heizen [%s]"  // kein Binding, kein Channel

Switch GF_Gartenhaus_Steckdose_2KW "2kW Heizung [%s]" {mqtt="..."}
Switch GF_Gartenhaus_Steckdose_500W "500W Heizung [%s]" {mqtt="..."}

Number TempSoll "Solltemperatur [%.1f °C]" <temperature> // kein Binding, kein Channel
Number TempIst "Isttemperatur [%.1f °C]" <temperature> ... // Verbindung zum Temperatursensor

Code: Alles auswählen

val Number nHysterese = 0.2

rule "Spieltag an"
when
    Time cron "0 45 14 ? * SAT"
then
    Spieltag.postUpdate(ON)
end

rule "Spieltag aus"
when
    Time cron "0 0 19 * * ?"
then
    Spieltag.postUpdate(OFF)
end

rule "Heizung"
when
    Item TempIst changed or
    Item TempSoll changed or
    Item Spieltag changed
then
    Heizen.postUpdate(OFF)
    var Number ist = -100
    var Number soll = -100
    if(Spieltag.state == ON) {
        if(!(TempIst.state instanceof Number)) 
            logWarn("heizen","Isttemperatur Fehler!")
        else
            ist = TempIst.state as Number
        if(!(TempSoll.state instanceof Number)) 
            logWarn("heizen","Solltemperatur Fehler!")
        else
            soll = TempSoll.state as Number
        if(ist > 0 && soll > 0 && ((GF_Gartenhaus_Steckdose_2KW.state != ON && ist < soll - nHysterese) || (GF_Gartenhaus_Steckdose_2KW.state == ON && ist < soll)))
            Heizen.postUpdate(ON)
    }
    if(GF_Gartenhaus_Steckdose_2KW.state != Heizen.state) GF_Gartenhaus_Steckdose_2KW.sendCommand(Heizen.state)
    Thread::sleep(1000)
    if(GF_Gartenhaus_Steckdose_500W.state != Heizen.state) GF_Gartenhaus_Steckdose_500W.sendCommand(Heizen.state)
end
Mit den ersten beiden Rules wird festgelegt, ob überhaupt geheizt werden soll. Diese Information ist danach im Item Spieltag verfügbar.

In der dritten Rule wird zu Beginn das Item Heizen auf OFF gesetzt.
Anschließend prüft die Rule, ob Soll- und Isttemperatur gültige Werte enthalten.
Ist das nicht der Fall, gibt es eine entsprechende Warnmeldung im Log.
Enthalten beide eine gültige Temperatur, werden die beiden Werte verglichen.
Falls die Heizung gerade läuft, wird gegen die Solltemeperatur verglichen, ansonsten gegen die Solltemperatur minus Hysterese, um ständiges Schalten zu verhindern.
Ist die Solltemperatur (evtl. minus Hysterese) höher als die verglichene Isttemperatur, wird das Item Heizen auf ON gesetzt.
Zum Schluss werden die Heizkörper entsprechend geschaltet, wobei das Thread::sleep(1000) eine Sekunde Pause zwischen den beiden Schaltvorgängen einlegt.
Man kann natürlich die beiden Steckdosen immer schalten, also ohne den Zustand abzufragen, aber so werden nur dann Schalttelegramme gesendet, wenn dies wirklich notwendig ist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo und Danke Udo,

ja ich war unterwegs und habe die Regel aus dem Kopf nachgebildet, deswegen der Fehler im Cronjob. Die Heizungen haben ein Thermostat die von 0-6 gehen stehen auf 4.Das mit den Spielfreien Tagen habe ich ausgeblendet, ich versuche daran zudenken und stelle von Hand auf aus.Ich habe mir den Sensor mal bestellt, wird wohl 14 Tage dauern bis er da ist. Was ich nicht verstehe, wie bekommt man das pendeln der Temperaturen hin das bei 23Grad abgeschaltet wird und bei 20 Grad wieder geheizt wird...das kann ich doch auch verwenden wenn ich die Heizungen via Handy einschalte?

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

Re: Regel für Heizung im Gartenhaus

Beitrag von udo1toni »

Naja, das machst Du üebr die Hysterese. Ich hab sie im Beispielcode auf 0.2 gesetzt, Wenn Du die Solltemperatur auf 23 setzt und die Hysterese auf 3, sollte das passen.

Entsprechend kannst Du den Code natürlich etwas verschlanken, wenn Du die Solltemperatur einfach im Code fix einbinden willst, dann muss ja nicht auf einen gültigen Wert gecheckt werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo udo1toni,

der Sensor liegt in Aachen und wird wohl diese Woche zugestellt, ich habe mir zwei Stück bestellt.... wenn ich für das GästeWC wo eine 300 Watt Heizung hängt eine ganz schlanke Regel brauche, sagen wir ein bei 19 Grad und aus bei 22 und das zwischen 17 und 22 Uhr an jedem Tag, wie kann ich das abbilden?

Danke dir vG. Isostar1101

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

Re: Regel für Heizung im Gartenhaus

Beitrag von udo1toni »

Code: Alles auswählen

rule "WC Heizung"
when
    Item TempWC changed
then
    var Switch Heizung = OFF  // Falls etwas schief geht, auf jeden Fall abschalten
    var Number Temp = null
    if(TempWC.state instanceof Number) { //Gültiger Wert?
        Temp = TempWC.state as Number
        if(now.getHourOfDay > 16 && now.getHourOfDay < 22) //innerhalb des Zeitfensters?
            if(Temp < 19 || (Temp < 22 && myHeat.state == ON)) Heizung = ON
    }
    if(myHeat.state != Heizung) myHeat.sendCommand(Heizung)
end
Bei jeder Temperaturänderung startet die Rule.
Falls der Temperaturfühler keinen gültigen Wert zurückgeliefert hat, wird die Heizung abgeschaltet und die Rule beendet..
Falls wir innerhalb des Zeitfensters sind, wird die Temperatur geprüft.
Ist die Temperatur unterhalb des Einschaltpunkts, soll die Heizung eingeschaltet werden.
Ist die Temperatur unterhalb des Ausschaltpunkts und die Heizung ist eingeschaltet, soll die Heizung eingeschaltet bleiben.
Zum Abschluss wird der errechnete Sollzustand ins Item geschrieben.

Die Frage ist, wie es mit dem Frostschutz aussieht, da es sich ja um einen Raum mit Wasserzufuhr handelt. Elektrische Heizungen haben ohnehin eine Sicherheitsabschaltung, so dass man zur Not die Rule auch dahingehend ändern könnte, dass sie bei Ausfall des Temperatursensors in eine Art Notbetrieb wechselt und z.B. stündlich für 5 Minuten einheizt.

Allgemein ist es sinnvoller, eine Heizung mit passendem Thermostaten zu betreiben und openHAB nur zu nutzen, die Solltemperatur an den Thermostaten zu übergeben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo udo1toni,

Danke dir! mir schlagen die Regeln echt noch auf den Magen, ich habe mir jetzt mal das Buch Smart Home mit openHAB 2 bestellt, ich hoffe damit erlange ich etwas mehr Durchblick!

Ich habe die Regel mal versucht ohne das das Thermometer schon da ist abzubilden, leider sagt VS-Code das var Switch Heizung = OFF // Falls etwas schief geht, auf jeden Fall abschalten rot ist???

Code: Alles auswählen

rule "WC Heizung"
when
    Item GF_Toilette_Temperatur changed
then
    var Switch Heizung = OFF  // Falls etwas schief geht, auf jeden Fall abschalten 
    var Number Temp = null
    if(GF_Toilette_Temperatur.state instanceof Number) { //Gültiger Wert?
        Temp = GF_Toilette_Temperatur.state as Number
        if(now.getHourOfDay > 16 && now.getHourOfDay < 21) //innerhalb des Zeitfensters?
            if(Temp < 19 || (Temp < 22 && GF_Toilette_Heating.state == ON)) Heizung = ON
    }
    if(GF_Toilette_Heating.state != OFF) GF_Toilette_Heating.sendCommand(ON)
end


Danke!

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo Udo1Toni,

so Thermometer ist da und es funktioniert, keine Ahnung was VS-Code hatte. Nochmals vielen Dank!

vG. isostar1101

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

Re: Regel für Heizung im Gartenhaus

Beitrag von udo1toni »

Du hast aber schon gesehen, dass Du in der vorletzten Zeile hinten sendCommand(ON) geschrieben hast, und vorne != OFF? Das ist komplett falsch! Du musst an der Stelle gegen die Variable Heizung testen und diese auch setzen, in dieser Variablen steht der Soll-Status drin.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

isostar1101
Beiträge: 55
Registriert: 18. Sep 2018 17:43
Answers: 0

Re: Regel für Heizung im Gartenhaus

Beitrag von isostar1101 »

Hallo Udo1Toni,

verstehe ich nicht!

Code: Alles auswählen

if(GF_Toilette_Heating.state != OFF) GF_Toilette_Heating.sendCommand(ON)
end

erkläre mir Bitte nochmals war da rein kommt? Danke dir!

vG. Isostar1101

Antworten