Autor Thema: Batteriestatus überwachen und per Email senden  (Gelesen 10504 mal)

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Batteriestatus überwachen und per Email senden
« am: 30 September 2015, 20:02:57 »
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
« Letzte Änderung: 09 April 2016, 16:34:51 von Tommy82 »
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13674
  • Das "S" in "IoT" steht für "Security"
Antw:Batteriestatus überwachen und per Email senden
« Antwort #1 am: 30 September 2015, 20:06:05 »
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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #2 am: 30 September 2015, 20:12:04 »
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
« Letzte Änderung: 30 September 2015, 20:15:56 von Tommy82 »
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13674
  • Das "S" in "IoT" steht für "Security"
Antw:Batteriestatus überwachen und per Email senden
« Antwort #3 am: 30 September 2015, 20:25:08 »
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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #4 am: 30 September 2015, 21:08:42 »
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
Zitat
ERR_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!?
« Letzte Änderung: 30 September 2015, 21:12:03 von Tommy82 »
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13674
  • Das "S" in "IoT" steht für "Security"
Antw:Batteriestatus überwachen und per Email senden
« Antwort #5 am: 30 September 2015, 21:15:23 »
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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #6 am: 30 September 2015, 22:04:29 »
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 CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline cwagner

  • Full Member
  • ***
  • Beiträge: 470
Antw:Batteriestatus überwachen und per Email senden
« Antwort #7 am: 01 Oktober 2015, 09:22:10 »
Versuche doch mal mit
trigger Info ERR_battery 1ein 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
Raspi 2B +3B gekoppelt mit FHEM2FHEM: 5.8 DEV Perl v5.20.2, 270 Entities in DbLog u.a. HM (CUL), 1-Wire (FT232RL & DS2480B) und EnOcean (EnOceanPi). Im Einsatz u.a.DOIF, PID20, Threshold, OWX New Gen; Micropelt IRTV, HM Zählermodule; Steuerung von Heizung, Solarkollektoren, Lüftung und Smarthome

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13674
  • Das "S" in "IoT" steht für "Security"
Antw:Batteriestatus überwachen und per Email senden
« Antwort #8 am: 01 Oktober 2015, 09:26:54 »
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.


« Letzte Änderung: 01 Oktober 2015, 09:28:27 von betateilchen »
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #9 am: 04 Oktober 2015, 16:19:51 »
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 CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #10 am: 11 Oktober 2015, 11:22:31 »
Was übersehe ich noch?
Bekomms einfach nicht hin
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 923
Antw:Batteriestatus überwachen und per Email senden
« Antwort #11 am: 11 Oktober 2015, 22:19:30 »
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

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #12 am: 12 Oktober 2015, 07:17:08 »
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]
Zitat
Das ist das Regex (Gerät undEvent)

{ if InternalVal('hm', 'ERR_battery', 0)
Zitat
Das 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)};;
Zitat
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 
  Log 3, "$NAME: Batteriewarnung $EVENT";;
  }
Bei Loglevel 3 wird dann noch ein Log eintrag erzeugt
« Letzte Änderung: 12 Oktober 2015, 07:20:19 von Tommy82 »
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2041
Antw:Batteriestatus überwachen und per Email senden
« Antwort #13 am: 15 Oktober 2015, 20:32:56 »
Ist doch jetzt besser formatiert!? Was mache ich falsch?

Danke
Fhem CT mit Igor Debian Jessie Linux cubie 3.4.104-sunxi
6xHM-CC_RT-DN, 2xHM-Sec-RHS, 3xHM-Sec-SD,7xIT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WHS2011 und WinServer 2012,FB7490
Hanspreed 13,3 Zoll Wandtablett mit Floorplan

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 923
Antw:Batteriestatus überwachen und per Email senden
« Antwort #14 am: 16 Oktober 2015, 12:21:10 »
{ 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.*
« Letzte Änderung: 16 Oktober 2015, 12:22:59 von rapster »