[gelöst] Rule zur Batterieüberwachung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

[gelöst] Rule zur Batterieüberwachung

Beitrag von mskopek »

Hallo,

ich habe wieder einmal ein Problem beim Erstellen einer Rule.
Mir ist es gelungen, eine funktionierende Rule mittels Blockly zu erstellen, ich erhalte aber nicht alle gewünschten Informationen als Benachrichtigung.

Folgendes Szenario:

Ich habe mehrere Funk Sensoren, welche mir den Status der Batterie als Number:ElectricPotential liefern.
Diese Sensoren habe ich in eine Gruppe zusammengefasst, und eine Übersichtseite die mir die Spannungswerte aller Batterien anzeigt habe ich ebenfalls erstellt.
Fällt jetzt die Batteriespannung bei einem der Sensoren aus dieser Gruppe unter 2.6 Volt, erhalte ich per Telegram eine Benachrichtigung. Zusätzlich wird noch ein item (switch) geschalten, welches mir die Farbe der Label Card des betroffenen Sensors von grün auf rot ändert.
Die Telegram Meldung ist aber nur eine „Sammelmeldung“, ich weiß jetzt noch nicht, um welchen Sensor es sich handelt.
Das i-Tüpfelchen wäre es in der Nachricht zu sehen, um welchen Sensor es sich handelt.
Zurzeit sieht der Blockly Teil meiner Regel so aus:

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);

var things = Java.type('org.openhab.core.model.script.actions.Things');


if (itemRegistry.getItem('Homematic_Temeratursensor_01_Operating_Voltage').getState() < '2.6' || itemRegistry.getItem('Zigbee_Sensor_01_Batterie').getState() < '2.6' || itemRegistry.getItem('Zigbee_Sensor_02_Batterie').getState() < '2.6') {
  if (itemRegistry.getItem('Batteriewarnung_Allgemein').getState() == 'OFF') {
    logger.warn('Die Spannung einer Batterie ist unter 2.6 Volt gefallen!');
    events.sendCommand('Batteriewarnung_Allgemein', 'ON');
    things.getActions('telegram', 'telegram:telegramBot:XXXXXXXXXX').sendTelegram('Die Spannung einer Batterie ist unter 2.6 Volt gefallen!');
  }
} else {
  if (itemRegistry.getItem('Batteriewarnung_Allgemein').getState() == 'ON') {
    logger.info('Die Batteriespannung ist wieder normal.');
    events.sendCommand('Batteriewarnung_Allgemein', 'OFF');
    things.getActions('telegram', 'telegram:telegramBot:XXXXXXXXXX').sendTelegram('Die Batteriespannung ist wieder normal.');
  }
}
Leider fehlt mir aktuell noch das Verständnis dazu, wie ich den verantwortlichen Sensor (oder auch mehrere, falls von mehreren die Werte unter die Schwelle fallen) ermitteln kann, und dieses „item“ dann auch in die Benachrichtigung bekomme.
Vielleicht hat jemand schon etwas ähnliches zusammengestellt und kann mir auf die Sprünge helfen, vielleicht ist das ja auch gar nicht umsetzbar.

Grüße
Manfred
Zuletzt geändert von mskopek am 31. Jan 2023 17:54, insgesamt 1-mal geändert.
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

Harka
Beiträge: 297
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Rule zur Batterieüberwachung

Beitrag von Harka »

Moin,
ein Lösungsvorschlag: Du setzt den Trigger der Regel auf "when a member of ... changed" und ermittelst die Spannungs-Wert, Namen und Gruppenzugehörigkeit dieses Sensors. Hier zählt das Thing "Sensor xy" auch als Gruppe. Du hast also immer mindestens 2. Nun durchläufst Du mit einer Schleife diese Gruppen. Hier hängt es jetzt von Dir ab. Gäbe es eindeutige Suchbegriffe in allen Namen würdest Du danach suchen.
Ist bei Dir aktuell nicht gegeben, daher sollten die Sensoren keiner weiteren Gruppe angehören damit Du die gemeinsame Gruppe ignorieren kannst um an das Eltern-Thing zu kommen.
ForumSpannung.jpg
alternativ kannst Du auch nach bestimmten Namen (hier in Listenform) suchen lassen und dadurch den passenden Sensor ermitteln. Darfst das bei späteren Hardwareänderungen/-zugängen nur nicht vergessen. Achtung, hier ist nur ein Teil des Skriptes abgebildet
ForumSpannungListe.jpg
Was jetzt noch fehlt ist Deine Batteriewarnung_Allgemein. Habe ich vergessen aber darum ging es ja auch nicht :)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Harka am 26. Jan 2023 19:40, insgesamt 2-mal geändert.

mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

Re: Rule zur Batterieüberwachung

Beitrag von mskopek »

Danke für den Vorschlag.
Ich werde das spätestens morgen probieren.
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

Re: Rule zur Batterieüberwachung

Beitrag von mskopek »

Harka hat geschrieben: 26. Jan 2023 18:59 Moin,
ein Lösungsvorschlag: Du setzt den Trigger der Regel auf "when a member of ... changed" und ermittelst die Spannungs-Wert, Namen und Gruppenzugehörigkeit dieses Sensors. Hier zählt das Thing "Sensor xy" auch als Gruppe. Du hast also immer mindestens 2. Nun durchläufst Du mit einer Schleife diese Gruppen. Hier hängt es jetzt von Dir ab. Gäbe es eindeutige Suchbegriffe in allen Namen würdest Du danach suchen.
Ist bei Dir aktuell nicht gegeben, daher sollten die Sensoren keiner weiteren Gruppe angehören damit Du die gemeinsame Gruppe ignorieren kannst um an das Eltern-Thing zu kommen.
ForumSpannung.jpg
alternativ kannst Du auch nach bestimmten Namen (hier in Listenform) suchen lassen und dadurch den passenden Sensor ermitteln. Darfst das bei späteren Hardwareänderungen/-zugängen nur nicht vergessen. Achtung, hier ist nur ein Teil des Skriptes abgebildet
ForumSpannungListe.jpg
Was jetzt noch fehlt ist Deine Batteriewarnung_Allgemein. Habe ich vergessen aber darum ging es ja auch nicht :)
Hallo,
ich habe deine Rule jetzt Schritt für Schritt nachgebaut und ich komme jetzt bis zu dem Punkt, an dem "set IZeile to" gesetzt werden soll.
Dieser Wert ist aber 0, wenn eine der Batterien unter den bestimmten Wert fällt.
Zum testen habe ich eine Demo Batterie der Gruppe hinzugefügt, bei der ich den Wert beliebig ändern kann.
Folgende Variablen konnte ich im log auslesen (daher auch mehrere log Zeilen in meiner Rule):

Spannung: Neuer Wert der Batteriespannung der Batterie, die sich geändert hat (2)
Trigger: Welches item hat die Spannung geändert (Demo_Batterie_01)
Gruppen: Zu welcher Gruppe gehört das item (Gruppe_Batterien)
ListeSensoren: Alle items (Batterien), die in der Gruppe enthalten sind (Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01)
Einzelgruppe: Hier erhalte ich wieder Gruppe_Batterien - liegt hier der Fehler?
iZeile: Hier erhalte ich 0

Irgendeine Idee, wo ich hier einen Fehler eingebaut habe?

Hier noch meine Rule und der Inhalt des Log Files, wenn ich den Batteriewert von 3V auf 2V ändere:
Rule Batterieüberwachung.JPG

Code: Alles auswählen

