Regel erweitern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Regel erweitern

Beitrag von isostar1101 »

Hallo Zusammen,

ich möchte mich bei Euch bedanken, Rule und ich werden sicher keine Freunde! Bisher läuft die Rule ohne Probleme! Udo an den Temperaturstufen bin ich interessiert, würde das eventuell via Alexa auch funktionieren Alex Temperatur auf 22 Grad oder Alexa Frostschutz?

Danke vG. Isostar1101

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

Re: Regel erweitern

Beitrag von udo1toni »

Mit Alexa hab ich nichts am Hut, keine Ahnung, was da zur Verfügung steht.
Als Beispiel, wie man das mit mehreren Modi umsetzen kann:

Code: Alles auswählen

// item für Modus
Number MilaHeizModus "Heizmodus [MAP(modus.map):%s]"

Code: Alles auswählen

// modus.map:
0=OFF
1=Frostschutz
2=Nachtabsenkung
3=Komfort
-=-0

Code: Alles auswählen

//  globale Variablen werden zu Beginn der Datei definiert
var Boolean bKomfort_01 = false                                      // Merker für Timer-Aktivierung
var Timer tKomfort_01 = null                                         // Timer für Rückschaltung auf Nachtabsenkung
var Number nOldMilaHeizModus


rule "Heizung an"
when
    Time cron "0 15 5 * * ?" or                                      // täglich 05:15 Uhr
    Time cron "0 0 19 * * ?"                                         // täglich 19:00 Uhr
then
    bKomfort_01 = true                                               // Komfort über Zeit aktiv
    MilaHeizModus.postUpdate(3)                                      // Komfort ein
    logInfo("heat","Komfort ein auf Zeit")
end

rule "Heizung aus"
when
    Time cron "0 30 6 * * ?" or
    Time cron "0 0 23 * * ?"
then
    bKomfort_01 = false                                              // Komfort über Zeit inaktiv
    MilaHeizModus.postUpdate(2)                                      // Komfort ein
    logInfo("heat","Komfort aus auf Zeit")
end

rule "Heizung bei Bewegung"
when
    Item FF_Kinderzimmer_Bewegungsmelder changed to ON
then
    nOldMilaHeizModus = if(MilaHeizModus.state instanceof Number) (MilaHeizModus.state as Number) else 2
    tKomfort_01?.cancel                                              // Timer canceln
    if(bKomfort_01) return;                                          // falls Komfort über Zeit aktiv, Rule Ende

    tKomfort_01 = createTimer(now.plusMinutes(15),[|                 // Timer für Abschaltung anlegen
        MilaHeizModus.postUpdate(nOldMilaHeizModus)                  // alten Modus wählen
        logInfo("heat","Komfort aus nach Bewegung")
    ])
    MilaKomfort.postUpdate(3)                                       // Komfort ein
    logInfo("heat","Komfort ein nach Bewegung")
end

rule "Mila Heizung"
when
    Item MilaHeizModus changed or                                    // Modus geändert
    Item FF_Kinderzimmer_Temperatur changed                          // Temperatur geändert
then
    var Number nSoll 
    var Number nMode = 2
	if(MilaKomfort.state instanceof Number) nMode = MilaKomfort.state as Number
	switch (nMode.intValue)
	    case 0: nSoll = -20 // AUS
		case 1: nSoll = 7   // Frotschutz
		case 3: nSoll = 21  // Komfort
		default: nSoll = 19 // default -> jeder andere Wert -> Nachtabsenkung
	}
    var Heizung = OFF                                                // Standard ist Heizung aus
    var Number nTemp = 21                                            // Standard Raumtemperatur ist 21
    if(FF_Kinderzimmer_Temperatur.state instanceof Number) 
        nTemp = FF_Kinderzimmer_Temperatur.state as Number           // setze reale Temperatur
    if(nTemp < nSoll) Heizung = ON                                   // falls reale Temperatur unter Solltemperatur Heizung ein
    if(FF_Kinderzimmer_Heizung.state != Heizung)                     // Sollstatus setzen, falls abweichend
        FF_Kinderzimmer_Heizung.sendCommand(Heizung)
