DOIF Batterie Überwachung

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

Vorheriges Thema - Nächstes Thema

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