2023-01-27 13:58:36.649 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 13:58:36.656 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 13:58:36.690 [INFO ] [org.openhab.rule.e0d755554c         ] - Demo_Batterie_01
2023-01-27 13:58:36.739 [INFO ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 13:58:36.762 [INFO ] [org.openhab.rule.e0d755554c         ] - Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01
2023-01-27 13:58:36.806 [WARN ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 13:58:36.812 [INFO ] [org.openhab.rule.e0d755554c         ] - 0
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

Re: Rule zur Batterieüberwachung

Beitrag von mskopek »

mskopek hat geschrieben: 27. Jan 2023 14:05
Harka hat geschrieben: 26. Jan 2023 18:59 Moin,
ein Lösungsvorschlag: Du setzt den Trigger der Regel auf "when a member of ... changed" und ermittelst die Spannungs-Wert, Namen und Gruppenzugehörigkeit dieses Sensors. Hier zählt das Thing "Sensor xy" auch als Gruppe. Du hast also immer mindestens 2. Nun durchläufst Du mit einer Schleife diese Gruppen. Hier hängt es jetzt von Dir ab. Gäbe es eindeutige Suchbegriffe in allen Namen würdest Du danach suchen.
Ist bei Dir aktuell nicht gegeben, daher sollten die Sensoren keiner weiteren Gruppe angehören damit Du die gemeinsame Gruppe ignorieren kannst um an das Eltern-Thing zu kommen.
ForumSpannung.jpg
alternativ kannst Du auch nach bestimmten Namen (hier in Listenform) suchen lassen und dadurch den passenden Sensor ermitteln. Darfst das bei späteren Hardwareänderungen/-zugängen nur nicht vergessen. Achtung, hier ist nur ein Teil des Skriptes abgebildet
ForumSpannungListe.jpg
Was jetzt noch fehlt ist Deine Batteriewarnung_Allgemein. Habe ich vergessen aber darum ging es ja auch nicht :)
Hallo,
ich habe deine Rule jetzt Schritt für Schritt nachgebaut und ich komme jetzt bis zu dem Punkt, an dem "set IZeile to" gesetzt werden soll.
Dieser Wert ist aber 0, wenn eine der Batterien unter den bestimmten Wert fällt.
Zum testen habe ich eine Demo Batterie der Gruppe hinzugefügt, bei der ich den Wert beliebig ändern kann.
Folgende Variablen konnte ich im log auslesen (daher auch mehrere log Zeilen in meiner Rule):

Spannung: Neuer Wert der Batteriespannung der Batterie, die sich geändert hat (2)
Trigger: Welches item hat die Spannung geändert (Demo_Batterie_01)
Gruppen: Zu welcher Gruppe gehört das item (Gruppe_Batterien)
ListeSensoren: Alle items (Batterien), die in der Gruppe enthalten sind (Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01)
Einzelgruppe: Hier erhalte ich wieder Gruppe_Batterien - liegt hier der Fehler?
iZeile: Hier erhalte ich 0

Irgendeine Idee, wo ich hier einen Fehler eingebaut habe?

Hier noch meine Rule und der Inhalt des Log Files, wenn ich den Batteriewert von 3V auf 2V ändere:

Rule Batterieüberwachung.JPG

Code: Alles auswählen

2023-01-27 13:58:36.649 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 13:58:36.656 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 13:58:36.690 [INFO ] [org.openhab.rule.e0d755554c         ] - Demo_Batterie_01
2023-01-27 13:58:36.739 [INFO ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 13:58:36.762 [INFO ] [org.openhab.rule.e0d755554c         ] - Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01
2023-01-27 13:58:36.806 [WARN ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 13:58:36.812 [INFO ] [org.openhab.rule.e0d755554c         ] - 0
Den ersten Fehler hatte ich gleich nach Absenden des Beitrags gefunden:
Ich habe bei "create list with" den Block "item"MyItem" anstatt nur einen Textblock zu nehmen.
Das Ergebnis ist aber nach wie vor gleich.

Grüße
Manfred
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

Harka
Beiträge: 297
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Rule zur Batterieüberwachung

Beitrag von Harka »

Mmmh,
bei Log-Gruppen sollten 2 "Eltern" angezeigt werden. Liegt die Demo_Batterie in der Modellansicht auf der höchsten Ebene? Wenn ja - leg mal auf der Modellübersicht mit Add_Equipment ein "Demo_Batterie_01" Typ Group an und weise deinem Item dies als Elterntier zu.

mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

Re: Rule zur Batterieüberwachung

Beitrag von mskopek »

Harka hat geschrieben: 27. Jan 2023 16:50 Mmmh,
bei Log-Gruppen sollten 2 "Eltern" angezeigt werden. Liegt die Demo_Batterie in der Modellansicht auf der höchsten Ebene? Wenn ja - leg mal auf der Modellübersicht mit Add_Equipment ein "Demo_Batterie_01" Typ Group an und weise deinem Item dies als Elterntier zu.
Ich hoffe ich habe es nicht falsch verstanden, denn ich kann ja keine zwei Items mit dem selben Namen erstellen.
Ich habe jetzt über das Modell die Demo_Batterie_01 erstellt und diese der Gruppe_Batterien und Home zugeordnet.
Jetzt steht folgendes im Log:

Code: Alles auswählen

2023-01-27 17:25:40.515 [INFO ] [org.openhab.rule.e0d755554c         ] - Demo_Batterie_01
2023-01-27 17:25:40.526 [INFO ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien,Home
2023-01-27 17:25:40.537 [INFO ] [org.openhab.rule.e0d755554c         ] - Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01
2023-01-27 17:25:40.542 [WARN ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 17:25:40.554 [INFO ] [org.openhab.rule.e0d755554c         ] - 0
2023-01-27 17:25:40.560 [WARN ] [org.openhab.rule.e0d755554c         ] - Home
2023-01-27 17:25:40.563 [INFO ] [org.openhab.rule.e0d755554c         ] - 0
Kann es vielleicht mit dem Abschnitt "for each item "Einzelgruppe" in list "Gruppen" " zusammenhängen?
Ich habe ja keine Liste "Gruppen".

Grüße
Manfred
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

mskopek
Beiträge: 12
Registriert: 17. Jan 2023 15:39

Re: Rule zur Batterieüberwachung

Beitrag von mskopek »

Ich glaube, ich habe den Fehler gefunden - mit dem Hinweis zur Zuordnung der Demo Batterie hast du mir auf die Sprünge geholfen.
Erst, als ich die Demo Batterie einem Sensor und der Gruppe Batterien zugeordnet habe, hat es funktioniert:

Code: Alles auswählen

2023-01-27 17:50:06.343 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'Gruppe_Batterien' changed from 3 V to 2 V through Demo_Batterie_01
2023-01-27 17:50:06.352 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Demo_Batterie_01' changed from 3 V to 2 V
2023-01-27 17:50:06.359 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 17:50:06.364 [INFO ] [org.openhab.rule.e0d755554c         ] - 2 V
2023-01-27 17:50:06.379 [INFO ] [org.openhab.rule.e0d755554c         ] - Demo_Batterie_01
2023-01-27 17:50:06.385 [INFO ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien,Homematic_Temeratursensor_01
2023-01-27 17:50:06.388 [INFO ] [org.openhab.rule.e0d755554c         ] - Homematic_Temeratursensor_01,Zigbee_Sensor_01,Zigbee_Sensor_02,Demo_Batterie_01
2023-01-27 17:50:06.391 [WARN ] [org.openhab.rule.e0d755554c         ] - Gruppe_Batterien
2023-01-27 17:50:06.395 [INFO ] [org.openhab.rule.e0d755554c         ] - 0
2023-01-27 17:50:06.399 [WARN ] [org.openhab.rule.e0d755554c         ] - Homematic_Temeratursensor_01
2023-01-27 17:50:06.403 [INFO ] [org.openhab.rule.e0d755554c         ] - 1
2023-01-27 17:50:06.407 [INFO ] [org.openhab.rule.e0d755554c         ] - Der Name des Sensors lautet: Homematic_Temeratursensor_01
Somit dürfte die Regel wie gewünscht funktionieren.
Vielen, Vielen Danke für deine Hilfe!
openHAB 3.4.1 unter Ubuntu 22.04.1 LTS als VM auf einer Synology DS918+

Harka
Beiträge: 297
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Rule zur Batterieüberwachung

Beitrag von Harka »

Sehr gut. Das mit den 2 gleichen Namen hatte ich komplett ausgeblendet :oops:
Denk daran, wenn alle SpannungsItems keiner weiteren Gruppe angehören ist der 1. Lösungsvorschlag deutlich schöner und kürzer. Mit if Einzelgruppe ungleich 'Gruppe_Batterien' do ... sparst Du dir die ganze Liste und bis flexibler unterwegs.

Antworten