Meldung Waschmaschine wenn fertig

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
peter-pan
Beiträge: 2758
Answers: 30
Registriert: 28. Nov 2018 12:03
Wohnort: Schwäbisch Gmünd

Re: Meldung Waschmaschine wenn fertig

Beitrag von peter-pan »

Läuft dein VSC auf einer Windows-Maschine ?
Hier ein Link auf einen Thread im internationalen Forum ? Evtl. könnte es daran liegen, dass du deinen OH-conf-Ordner nicht mit einem Netzwerklaufwerk verbunden hast.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
Snatsch
Beiträge: 455
Answers: 0
Registriert: 9. Jan 2021 22:55

Re: Meldung Waschmaschine wenn fertig

Beitrag von Snatsch »

Ja VSC läuft auf meinen Windows Rechner. Ich habe ja alle meine Rules über VSC eingerichtet und das ist die einzige wo der Fehler kommt.
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Benutzeravatar
Snatsch
Beiträge: 455
Answers: 0
Registriert: 9. Jan 2021 22:55

Re: Meldung Waschmaschine wenn fertig

Beitrag von Snatsch »

jetzt geht es, in meinem OH-conf-Ordner unter Settings war irgendwie der openhab.connection.authToken nicht gespeichert. Keine Ahnung warum er da nur bei der einen Rule rumgemeckert hat. Vor allen habe ich die gleiche Rule auch für meinen Trockner und da kam die Fehlermeldung nicht.
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Innocent
Beiträge: 238
Answers: 0
Registriert: 29. Jul 2020 12:40

Re: Meldung Waschmaschine wenn fertig

Beitrag von Innocent »

udo1toni hat geschrieben: 17. Mai 2021 15:05 Ich gehe mal davon aus, dass Du mit der Boolean Variable verhindern willst, dass Du ständig eine Meldung erhältst?

Ist das Item BatteryLevelKZ vom Typ Number? Oder ist es doch eher vom Typ Number:Dimensonless? Dann sollte die Rule eher so aussehen;

Code: Alles auswählen

var Boolean bBatterieKZ = false

rule "Batterie Thermoastat GWC"
when
    Item BatteryLevelKZ changed
then
    val nLevel = (BatteryLevelKZ.state as Number).intValue
    if(!bBatterieKZ && nLevel >= 30) 
        bBatterieKZ = true 
    if(bBatterieKZ && nLevel < 30) {
        sendTelegram("Sascha","Thermostat Gäste WC Batterie 30%")
        bBatterieKZ = false
    }
end
Durch die Verwendung der lokalen Konstanten wird der Code kompakter. Der Vergleich sollte den vollständigen Wertebereich umfassen, also auch die 30 selbst beinhalten (deshalb >=)

Da diese Rule nun funktioniert wie ich es wollte, würde ich das gleiche für zwei weitere Thermostate einrichten wollen.
Einfach kopieren und Items anders benennen? 🤔
Openhab 2 auf RaspberryPi 4

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

Re: Meldung Waschmaschine wenn fertig

Beitrag von udo1toni »

Kannste so machen, ist dann halt kacke. :)
Richtig erledigt man das, indem man die NAmen der Items günstig wählt, die Items in Gruppen zusammenfasst und dann eine Rule erstellt, die sich um alle gleichartigen Items kümmert.

Im vorliegenden Fall muss bBatterieKZ zusätzlich als Array definiert werden, für jeden Thermostaten eine Boolean Variable.

Alternativ legst Du stattdessen Switch Items an, in denen Du speicherst, ob eine Warnmeldung ausgegeben wurde. Da Du diese Items persistieren kannst, hat das auch den Vorteil, dass Du auch nach einem Neustart von openHAB nicht alle Meldungen erneut bekommst.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Innocent
Beiträge: 238
Answers: 0
Registriert: 29. Jul 2020 12:40

Re: Meldung Waschmaschine wenn fertig

Beitrag von Innocent »

Items könnte ich umbenennen. Sind bloß drei.
Wie müsste ich die Gruppen machen? Und wie müsste die Rule aussehen?

Danke schonmal 😁
Openhab 2 auf RaspberryPi 4

Innocent
Beiträge: 238
Answers: 0
Registriert: 29. Jul 2020 12:40

Re: Meldung Waschmaschine wenn fertig

Beitrag von Innocent »

udo1toni hat geschrieben: 27. Jun 2021 16:10 Kannste so machen, ist dann halt kacke. :)
Richtig erledigt man das, indem man die NAmen der Items günstig wählt, die Items in Gruppen zusammenfasst und dann eine Rule erstellt, die sich um alle gleichartigen Items kümmert.

Im vorliegenden Fall muss bBatterieKZ zusätzlich als Array definiert werden, für jeden Thermostaten eine Boolean Variable.
Wie müsste das denn aussehen? 🤔
udo1toni hat geschrieben: 27. Jun 2021 16:10Alternativ legst Du stattdessen Switch Items an, in denen Du speicherst, ob eine Warnmeldung ausgegeben wurde. Da Du diese Items persistieren kannst, hat das auch den Vorteil, dass Du auch nach einem Neustart von openHAB nicht alle Meldungen erneut bekommst.
Openhab 2 auf RaspberryPi 4

Innocent
Beiträge: 238
Answers: 0
Registriert: 29. Jul 2020 12:40

Re: Meldung Waschmaschine wenn fertig

Beitrag von Innocent »

Wie kann ich denn jedem Thermostaten eine Variable geben?
Wie definiere bBatterieKZ als array?
Openhab 2 auf RaspberryPi 4

Innocent
Beiträge: 238
Answers: 0
Registriert: 29. Jul 2020 12:40

Re: Meldung Waschmaschine wenn fertig

Beitrag von Innocent »

udo1toni hat geschrieben: 27. Jun 2021 16:10 Kannste so machen, ist dann halt kacke. :)
Richtig erledigt man das, indem man die NAmen der Items günstig wählt, die Items in Gruppen zusammenfasst und dann eine Rule erstellt, die sich um alle gleichartigen Items kümmert.

Im vorliegenden Fall muss bBatterieKZ zusätzlich als Array definiert werden, für jeden Thermostaten eine Boolean Variable.

Alternativ legst Du stattdessen Switch Items an, in denen Du speicherst, ob eine Warnmeldung ausgegeben wurde. Da Du diese Items persistieren kannst, hat das auch den Vorteil, dass Du auch nach einem Neustart von openHAB nicht alle Meldungen erneut bekommst.

Kannst du mir hier eventuell noch weiterhelfen?
Openhab 2 auf RaspberryPi 4

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

Re: Meldung Waschmaschine wenn fertig

Beitrag von udo1toni »

Ja, sicher. Leider habe ich das Thema nicht angezeigt bekommen...

also, ausgehend von Deiner Rule oben:

Code: Alles auswählen

var Boolean bBatterieKZ = false

rule "Batterie Thermoastat GWC"
when
    Item BatteryLevelKZ changed
then
    val nLevel = (BatteryLevelKZ.state as Number).intValue
    if(!bBatterieKZ && nLevel >= 30) 
        bBatterieKZ = true 
    if(bBatterieKZ && nLevel < 30) {
        sendTelegram("Sascha","Thermostat Gäste WC Batterie 30%")
        bBatterieKZ = false
    }
end
Nehme ich mal an, dass die anderen Items, um die es geht, dann ebenfalls mit BatteryLevel beginnen. Wie erwähnt wäre es vermutlich das einfachste, die Boolean Variable durch einen Switch zu ersetzen. Ich nenne das Item dann der Einfachheit halber AlarmBatteryLevelKZ, die Status sind ON und OFF.
Der Trick ist nun, alle gleichartigen Items in zwei Gruppen zusammenzufassen, ich nenne diese Gruppen mal gBatteryLevel und gAlarmBatteryLevel. Letztlich sind aber die Group Namen egal, genauso wie der Typ. Nun muss die Rule noch etwas geändert werden:

Code: Alles auswählen

rule "Batterie Level"
when
    Member of gBatteryLevel changed                                                   // Trigger auf Group-Member change
then
    val nLevel = if(newState instanceof Number) (newState as Number).intValue else -1 // Lese den Level
    val String strItem = triggeringItem.name                                          // Der Name des Items, welches die Rule ausgelöst hat
    val mySwitch = gAlarmBatteryLevel.members.filter[i|i.name endsWith(strItem)].head // Suche das passende Alarm Item heraus
    val strLabel = mySwitch.label                                                     // oder triggeringItem.label, wenn das Label passt
    if(nLevel < 0) {
        logWarn("batlevel","Achtung! Sensor {} lieferte keine Zahl: {}",strItem,newState)
        return;
    }
    if(mySwitch.state != ON && nLevel >= 30)                                          // Rest wie gehabt, nur mit Item statt Variable...
        mySwitch.postUpdate(ON)
    if(mySwitch.state == ON && nLevel < 30) {
        sendTelegram("Sascha","Thermostat " + strLabel + " Batterie 30%")
        mySwitch.postUpdate(OFF)
    }
end
Der eigentliche Trick besteht darin, die Namen der Items so zu wählen, dass man aus dem einen Namen den anderen Namen direkt ableiten kann.
Damit in der Message ein Klartextname genannt werden kann, muss dieser aus dem Label abgeleitet werden können. Es bietet sich an, hierfür das Label der Alarm Switches oder evtl. sogar des Original Items zu verwenden.
Sollte es noch andere Geräte als nur Thermostate geben, man die Label nur entsprechend anpassen und das Telegramm einkürzen, so dass das Wort "Thermostat " auch im Label vorkommt.
Wenn es komplexer wird, bietet es sich an, die Namensteile durch _ voneinander zu trennen, z.B. Battery_Level_KZ. Dann kann man mittels .name.split("_").get(2) z.B. auf den letzten Namensteil zugreifen (get() arbeitet 0-indiziert).

Für den Fall, dass ein Item keinen gültigen Wert liefert, wird ein Eintrag ins Log geschrieben und die Rule bricht ab.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten