Batterieüberwachung von Fibaro Sensoren

Begonnen von bmpeter, 20 September 2016, 19:21:12

Vorheriges Thema - Nächstes Thema

bmpeter

Hallo zusammen,

ich habe viel gesucht und irgendwie nicht das passende gefunden. Ich hoffe, ich kann die Frage hier stellen.

Ich möchte bei meinen Fibaro-Sensoren die Batterieüberwachung per Mail realisieren. Bei entsprechendem Batteriestatus soll eine Mail verschickt werden.
Jetzt liefern die Sensoren aber nicht "ok" oder "low" zurück, sondern den Batteriestatus in %, also z.B. 100%

Mit der folgenden Zeile in der fhem.cfg hoffte ich eine Mail zu bekommen, wenn der Batteriestatus unter 68% geht.


define n_batt_chk notify .*:[Bb]attery.* { if (substr($EVENT, 0, -2) < 68) { DebianMail('xxx@xxx.de', 'FHEM Batteriewarnung', $NAME.': '.$EVENT);;  Log 3, "$NAME : Batteriewarnung $EVENT";; } }


Mit diesem Code bekomme ich jetzt von allen Sensoren eine Mail, egal wie der Batteriestatus ist.

Im Logfile gibt es dazu auch noch einige Meldungen:


2016.09.20 01:34:36 1: PERL WARNING: Argument "battery: 67" isn't numeric in numeric lt (<) at (eval 1220) line 1.
2016.09.20 01:34:36 3: eval: my $EVENT='battery: 67 %';my $TYPE='ZWave';my $SELF='n_batt_chk';my $EVTPART2='%';my $EVTPART1='67';my $NAME='HZ_AZ';my $EVTPART0='battery:';{ if (substr($EVENT, 0, -2) < 68) { DebianMail('xxx@xxx.de', 'FHEM Batteriewarnung', $NAME.': '.$EVENT);  Log 3, "$NAME : Batteriewarnung $EVENT"; } }
2016.09.20 01:34:36 1: sendEmail RCP: xxx@xxx.de
2016.09.20 01:34:36 1: sendEmail Subject: FHEM Batteriewarnung
2016.09.20 01:34:36 1: sendEmail Text: HZ_AZ: battery: 67 %
2016.09.20 01:34:36 1: sendEmail Anhang:
2016.09.20 01:34:37 1: sendEmail returned: Sep 20 01:34:37 raspberrypi sendEmail[2477]: Email was sent successfully!
2016.09.20 01:34:37 3: HZ_AZ : Batteriewarnung battery: 67 %


Wäre toll, wenn mir mal jemand erklären kann wie ich das mache. Ich kapiere es einfach nicht.

LG

Peter

KölnSolar

Ähm, ob substr die rechte Wahl zur Abfrage ist, bezweifle ich etwas. Perl ist da ja mächtig und das if ließe sich durch eine regexp mit 2 Stellen numerisch abfragen. Bin leider auch nicht der Spezi, aber könnte, glaub ich, so aussehen: [0-9][0-9].* (.* bedeutet irgendein Rest).
Wo ich mir aber ziemlich sicher bin: Dein Substr-Ausdruck ist falsch. Ich vermute, dass Du die ersten beiden Stellen "ausschneiden" willst, aber dann ist das Minuszeichen völlig Fehl am Platze.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

DeeSPe

substr($EVENT, 0, -2)

durch

$EVTPART1

ersetzen!

FERTIG!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Denke aber bei diesen Sensoren daran dass Du die Werte für battery selbst abholen musst!
Das geht nur direkt beim wakeup.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Thyraz

Urghs, ist das echt so bei den Fibaro Sensoren?
Kein Wunder haben die alle noch volle Ladung bei mir. :P
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

DeeSPe

#5
Zitat von: Thyraz am 20 September 2016, 22:39:07
Urghs, ist das echt so bei den Fibaro Sensoren?
Kein Wunder haben die alle noch volle Ladung bei mir. :P

Soweit ich noch aktuell informiert bin ist das so, ja!
Zumindest war das vor ca. einem halben Jahr, als ich die eingerichtet habe, der Stand der Zeit.
Und da ich kein Firmwareupdate gemacht habe gehe ich davon aus dass das so geblieben ist.

Kleiner Tipp für ein entsprechendes notify:
define n_Sensoren_wakeup notify .*:wakeup.* get $NAME battery;; setreading $SELF $NAME lastWakeUp

Da bei mir nur diese Sensoren ein wakeup Event erzeugen ist der Regex somit eindeutig.
Das notify holt bei wakeup das Reading battery ab und setzt im notify ein Reading mit dem Gerätenamen als Namen und lastWakeUp als Wert. Der Zeitstempel zeigt dann entsprechend das letzte wakeup und somit ob das notify auch noch funktioniert.  ;)

Gruß
Dan

EDIT: Sorry hatte 1x ; vergessen.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

tomspatz

#6
Moin
ich habe selbst nur die FGK101 im Einsatz.
Diese bringen ihre Batterie Werte doch beim wakeupInterwal mit.
somit alle 4000 Sekunden aktuell.
Zusätzlich dann noch
define BatterieAbfrageSensoren at +*12:00 get devicename1,devicename2 battery

EDIT:
Meine Aussage mit dem Batteriestatus beim wakupInterwal ist falsch SORRY.
Aber das notify finde ich als Anfänger recht einfach und verständlich.

LG
Tom

DeeSPe

Zitat von: tomspatz am 21 September 2016, 08:18:02
define BatterieAbfrageSensoren at +*12:00 get devicename1,devicename2 battery

Bist Du Dir sicher dass das so funktioniert?
Soweit ich weiß geben die Sensoren die Batteriewerte nur direkt beim wakeup Event preis.
Im besten Fall landet die get Anfrage auf dem Sendstack und wird beim wakeup abgearbeitet (oder auch nicht).
Im schlimmsten Fall bringt dieses at gar nichts.

Ich denke mein notify sollte die nahezu perfekte Lösung sein.

Gruß
Dan

P.S. Ach ja, wenn bei den Sensoren Events durch event-on-change-reading eingeschränkt sind, dann muss wakeup in event-on-update-reading gesteckt werden.
attr <name> event-on-update-reading wakeup
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Zitat von: DeeSPe am 20 September 2016, 21:42:43
substr($EVENT, 0, -2)

durch

$EVTPART1

ersetzen!

FERTIG!

Gruß
Dan

@bmpeter: hat das nun Dein Problem gelöst?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

tomspatz

@Dan
ZitatBist Du Dir sicher dass das so funktioniert?
Soweit ich weiß geben die Sensoren die Batteriewerte nur direkt beim wakeup Event preis.
Im besten Fall landet die get Anfrage auf dem Sendstack und wird beim wakeup abgearbeitet (oder auch nicht).
Ja das läuft top. Wie du schon schreibst es wird in den Sendstack abgelegt und beim wakeup abgearbeitet.
Der Zeitstempel wird ja eh im device gesetzt.
Habe mir eine readingsGroup dafür eingerichtet:
define BatterieStatusProzent readingsGroup .*:[Bb]attery
Dort habe ich das mal beobachtet, läuft. :)

DeeSPe

Zitat von: tomspatz am 21 September 2016, 14:28:57
@DanJa das läuft top. Wie du schon schreibst es wird in den Sendstack abgelegt und beim wakeup abgearbeitet.
Der Zeitstempel wird ja eh im device gesetzt.
Habe mir eine readingsGroup dafür eingerichtet:
define BatterieStatusProzent readingsGroup .*:[Bb]attery
Dort habe ich das mal beobachtet, läuft. :)


Okay, das war mir nicht bewusst. Hatte mich damals (als blutiger Anfänger) an irgendein Tut gehalten und dort wurde das so bei den Fibaro Sensoren genannt dass man battery selbst abholen muss.
Ganz ehrlich, ich habe das nicht hinterfragt oder getestet, sondern einfach so übernommen.
Werde das heute Abend mal prüfen ob das bei mir auch ohne das notify läuft.

Danke für den Hinweis.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

bmpeter

Ich bin leider erst heute dazugekommen, den Parameter zu ändern.
Ich werde berichten.

bmpeter

Funktioniert jetzt wie erwartet.
Vielen Dank!

Nur... woher bekommt man solche Informationen? Werden diese Parameter irgendwo beschrieben?
In der Commandref werden sie zwar in Beispielen erwähnt, aber eine eigentliche Beschreibung habe ich nicht gefunden.

DeeSPe

Zitat von: bmpeter am 22 September 2016, 17:29:17
Funktioniert jetzt wie erwartet.
Vielen Dank!

Nur... woher bekommt man solche Informationen? Werden diese Parameter irgendwo beschrieben?
In der Commandref werden sie zwar in Beispielen erwähnt, aber eine eigentliche Beschreibung habe ich nicht gefunden.

Im Wiki z.B.!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe