Relais Temperaturgesteuert schalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Hallo Zusammen,
ich bin noch Anfänger was Openhab angeht und stehe nun vor einem Problem welches ich noch nicht lösen konnte.
Zunächst die Hardware:
Raspberry Pi 3b+, Temperatursensoren 18B20, 4 fach Relais Modul https://www.amazon.de/Elegoo-Relaismodu ... 0FC11P0ZN4
Software: Openhab2

Bisher frage ich die Temperaturen von meiner Heizung ab und visualisiere sie in Grafana.

Literatur: Smart Home mit openHAB2 von Marianne Spiller

Nun zum aktuellen Vorhaben:
Anhand von 2 Temperaturfühlern soll temperaturabhängig ein Relais geschalten werden, welches ein Umschaltventil steuert.

hier nun Mein Versuch eine Regel zu erstellen:

Code: Alles auswählen

rule "Umschaltventil"

var Tempspeicher_vorlauf = Speichertemperatur6.state as Number

If (Tempspeicher_vorlauf <= 50) {
Chanel3.sendCommand (OFF)
}

var Tempspeicher_oben = Speichertemperatur7.state as Number
If (Tempspeicher_oben >= 55 && Tempspeicher_vorlauf <= 55) {

Chanel3.sendCommand (ON)

Ich habe mich dabei am Buch orientiert, leider funktioniert es so nicht.
Ich hoffe jemand hat mir einen Tipp!

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

Re: Relais Temperaturgesteuert schalten

Beitrag von udo1toni »

Wie sind die Items Speichertemperatur6 und Speichertemperatur7 definiert?

Die Rule ist syntaktisch falsch. Zum einen fehlt hinten ein end, zum anderen fehlt oben der when Part. Die Rule sollte also eher so aussehen:

Code: Alles auswählen

rule "Umschaltventil"
when
    Item Speichertemperatur6 changed or
    Item Speichertemperatur7 changed
then
    var Tempspeicher_vorlauf = Speichertemperatur6.state as Number
    var Tempspeicher_oben = Speichertemperatur7.state as Number
    if (Tempspeicher_vorlauf <= 50) {
        Chanel3.sendCommand (OFF)                  // heißt das Item evtl. Channel3 und nicht Chanel3?
    }
    if (Tempspeicher_oben >= 55 && Tempspeicher_vorlauf <= 55) {
        Chanel3.sendCommand (ON)
    }
end
Beachte bitte auch peinlichst genau die Groß/Kleinschreibung jedes einzelnen Zeichens. Du hast in Deinem Code die beiden if() mit großem i geschrieben, das funktioniert ebenfalls nicht (in Marianne Spillers Buch wirst Du diese Schreibweise im Code auch nicht finden...)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Re: Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Danke schon mal für die Hilfe!
Wie Items Speichertemperatur6 und Speichertemperatur7 definiert sind kann ich erst heute Abend nachschauen.
Ich werde mir mehr Mühe geben, was die Schreibweise angeht! ;)

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Re: Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Ich habe es jetzt so nochmal Probiert, funktioniert aber leider auch nicht:

Code: Alles auswählen

rule "Umschaltventil"
when
    Item Speichertemperatur6 changed or
    Item Speichertemperatur7 changed
then
    var Tempspeicher_vorlauf = Speichertemperatur6.state as Number
    var Tempspeicher_oben = Speichertemperatur7.state as Number
    if (Tempspeicher_vorlauf <= 50) {
        channel3.sendCommand (ON)                  
    }
    if (Tempspeicher_oben >= 55 && Tempspeicher_vorlauf <= 55) {
        channel3.sendCommand (OFF)
    }
Die Items sind so definiert:

Code: Alles auswählen

Number:Temperature Speichertemperatur6      "Speicher unter Vorlauf: [%.1f %unit%]" <temperature>  { channel="onewiregpio:sensor:Speicher_unter_Vorlauf:temperature" }

Number:Temperature Speichertemperatur7      "Speicher oben: [%.1f %unit%]" <temperature>  { channel="onewiregpio:sensor:Speicher_oben:temperature" }

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

Re: Relais Temperaturgesteuert schalten

Beitrag von udo1toni »

Ja, ist kein Wunder. Die Temperaturen sind einheitenbehaftet, es wird also statt 16 als Zahl 16°C als Wert zurückgeliefert. Dementsprechend musst Du die Zuweisung zur Variablen ändern:

Code: Alles auswählen

    var Tempspeicher_vorlauf = (Speichertemperatur6.state as Number).floatValue
    var Tempspeicher_oben = (Speichertemperatur7.state as Number).floatValue
Alternativ kannst Du die Einheit auch im Vergleich berücksichtigen:

Code: Alles auswählen

if (Tempspeicher_vorlauf <= 50|°C) {
und dentsprechend auch im zweiten Vergleich.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Re: Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Super, es Funktioniert jetzt!
Danke für die kompetente Hilfe und die Geduld mit einem Anfänger!

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

Re: Relais Temperaturgesteuert schalten

Beitrag von udo1toni »

BO80 hat geschrieben: 19. Mär 2019 21:49 Super, es Funktioniert jetzt!
Danke für die kompetente Hilfe und die Geduld mit einem Anfänger!
Immer gerne, wir haben alle mal angefangen (und tun es in anderen Bereichen immer wieder) :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Re: Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Da es so gut funktioniert hat, habe ich die Rule gleich um 2 weitere Relais erweitert

Code: Alles auswählen

rule "Umschaltventil"
when
    Item Speichertemperatur6 changed or
    Item Speichertemperatur7 changed
then
    var Tempspeicher_vorlauf = (Speichertemperatur6.state as Number).floatValue
    var Tempspeicher_oben = (Speichertemperatur7.state as Number).floatValue
    if (Tempspeicher_vorlauf <= 50) {
        channel3.sendCommand (OFF)                  
    }
    if (Tempspeicher_oben >= 50 && Tempspeicher_vorlauf <= 55) {
        channel3.sendCommand (ON)
    }

    end


rule "Oelheizung Betrieb"

when
    Item Speichertemperatur6 changed or 
    Item Speichertemperatur1 changed
then
    var Tempspeicher_vorlauf = (Speichertemperatur6.state as Number).floatValue
    var Tempofen_vorlauf = (Speichertemperatur1.state as Number).floatValue
    if (Tempspeicher_vorlauf <= 45 && Tempofen_vorlauf <=50) {
        channel1.sendCommand (ON)   
        channel2.sendCommand (ON)                
    }
    if (Tempofen_vorlauf >=55) {
        channel1.sendCommand (OFF)   
        channel2.sendCommand (OFF)                
    }
    end
Jetzt würde ich gerne noch den channel2 zeitverzögert zu channel1 ausschalten.
Ist das so in der Rule möglich?

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

Re: Relais Temperaturgesteuert schalten

Beitrag von udo1toni »

Ja, das Einfachste ist ein Timer.

Code: Alles auswählen

// globale Variablen werden vor der ersten Rule definiert
var Timer tDelay = null

rule "Oelheizung Betrieb"
when
    Item Speichertemperatur6 changed or 
    Item Speichertemperatur1 changed
then
    var Tempspeicher_vorlauf = (Speichertemperatur6.state as Number).floatValue
    var Tempofen_vorlauf = (Speichertemperatur1.state as Number).floatValue
    if (Tempspeicher_vorlauf <= 45 && Tempofen_vorlauf <=50) {
        channel1.sendCommand (ON)   
        channel2.sendCommand (ON)
        tDelay?.cancel
    }
    if (Tempofen_vorlauf >=55) {
        channel1.sendCommand (OFF)
        tDelay = createTimer(now.plusSeconds(30), [ |
            channel2.sendCommand (OFF)
        ])
    }
end
statt plusSeconds gibt es auch plusMinutes und plusHours (...) Der übergebene Wert muss vom Typ Integer sein.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

BO80
Beiträge: 37
Registriert: 18. Mär 2019 07:47
Answers: 0

Re: Relais Temperaturgesteuert schalten

Beitrag von BO80 »

Danke für die Hilfe, das geht ja echt schnell bei dir!
Ich hab bestimmt noch die eine oder andere Frage.

Antworten