end
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 erweitern

Beitrag von isostar1101 »

Guten Tag und Danke,


ich hatte heute gesehen das die Heizung um 10 Uhr angegangen ist ohne das Bewegung im Zimmer war, die Regel wurde durch die Temperatur unter 19Grad ausgelöst! Die neue Rule von Udo habe ich noch nicht am Start!

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

Re: Regel erweitern

Beitrag von udo1toni »

Ja, das soll doch so sein, oder?
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 erweitern

Beitrag von isostar1101 »

Hallo Udo1Toni,

es sollte ein heizen zu festen Zeiten zwischen 05:15 Uhr und 6:30 erfolgen (schön wenn das nur an Wochentagen gehen würde) und es soll ein heizen jeden Tag zwischen 19Uhr und 21Uhr, kein heizen soll in der Zeit zwischen 24 und 5 Uhr erfolgen, in der übrigen Zeit soll der Bewegungsmelder das Heizen nach Anwesenheit + 15Minuten erledigen. Der Temperaturbereich soll wenn geheizt wird immer zwischen 19-21 Grad liegen. Sorry da haben wir uns wohl falsch verstanden! Danke für deine Mühe vG. Isostar1101

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

Re: Regel erweitern

Beitrag von udo1toni »

Eine Zone 19°C bis 21°C ist hier sinnlos, wie soll das funktionieren? Das einzig Sinnvolle ist, im vorgegebenen Zeitraum auf 21°C zu heizen. Man könnte höchstens die Rule so umstellen, dass sie erst ab 19°C anfängt zu heizen und bei 21°C aufhört zu heizen, dann sieht die Rule aber anders aus.

Code: Alles auswählen

rule "Mila Heizung"
when
    Item MilaKomfort changed or                                              // Komfort aktiviert oder deaktiviert
    Item FF_Kinderzimmer_Temperatur changed                                  // Temperatur geändert
then
    val Number nHysterese = 1                                                // Schaltspiel
    val Number nSoll = 20                                                    // Solltemperatur
    var Heizung = FF_Kinderzimmer_Heizung.state                              // Übernimm aktuellen Status
    var Number nTemp = 20                                                    // Standard Raumtemperatur ist 20
    if(FF_Kinderzimmer_Temperatur.state instanceof Number) 
        nTemp = FF_Kinderzimmer_Temperatur.state as Number                   // setze reale Temperatur
    if(nTemp < nSoll - nHysterese && MilaKomfort.state == ON) Heizung = ON   // falls reale Temperatur unter Solltemperatur und Heizen ON Heizung ein
    if(nTemp > nSoll + nHysterese || MilaKomfort.state == OFF) Heizung = OFF // falls reale Temperatur über Solltemperatur oder Heizen OFF Heizung aus
    if(FF_Kinderzimmer_Heizung.state != Heizung)                             // Sollstatus setzen, falls abweichend
        FF_Kinderzimmer_Heizung.sendCommand(Heizung)
end
Die Zeitsteuerung bleibt hiervon unberührt.

Eine Einschränkung auf Werktage ist einfach, Du verschiebst das ? auf die Tage und setzt die gewünschten Tage statt des ?.

Code: Alles auswählen

when
    Time cron "0 15 5 ? * MO-FR" or                                      // Werktags 05:15 Uhr (auch an beweglichen Feiertagen, die auf einen Werktag fallen)
    Time cron "0 0 19 * * ?"                                         // täglich 19:00 Uhr
then


Eine weitere Sache ist: der Raum kühlt aus und benötigt auch eine gewisse Zeit, um auf Temperatur zu kommen. Wenn der Raum die 21 °C erreicht und erst dann die Heizung abschaltet, wird die Temperatur erst noch weiter steigen, also überschwingen. Je höher die Heizleistung, desto höher das Überschwingen.
Normalerweise überlässt man deshalb die Temperaturregelung einer spezialisierten Steuerung (und sei es in Form eines Bimetall Thermostaten) und beschränkt sich darauf, die Solltemperatur innerhalb bestimmter Grenzen zu verschieben (z.B. um 2 bis 4 Grad abzusenken).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten