mad-mike hat geschrieben: ↑16. Apr 2022 08:25
Ich wollte damit unterbinden, das die Rule nicht bei jedem _Leistung changed Eine Meldung gibt..
Dafür brauchst Du aber kein zweites Item.
Die Kaffeemaschine wird vermutlich ein Oldschool Modell sein, also mit Wärmplatte? Das heißt, die Kaffeemaschine blubbert das Wasser hoch, das Wasser geht zur Neige -> Temperatur steigt an, Heizplatte schaltet ab -> Nachricht -> Temperatur sinkt -> Heizplatte schaltet an -> von vorn.
Du musst also lediglich speichern, dass die Message schon raus ging. Je nach Gewohnheit könnte es auch sinnvoll sein, den Anwender daran zu erinnern, dass der Kaffee nun schon seit Stunden warm gehalten wird
das könnte man gut kombinieren:
Code: Alles auswählen
// Globale Variablen zu Beginn der Datei definieren!
var Timer tKaffee = null // Timer für Kaffee Meldungen
rule "Kaffeemaschine Überwachung 1"
when
Item Kaffeemaschine_Leistung changed
then
var nOld = 0
if(previousState instanceof Number)
nOld = (previousState as Number).floatValue
var nNew = 0
if(newState instanceof Number)
nNew = (newState as Number).floatValue
if(tKaffee === null) {
if(nNew > 100 && nOld < 1) { // Maschine eingeschaltet
sendBroadcastNotification("Kaffee wird gekocht :) ")
} else if(nNew < 1) { // Kaffee fertig
sendBroadcastNotification("Kaffee ist fertig :) ")
tKaffee = createTimer(now.plusMinutes(30),[|
sendBroadcastNotification("Kaffee ist eingekocht ;) ")
tKaffee = null
])
}
}
end
rule "Kaffeemaschine Überwachung 2"
when
Item Kaffeemaschine_Power changed to OFF
then
tKaffee?.cancel
tKaffee = null
end
Die erste Rule kümmert sich um die Nachrichten. Zunächst wird die Leistungsaufnahme alt und neu bestimmt.
Anschließend wird geprüft, ob der Timer schon gestartet wurde. Ist dies nicht der Fall, wird geprüft, ob die Maschine heizt und das vorher nicht getan hat. Ist das der Fall, so wird der Brühstart gemeldet. Ansonsten wird geprüft, ob nicht geheizt wird, dann ist der Brühvorgang beendet und nach Versenden der Nachricht wird der Timer gestartet.
Sobald der Timer gestartet ist, kann keine weitere Nachricht versendet werden, bis auf die regelmäßige Erinnerung alle 30 Minuten, dass die Kaffeemaschine noch eingeschaltet ist.
Die zweite Rule löscht den Timer und deinitialisiert die Variable, wenn die Maschine ausgeschaltet wurde.
Eventuell lässt sich die Leistungsaufnahme auch noch genauer quantifizieren (sprich, vielleicht kann man auch das Ausschalten der Maschine über die Leistungsaufnahme erkennen), dann ginge es auch mit einer Rule.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet