Batteriewarnung - Homematic & Aqara

Begonnen von link611, 07 November 2019, 15:38:14

Vorheriges Thema - Nächstes Thema

link611

Servus,

seit gestern habe ich in meiner Installation auch Aqara Sensoren, die brav ihren Batteriestatus übermitteln.

Jetzt habe ich seit Urzeiten die Batteriewarnung wie im Wiki beschrieben.

Jetzt melden die Aqara Sensoren aber nicht ok sondern einen Wert 100, 95, etc.

Ich sitze jetzt schon ewig rum um das Notify entsprechend anzupassen, aber ich komme nicht weiter....

vielleicht kann mir ja jemand helfen.


.*:[Bb]attery:.* { if(($EVENT !~ m/ok/) || ($EVENT eq "15")) { fhem ("set Pushover msg 'Batteriewarnung' '$NAME $EVENT' '' 0 ''");}}


prinzipiell müsste ich ja nur die erste Bedingung abändern zu eq low, das scheint aber nicht zu funktionieren....

Ist es vielleicht alternativ möglich die Sensoren aus der Readingsgroup auszuschließen und dafür eine eigene zu machen?


-------
edit


habe es jetzt so abgeändert:

.*:[Bb]attery:.* { if(("$EVENT" eq "battery:low") || ("$EVENT" eq "Battery:low") || ("$EVENT" eq "battery:15")) { fhem ("set Pushover msg 'Batteriewarnung' '$NAME $EVENT' '' 0 ''");}}

damit scheint es zu klappen, aber geht das nicht einfacher?

pflaume88

Hallo

ich habe etwas versucht.
Hier ein Notify für die Batteriewarnung mit selbst zu definierenden Grenz bzw Schaltwerten.

########################################################

.*:[Bb]attery:.*|.*:[Bb]atteryS:.*|.*:[Bb]attery_level:.*


{
## Dies ist beliebig erweiterbar und kann auf und für viele Batterie "Readings" reagieren.
## Es spielt keine Rolle ob ein Wert oder ein Wort übergeben wird, es muss über den Fall angebpasst werden.

## Hier werden die Texte definiert die gesendet werden sollen.
my $text1 = 'FHEM Batteriewarnung!!!\n';
my $text2 = ': Batterie=';
my $text3 = '\nBatterien sollten demnächst gewechselt werden!';

## EVENT wir geteielt in zwei Parameter $read und $para.
## $raed ist das Reading vom Gerät und $para der Wert des Readings.
my ($read, $para) = split(/:/, $EVENT, 2);
## Zurück setzen der Variable für die Nachricht bzw. Warnung.
my $warn = '';
## Zu definieren ist das Reading vom Gerät und der "Grenzwert".
## In diesen Fall ist "battery" das Reading und "low" der Grenzwert.
if ($read eq 'battery' && $para eq 'low') {$warn=1}
if ($read eq 'Battery' && $para eq 'low') {$warn=1}   
## In diesen Fall ist "25" der Grenzwert, weil bei diesen Reading der Batteriestatus in Prozent übergeben wird.   
if ($read eq 'battery_level' && $para < '25') {$warn=1}
if ($read eq 'Battery_level' && $para < '25') {$warn=1}

## Wenn der Wert $warn = 1 wird eine Nachricht gesendet.   
if ($warn eq '1')
   {
     ## Dies dient dazu den Aliasnamen zu übergeben und den tazächlichen Wert des Readings zu übertragen.
    ## In diesen Fall über Telegram.
    my $geraet = AttrVal($NAME,'alias','');
    my $wert = ReadingsVal($NAME,$read,'');
     fhem ("set Telegram message $text1$geraet$text2$wert$text3");   
      }

}
################################################

Bei funktioniert es mit verschiedenen Readings.
Verbesserungen sind gewünscht.

Viel Spaß damit.

link611

Zitat von: pflaume88 am 03 Januar 2020, 10:47:27
Hallo

ich habe etwas versucht.
Hier ein Notify für die Batteriewarnung mit selbst zu definierenden Grenz bzw Schaltwerten.

########################################################

.*:[Bb]attery:.*|.*:[Bb]atteryS:.*|.*:[Bb]attery_level:.*


{
## Dies ist beliebig erweiterbar und kann auf und für viele Batterie "Readings" reagieren.
## Es spielt keine Rolle ob ein Wert oder ein Wort übergeben wird, es muss über den Fall angebpasst werden.

## Hier werden die Texte definiert die gesendet werden sollen.
my $text1 = 'FHEM Batteriewarnung!!!\n';
my $text2 = ': Batterie=';
my $text3 = '\nBatterien sollten demnächst gewechselt werden!';

## EVENT wir geteielt in zwei Parameter $read und $para.
## $raed ist das Reading vom Gerät und $para der Wert des Readings.
my ($read, $para) = split(/:/, $EVENT, 2);
## Zurück setzen der Variable für die Nachricht bzw. Warnung.
my $warn = '';
## Zu definieren ist das Reading vom Gerät und der "Grenzwert".
## In diesen Fall ist "battery" das Reading und "low" der Grenzwert.
if ($read eq 'battery' && $para eq 'low') {$warn=1}
if ($read eq 'Battery' && $para eq 'low') {$warn=1}   
## In diesen Fall ist "25" der Grenzwert, weil bei diesen Reading der Batteriestatus in Prozent übergeben wird.   
if ($read eq 'battery_level' && $para < '25') {$warn=1}
if ($read eq 'Battery_level' && $para < '25') {$warn=1}

## Wenn der Wert $warn = 1 wird eine Nachricht gesendet.   
if ($warn eq '1')
   {
     ## Dies dient dazu den Aliasnamen zu übergeben und den tazächlichen Wert des Readings zu übertragen.
    ## In diesen Fall über Telegram.
    my $geraet = AttrVal($NAME,'alias','');
    my $wert = ReadingsVal($NAME,$read,'');
     fhem ("set Telegram message $text1$geraet$text2$wert$text3");   
      }

}
################################################

Bei funktioniert es mit verschiedenen Readings.
Verbesserungen sind gewünscht.

Viel Spaß damit.

Hey, danke für das Script,
habe es eben eingebaut und um HM IP erweitert.
Mal sehen ob es klappt.

MadMax-FHEM

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)

link611

Zur Info, es waren noch ein paar Fehler im Script, habe es entsprechend angepasst:



.*:[Bb]attery:.*|.*:0.LOW_BAT:.*
{
## Dies ist beliebig erweiterbar und kann auf und für viele Batterie "Readings" reagieren.
## Es spielt keine Rolle ob ein Wert oder ein Wort übergeben wird, es muss über den Fall angebpasst werden.

## Hier werden die Texte definiert die gesendet werden sollen.
my $text1 = 'FHEM Batteriewarnung!!!\n';
my $text2 = ': Batterie=';

## EVENT wird geteilt in zwei Parameter $read und $para.
## $read ist das Reading vom Gerät und $para der Wert des Readings.
my ($read, $para) = split(/:/, $EVENT, 2);


## Zu definieren ist das Reading vom Gerät und der "Grenzwert".
## In diesen Fall ist "battery" das Reading und "low" der Grenzwert.
if ($read eq 'battery' && $para eq 'low') {goto notify;}
if ($read eq 'Battery' && $para eq 'low') {goto notify;}
if ($read eq 'battery' && $para eq ' ok') {goto ende;}
if ($read eq 'Battery' && $para eq ' ok') {goto ende;}
   
## In diesen Fall ist "30" der Grenzwert, weil bei diesen Reading der Batteriestatus in Prozent übergeben wird.   
if ($read eq 'battery' && $para < '31') {goto notify;}
if ($read eq 'Battery' && $para < '31') {goto notify;}

##Hier für HM IP
if ($read eq '0.LOW_BAT' && $para > '0') {goto notify;}

goto ende;

notify:

     ## Dies dient dazu den Namen zu übergeben und den tatsächlichen Wert des Readings zu übertragen.
    ## In diesen Fall über Telegram.

    my $wert = ReadingsVal($NAME,$read,'');
     fhem ("set Telegram message $text1$NAME$text2$wert");   

ende:

}

pflaume88

Hallo

kannst Du mir kurz erklären warum Du auf den Status ok reagieren möchtest?
Mich interesiert nur wenn der Wer bzw. Status nicht mehr ok oder kleiner als ist.
Wo ist die Verbesserung?
Nicht böse gemeint bitte erleuchte mich, ich betreibe das Thema FHEM erst seit einem Jahr.