[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern

Begonnen von Cobra, 23 Januar 2022, 15:56:52

Vorheriges Thema - Nächstes Thema

Cobra

Hey zusammen,

ich bin inzwischen etwas raus was Perl und Regex betrifft da ich schon lange nichts mehr in FHEM umstellen musste, daher hoffe ich auf eure Hilfe.

Seit Jahren funktioniert bei mir das Notify für die Batterieüberwachung problemlos, abgeschaut hier: https://wiki.fhem.de/wiki/Batterieüberwachung

Mein Notify sieht so aus (bewusst inaktiv weil ich die Meldung erst einmal unterdrücke wegen dem Problem):
Internals:
   DEF        .*:[Bb]attery:|.*:[Bb]atteryS { if($EVENT !~ m/ok/) {                                                                                                                                       
  { fhem ("msg push FHEM Batteriewarnung, $NAME: $EVENT:\nBatterien sollten demnächst gewechselt werden!");                                                                           
    Log 3, "$NAME: Batteriewarnung $EVENT";                                                                                                                                                             
    }
  }
}
   FUUID      5f807c20-f33f-38f1-b3e4-5189c05504ad9ad9
   FVERSION   91_notify.pm:0.255310/2022-01-21
   NAME       n_batt_chk
   NR         224
   NTFY_ORDER 50-n_batt_chk
   REGEXP     .*:[Bb]attery:|.*:[Bb]atteryS
   STATE      inactive
   TRIGGERTIME 1642948194.07513
   TYPE       notify
   READINGS:
     2022-01-23 15:30:27   state           inactive
     2022-01-23 15:29:54   triggeredByDev  HM_BWM_Buero
     2022-01-23 15:29:54   triggeredByEvent battery: ok
Attributes:
   room       System->Logik


Seit dem letzten Update liefern jedoch Geräte von HUE wie Bewegungsmelder oder Dimmschalter den Wert des Reading "battery" mit einer Zahl für den Prozentwert aus, als Beispiel mein Bewegungsmelder:

Internals:
   CFGFN     
   DEF        sensor 29  IODev=HUEBridge
   FUUID      61ed5a1a-f33f-38f1-6b6e-51a3dde219a3bc69
   FVERSION   31_HUEDevice.pm:0.255380/2022-01-21
   ID         S29
   INTERVAL   
   IODev      HUEBridge
   NAME       HUESensor29
   NR         334
   STATE      nomotion
   TYPE       HUEDevice
   manufacturername Signify Netherlands B.V.
   modelid    SML002
   name       Bewegungsmelder Terrasse
   on         1
   productname Hue outdoor motion sensor
   reachable  1
   sensitivity 0
   sensitivitymax 4
   swversion  6.1.1.27575
   type       ZLLPresence
   uniqueid   00:17:88:01:06:49:3a:aa-02-0406
   READINGS:
     2022-01-23 14:37:30   IODev           HUEBridge
     2022-01-23 12:10:31   battery         100
     2022-01-23 12:10:31   batteryPercent  100
     2022-01-23 12:10:31   reachable       1
     2022-01-23 12:10:31   state           nomotion
   helper:
     devtype    S
     fromAutocreate 1
     reachable  0
     update_timeout 1
     capabilities:
     configList:
     json:
       manufacturername Signify Netherlands B.V.
       modelid    SML002
       name       Bewegungsmelder Terrasse
       productname Hue outdoor motion sensor
       swversion  6.1.1.27575
       type       ZLLPresence
       uniqueid   00:17:88:01:06:49:3a:aa-02-0406
       capabilities:
       config:
         alert      none
         battery    100
         sensitivity 0
         sensitivitymax 4
         pending:
       state:
         lastupdated 2022-01-23T11:10:31
       swupdate:
         lastinstall 2021-05-28T19:25:17
         state      noupdates
     setList:
   hmccu:
Attributes:
   IODev      HUEBridge
   alias      Bewegungsmelder Terrasse
   group      HUESensor
   model      SML002
   room       HUEDevice



Wie kann ich jetzt diesen Wert entweder ausschließen aus dem Notify für die  Batterieüberwachung (brauch ich nicht unbedingt) oder aber angeben dass er erst ab 15% eine Meldung auswirft?

Gruß Cobra
FHEM in Docker auf Synology, CCU3,
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki

MadMax-FHEM

Ich nutze ja das hier: https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514

Inkl. "Batterieverbrauchsberechnung" und "Batteriehaltbarkeitsübersicht" ("private Erweiterungen", die ich aber liefern könnte)...

Bei deinem Problem:

entweder das notify nur auf ok|low triggern lassen bzw. ja nur auf low?
Oder eben das if um ein elsif erweitern, dass auf < 15 prüft...

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)

betateilchen

Zitat von: MadMax-FHEM am 23 Januar 2022, 16:51:41
Oder eben das if um ein elsif erweitern, dass auf < 15 prüft...

So kompliziert muss man es nicht machen.
Einfach nix machen, wenn der numerische Wert größer als 15 ist:


.*:[Bb]attery:|.*:[Bb]atteryS { return if ReadingsNum($NAME,$EVTPART0,0) > 15; fhem ("msg push FHEM Batteriewarnung, $NAME: $EVENT:\nBatterien sollten demnächst gewechselt werden!"); Log 3, "$NAME: Batteriewarnung $EVENT"; }

(Prinzipdarstellung, eventuell muss $EVTPART0 noch passend gemacht werden)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

#3
Aber das geht ja dann jetzt nur für die Prozentwerte?

Zitat von: Cobra am 23 Januar 2022, 15:56:52
Wie kann ich jetzt diesen Wert entweder ausschließen aus dem Notify für die  Batterieüberwachung (brauch ich nicht unbedingt) oder aber angeben dass er erst ab 15% eine Meldung auswirft?
So wie ich verstanden braucht er die (Prozentwerte) nicht wirklich, oder?

Also so wie ich es verstanden hatte:

entweder nur (wie vorher) auf low (oder nicht ok) und wenn es einfach geht, dann zusätzlich auch low (nicht ok) und unter 15%...
Das "Problem" jetzt ist ja (wohl), dass eben irgendeine Prozentangabe auch "nicht ok" ist und somit eben eine Batteriewarung für ALLE "Prozent-Devices" kommt, obwohl eben nicht leer...

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)

betateilchen

Zitat von: MadMax-FHEM am 23 Januar 2022, 17:57:12
Also so wie ich es verstanden hatte:

So wie ich es verstanden habe und wie es in den gezeigten readings zu sehen ist, gibt es die Werte "low" und "ok" jetzt nicht mehr, sondern nur noch numerische Werte in beiden readings:


     2022-01-23 12:10:31   battery         100
     2022-01-23 12:10:31   batteryPercent  100


Deshalb bringt Dein nun schon zweimal gemachter Vorschlag bezüglich low und ok für mich wenig Nutzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Cobra

#5
Hey zusammen,

mir geht es in erste Linie um die Batteriüberwachung von den Homematic-Geräten, die liefen Werte wie zB. ok oder low.

Nur die HUE-Geräte haben jetzt die Prozentanzeige und das bringt mir jetzt eben mein Notify durcheinander.

Da die HUE-Geräte auch über die HUE-App melden wenn die Batterie leer ist brauch ich das nicht unbedingt noch über FHEM, daher könnte ich es auch ausklammern.

Wie müsste denn der Code aussehen wenn ich zB, im if-Teil hier noch sagen würde alles was keine Zahl ist oder eben die Zahl kleiner als 15 ist?
if($EVENT !~ m/ok/)

Wenn ich richtig weiß gibt es manche Geräte die statt low auch andere Werte für eine leere Batterie abliefern die ich da auch gerne noch abfangen würde daher will ich ungern nur auf "low" prüfen.

Beim Elsif steh ich auf dem Schlauch wie das gemeint ist.
Gruß Cobra
FHEM in Docker auf Synology, CCU3,
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki

betateilchen

Letztendlich kannst Du auch eine Prüfung auf den TYPE des device einbauen, damit das notify nur auf Homematic Geräte reagiert. Alternativ kannst Du das auch umkehren und festlegen, dass bei HUE eben nicht reagiert werden soll.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Cobra am 23 Januar 2022, 18:14:35
Wie müsste denn der Code aussehen wenn ich zB, im if-Teil hier noch sagen würde alles was keine Zahl ist oder eben die Zahl kleiner als 15 ist?

if($EVENT !~ m/ok/ || ReadingsNum(device,reading,default) < 15)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Cobra

Zitatif($EVENT !~ m/ok/ || ReadingsNum(device,reading,default) < 15)

Hier bekomme ich dann als Fehlermeldung:
Bareword "device" not allowed while "strict subs" in use at (eval 264569) line 1.
Bareword "reading" not allowed while "strict subs" in use at (eval 264569) line 1.
Bareword "default" not allowed while "strict subs" in use at (eval 264569) line 1.
FHEM in Docker auf Synology, CCU3,
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki

MadMax-FHEM

#9
Zitat von: betateilchen am 23 Januar 2022, 18:18:45
Letztendlich kannst Du auch eine Prüfung auf den TYPE des device einbauen, damit das notify nur auf Homematic Geräte reagiert. Alternativ kannst Du das auch umkehren und festlegen, dass bei HUE eben nicht reagiert werden soll.

