Seite 1 von 1

[gelöst] Rule zur Batterieüberwachung

Verfasst: 26. Jan 2023 17:08
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

Re: Rule zur Batterieüberwachung

Verfasst: 26. Jan 2023 18:59
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 :)

Re: Rule zur Batterieüberwachung

Verfasst: 26. Jan 2023 19:21
von mskopek
Danke für den Vorschlag.
Ich werde das spätestens morgen probieren.

Re: Rule zur Batterieüberwachung

Verfasst: 27. Jan 2023 14:05
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

Re: Rule zur Batterieüberwachung

Verfasst: 27. Jan 2023 14:13
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

Re: Rule zur Batterieüberwachung

Verfasst: 27. Jan 2023 16:50
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.

Re: Rule zur Batterieüberwachung

Verfasst: 27. Jan 2023 17:30
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

Re: Rule zur Batterieüberwachung

Verfasst: 27. Jan 2023 17:55
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!

Re: Rule zur Batterieüberwachung

Verfasst: 28. Jan 2023 07:14
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.