DOIF Batterie Überwachung

Begonnen von wuast94, 27 Dezember 2019, 17:25:19

Vorheriges Thema - Nächstes Thema

wuast94

Ich versuche gerade ein DOIF zu erstellen was darauf reagiert wenn ein gert mit dem reading battery unter 40 fällt eine Push nachricht aufs handy bringt. allerdings scheine ich ieinen fehler zu haben weil das ganze nicht funktioniert.
Das DOIF:
([.*:[Bb]attery] < 40) ("set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln") DOELSE ("set dummy off")

wenn ich das dann versuche mit nem trigger auszuprobieren tut sich genau nix :D

trigger Schalter_Wohnzimmer battery 20
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

mi.ke

Zitat von: wuast94 am 27 Dezember 2019, 17:25:19
([.*:[Bb]attery] < 40) ("set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln") DOELSE ("set dummy off")

Ich schätze, weil der set-Teil in Anführungszeichen steht...
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Gisbert

Hallo wuast94,

ich bin kein Experte, habe jedoch viele DOIFs und notifiys erfolgreich umgesetzt.
Was mir auffällt (edit: wie bei mi.ke - Antwort hat sich überschnitten), sind die Anführungszeichen in den beiden Ausführungteilen, die ich so noch nie benutzt habe.

Ich schlage vor, dass du deine Definitionen (in code tags) postest, und zwar sowohl das DOIF als auch Device, bei welchem die Batterie überwacht werden soll, sowie die Definition des Push-Devices, gerne auch noch das dummy-Device.

Was passiert, wenn du in der Fhem-Kommandozeile "set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln" (inkl. deiner Anführungszeichen eingibst, wobei du $NAME und $EVENT durch etwas spezifisches (d.h. für das zu überwachende Device) ersetzt?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

amenomade

Dazu (die beiden hieroben haben Recht) kommt noch:
([.*:[Bb]attery] < 40) Das ist syntaxisch falsch.  Du bekommst bestimmt eine Fehlermeldung
timer_01_c01 error: Wrong timespec .*:attery: either HH:MM:SS or {perlcode}

Die Triggerung mit Regex ist für Eventtriggerung. Dies muss dann in Einführungszeichen geschrieben werden.
ABER : ein Event kann nicht kleiner oder grösser als 40 sein.
([".*:[Bb]attery"] < 40) würde deswegen auch nicht funktionieren.

Schau mal in CommandRef bei https://fhem.de/commandref_DE.html#DOIF_aggregation
Es gibt viele Beispiele, wie man das implementieren kann.


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

zB

([18:00] and [?@"":battery:$_ ne "ok",""]) (set TelegramBot _msg Batteriewarnung am Gerät [@"":battery:$_ ne "ok",""])

Ist dann um 18:00, klappt auch.


Gesendet von iPad mit Tapatalk Pro
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

wuast94

Zitat von: Gisbert am 27 Dezember 2019, 17:46:48
Hallo wuast94,

ich bin kein Experte, habe jedoch viele DOIFs und notifiys erfolgreich umgesetzt.
Was mir auffällt (edit: wie bei mi.ke - Antwort hat sich überschnitten), sind die Anführungszeichen in den beiden Ausführungteilen, die ich so noch nie benutzt habe.

Ich schlage vor, dass du deine Definitionen (in code tags) postest, und zwar sowohl das DOIF als auch Device, bei welchem die Batterie überwacht werden soll, sowie die Definition des Push-Devices, gerne auch noch das dummy-Device.

Was passiert, wenn du in der Fhem-Kommandozeile "set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln" (inkl. deiner Anführungszeichen eingibst, wobei du $NAME und $EVENT durch etwas spezifisches (d.h. für das zu überwachende Device) ersetzt?

Viele Grüße Gisbert

Hier einmal das komplette DOIF:
defmod sys_bat_check DOIF ([.*:[Bb]attery] < 40) ("set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln") DOELSE ("set dummy off")

Was die definition eines zu überwachendes Gerätes angeht ist auch nur ein DOIF das sich aus 3 verschiedenen devices die readings holt und auf sich selbst setzt (zigbee Multisensor werden leider temp humidity und baro nicht in einem sensor sondern in 3 verschiedene übergeben). Und eines der Readings ist battery mit einem Zahlenwert von 0-100. deswegen kann ich auch nicht die Beispiele aus dem wiki nehmen da die alle von einem "ok" ausgehen.

das push device ist ein ganz normales pushover device und sollte hier auch nichts zur sache tun da das einwandfrei funktioniert. und wenn ich "set Push msg Gerät: bla Akkustand: 29 Bitte Akku wechseln" eingebe bekomme ich auch direkt die push nachricht. allerdings gebe ich das in fhem im commando Feld oben ohne Anführungszeichen ein.
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

wuast94

Zitat von: amenomade am 27 Dezember 2019, 22:10:39
Dazu (die beiden hieroben haben Recht) kommt noch:
([.*:[Bb]attery] < 40) Das ist syntaxisch falsch.  Du bekommst bestimmt eine Fehlermeldung
timer_01_c01 error: Wrong timespec .*:attery: either HH:MM:SS or {perlcode}

Die Triggerung mit Regex ist für Eventtriggerung. Dies muss dann in Einführungszeichen geschrieben werden.
ABER : ein Event kann nicht kleiner oder grösser als 40 sein.
([".*:[Bb]attery"] < 40) würde deswegen auch nicht funktionieren.

Schau mal in CommandRef bei https://fhem.de/commandref_DE.html#DOIF_aggregation
Es gibt viele Beispiele, wie man das implementieren kann.

und ja diese Fehlermeldung bekomme ich tatsächlich. timer_01_c01 error: Wrong timespec .*:attery: either HH:MM:SS or {perlcode}

aber es muss doch möglich sein in einem DOIF zahlen miteinander vergleichen zu können und auch ein wenn reading kleiner als dann das machen gehen
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

Gisbert

Hallo wuast94,

versuch mal das (ungetestet):
defmod sys_bat_check DOIF ([.*:[Bb]attery] < 40) (set Push msg Gerät: $NAME Akkustand: [$NAME:[Bb]attery] Bitte Akku wechseln) DOELSE (set dummy off)
Ggf. den 1. Ausführungsteil in doppelte Klammern:
defmod sys_bat_check DOIF ([.*:[Bb]attery] < 40) ((set Push msg Gerät: $NAME Akkustand: [$NAME:[Bb]attery] Bitte Akku wechseln)) DOELSE (set dummy off)
Falls beides nicht rennt, dann lass mal "[$NAME:[Bb]attery]" weg, und versuch es zuerst mal ohne den Readingswert.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

amenomade

Zitat von: Gisbert am 29 Dezember 2019, 17:51:52
Hallo wuast94,

versuch mal das (ungetestet):
defmod sys_bat_check DOIF ([.*:[Bb]attery] < 40) (set Push msg Gerät: $NAME Akkustand: [$NAME:[Bb]attery] Bitte Akku wechseln) DOELSE (set dummy off)
Ggf. den 1. Ausführungsteil in doppelte Klammern:
defmod sys_bat_check DOIF ([.*:[Bb]attery] < 40) ((set Push msg Gerät: $NAME Akkustand: [$NAME:[Bb]attery] Bitte Akku wechseln)) DOELSE (set dummy off)
Falls beides nicht rennt, dann lass mal "[$NAME:[Bb]attery]" weg, und versuch es zuerst mal ohne den Readingswert.

Viele Grüße Gisbert

So werden die Befehle funktionieren, aber die Bedingung ist immer noch falsch.

Ja, man kann Zahlen vergleichen, aber nicht ein Event mit einem Zahl.
Lies bitte nochmal CommandRef / Aggregation DOIF,wie schon erwähnt. Es sind viele Beispiele, sogar auch mit Zahlen
Etwas in der Art:
([#"":[Bb]attery:$_ < 40]  >  0) Wenn Anzahl Devices mit Reading B/battery kleiner als 40 grösser als 0 ist

(set TelegramBot _msg Batteriewarnung am Gerät [@"":battery:$_ ne "ok",""]) ..., sende Liste von diesen Devices
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

Wenn es kein DOIF sein muss, ist vielleicht auch das eine Alternative: https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

Kann auch mehr als "nur" OK etc. ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wuast94

also habe dein zweites Bespiel mal ausprobiert .. auf ein setreading oder ein trigger reagiert es nicht.. allerdings wenn ich auf dem Dorf ein checkall mache bekomme ich einen push mit folgendem Inhalt:
Gerät: $NAME Akkustand: Bitte Akku wechseln
Also schonmal mehr als vorher. habe mittlerweile die 40 auch auf 100 umgestellt um eher was zu triggern wenn ein echtes event rein kommt aber auch da bis jetzt nichts.

was die Geschichte mit dem geht so nicht angeht bin ich verwirrt .. die commandref in der deutschen version hat zb ganz am anfang folgendes stehen:
define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)
wenn ich das richtig sehe und man sich die erste Kondition weg denkt wird da genau das gemacht was ich auch mache .. nur im Beispiel mit nem größer als und ich habe ein kleiner als.
Vlt hat es bei mir einfach noch nicht klick gemacht aber ich verstehe einfach nicht warum es nicht gehen sollte .. wenn ich das so vergleiche ist die syntax korrekt und alles passt und dennoch geht es nicht und gibt mir zusätzlich n timespec Fehler aus obwohl ich nicht mal ne zeit vergleiche oder verwende was mich noch mehr verwirrt.
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

Damian

Vergleiche sind normalerweise nur mit konkreten Readings möglich, z. B. wie:

[sensor:brightness] < 40

Diese Angabe :

[".*:[Bb]attery"] < 40

ist aber keine konkrete Angabe eines Readings, sondern eine Eventabfrage, die normalerweise nur wahr oder falsch ist, aber keinen Inhalt eines Readings liefert.

Es gibt die Möglichkeit, statt des Readings auch das Event auszuwerten, dazu muss man deinen Default-Wert angeben, z. B.

[".*:[Bb]attery",0] < 40



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Das ist aber interessant.
[".*:[Bb]attery",0] < 40
Damit wird auf Regex-Event getriggert, aber dann das Reading bewertet? Cool!
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

#13
nein, es wird das Event ausgewertet.
Zitat aus der Commandref:
Zitat

Allgemeine Ereignistrigger können ebenfalls so definiert werden, dass sie nicht nur wahr zum Triggerzeitpunkt und sonst nicht wahr sind, sondern Inhalte des Ereignisses zurückliefern. Initiiert wird dieses Verhalten durch die Angabe eines Default-Wertes.

Syntax:

["regex for trigger",<default value>]

Anwendungsbeispiel:

define di_warning DOIF ([":^temperature",0]< 0) (set pushmsg danger of frost $DEVICE)
attr di_warning do always

Perl-Modus:
define di_warning DOIF {if ([":^temperature",0]< 0) {fhem_set"pushmsg danger of frost $DEVICE}}

Damit wird auf alle Devices getriggert, die mit "temperature" im Event beginnen. Zurückgeliefert wird der Wert, der im Event hinter "temperature: " steht. Wenn kein Event stattfindet, wird der Defaultwert, hier 0, zurückgeliefert.
Ebenfalls kann ein Ereignisfilter mit Ausgabeformatierung angegeben werden.

Syntax:

["regex for trigger":"<regex filter>":<output>,<default value>]

Regex-Filter- und Output-Parameter sind optional. Der Default-Wert ist verpflichtend.

Die Angaben zum Filter und Output funktionieren, wie die beim Reading-Filter. Siehe: Filtern nach Ausdrücken mit Ausgabeformatierung

Wenn kein Filter, wie obigen Beispiel, angegeben wird, so wird intern folgende Regex vorbelegt: "[^\:]*: (.*)" Damit wird der Wert hinter der Readingangabe genommen. Durch eigene Regex-Filter-Angaben kann man beliebige Teile des Events herausfiltern, ggf. über Output formatieren und in der Bedingung entsprechend auswerten, ohne auf Readings zurückgreifen zu müssen.

Ich würde allerdings für diese Aufgabe die Lösung aus dem Post #5 nehmen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

wuast94

Zitat von: Damian am 29 Dezember 2019, 21:34:35
nein, es wird das Event ausgewertet.
Zitat aus der Commandref:
Ich würde allerdings für diese Aufgabe die Lösung aus dem Post #5 nehmen.

also hab es jetzt mal so defmod sys_bat_check DOIF ([".*:[Bb]attery",0] < 80)\
("set Push msg Gerät: $NAME Akkustand: $EVENT Bitte Akku wechseln") DOELSE ("set dummy off")

scheint aber immer noch nicht zu gehen
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

Gisbert

Hallo wuast94,

wann willst du eigentlich mal die Gänsefüßchen im Ausführungsteil entsorgen?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Damian

#16
Zitat von: Gisbert am 30 Dezember 2019, 21:09:54
Hallo wuast94,

wann willst du eigentlich mal die Gänsefüßchen im Ausführungsteil entsorgen?

Viele Grüße Gisbert

1) Das würde ich nicht tun, denn dann wäre es eine Readingabfrage und die gibt es nicht mit Regex-Angaben.

2) Ob eine Batterie unter 80 fällt, ist keine kritische Sache, die ein Triggern auf alle Ereignisse .* rechtfertigen würde.

3) Wenn das Device keine Events zu Battery liefert, dann wird die Abfrage auch nicht funktionieren.

4) Welche Lösung die Bessere ist, habe ich bereits geschrieben ;)

und einen habe ich noch:

5) $NAME gibt es bei DOIF nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gisbert

Zitat1) Das würde ich nicht tun, denn dann wäre es eine Readingabfrage und die gibt es nicht mit Regex-Angaben.
Ich nehme alles zurück und behaupte das Gegenteil.
Es übersteigt meine Möglichkeiten, und ich sollte mich weiterhin besser mit den einfacheren DOIF-Fällen beschäftigen ??? :-[.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

KernSani

Gisbert hatte sich auf die Gänsefüßchen im Ausführungsteil bezogen und da stimme ich zu, die gehören da nicht hin... Ansonsten ist glaube ich alles gesagt :-)


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

wuast94

Zitat von: Damian am 30 Dezember 2019, 21:46:11
1) Das würde ich nicht tun, denn dann wäre es eine Readingabfrage und die gibt es nicht mit Regex-Angaben.

2) Ob eine Batterie unter 80 fällt, ist keine kritische Sache, die ein Triggern auf alle Ereignisse .* rechtfertigen würde.

3) Wenn das Device keine Events zu Battery liefert, dann wird die Abfrage auch nicht funktionieren.

4) Welche Lösung die Bessere ist, habe ich bereits geschrieben ;)

und einen habe ich noch:

5) $NAME gibt es bei DOIF nicht.

1. werden jetzt entsorgt (im Ausführungsteil) :D
2. die 80 stehen da nur als test wert drin da ich einige devices habe die unter 80 liegen .. wird später auf 40 oder niedriger abgeändert
3. ich habe viele devices die ein battery reading haben, alle mit zahlen werten ohne Einheit oder sonstiges. die liefern als battery reading einfach einen wert  0-100.
5. wäre dann $DEVICE stimmt :D

habe jetzt wie folgt:
defmod sys_bat_check DOIF ([".*:[Bb]attery",0] < 40)\
(set Push msg Gerät: $DEVICE Akkustand: $EVENT Bitte Akku wechseln) DOELSE (set dummy off)


was allerdings dazu führt das ich ohne ende pushes bekomme und im doif ein warning:
condition c01: Argument "Gerät: Push Akkustand: lastMessage: Gerät: Push Akkust..." isn't numeric in numeric lt (<)
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

KernSani

zu später Stunde...
Zitat von: wuast94 am 31 Dezember 2019, 00:13:26
condition c01: Argument "Gerät: Push Akkustand: lastMessage: Gerät: Push Akkust..." isn't numeric in numeric lt (<)
irgendeines deiner Devices liefert keinen numerischen Wert, sondern (vermutlich) "ok" oder "low" im Battery-Event.

Zitat von: wuast94 am 31 Dezember 2019, 00:13:26
was allerdings dazu führt das ich ohne ende pushes bekomme

Mal abgesehen davon, dass Push Messages bei mir untergehen und ich das lieber in FHEM visualisiere. Bei mir haben alle Batterie-Devices ein reading (entweder nativ oder als userreading) namens batteryState, das i.d.R. die Werte "ok" oder "low" hat. event-on-change-reading ist gesetzt, d.h. ein Event kommt nur, wenn der batteryState auf "low" wechselt (oder irgendwann wieder auf "ok"). Damit würde die Push-Message auch nur einmal getriggert.
Den batteryState (und ein weiteres userreading namens actionDetector) überwache ich mittels monitoring-Modul, aber das erläutere ich an anderer Stelle mal...

Grüße,

Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

wuast94

Zitat von: KernSani am 31 Dezember 2019, 01:37:02
zu später Stunde...irgendeines deiner Devices liefert keinen numerischen Wert, sondern (vermutlich) "ok" oder "low" im Battery-Event.

Mal abgesehen davon, dass Push Messages bei mir untergehen und ich das lieber in FHEM visualisiere. Bei mir haben alle Batterie-Devices ein reading (entweder nativ oder als userreading) namens batteryState, das i.d.R. die Werte "ok" oder "low" hat. event-on-change-reading ist gesetzt, d.h. ein Event kommt nur, wenn der batteryState auf "low" wechselt (oder irgendwann wieder auf "ok"). Damit würde die Push-Message auch nur einmal getriggert.
Den batteryState (und ein weiteres userreading namens actionDetector) überwache ich mittels monitoring-Modul, aber das erläutere ich an anderer Stelle mal...

Grüße,

Oli

dann sollte es ja passen wenn ich ein or dazu nehme das auf ok low oder ähnliches reagiert .. werde ich später mal testen.
Das push nachrichten untergehen kenne ich aber das bekomme ich eher mit da ich (wenns läuft oder es nix neues gibt) keinen grund habe in fhem rein zu gucken aber ich denke das sind themen die so oder so bei jedem anders sind :D

was den Schluss angeht mit dem monitoring würde mich auch interessieren, habe mich da bei fhem noch nicht mit beschäftigt und hatte vor das extern über Grafana zu machen (brauche das für andere nicht fhem sachen so oder so) aber ich lerne immer gerne dazu :)
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

noom0815

Hallo zusammen,

ich habe ein Problem mit meinem Batteriecheck und finde einfach nicht die Ursache...
Ich habe viele Hue-Devices und Xiaomi Sensoren in Verwendung. All diese Devices haben jeweils ein Reading "battery", welches ich folgendermaßen abfrage:


(([":^battery",100] < 20)) (set Pushnachricht message Batteriewarnung $DEVICE)


Die Abfrage funktioniert soweit einwandfrei. Allerdings habe ich auch einen DUOFERN Feuermelder in Verwendung - dieser hat ein Reading "batteryPercent".
Nach den Regex Definitionen in der commandref ("([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen") wäre ich davon ausgegangen, dass diese Abfrage auch "batteryPercent" inkludiert - tut sie aber nicht. Der Feuermelder sendet einmal täglich seinen Batteriestatus und jedes mal erhalte ich eine Pushnachricht, obwohl batteryPercent=100 ist.
Auch im EventMonitor sehen die jeweiligen Einträge gleich aus: DUOFERN Feuermelder batteryPercent: 100 vs HUEDevice FB_Schlafzimmer battery: 74...

Ich habe schon unzählige Varianten ausprobiert, bekomme das Problem aber nicht gelöst.
Ist vermutlich trivial: kann mir jemand einen Tip geben, wo der Fehler ist?

Danke und Frohe Ostern,
Ian

Damian

Beim mir funktioniert diese Definition, wie sie soll.

Du kannst folgendes DOIF definiert, es liefert den Prozentwert, dann siehst du was da kommt.

defmod test_event DOIF {fhem_set("Pushnachricht message Batteriewarnung $device ".[":^battery",100])}

Testen kannst du es mit:

setreading Feuermelder batteryPercent 100
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

noom0815

Hallo Damian,

es wird immer der angegebene Wert gesendet (habe auch andere Werte getestet)...
Hier ein list dazu:


Internals:
   CFGFN     
   DEF        {fhem_set("Pushnachricht message Batteriewarnung $device ".[":^battery",100])}
   DOIFDEV    ^global$|
   FUUID      5e90e315-f33f-5cd1-d2aa-630e03117301f8ad
   MODEL      Perl
   NAME       test_event
   NR         4632
   NTFY_ORDER 50-test_event
   STATE      ???
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-10 23:25:45   Device          Feuermelder
     2020-04-10 23:25:45   block_01        executed
     2020-04-10 23:20:21   mode            enabled
   Regex:
     accu:
     cond:
       :
         0:
           ":^battery" :^battery
   condition:
     0          fhem_set("Pushnachricht message Batteriewarnung $device ".::EventDoIf('',$hash,'^battery',0,'[^\:]*: (.*)','','100'))
   helper:
     DEVFILTER  ^global$|
     NOTIFYDEV  global|.*
     event      batteryPercent: 100
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Feuermelder
     triggerEvents:
       batteryPercent: 100
     triggerEventsState:
       batteryPercent: 100
   internals:
   perlblock:
     0         
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:


Kannst Du hieraus die Ursache erkennen?

Danke,
Ian

Damian

Zitat von: noom0815 am 10 April 2020, 23:34:16
Hallo Damian,

es wird immer der angegebene Wert gesendet (habe auch andere Werte getestet)...


Der angegebene Wert ist richtig. Was sollte er denn sonst senden?

Du kannst dein bisheriges DOIF, gegen das hier tauschen, dann weißt du morgen, warum die Message kommt.

defmod di_battery DOIF {$_value=[":^battery",100];; if ($_value < 20) {fhem_set("Pushnachricht message Batteriewarnung $device $_value")}}

Ich rate mal, dass da eine Null drin stehen wird  :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

noom0815

Zitat von: Damian am 10 April 2020, 23:48:00
Der angegebene Wert ist richtig. Was sollte er denn sonst senden?

...da habe ich wohl "testen" falsch interpretiert... ::)

Ich warte jetzt einfach ab, was der Feuermelder sendet...

noom0815

Hallo Damian,

also...der Feuermelder sendet nicht nur batteryPercent, sondern auch noch batteryState - und genau der wird offenbar ausgewertet, d.h. dein DOIF meldet "Feuermelder ok" (scheint offenbar < 20 zu sein  ;D).

Allerdings hatte ich auch schon mal folgendes DOIF getestet:

(([":^battery$",100] < 20) or ([":^batteryPercent",100] < 20)) (set Pushnachricht message Batteriewarnung $DEVICE)


Problem:
- [":^battery$",100] sorgt dafür, dass auch die Hue/Xiaomi devices garnicht mehr ausgelesen werden (warum auch immer)
- [":^batteryPercent",100] liefert auch immer eine Pushmeldung - vermutlich auch, weil irgendwie das falsche reading angezogen wird

Kannst Du mir einen Hinweis geben, wie ich das Problem löse?


Danke und Grüße,
Ian

Damian

[":^battery$",100] geht nicht, weil hinter battery noch der Wert kommt. Ich befürchte, du musst dir anschauen, welche Devices sinnvolle battery-Angaben haben und diese Devices per Regex mit in die Bedingung angeben.

["^(Dev1|Dev2|Dev3):^battery",100]

Dabei gelten die Angaben nur als Präfix, d. h. alle die mit Dev1 oder mit Dev2 oder mit Dev3 anfangen.

und das Gleiche mit or mit batteryPercent für die anderen Devices definieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Wenn Ian die Events aus dem EventMonitor von den jeweiligen Devices posten würde, könnte wir vielleicht aufhören zu raten, und konkretere Hinweise geben... Das blinde "try and fail" kann sonst lang dauern
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

noom0815

Hallo amenomade,

das habe ich bereits:

Zitat von: noom0815 am 10 April 2020, 19:35:04
...
Auch im EventMonitor sehen die jeweiligen Einträge gleich aus: DUOFERN Feuermelder batteryPercent: 100 vs HUEDevice FB_Schlafzimmer battery: 74...

Genau das sind die Events im EventMonitor - aber vielleicht gibt es ja noch weitere Infos . Musst mir dann nur sagen, wie ich die liefern kann... ;)

noom0815

Zitat von: Damian am 11 April 2020, 19:55:47
[":^battery$",100] geht nicht, weil hinter battery noch der Wert kommt. Ich befürchte, du musst dir anschauen, welche Devices sinnvolle battery-Angaben haben und diese Devices per Regex mit in die Bedingung angeben.

["^(Dev1|Dev2|Dev3):^battery",100]

Dabei gelten die Angaben nur als Präfix, d. h. alle die mit Dev1 oder mit Dev2 oder mit Dev3 anfangen.

und das Gleiche mit or mit batteryPercent für die anderen Devices definieren.

Danke Damian - soweit verstanden.
Der erste Teil [":^battery",100] funktioniert wie gesagt einwandfrei mit allen Hue und Xiaomi devices - nur mein EINER Feuermelder macht Probleme... ::)

Was ich nicht kapiere:
In meiner readingsGroup für die Batterie-Level bekomme ich mit
defmod Batterie readingsGroup .*:battery .*:batteryPercent
korrekte Daten für die verschiedenen Device-Typen, also z.B.:

Bewegungsmelder:battery 87
2020-04-11 20:42:38
...
Fenster_Test:battery 98
2020-04-11 20:45:13
...
Feuermelder:batteryPercent 100
2020-04-11 19:27:32


Warum ist das reading in der readingsGroup korrekt, im DOIF allerdings wird ein anderes ausgewertet?
Ich werde vermutlich im DOIF zukünftig den Batteriestatus des Feuermelders auswerten, aber interessieren würde es mich trotzdem...

Grüße,
Ian

amenomade

#32
Zitat von: noom0815 am 11 April 2020, 20:30:19
Hallo amenomade,

das habe ich bereits:


Genau das sind die Events im EventMonitor - aber vielleicht gibt es ja noch weitere Infos . Musst mir dann nur sagen, wie ich die liefern kann... ;)
Ich meinte einen Auszug aus dem Eventmonitor, damit man u.a. auch sehen kann, ob andere Readings gleichzeitig geliefert werden, insb. Readings, die mit battery anfangen.

Wie ich dir im anderen DUOFERN Thread geantwortet habe, liefert das Modul systematisch zwei Readings:
1418     my $battery      = (hex(substr($msg,  8, 2)) <= 10 ? "low" : "ok");
1419     my $batteryLevel =  hex(substr($msg,  8, 2));
1420    
1421     readingsBeginUpdate($hash);
1422     readingsBulkUpdate($hash, "batteryState",     $battery,       1);
1423     readingsBulkUpdate($hash, "batteryPercent",   $batteryLevel,  1);


Daher:
[":^battery$",100] => wird dabei gar nicht reagieren
[":^battery",100] = wird bei beiden Readings reagieren, einmal mit batteryState "ok" oder "low", wo ich nicht weiss, wie DOIF es dann bewertet, und einmal mit dem numerischen Wert batteryPercent, der dann korrekt bewertet wird.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: noom0815 am 11 April 2020, 20:59:11
Danke Damian - soweit verstanden.
Der erste Teil [":^battery",100] funktioniert wie gesagt einwandfrei mit allen Hue und Xiaomi devices - nur mein EINER Feuermelder macht Probleme... ::)

Was ich nicht kapiere:
In meiner readingsGroup für die Batterie-Level bekomme ich mit
defmod Batterie readingsGroup .*:battery .*:batteryPercent
korrekte Daten für die verschiedenen Device-Typen, also z.B.:

Bewegungsmelder:battery 87
2020-04-11 20:42:38
...
Fenster_Test:battery 98
2020-04-11 20:45:13
...
Feuermelder:batteryPercent 100
2020-04-11 19:27:32


Warum ist das reading in der readingsGroup korrekt, im DOIF allerdings wird ein anderes ausgewertet?
Ich werde vermutlich im DOIF zukünftig den Batteriestatus des Feuermelders auswerten, aber interessieren würde es mich trotzdem...

Grüße,
Ian
Wenn die Readings in einem Event-Block kommen, dann wird immer der erste Treffer ausgewertet, d. h. wenn zuerst batteryState zuschlägt, wird innerhalb der Blocks nicht weiter gesucht und batteryPercent kommt nicht mehr zum Zuge.

Es gibt aber noch eine Möglichkeit:

[":^(battery:|batteryPercent:)",100]

Damit wird genau auf battery und genau auf batteryPercent getriggert und sonst nichts. Wenn ein battery-Reading ok oder low beinhaltet, müsste man es vor dem Vergleich abfangen. Das lässt sich leicht mit DOIF-Perl bewerkstelligen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Frage an dich Damian zu meinem Verständnis: was liefert [":^battery",100] wenn batteryState mit "low" oder "on" triggert?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

#35
Zitat von: amenomade am 11 April 2020, 21:54:27
Frage an dich Damian zu meinem Verständnis: was liefert [":^battery",100] wenn batteryState mit "low" oder "on" triggert?

Ganz einfach low bzw.  on, denn in der Heiligen Bibel (Commandref) steht:

ZitatWenn kein Filter, wie obigen Beispiel, angegeben wird, so wird intern folgende Regex vorbelegt: "[^\:]*: (.*)" Damit wird der Wert hinter der Readingangabe genommen. Durch eigene Regex-Filter-Angaben kann man beliebige Teile des Events herausfiltern, ggf. über Output formatieren und in der Bedingung entsprechend auswerten, ohne auf Readings zurückgreifen zu müssen.

Damit gilt der Filter: "[^\:]*: (.*)"

Wie gesagt, damit sollte das Problem vom Tisch sein:

defmod di_battery DOIF {$_value=[":^(battery:|batteryPercent:)",100];; if ($_value eq "low" or $_value < 20) {fhem_set("Pushnachricht message Batteriewarnung $device $_value")}}


Falls es noch andere battery-Readings gibt, so kann man sie genau mit einem Doppelpunkt jeweils am Ende spezifizieren. batteryState wird bei diesen Angabe ausgeschlossen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

noom0815

Die Feuermelder-readings kommen tatsächlich in einem Event-Block:


2020-04-07 12:55:28 DUOFERN Feuermelder batteryState: ok
2020-04-07 12:55:28 DUOFERN Feuermelder batteryPercent: 100


Mit Damians Erläuterung ist dann klar, dass das zweite reading batteryPercent nicht mehr ausgewertet wird.

@Damian:
Habe ich es richtig verstanden, dass man bei der expliziten Abfrage von [":^(battery:|batteryPercent:)",100] das erste reading im Block (also hier batteryState) ignoriert wird und DOIF dann auch weitere readings (hier das zweite batteryPercent) auswertet?

Müsste es dann (da ja nicht mehr der batteryState ausgewertet wird) nicht heißen:


defmod di_battery DOIF {$_value=[":^(battery:|batteryPercent:)",100];; if ($_value < 20) {fhem_set("Pushnachricht message Batteriewarnung $device $_value")}}



Danke für eure Hilfe - so ganz trivial scheint es dann ja doch nicht zu sein... ;)

Damian

Mit der Angabe des Doppelpunktes sind die Readingangaben keine Präfixe mehr, sondern konkrete Readings. Die low-Abfrage habe ich einfach nur zur Sicherheit eingebaut, falls es bei den angegebenen Readings angaben mit low geben sollte. Bei mir z. B. im ganzen System  gibt es nur low und ok.

Du solltest dir aber bewusst machen, dass solche Definitionen jedes Event im System durchsuchen müssen - mir hätte die hier bereits vorgestellte Lösung mit dem Timer ausgereicht.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitat von: Damian am 11 April 2020, 22:06:21
Ganz einfach low bzw.  on, denn in der Heiligen Bibel (Commandref) steht:

Damit gilt der Filter: "[^\:]*: (.*)"
Danke für die Erklärung. Dummerweise hatte ich mir vorgestellt, dass er durch die Eingabe von 100  irgendwie versucht, den Wert wie einen numerischen Wert zu interpretieren. Das ist eigentlich simpler.

Das mit dem Evenblock war mir auch nicht bekannt. Das sind aber doch 2 unterschiedliche Events? Aber ok, vom gleichen Device (Trigger)
Man lernt ja jeden Tag ;)

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: amenomade am 12 April 2020, 01:20:05
Danke für die Erklärung. Dummerweise hatte ich mir vorgestellt, dass er durch die Eingabe von 100  irgendwie versucht, den Wert wie einen numerischen Wert zu interpretieren. Das ist eigentlich simpler.

Das mit dem Evenblock war mir auch nicht bekannt. Das sind aber doch 2 unterschiedliche Events? Aber ok, vom gleichen Device (Trigger)
Man lernt ja jeden Tag ;)

Beim numerischen Vergleich mit "on" wird er eine Warnung bekommen haben. Man kann auch einen Filter so angeben, dass nur Zahlen durchkommen.

ja, es sind zwei unterschiedliche Events innerhalb eines Event-Blocks. Dieser wird komplett an ein Device wie notify oder DOIF gesendet.

DOIF hört beim ersten Treffer auf, notify macht beim nächsten weiter.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

noom0815

Zitat von: Damian am 11 April 2020, 22:57:38
Mit der Angabe des Doppelpunktes sind die Readingangaben keine Präfixe mehr, sondern konkrete Readings. Die low-Abfrage habe ich einfach nur zur Sicherheit eingebaut, falls es bei den angegebenen Readings angaben mit low geben sollte. Bei mir z. B. im ganzen System  gibt es nur low und ok.

Du solltest dir aber bewusst machen, dass solche Definitionen jedes Event im System durchsuchen müssen - mir hätte die hier bereits vorgestellte Lösung mit dem Timer ausgereicht.

Hallo zusammen,

besten Dank nochmal für Eure Hilfe!
Die Hinweise waren wirklich sehr hilfreich - und da eine täglich einmalige Abfrage des Batteriezustandes völlig ausreichend ist, habe ich auch dies (nach stundenlangem try & error  ::)) umgesetzt...

Grüße,
Ian

Thomas0401

#41
Hallo an die Profis,

dieser Thread ist schon etwas älter aber ich denke immer noch passend. Ich habe ein DOIF für die Abfrage meiner Rauchmelder und eins für Abfrage Türen/Fenster. Allerdings lasse ich mir keine Nachricht senden, sondern visualisiere die Anzahl und welchen Device ausglöst hat.
Hier mal die Abfrage Türen/Fenster

([#".*_Tuer":dwIsOpened:"1"] >0)
(
  set $SELF openWindowsCount [#".*_Tuer":dwIsOpened:"1"],
  set $SELF openWindowsState geoeffnet
)
DOELSE
(
  set $SELF openWindowsCount [#".*_Tuer":dwIsOpened:"0"],
  set $SELF openWindowsState geschlossen
)


Das gleiche möchte ich gerne mit meinen batteriebetriebenen Aktoren machen (Fensterkontakt, Thermostat, Rauchmelder)

Am folgenden Code habe ich mich versucht aber bekomme es nicht hin

([#".*_Tuer\_HK\_Rauchmelder":[Bb]attery:"1"] >35)
(
  set $SELF Batterystate [#".*_Tuer\_HK\_Rauchmelder":[Bb]attery:"<35"],
  set $SELF BatteryState Batterie-LOW
)
DOELSE
(
  set $SELF Batterystate [#".*_Tuer\_HK\_Rauchmelder":[Bb]attery:" >35"],,
  set $SELF BatteryState Batterie-OK
)


Trotz lesen der Bibel komme ich nicht auf eine Lösung. Kann mir evtl. jemand einen Tipp geben?

VG Thomas

Thomas0401

#42
Moin,

so wie ich das gedacht habe funktioniert das wohl leider nicht. Ich habe mir stattdessen ein userReading angelegt.
batterylevel { if (ReadingsVal($name,"battery",0) <= 25) {return "1";} else {return "0";} }

Hier mal ein List, vielleicht kann es jemand nutzen.
Internals:
   .FhemMetaInternals 1
   FUUID      607f1a04-f33f-20b7-84d1-7c818dc5a2c9e68a
   FVERSION   10_MQTT_DEVICE.pm:0.173620/2018-09-17
   IODev      Mosquitto
   NAME       MQTT_EG_Flur_Rauchmelder
   NR         134
   STATE      0
   TYPE       MQTT_DEVICE
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   .qos:
     *          0
   .retain:
     *          0
   .userReadings:
     HASH(0x6b06a68)
     HASH(0x6bad838)
   READINGS:
     2021-05-09 10:09:21   IODev           Mosquitto
     2021-05-09 11:07:26   battery         100
     2021-05-09 11:07:26   batterylevel    0
     2021-05-08 22:00:30   smoke-detected  false
     2021-05-09 11:07:26   transmission-state incoming publish received
     2021-05-09 11:07:26   truefalse       0
   message_ids:
   sets:
   subscribe:
     zigbee/0/00158d00052cdc7d/battery
     zigbee/0/00158d00052cdc7d/detected
   subscribeExpr:
     ^zigbee\/0\/00158d00052cdc7d\/battery$
     ^zigbee\/0\/00158d00052cdc7d\/detected$
   subscribeQos:
     zigbee/0/00158d00052cdc7d/battery 0
     zigbee/0/00158d00052cdc7d/detected 0
   subscribeReadings:
     zigbee/0/00158d00052cdc7d/battery:
       cmd       
       name       battery
     zigbee/0/00158d00052cdc7d/detected:
       cmd       
       name       smoke-detected
Attributes:
   DbLogExclude .*
   IODev      Mosquitto
   alias      Rauchmelder-EG-Flur
   devStateIcon 1:secur_smoke_detector@red 0:secur_smoke_detector
   event-on-change-reading .*
   icon       secur_smoke_detector
   room       EG->Flur,MQTT,Rauchmelder
   stateFormat truefalse
   subscribeReading_battery zigbee/0/00158d00052cdc7d/battery
   subscribeReading_smoke-detected zigbee/0/00158d00052cdc7d/detected
   userReadings truefalse { if(ReadingsVal($name,"smoke-detected",0) eq "false") {return "0";} else {return "1";} },
batterylevel { if (ReadingsVal($name,"battery",0) <= 25) {return "1";} else {return "0";} }
   userattr   subscribeReading_smoke-detected subscribeReading_battery


und vom Monitoring-DOIF

Internals:
   .FhemMetaInternals 1
   DEF        ([#".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:"0"] <1)
(
  set $SELF Batterystate [#".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:"1"],
  set $SELF BatteryState Batterie-LOW
)
DOELSE
(
  set $SELF Batterystate [#".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:"0"],,
  set $SELF BatteryState Batterie-OK
)
   DOIFDEV    ^global$|.*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK
   FUUID      60961836-f33f-20b7-c8ee-cd0b27df57a840f4
   FVERSION   98_DOIF.pm:0.244000/2021-05-08
   MODEL      FHEM
   NAME       doif_Monitoring_Batterie
   NR         156
   NTFY_ORDER 50-doif_Monitoring_Batterie
   STATE      Batterie-OK (23)
   TYPE       DOIF
   VERSION    24400 2021-05-08 16:30:53
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   READINGS:
     2021-05-09 11:31:03   BatteryState    Batterie-OK
     2021-05-09 11:31:03   Batterystate    23
     2021-05-09 11:31:03   cmd             2
     2021-05-09 11:31:03   cmd_event       doif_Monitoring_Batterie
     2021-05-09 11:31:03   cmd_nr          2
     2021-05-09 11:31:00   mode            enabled
     2021-05-09 11:31:03   state           cmd_2
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           ".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:" .*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::AggregateDoIf($hash,'#','.*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK') <1
   do:
     0:
       0             set doif_Monitoring_Batterie Batterystate [#".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:"1"],   set doif_Monitoring_Batterie BatteryState Batterie-LOW
     1:
       0             set doif_Monitoring_Batterie Batterystate [#".*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK:batterylevel:"0"],,   set doif_Monitoring_Batterie BatteryState Batterie-OK
   helper:
     DEVFILTER  ^global$|.*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK
     NOTIFYDEV  global|.*.*_Tuer|.*_Rauchmelder|.*_Motion|.*_HK.*
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   alias      Abfrage-Batterie
   checkall   event
   do         always
   event-on-change-reading .*
   icon       measure_battery_75
   readingList Batterystate BatteryState
   room       Monitor-Batterie,System->Logik
   stateFormat BatteryState (Batterystate)


und ein Auszug aus FTUI


<li data-row="6" data-col="4" data-sizex="1" data-sizey="3">
<header>Status Batterie</header>
<div class="sheet">
<div class="row">
<div class="cell">
<div data-type="popup" id="fenster" data-height="600px" data-width="1300px" data-return-time="45" data-draggable="false" data-return-time="10" data-mode="no-animate">
<div data-type="symbol" data-device="doif_Monitoring_Batterie" data-get="BatteryState" data-get-on='["Batterie-OK","Batterie-LOW"]' data-icons='["oa-measure_battery_100 green bigger","oa-measure_battery_25 blink red bigger"]'
data-warn="doif_Monitoring_Batterie:Batterystate" data-warn-background-color="#505050"
data-warn-color="#ffffff" data-colors='["white","orange"]' style="font-size:150%; margin-top:2px;"></div>
<div class="dialog">
<header style="background-color:#202020;">
<div class="sheet">
<div class="left" style="margin-left:15px; margin-top:17px; margin-bottom:15px; font-size:20px; color:white;"> STATUS Batterie</div>
<div data-type="link" data-on-color="white" onclick="$('.dialog-close').trigger('click');"></div>
</div>
<div class="inline">
<div data-type="symbol" data-device="MQTT_OG_Bad_Motion" data-get="batterylevel" data-get-on='["0","1"]' data-icons='["oa-measure_battery_100","oa-measure_battery_25"]' data-colors='["green","red"]' class="tall"></div>
<div class="big top-narrow">Bewegungsmelder-Bad-OG</div>
</div>
<div class="inline">
<div data-type="symbol" data-device="MQTT_CUBE_XIAOMI" data-get="batterylevel" data-get-on='["0","1"]' data-icons='["oa-measure_battery_100","oa-measure_battery_25"]' data-colors='["green","red"]' class="tall"></div>
<div class="big top-narrow">Zauberwürfel</div>
</div>
</div>
</div>
</div>
</li>