Dann wären wir ja langsam fast bei dem zuerst von mir verlinkten "Beispiel"... ;)

Wenn du die HUE nicht willst, sollte doch ein notify das auf low reagiert zumindest für die Homematic-Dinger passen 8)
Statt auf "nicht ok" zu prüfen, was halt auf viele Dinge zutrifft...

Ich habe alles gesagt was mir dazu einfällt...

EDIT: device, reading, default -> das ist nur die "Aufrufbeschreibung" von ReadingsNum. Also ReadingsNum(device, reading, default). Da musst du (verm.) noch einsetzen, was eben bei dir zutrifft...


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)

betateilchen

natürlich bekommst Du da eine Fehlermeldung...

Du musst die Funktion ReadingsNum() mit den entsprechenden Werten für device, reading und default aufrufen, nicht mit den Platzhaltern, die ich verwendet habe.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Cobra am 23 Januar 2022, 18:14:35
mir geht es in erste Linie um die Batteriüberwachung von den Homematic-Geräten, die liefen Werte wie zB. ok oder low.

Wenn es tatsächlich um Homematic geht, kann man die Information über den Batteriezustand auch viel einfacher aus HMinfo bekommen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Cobra

Zitat von: betateilchen am 23 Januar 2022, 18:35:52
Wenn es tatsächlich um Homematic geht, kann man die Information über den Batteriezustand auch viel einfacher aus HMinfo bekommen.

Es geht nicht nur um Homematic. Zwar hauptsächlich darum aber eben auch um andere Geräte die ich grad nicht auf dem Schirm hab oder die ich ggfs in Zukunft integrieren will.

Ich hab es jetzt pragmatisch gelöst und PhilipsHue einfach davon rausgenommen wie folgt:

Internals:
   DEF        .*:[Bb]attery:|.*:[Bb]atteryS { if($EVENT !~ m/ok/ && ReadingsVal($NAME,"IODev","OK") ne "HUEBridge") {                                                                                                                                       
  { fhem ("msg push FHEM Batteriewarnung, $NAME: $EVENT:\nBatterien sollten demnächst gewechselt werden!");                                                                           
    Log 3, "$NAME: Batteriewarnung $EVENT";                                                                                                                                                             
    }
  }
}


   FUUID      5f807c20-f33f-38f1-b3e4-5189c05504ad9ad9
   FVERSION   91_notify.pm:0.255310/2022-01-21
   NAME       n_batt_chk
   NR         224
   NTFY_ORDER 50-n_batt_chk
   REGEXP     .*:[Bb]attery:|.*:[Bb]atteryS
   STATE      2022-01-23 19:21:21
   TRIGGERTIME 1642962081.80905
   TYPE       notify
   READINGS:
     2022-01-23 19:17:23   state           active
     2022-01-23 19:21:21   triggeredByDev  HM_BWM_Wohnzimmer
     2022-01-23 19:21:21   triggeredByEvent battery: ok
Attributes:
   room       System->Logik


Danke für den Schubs in die richtige Richtung.

Gruß Cobra
FHEM in Docker auf Synology, CCU3,
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki

Fredi69

Ich habe das gleiche Problem, würde aber ungern die HUE Devices einfach ausschließen. Hat jemand vielleicht doch eine Idee wie man den Code anpassen muss um die HUE Devices korrekt mit verarbeiten zu können, meine Regex Kenntnisse sind leider sehr beschränkt.
fhem auf Raspberry Pi 3
FRITZ!Box7490, Fritz!Box 3270 AP, 3xHMLAN, CUL868, nanoCUL 433 für IT, JeeLink für LaCrosse, HUE Bridge 2.0, Samsung UE46C8790 (STV), mehrere Homematic, Intertechno, Shelly und LaCrosse Komponenten

MadMax-FHEM

Zitat von: Fredi69 am 25 Januar 2022, 08:35:14
Ich habe das gleiche Problem, würde aber ungern die HUE Devices einfach ausschließen. Hat jemand vielleicht doch eine Idee wie man den Code anpassen muss um die HUE Devices korrekt mit verarbeiten zu können, meine Regex Kenntnisse sind leider sehr beschränkt.

Aber du hast doch eine ganz andere Lösung im Einsatz oder planst diese in Betrieb zu nehmen?

An 2 Stellen mit 2 unterschiedlichen "Mechanismen" nachfragen ist auch nicht zielführend!

Wo willst du nun geholfen haben?

Dieses "simple" notify erweitert auf HUE-Devices oder in dem anderen Thread zusätzlich HUE-Devices (Vorschlag habe ich ja gepostet, geht der nicht?)...

Doppelt mache ich mir die Arbeit nicht 8)

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)