Batteriestatus überwachen und per Email senden

Begonnen von Tommy82, 30 September 2015, 20:02:57

Vorheriges Thema - Nächstes Thema

Tommy82

Hallo,
ich möchte den Batteriestatus aller meiner Devices überwachen und wenn dieser nicht Ok ist mich per Email benachrichtigen lassen, dazu habe ich was im Wiki gefunden was ich dann so umgesetzt habe:
Internals:
   CFGFN
   DEF        .*:[Bb]attery:.* { if($EVENT !~ m/ok/) {
  { DebianMail('xxx@googlemail.com', 'FHEM Batteriewarnung', $NAME.': '.$EVENT)};;
   Log 3, "$NAME: Batteriewarnung $EVENT";;
  }
}
   NAME       Batterie_Status_nt
   NR         5531
   NTFY_ORDER 50-Batterie_Status_nt
   REGEXP     .*:[Bb]attery:.*
   STATE      active
   TYPE       notify
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1443636630.88044
           VALUE      active
   Readings:
     2015-09-30 20:10:30   state           active
Attributes: 


Jetzt bekomme ich aber 12 Emails(alle von den HM-CC-RT-DN Devices), die alle nur als Überschrift meine Email Adresse haben und "Fhem Batteriewarnung" als Text, aber es wird nicht angezeigt welches Device den niedriegen Wert hat.
Im Log steht dann:

2015.09.30 19:52:20.181 3: Heizung_Tuer : Batteriewarnung batteryLevel: 2.5
2015.09.30 19:52:33.968 1: sendEmail RCP: xxx@googlemail.com
2015.09.30 19:52:33.968 1: sendEmail Subject: xxx\@googlemail.com
2015.09.30 19:52:33.969 1: sendEmail Text: FHEM Batteriewarnung
2015.09.30 19:52:37.235 1: sendEmail returned: Sep 30 19:52:37 localhost sendEmail[13010]: Email was sent successfully!
2015.09.30 19:52:37.236 3: Gaeste_WC : Batteriewarnung batteryLevel: 2.8
2015.09.30 19:53:28.649 1: sendEmail RCP: xxx@googlemail.com
2015.09.30 19:53:28.650 1: sendEmail Subject:xxx\@googlemail.com
2015.09.30 19:53:28.650 1: sendEmail Text: FHEM Batteriewarnung
2015.09.30 19:53:31.244 1: sendEmail returned: Sep 30 19:53:31 localhost sendEmail[13225]: Email was sent successfully!


Was mache ich falsch?
Ich möchte ja bei allen Devices den Batteriestatus prüfen und wenn der nicht "OK" ist mich per Mail Benachrichtigen lassen, bzw. bei den HM-CC-RT-DN soll die Nachricht immer kommen wenn der Batteriestatus =<2.1 ist

Danke für die Hilfe
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

betateilchen

wenn es nur um Homematic Geräte geht, solltest Du das Ganze besser über HMinfo lösen, da Dein notify beispielsweise auch auf das reading "battery-level" triggert, in dem ein Spannungswert steht und deshalb auch KEIN ok enthält. Das ist der Grund, warum Du bei jeder HM-Meldung mit einem Batteriepegel eine leere email bekommst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tommy82

#2
Ja, geht nur um HM Geräte, wie sollte ich das übr HMINfo machen?

Ich hab 12 HM Devices(6xHM-CC-RT-DN,3xHM-SEC-SD und 3x HM-Sec-RHS, bekomme aber nur den Batteriestatus von 7 AngezeigT!?

Internals:
   ERR_names  Terassen_Tuer
   I_HM_IOdevices ok: HmLanAdapter;
   NAME       hm
   NR         93
   STATE      updated:2015-09-30 20:15:42
   TYPE       HMinfo
   Version    01
   W_unConfRegs Heizung_Kinderzimmer,Heizung_Flur
   CHANGETIME:
   Helper:
     Dblog:
       I_rssiminlevel:
         Mydblog:
           TIME       1443636942.54868
           VALUE      59<:4 60>:4 80>:4 99>:0
       I_sum_battery:
         Mydblog:
           TIME       1443636942.54868
           VALUE      ok:6,low:1,
   Readings:
     2015-09-29 17:25:16   C_sumDefined    entities:53,device:15,channel:45,virtual:2
     2015-09-29 17:25:16   ERR_battery     low:1,
     2015-09-29 17:25:16   I_actTotal      alive:12,dead:0,unkn:0,off:0
     2015-09-30 20:15:42   I_rssiMinLevel  59<:4 60>:4 80>:4 99>:0
     2015-09-30 20:15:42   I_sum_battery   ok:6,low:1,
   Nb:
     cnt        0
Attributes:
   sumERROR   battery:ok,sabotageError:off,powerError:ok,overload:off,overheat:off,reduced:off,motorError:no,error:none,uncertain:yes,smoke_detect:none,cover:closed
   sumStatus  battery,sabotageError,powerError,motor
   webCmd     update:protoEvents short:rssi:peerXref:configCheck:models
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

betateilchen

im Reading ERR_battery steht die Anzahl der Geräte mit niedrigem Batteriestand
im Internal ERR_names steht die Liste mit den "fehlerhaften" Geräten, in Deinem Fall "Terrassen_Tuer"

Das reading ERR_battery triggert einen event, genau wie andere readings auch, darauf kannst Du ein notify definieren.

Alternativ kannst Du beispielsweise einmal pro Stunde prüfen, ob es was mitzuteilen gibt. Eine Batteriewarnung ist ja nun nichts wirklich zeitkritisches, wo es um Sekunden geht und auf Echtzeit ankommt.



if ReadingsVal('HMinfo', 'ERR_battery', 0) { tue irgendwas wenn es eine Batteriewarnung gibt }



Bei mir wird auf diese Weise eine Batteriewarnung auch im Infopanel mit einem Symbol angezeigt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tommy82

#4
Wie hast du das im Infopanel gemacht?

Wäre das dann so richtig?
Internals:
   CFGFN
   DEF        if ReadingsVal('hm', 'ERR_battery', 0)  {
  { DebianMail('xxx@googlemail.com', 'FHEM Batteriewarnung', $NAME.': '.$EVENT)};;
   Log 3, "$NAME: Batteriewarnung $EVENT";;
  }
}
   NAME       Batterie_Status_nt
   NR         6197
   NTFY_ORDER 50-Batterie_Status_nt
   REGEXP     if
   STATE      active
   TYPE       notify
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1443640191.41297
           VALUE      active
   Readings:
     2015-09-30 21:09:51   state           active
Attributes:


Was mich im HMINfo noch wundert ist, mir wird in den Internals
ZitatERR_names  Terassen_Tuer
angezeigt, aber einer meiner HM-CC-RT-DN zeigt mir im Display F9 was laut Beschreibung ja für eine zu niedriege Batteriespannung steht, wieso bekomme ich das im HMINfo nicht angezeigt, bzw, wie bekomme ich es im notify mit angezeigt?

Danke für deine Hilfe

Edit
HMINFO prüft ja anscheint auf das reading "battery", aber für die HM-CC-RT-DN, wäre doch batteryLevel das wichtigere oder!?
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

betateilchen

Dein notify ist falsch, aber soll ich jetzt wirklich erklären, wie man ein simpelstes notify auf einen beliebigen Event anlegt *grummel*

Doch, ich tue es, bevor hier wieder Tränen fließen...



define Batterie_Status_nt notify hm:ERR_battery { und ab hier kannst Du anfangen abzuarbeiten was Du willst... }



Im InfoPanel sieht das bei mir so aus:



xcondition battwarn { ReadingsVal('HMinfo', 'ERR_battery', 0) }
group bat_logo open 651 1
rect  bat_rect 0 0 48 48 2 2 1
img   bat_img  1 1  w46 "-hminfo_err.html" file "/opt/fhem_add/images/batterie.svg"
group - close



Und wenn die Batterie in einem RT schon so schwach ist, dass der RT keine Meldungen mehr verschickt, kann fhem auch nicht wissen, dass dort die Batterie leer ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tommy82

Also mit den notify steh ich definitiv auf dem Kriegsfuss:-(

Wäre das so richtig?
Internals:
   CFGFN
   DEF        hm:ERR_battery { if ReadingsVal('HMinfo', 'ERR_battery', 0)
  { DebianMail('xxx@googlemail.com', 'FHEM Batteriewarnung', $ERR_names.': '.$EVENT)};;
   Log 3, "$NAME: Batteriewarnung $EVENT";;
  }
   NAME       Batterie_Status_nt
   NOTIFYDEV  hm
   NR         6197
   NTFY_ORDER 50-Batterie_Status_nt
   REGEXP     hm:ERR_battery
   STATE      active
   TYPE       notify
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1443643725.73645
           VALUE      active
   Readings:
     2015-09-30 22:08:45   state           active
Attributes:


Bekomme mal keine Mail......
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

cwagner

Versuche doch mal mit
trigger Info ERR_battery 1
ein Ereignis auszulösen.
Außerdem glaube ich, dass Du ein internes Reading nicht über eine globale Variable abfragen kannst, weil sie nicht zugewiesen wurde. Deshalb lass noch zunächst die ERR_Names weg (mit lsit hMInfo wird die die Liste ja dann gezeigt).
Bei mir läuft Dein Code dann und sorgt für eine E-Mail.
Nächster Schritt wäre dann mit einem readingsVal('HMInfo','.ERR_Names','0') die Namensliste zu integrieren... Ein internes Reading rufe ich mit einem vorangestellten . [Punkt] auf...

Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

betateilchen

#8
Der Fehler ist doch ganz ein anderer. Das HMinfo Device bei Tommy82 heißt "hm" und nicht "HMinfo".

Das kommt davon, wenn man als Fragesteller nicht bereit ist, sein Gehirn einzuschalten, um mitzudenken und zu verstehen, wie es eigentlich funktioniert, sondern nur darauf erpicht ist, eine copy&paste-fähige, funktionierende Lösung zu erwarten und damit nun zum wiederholten Male scheitert.

Sorry - eine solche Lösung wirst Du von mir nicht bekommen. Seit gestern versuche ich, Dir das Prinzip einer Lösung zu vermitteln, damit Du überhaupt mal weißt, was Du eigentlich tust.

Und das mit dem Punkt vor dem ReadingName bei ERR_name ist völliger Quatsch. Es handelt sich um ein Internal, und das wird grundsätzlich nicht mit ReadingsVal abgefragt, sondern mit InternalVal.

Interne (nicht sichtbare) Readings sind wieder etwas völlig anderes - die haben in der Tat einen Punkt vor ihrem Namen.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tommy82

Es ist nicht so das ich nur C&P machen würde, denn auch oben hab ich es ja angepasst, aber anscheint falsch und ich finde den Fehler nicht.
Also geh ich es mal einzeln durch, was ich denke was in dem notify steht, und ihr könnt mir ja vieleicht da auf die sprüngehelfen wo ich falsch liege:

hm:ERR_battery [quote]Das ist das Regex (Gerät undEvent)[/quote] { if InternalVal('hm', 'ERR_battery', 0)[quote]Das If prüft die Interne Variable "ERR_Battery" des Devices HM auf deren Wert, der Standartwert ist 0[/quote]
  { DebianMail('xxx@googlemail.com', 'FHEM Batteriewarnung', $ERR_names.': '.$EVENT)};; [quote]Und sendet wenn der Wert nicht =0 ist eine Email an die angegebene Adresse mit dem Inhalt  "FHEM Batteriewarnung und den Inhalt der Variablen$ERR_names (Sollte mir den Namen des Entsprechenden Devices anzeigen) und den Inhalt der Variablen$EVENT  [/quote]
   Log 3, "$NAME: Batteriewarnung $EVENT";;
  }[code]Bei Loglevel 3 wird dann noch ein Log eintrag erzeugt

[/code]

Wo übersehe ich jetzt meinen Fehler?

Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Tommy82

Was übersehe ich noch?
Bekomms einfach nicht hin
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

rapster

Wer denkst du tut sich dieses unformatierte Kauderwelsch in deinem letzten Beitrag an?

Bei jedem Beitrag gibt es einen EDIT Button, lese dir deine Beiträge einfach nach abschicken nochmal durch, und bearbeite so einen Rotz, ansonsten wirste lang auf einen dummen warten müssen der diese Arbeit für dich macht

Tommy82

#12
Hab nur versucht dazulegen was ich aus dem Code lese, aber kann es auch so machen, so sieht der Code aus:
hm:ERR_battery { if InternalVal('hm', 'ERR_battery', 0)
  { DebianMail('@googlemail.com', 'FHEM Batteriewarnung', $ERR_names.': '.$EVENT)};;
   Log 3, "$NAME: Batteriewarnung $EVENT";;
  }


Und das ist meine Interpretation:
]code]hm:ERR_battery[/Code]
ZitatDas ist das Regex (Gerät undEvent)
{ if InternalVal('hm', 'ERR_battery', 0)
ZitatDas If prüft die Interne Variable "ERR_Battery" des Devices HM auf deren Wert, der Standartwert ist 0

  { DebianMail('xxx@googlemail.com', 'FHEM Batteriewarnung', $ERR_names.': '.$EVENT)};;
ZitatUnd sendet wenn der Wert nicht =0 ist eine Email an die angegebene Adresse mit dem Inhalt  "FHEM Batteriewarnung und den Inhalt der Variablen$ERR_names (Sollte mir den Namen des Entsprechenden Devices anzeigen) und den Inhalt der Variablen$EVENT 
Log 3, "$NAME: Batteriewarnung $EVENT";;
  }
Bei Loglevel 3 wird dann noch ein Log eintrag erzeugt
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Tommy82

Ist doch jetzt besser formatiert!? Was mache ich falsch?

Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

rapster

#14
{ if InternalVal('hm', 'ERR_battery', 0)

Das ist schomal falsch, da Perl eine andere Syntax bei einem if erwartet => z.B. http://www.tizag.com/perlT/perlif.php,

Desweiteren ist "ERR_battery" ein Internal was keine Events generiert, also wird dein notify nie ausgelöst,
hier musst du einen Trigger wählen der auch ein entsprechendes Event erzeugt.

z.B. hm:I_sum_battery.*