Moin, eigentlich funktioniert es super, wenn nicht eine neue Situation eingetreten wäre.
Kann man in deine rule oben noch eine zusätzliche abschalt Funktion mit einbringen, wenn puffer-t2 unter 55 Grad fällt.
Oben mit dem Abschalten der rule über die Fritz Leistung, klappt hervorragend. Nur habe ich nicht berücksichtigt, das die rule startet, und während der Laufzeit der Wert von 55 unterschritten werden könnte.
Danke und Gruß
Rule zum "blinken" eines Relais
-
- Beiträge: 491
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Gruss mad-mike
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)

- udo1toni
- Beiträge: 15243
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Zeig doch bitte mal Deine vollständige Rule, so wie sie jetzt ist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 491
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Code: Alles auswählen
var Timer tEndlos = null // Variable für Timer
var Integer iCountBlink = 0 // Zähler für Blinken
val iOnTime = 10 // Einschaltdauer
val iOffTime = 20 // Ausschaltdauer
val Integer iMinTemp = 55 // Einschalttemperatur
val Integer iMaxPower = 50 // Ausschaltleistung
rule "10 Minuten Blinken"
when
Item Puffer_T2 changed or // Temperatur überschritten?
Item FRITZDECT_210_Leistung changed // Leistung unterschritten?
// Item dhw1_actualTemp changed
then
val fTemp = if(Puffer_T2.state instanceof Number) // lokale Konstante mit Wert füllen
(Puffer_T2.state as Number).floatValue // falls gültige Zahl, Wert aus Item
else // ansonsten
54 // Wert, der nicht triggert
val fPower = if(FRITZDECT_210_Leistung.state instanceof Number) // enbenso für das zweite Item
(FRITZDECT_210_Leistung.state as Number).floatValue
else
51
// val fDHW = if(dhw1_actualTemp.state instanceof Number) // lokale Konstante mit Wert füllen
// (dhw1_actualTemp.state as Number).floatValue // falls gültige Zahl, Wert aus Item
// else // ansonsten
// 50
if(tEndlos === null && fTemp > iMinTemp && fPower > iMaxPower) { // Timer läuft nicht und Temperatur überschritten
tEndlos = createTimer(now, [| // Timer anlegen und sofort ausführen
val iCountBorder = 2 * 10 * 60 / (iOffTime + iOnTime) // Periodenanzahl berechnen
iCountBlink += 1 // Schritt zählen
if(iCountBlink > iCountBorder) { // Falls Periodenanzahl überschritten
HTTPURLThing_km3.sendCommand(ON) // Licht einschalten
return; // und nix weiter machen
}
var iTime = if(HTTPURLThing_km3.state != ON) iOnTime else iOffTime // Falls Relais nicht ON, ONzeit setzen, ansonsten OFFzeit
HTTPURLThing_km3.sendCommand(if(HTTPURLThing_km3.state != ON) ON else OFF) // Relais toggeln
tEndlos.reschedule(now.plusSeconds(iTime)) // Timer erneut planen
])
} else if(tEndlos !== null && fPower < iMaxPower ) { // Timer existiert und Leistung unterschritten //|| fTemp < fDHW
HTTPURLThing_km3.sendCommand(OFF) // Ausschalten
tEndlos.cancel // Timer abbrechen
tEndlos = null // Zeiger auf null
}
end
Wie du siehst, hatte selber etwas versucht, habs dann aber ausgeklammert...
diese DHW Temperatur bedarf es keiner Beachtung. Weil das war ein falscher Ansatz. Einfach Puffer_T2 unter Temperatur 55° soll Rule stoppen.
Gruss mad-mike
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)

- udo1toni
- Beiträge: 15243
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule zum "blinken" eines Relais
Ich gehe mal davon aus, dass es so passen sollte:
Beachte bitte auch die Zuweisung von 0 unmittelbar bevor der Timer initialisiert wird, habe ich oben wohl vergessen... Ohne die Zuweisung funktioniert das Ganze genau einmal (also das 10 Minuten Blinken) und dann nicht mehr, weil der Zähler nicht zurückgesetzt wird. Im Testfall lädst Du die Rule Datei, womit die globalen Variablen wieder neu initialisiert werden.
Code: Alles auswählen
var Timer tEndlos = null // Variable für Timer
var Integer iCountBlink = 0 // Zähler für Blinken
val iOnTime = 10 // Einschaltdauer
val iOffTime = 20 // Ausschaltdauer
val Integer iMinTemp = 55 // Einschalttemperatur
val Integer iMaxPower = 50 // Ausschaltleistung
rule "10 Minuten Blinken"
when
Item Puffer_T2 changed or // Temperatur überschritten?
Item FRITZDECT_210_Leistung changed // Leistung unterschritten?
Item dhw1_actualTemp changed
then
val fTemp = if(Puffer_T2.state instanceof Number) // lokale Konstante mit Wert füllen
(Puffer_T2.state as Number).floatValue // falls gültige Zahl, Wert aus Item
else // ansonsten
54 // Wert, der nicht triggert
val fPower = if(FRITZDECT_210_Leistung.state instanceof Number) // ebenso für das zweite Item
(FRITZDECT_210_Leistung.state as Number).floatValue
else
51
if(tEndlos === null && fTemp > iMinTemp && fPower > iMaxPower) { // Timer läuft nicht und Temperatur überschritten
iCountBlink = 0 // Beim Timerstart Zähler auf 0!
tEndlos = createTimer(now, [| // Timer anlegen und sofort ausführen
val iCountBorder = 2 * 10 * 60 / (iOffTime + iOnTime) // Periodenanzahl berechnen
iCountBlink += 1 // Schritt zählen
if(iCountBlink > iCountBorder) { // Falls Periodenanzahl überschritten
HTTPURLThing_km3.sendCommand(ON) // Licht einschalten
return; // und nix weiter machen
}
var iTime = if(HTTPURLThing_km3.state != ON) iOnTime else iOffTime // Falls Relais nicht ON, ONzeit setzen, ansonsten OFFzeit
HTTPURLThing_km3.sendCommand(if(HTTPURLThing_km3.state != ON) ON else OFF) // Relais toggeln
tEndlos.reschedule(now.plusSeconds(iTime)) // Timer erneut planen
])
} else if(tEndlos !== null && (fPower < iMaxPower || fTemp < iMinTemp)) { // Timer existiert und Leistung oder Temperatur unterschritten
HTTPURLThing_km3.sendCommand(OFF) // Ausschalten
tEndlos.cancel // Timer abbrechen
tEndlos = null // Zeiger auf null
}
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 491
- Registriert: 6. Jan 2021 18:05
Re: Rule zum "blinken" eines Relais
Moin, danke dir.
Im ersten Test, (mit falscher Angabe von Temperaturen), konnte ich erstmal kein Fehlverhalten feststellen. Auch wurde die Rule korrekterweise bei unterschreiten, beendet. Also alles Perfekt würde ich sagen.
Danke nochmals.
Im ersten Test, (mit falscher Angabe von Temperaturen), konnte ich erstmal kein Fehlverhalten feststellen. Auch wurde die Rule korrekterweise bei unterschreiten, beendet. Also alles Perfekt würde ich sagen.
Danke nochmals.
Gruss mad-mike
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
