FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Cobra am 23 Januar 2022, 15:56:52

Titel: [gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Cobra am 23 Januar 2022, 15:56:52
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
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: MadMax-FHEM am 23 Januar 2022, 16:51:41
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
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: betateilchen am 23 Januar 2022, 17:53:51
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)
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: MadMax-FHEM am 23 Januar 2022, 17:57:12
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
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: betateilchen am 23 Januar 2022, 18:06:32
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.
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: Cobra am 23 Januar 2022, 18:14:35
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
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag 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.
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: betateilchen am 23 Januar 2022, 18:20:03
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)
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: Cobra am 23 Januar 2022, 18:23:57
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.
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: MadMax-FHEM am 23 Januar 2022, 18:32:40
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
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: betateilchen am 23 Januar 2022, 18:33:03
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.
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: betateilchen am 23 Januar 2022, 18:35:52
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.
Titel: Antw:Batterieüberwachung mit Prozent-Angaben im Reading
Beitrag von: Cobra am 23 Januar 2022, 19:22:13
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
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag 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.
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: MadMax-FHEM am 25 Januar 2022, 09:46:21
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
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Fredi69 am 25 Januar 2022, 09:55:31
Zitat von: MadMax-FHEM am 25 Januar 2022, 09:46:21
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

Vielen herzlichen Dank für Deine Unterstützung.
Ich habe seit vielen Jahren die hier beschriebene Lösung erfolgreich im Einsatz.
Da leider die HUE Devices, die seit dieser Woche ein Battery Reading haben, mit dieser Lösung auch nicht funktionieren, habe ich gestern mal nach einer Lösung gesucht und bin dann auf Deine Lösung unter den Codeschnipseln gestossen.
Diese Lösung ist zwar auch ein toller Ansatz,  hat aber wieder andere Probleme mit sich gebracht.
Daher habe ich nun versucht die ursprüngliche Lösung, basierend auf einem einzigen Notify, an die HUE Devices anzupassen.

Vielen Dank und Grüße
Fredi69
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: MadMax-FHEM am 25 Januar 2022, 10:58:59
Und was soll nun gelöst werden bzw. wo willst du geholfen haben?

Hier oder dort? ;)

Gruß, Joachim
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Fredi69 am 25 Januar 2022, 11:39:18
Zitat von: MadMax-FHEM am 25 Januar 2022, 10:58:59
Und was soll nun gelöst werden bzw. wo willst du geholfen haben?

Hier oder dort? ;)

Gruß, Joachim
Gerne hier.
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: MadMax-FHEM am 25 Januar 2022, 11:47:51
Dann würde ich halt mal z.B. so umbauen:


{ if($EVENT =~ m/low/)
  {                                                                                                                                       
    fhem ("msg push FHEM Batteriewarnung, $NAME: $EVENT:\nBatterien sollten demnächst gewechselt werden!");                                                                           
    Log 3, "$NAME: Batteriewarnung $EVENT";                                                                                                                                                             
  }
  if(InternalVal($DEVICE, "TYPE", "n.a.") eq "HUEDevice" && $EVENT < 15)
  {
    fhem ("msg push FHEM Batteriewarnung, $NAME: $EVENT:\nBatterien sollten demnächst gewechselt werden!");                                                                           
    Log 3, "$NAME: Batteriewarnung $EVENT";                                                                                                                                                             
  }
}


EDIT: ich bin jetzt nicht sicher ob/wie man das in den DEF-Editor eingeben kann, also mit Zeilenumbrüchen etc. Weil ich sowas eben immer in Subs auslagere, da ist das kein Problem... Bei Eingabe in RawDef musst du die Zeilenumbrüche noch jeweils mit \ abschließen (denke ich) und evtl./verm. auch die Strichpunkte "doppeln"...

EDIT: u.U. gibt das auch (ab und an) eine Warning im Log wegen "isn't numeric". Dann könnte man auf "Stringvergleich" ausweichen oder eben die Abfrage <15 in eine weitere "Verschachtelung", also ein if innerhalb des if(HUE). Hatte ich schon aber so ist es eben "kürzer"...

Bzgl. $EVENT < 15 bin ich halt nicht sicher, weil es könnte auch $EVTPART1 etc. sein...
Du kannst ja auch das $EVENT < 15 erst mal weglassen und schauen was die Logausgabe bzgl. $EVENT ins Log schreibt und dann anpassen (lassen).

Setzt halt jetzt voraus, dass die Homematic (oder alle anderen Geräte/Devices) eben low liefern und die HUE immer Prozentzahlen...

Wenn das nicht so ist bzw. weitere Typen kommen, dann bist du über kurz oder lang eben bei der anderen Lösung (so habe ich ja auch angefangen ;)  ).
Ebenso: manchmal schwanken die Sensoren zwischen ok/low bevor sie dann endgültig leer sind. Das würde die andere Lösung ebenfalls abfangen...

Gruß, Joachim
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Damian am 25 Januar 2022, 12:02:11
   .*:[Bb]attery:|.*:[Bb]atteryS { if($EVENT !~ m/ok/ && ReadingsVal($NAME,"IODev","OK") ne "HUEBridge") ...

Solche Definitionen sind reine Performancefresser und das für eine relativ zeitunkritische Abfrage.

Hier wird jedes Event im System ausgewertet, nur um festzustellen, dass einmal pro Jahr eine Batterie alle ist.

Wenn man alle seine Probleme so löst, dann wird sich das System irgendwann mit sich selbst beschäftigen.



Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Fredi69 am 25 Januar 2022, 12:43:19
Zitat von: Damian am 25 Januar 2022, 12:02:11
   .*:[Bb]attery:|.*:[Bb]atteryS { if($EVENT !~ m/ok/ && ReadingsVal($NAME,"IODev","OK") ne "HUEBridge") ...

Solche Definitionen sind reine Performancefresser und das für eine relativ zeitunkritische Abfrage.

Hier wird jedes Event im System ausgewertet, nur um festzustellen, dass einmal pro Jahr eine Batterie alle ist.

Wenn man alle seine Probleme so löst, dann wird sich das System irgendwann mit sich selbst beschäftigen.
Danke für die Info, das war mir so nicht bewußt.
Hast Du einen anderen Vorschlag?
Titel: Antw:[gelöst]Batterieüberwachung - Prozent-Angaben im Reading ausklammern
Beitrag von: Damian am 25 Januar 2022, 12:52:07
Es gibt da schon gefühlt tausend verschiedene Lösungsansätze zu dem Thema, hier zwei davon - beide resourcenschonend:

hier, wie man einen Ausfall eines beliebigen Readings anhand des Zeitstempels feststellen kann: https://forum.fhem.de/index.php/topic,104569.msg985397.html#msg985397

hier, mit Typ und Readingauswertung: https://forum.fhem.de/index.php/topic,103977.msg1201984.html#msg1201984