Smarte Kaffee Maschine

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Smarte Kaffee Maschine

Beitrag von mad-mike »

Moin.

Habe mich nun mal versucht: Macht der Gewohnheit: Jeden morgen runter in Keller und Kaffeemaschine Starten :mrgreen: .

Nun bin ich immer Voller Erwartungen mit meiner Tasse dann zur Maschine gelaufen, und Festgestellt, noch nicht fertig... :evil:

Naja, habe nun mich mal versucht, um das ganze mal als Feedback zu bekommen.

Vielleicht ist der Aufbau etwas optimierungs- bedürftig, aber hey, es ist quasi die erste Rule, wo ich selber erstellt habe.

Vielleicht kann ja mal Jemand drüber gucken: 8-)

Also Gestartet wird mit der Rule 1:

Code: Alles auswählen

rule "Cafe schalter"
when
    Item cafe changed  
then
    if((cafe.state != ON)) 
    return; 
    (shellyplugsb580c9192168178120_Betrieb.sendCommand(ON))  
    sendBroadcastNotification("Cafe wird gekocht :) ") 
end
Und Feedback gibt die Rule 2:

Code: Alles auswählen

rule "Cafe"
when
    Item shellyplugsb580c9192168178120_Leistung changed  
then
    if((cafe.state != ON)) 
    return;
    if(shellyplugsb580c9192168178120_Leistung.state <= 1) { 
    sendBroadcastNotification("Cafe ist fertig :) ")      
    (cafe.sendCommand(OFF))
}
end

Habs ganze mit einem Hilfsschalter (cafe) realisiert, und dem Zustand, das die Maschine irgendwann abschaltet...

was meint ihr?
:D
Gruss
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Smarte Kaffee Maschine

Beitrag von udo1toni »

Arg viele Klammern, aber grundsätzlich ok.
Ein sprechender Name für die Items wäre sinnvoller, also z.B. Kaffeemaschine_Power und Kaffeemaschine_Leistung. cafe ist vermutlich ein Switch, welcher nur in der UI existiert? Aber eigentlich bräuchtest Du den ja gar nicht, es reicht ja, die Maschine direkt über das passende Item einzuschalten.

Code: Alles auswählen

rule "Kaffee Schalter Ein"
when
    Item cafe changed to ON
then
    shellyplugsb580c9192168178120_Betrieb.sendCommand(ON)
    sendBroadcastNotification("Kaffee wird gekocht :) ") 
end

rule "Kaffee fertig Meldung"
when
    Item shellyplugsb580c9192168178120_Leistung changed  
then
    if(cafe.state != ON)
        return;

    if(shellyplugsb580c9192168178120_Leistung.state <= 1) { 
        sendBroadcastNotification("Kaffee ist fertig :) ")      
        cafe.sendCommand(OFF)
    }
end
.sendCommand() sendet einen Befehl an alle verknüpften Channel. Anschließend versucht openHAB zu erraten, welchen Status das Item einnehmen wird und setzt den Status. Wenn Du keien externe Hardware steuern musst, reicht ein .postUpdate() für ide Änderung des Status aus. Im Fall der 1. Rule reicht es, den Trigger einzuschränken. Du kannst Dir dann die Abfrage innerhalb der Rule sparen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Danke für deine Antwort.
cafe ist vermutlich ein Switch, welcher nur in der UI existiert?
Das ist korrekt.

Ich wollte damit unterbinden, das die Rule nicht bei jedem:

Code: Alles auswählen

_Leistung changed
Eine Meldung gibt..

Ich werde das Ganze mal nach deiner Vorlage ändern.

Kann das so in eine Datei gespeichert werden?
Ich habe bis jetzt immer für eine *.rules eine Datei erstellt... ?? :?:
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Smarte Kaffee Maschine

Beitrag von int5749 »

mad-mike hat geschrieben: 16. Apr 2022 08:25 Kann das so in eine Datei gespeichert werden?
Ich habe bis jetzt immer für eine *.rules eine Datei erstellt... ?? :?:
Ja, kannst Du. Du kannst „beliebig“ viele Rules in eine Datei packen. Trennen kann zur Übersicht hilfreich sein, aber auch in einer einzigen .rules erfolgen.

„Klugscheiss-Modus“ Café ist ein Ort, evtl. wäre Kaffee oder coffee treffender :roll: :mrgreen:
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Hab's mit Kaffee schon geändert gehabt.. :lol:

Okay, das gut zu wissen mit dem Rules.
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Smarte Kaffee Maschine

Beitrag von udo1toni »

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

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Danke dir vielmals.

Habe niemals mit einer solchen umfassenden Rule gerechnet... :D

Die Kaffeemaschine wird vermutlich ein Oldschool Modell sein, also mit Wärmplatte?
Das ist korrekt... ;)
Hatte zwar eine Zeitlang einen Automaten, aber irgendwie ist das nicht meins... :?

Eventuell lässt sich die Leistungsaufnahme auch noch genauer quantifizieren
Also Es wurde einfach ein Shelly Plug - S Zwischen gesteckt... dieser zeigt an, wenn die Wärmeplatte abschaltet -> 0W
(sprich, vielleicht kann man auch das Ausschalten der Maschine über die Leistungsaufnahme erkennen), dann ginge es auch mit einer Rule.
Ich Da meine Maschine Keine Status LED oder sonstiges hat, wird das glaube nicht gehen...

Wärme platte schaltet ab -> 0W und im Betrieb Schwankt die Anzeige meist irgend wo bei - 950Watt...

Ich habe die Rule mal eingebaut. Leider gibt´s eine Fehlermeldung... :oops:
Hast du eine Idee oder habe ich was Vergessen??


Code: Alles auswählen

2022-04-17 17:14:17.212 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Kaffee-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in Kaffee
Danke und Gruss
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Smarte Kaffee Maschine

Beitrag von udo1toni »

Ach, vergessen... vermutlich müssen wir die Variablen so setzen:

Code: Alles auswählen

nNew = (newState as Number).floatValue
weil evtl. ein Messwert mit Einheit kommt. Ich hab das mal oben ergänzt...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 403
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Fehler meldung ist noch vorhanden..

Ich hatte die Item von dem Shelly dort eingesetzt...

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 shellyplugsb580c9192168178120_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 shellyplugsb580c9192168178120_Betrieb changed to OFF
then
    tKaffee?.cancel
    tKaffee = null
end
musste ich noch etwas einfügen oder ändern was ich nicht sehe?? :?:

Danke dir. ;)
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Smarte Kaffee Maschine

Beitrag von udo1toni »

Da hilft nur Debugging. Bau mal bitte diese Zeile ein:

Code: Alles auswählen

    logInfo("coffee","nOld = {} nNew = {}",nOld,nNew)
und zwar unmittelbar vor der Zeile

Code: Alles auswählen

    if(tKaffee === null) {
Dann sollte es vor der Fehlermeldung einen Eintrag geben, der uns verrät, was die Variablen enthalten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten