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

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Es funktioniert... :mrgreen:

Sehr cool, und Danke...

Code: Alles auswählen

Number
Das war wohl der Knackpunkt. :idea:
einfach .0 an den Wert anhängen
Hab eich wieder gelöscht, und läuft.


Mit dieser Rule Basis kann man bestimmt noch einiges anderes umsetzen umsetzen. ;)

Auf jeden Fall vielen Dank @Udo1Toni.
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 »

Ja, das war ja nur Rumgestochere auf der Suche nach dem Fehler. Jetzt ist klar, dass die Variable tatsächlich zumindest als Number definiert werden muss. War mir so auch noch nicht bewusst...

Letztlich kannst Du die Ausgangsrule verwenden, also die ohne den ganzen Ballast, und dort einfach nur den Datentyp mit angeben.
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 »

Moin.

Es lässt sich doch sicherlich auch ein Timer für ein Shelly realsieren wo ein Befehl ON bekommen hat.

Ich habe eine Außenlampe, welche ich über den Shelly:

Code: Alles auswählen

shelly:shellydevice:e8db84a02362
Einschalte. Nun dachte ich mir: man könnte eine Rule erstellen, Wenn Shelly On -> Timer start und alle 30 oder 60 min gibt ein:

Code: Alles auswählen

sendBroadcastNotification("Garten Licht ist noch an")
oder so.

Als Hilfe wollte ich oben die Rule ändern, aber oben wird mit Watt und Zahlen gerechnet. Hier habe ich ja nur ein:

Code: Alles auswählen

    Item shelly:shellydevice:e8db84a02362 changed  
möchte ja keine Zahlen überwachen, sondern den State "ON".

geht das?

Danke und Gruss
Gruss mad-mike

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

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

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

So habe ich dies nun abgeändert:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tLampe = null                                                // Timer für Lampen Meldungen

rule "Außenlampe"
when
    Item shelly112_Betrieb changed
then
    if(shelly112_Betrieb.state != OFF)                                                       // Automatik an?
    return;                                                                     // Dann Abbruch!
    tLampe = createTimer(now.plusMinutes(1),[|
    sendBroadcastNotification("Lampe noch an ")
    tLampe = null
            ])

end

rule "Außenlampe 2"
when
    Item shelly112_Betrieb changed to OFF                   // Shelly OFF
then
    tLampe?.cancel
    tLampe = null
end
glaube es funktioniert.

Paar Zeilen sind nur zum Testen geändert damit ich keine Stunde Warten muss... :!:
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 »

Ich glaube nicht, dass die Rules so funktionieren, wie Du das erwartest.

Die erste Rule triggert, wann immer sich der Zustand von shelly112_Betrieb geändert hat.
Ist der neue Zustand nicht OFF, so wird die Rule abgebrochen.
Ansonsten wird ein Timer gestartet, der nach einer Minute eine Meldung absetzt und sich dann selbst entfernt.

Der Timer wird also nur beim neuen Zustand OFF erzeugt!

Die zweite Rule triggert, wenn sich der Zustand auf OFF geändert hat. Dann stoppt die Rule einen laufenden Timer und löscht den Handle.
Du möchtest aber eine "ist noch eingeschaltet" Erinnerung haben, das geht mit einer (!) Rule so:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tOutLamp = null                                // Timer für Außenlampen Meldung

rule "Außenlampe"
when
    Item shelly112_Betrieb changed
then
    tOutLamp?.cancel                                     // beende bestehende Timer
    if(shelly112_Betrieb.state != OFF)                   // Lampe an?
        tOutLamp = createTimer(now.plusMinutes(30), [|   // Erstelle Timer
            sendBroadcastNotification("Lampe noch an ")  // Gib Meldung aus
            tOutLamp.reschedule(now.plusMinutes(30))     // Plane Timer erneut
        ])
end
Im Gegensatz zu Deiner Rule wird der Timer gleich zu Beginn gelöscht. Hintergrund: Falls es aus irgendeinem Grund dazu kommt, dass ein Timer noch existiert, möchte man den vor dem Anlegen eines Timers entfernen. Das bedeutet: Egal, ob das Item nun ON oder OFF meldet, muss der Timer gelsöcht werden.
Nur, falls das Item nicht OFF ist, wird der Timer gestartet. Läuft der Timer ab, so wird die Meldung ausgegeben und der Timer wird erneut geplant. So kommt die Meldung alle 30 Minuten. Man könnte nach der ersten Meldung den Abstand auch verkürzen oder verlängern, die Zeit ist ja unabhängig vom ursprünglichen createTimer.

Die Variable für den Timer zu leeren, ist unnötig, solange Du nicht irgendwo die Variable abfragst.
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 »

Ich glaube nicht, dass die Rules so funktionieren, wie Du das erwartest.
Du hast Recht. :oops: Irgendwie war da etwas komisch was ich so nicht genau definieren konnte...

Ich wollte mich halt Versuchen. Und da ist mir halt die von der Kaffeemaschine eingefallen, das man das abändern könnte. ;)
(BTW. Die Rule der Kaffeemaschine läuft jeden Tag, und funktioniert einwandfrei.)



Deine Rule der Außenlampe funktioniert auf Anhieb wie gewünscht. :mrgreen:

Habe die Außenlampe nur an einem Shelly gehangen und einen anderen Shelly mit "LONG_PRESSED" belegt, und in der Ecke vom Garten, bekomme ich dies halt nicht immer mit, ob ich vergessen habe die Lampe auszuschalten.

Weiter habe ich eine Rule, welche nach Aktiv schalten des Balkonkraftwerks einige Funktionen auslöst. Hier habe ich quasi den Tag Modus eingeleitet, und zusätzlich den Shelly 112 auf OFF gesetzt.

Vielen Dank für deine Hilfe. :)
Gruss mad-mike

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

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

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Moin.

Habe die besagte Außenlampe von dem ""Test"" Shelly auf das Relai board umgeklemmt.

Gestern hatte ich dann nach dem Testen das Problem das alle 30min immer eine Meldung kam. Ich vermute weil die Rule nicht lesen kann was auf dem Board passiert... :?: :?:

(Board wird über HTTP Binding angesteuert ohne Feedback / Write Only)


Nun habe ich die Rule um ein erweitert. scheint zu funktionieren.

Code: Alles auswählen

    if(HTTPURLThing_km1.state !== OFF)                    // Lampe an?
Gruss mad-mike

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

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

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Wie kann man alle Timer Mal löschen?

Neustart openHAB? Habe nun Mal auf 1 Minute gestellt, aber nach 30min gab's irgendwie schon wieder Meldung....
Gruss mad-mike

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

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

Re: Smarte Kaffee Maschine

Beitrag von mad-mike »

Habe nun einen reboot vom pi durchgeführt... Das habe ich so gelassen. Nun scheint es zu funktionieren.
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: 21. Aug 2022 11:41 Habe die besagte Außenlampe von dem ""Test"" Shelly auf das Relai board umgeklemmt.
~Grummel~ Relais ist ein dem Französischen entlehntes Wort. Einzahl: das Relais. Mehrzahl: die Relais.
Ursprünglich die [Post-] Station, in der der Reiter das Pferd gewechselt hat, später auch die Telegrafenstationen, die Nachrichten per Fahnen/Winkern oder Lichtsignalen weiterleiteten.
mad-mike hat geschrieben: 21. Aug 2022 11:41 Gestern hatte ich dann nach dem Testen das Problem das alle 30min immer eine Meldung kam. Ich vermute weil die Rule nicht lesen kann was auf dem Board passiert... :?: :?:

(Board wird über HTTP Binding angesteuert ohne Feedback / Write Only)


Nun habe ich die Rule um ein erweitert. scheint zu funktionieren.

Code: Alles auswählen

    if(HTTPURLThing_km1.state !== OFF)                    // Lampe an?
Nein, das funktioniert nicht.
Die Rule ist zwingend auf den echten Status der Lampe angewiesen.
Wenn das Bord nicht lesbar ist, musst Du dafür sorgen, dass das Item den Status anhand des zuletzt gesendeten Befehls speichert. Natürlich darfst Du dann das Bord keinesfalls unabhängig von openHAB steuern,

Die Gleichheitsszeichen und das Ausrufezeichen:

Code: Alles auswählen

= -> Wertzuweisung.                          a =   b -> a wird der Wert von b zugewiesen
== Vergleich, wahr bei Gleichheit.           a ==  b -> wahr, falls a gleich b ist.
!= Vergleich, wahr bei Ungleichheit,         a !=  b -> wahr, falls a ungleich b ist.
=== Vergleich, wahr, falls identisch.        a === b -> unwahr, außer man ergreift spezielle Maßnahmen. a === a -> wahr
!== Vergleich, wahr, falls nicht identisch,  a !== b -> immer wahr, außer...                            a !== a -> unwahr.

! ohne irgendwas: Verneinung, bzw. als logischer Begriff: NOT
Weil das mit den drei = echt nicht simpel ist:
=== vergleicht nicht den Wert einer Variablen, sondern den Zeiger der Variablen.
Wenn man einer Variablen den Wert null zuweist (und nur dann, nur bei exakt diesem Wert, NULL ist etwas anderes!), so wird nicht etwa null in dieser Variablen gespeichert, sondern der Zeiger der Variable wird auf eine ganz bestimmte Position im RAM gesetzt. Diese Position ist als null definiert. Wo im Speicher sich diese Stelle befindet ist unerheblich, und es ist auch egal, welcher Wert in der konkreten Speicherzelle steht (nun ja, natürlich wird dort ein 0-Byte stehen...).
NULL hingegen ist ein gültiger Status, den jedes Item jederzeit annehmen kann. Die Prüfung !== NULL wird immer erfüllt sein, einfach, weil nicht mal NULL identisch zu NULL ist, es ist ja keine konkrete Stelle im Speicher dafür zuständig.

Bei OFF gilt sinngemäß das gleiche :)

Wie sieht denn die Rule nun tatsächlich aus?

Und ein Tipp, den ich nicht müde werde zu geben: Itemnamen sollten sich möglichst nicht auf Things oder Channel beziehen. Es gibt in openHAB eine strikte Trennung zwischen Funktion und Hardware. Im Thing wird die Verbindung zur Hardware gebildet. der Channel stellt die Verbindung zu einem oder mehreren Items her. Das Item hat aber eine konkrete Funktion, z.B. das Schalten eines Lichts. Es ist nicht sinnvoll, das Item nach der Hardware zu benennen, stattdessen sollte es den Namen der Lampe tragen (hier z.B. Licht_aussen).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten