FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: GoinAway am 30 Januar 2013, 17:57:03

Titel: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 30 Januar 2013, 17:57:03
Hallo allerseits,
ich habe in meiner fhem.cfg u. a.

define n_batt_chk notify .*:[Bb]attery.* { if("%" !~ m/ok/) {\
    {FB_mail('xxx@@xxx.xxx','FHEM Batteriewarnung','@ %')};;\
    Log 3, "@: Batteriewarnung %";;\
    }\
  }

und mit
trigger Wasser Battery:low
in der Befehlszeile funktioniert das ja auch wunderbar.

Nun habe ich eine Batterie tatsächlich low gemacht, nämlich

NAME Wasser
PREVSTATE Closed, Low Batt
STATE Closed, Low Batt
TYPE CUL_FHTTK

Readings
Battery Low   2013-01-30 17:40:10
Previous Closed   2013-01-30 16:45:59
Reliability ok   2013-01-30 17:40:10
Sync Syncing   2013-01-30 16:28:11
Test Success   2013-01-16 10:46:16
Window Closed, Low Batt   2013-01-30 17:40:10

Nur leider kommt die Mail nicht.

Könnte mir bitte jemand sagen, was ich falsch mache ?
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: Rohan am 30 Januar 2013, 21:59:27
Kannst du denn (überhaupt) per

{FB_mail('neubir@@gmail.com','FHEM Batteriewarnung','TestTestTest')}

Mails verschicken?

Und danke für deine Mail-Addy (wenn es denn die richtige ist) ;) .

Gruß
Thomas
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 30 Januar 2013, 22:04:57
Hi, danke für die Antwort,
ich sagte doch oben bereits, dass es von der Befehlszeile aus funktioniert.
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: rahom am 31 Januar 2013, 07:40:42
Hallo ratsuchender,

so wie es aussieht, stimmt dein Status

STATE Closed, Low Batt

nicht mit

define n_batt_chk notify .*:[Bb]attery.* { if("%" !~ m/ok/) {\

überein.

Du überprüfst auf [Bb]attery nicht ok   zb. STATE battery low
bei dir kommt aber Low Batt  und damit stimmt die Prüfung nicht.
Du musst also dein notify dahingehend ändern das es Low Batt üperprüft.

lg

rahom
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: Rohan am 31 Januar 2013, 08:42:39
Hi,

Zitat von: Ratsuchender schrieb am Mi, 30 Januar 2013 22:04...ich sagte doch oben bereits ...

Sorry, überlesen.
Ich gelobe Besserung ;)

Gruß
Thomas
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 31 Januar 2013, 10:01:56
Zitat von: rahom schrieb am Do, 31 Januar 2013 07:40
... Du überprüfst auf [Bb
attery nicht ok   zb. STATE battery low
bei dir kommt aber Low Batt  und damit stimmt die Prüfung nicht.

Hmm, ja, das es damit was zu tun hat ist mit klar.

Aber irgendwie habe ich einen wahrscheinlichen Denkfehler.

Ich dachte, ich prüfe allein den Battery-Status und nicht STATE ?

Wenn doch aber Battery != ok ist, dann ist doch die Bedingung erfüllt ?

*grübel*
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: UliM am 31 Januar 2013, 10:21:04
Hi,
Du prüfst immer dann, wenn eine battery-message kommt, ob STATE ungleich ok ist, denn % enthält m.W. immer STATE, nicht den Wert des zuletzt übermittelten readings.

Es könnte also klappen mit
define n_batt_chk notify .*:[Bb]attery.* { if( (ReadingsVal("@","battery","") !~ m/ok/ ) || ( ReadingsVal("@","Battery","") !~ m/ok/ ) ) {\

=8-)
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 31 Januar 2013, 11:50:05
Danke Uli,
ist leider erfolglos, es ist wie vorher, der manuelle Aufruf in der Befehlszeile (wie oben) funktioniert,
automatisch leider nicht, obwohl doch

STATE      Closed, Low Batt
   Readings:
     2013-01-31 11:44:32   Battery         Low
     2013-01-31 11:39:19   Previous        Open, Low Batt
     2013-01-31 11:44:32   Window          Closed, Low Batt

Ich weiß nicht mehr weiter ...
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: rahom am 31 Januar 2013, 12:45:54
um Dir weiter zu helfen, wäre es ganz sinnvoll wenn Du mal ein list von Deinem Gerät einstellst.
Damit können wir dann sehen was es überhaupt ist und was es für Readings es bringt.
Ich vermute nämlich das es überhaupt kein Reading namens battery hat. Dann kan es auch so gar nicht funktionieren.

Also mach bitte einmal

list <Gerätename>

lg
rahom
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 31 Januar 2013, 13:12:42
Hallo Rahom,
möchtest Du mal bitte im Post von mir von Do, 31 Januar 2013 11:50 über Dir schauen,
da ist doch der Auszug aus dem list.
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: rahom am 31 Januar 2013, 13:24:15
hab ich doch glatt überlesen. Tomaten auf den Augen.
lg
rahom
Titel: [Gelöst] Batterieüberwachung - meine Lösung
Beitrag von: GoinAway am 01 Februar 2013, 18:29:58
Es ging um die Überwachung des Battery-Status der FHT80TF2, weil
ich diesen zum Zwecke der Meldung des Spannungsausfalls (an der Heizung) missbrauchen will, den Kontakt-Eingang brauche ich dann für die Ausfall-Meldung.
Merke: SpannungsausfallAnHeizung != Heizungsausfall

[Tip]
Um eine Unterspannung = Low Batt künstlich zu erzeugen muss man nur eine Diode in Flussrichtung in Reihe zu den Batterien schalten.
Ich habe mir aus zwei zugeschnittenen Kupferfolien und einem doppelseitigen Klebeband dazwischen einen Adapter gebaut, über den Kupferfolien ist die Diode eingelötet und ein Minischalter schließt die für Normalbetrieb kurz.

Meine batlow.cfg:define n_batlow notify .*:Window.* { if ( ReadingsVal("@","Battery","") !~ m/ok/ ) { \
  my $window_state=ReadingsVal("@", "Battery", "nA");;\
  my $deftype=$defs{@}{TYPE};;\
  return if ( $deftype ne "CUL_FHTTK" );;\
  if ( $defs{@}{PREVSTATE} ne $window_state ) { \
    my $fhttk_status=FHTTK_status;;\
    my $subject="FHEM: @ Batt: ".$window_state;; \
    FB_mail('irgendwer@@gmail.com',$subject,$fhttk_status);;\
    Log 3, "@: Battery ".$window_state;; } \
  }\
}

Einfach und geschacklos :-)
Wer es mag mag es mögen !
Titel: [Nachtrag]: Batterieüberwachung
Beitrag von: GoinAway am 06 Februar 2013, 08:54:33

Moin,
ich komme doch nochmal auf das Thema zurück.

Zum Einen habe ich den Code ein wenig geändert:
 define contacts notify .*:Window.*() { \
 my $window_state=ReadingsVal("@", "Window", "nA");;\
 my $deftype=$defs{@}{TYPE};;\
 return if ( $deftype ne "CUL_FHTTK" );;\
 if ( $defs{@}{PREVSTATE} ne $window_state ) { \
   my $fhttk_status=FHTTK_status;;\
   my $subject="^ @ ".$window_state;; \
   FB_mail('xxxx@@yyyyy.zzz',$subject,$fhttk_status);;\
   Log 3, "@: Window ".$window_state;;\
 }\
}


Zum Anderen hat sich herausgestellt, dass das mit der Meldung Low Batt nicht immer zuverlässig funktioniert, weil
die Spannung bei Low Batt zu niedrig ist um den Sender zuverlässig anzusteuern bzw. das ausgesendete Signal zu schwach ist, um zuverlässig empfangen zu werden.
Im Nahfeld funktioniert das, über 2 Stockwerke hinweg nicht mehr.
Dies zur Warnung an alle, auf deren Basteltisch es (noch) funktioniert und dann in der Praxis doch nicht mehr.

Ich werde also wohl eine zeitliche Abfrage der letzen Meldung des CUL_FHTTK einbauen müssen, weiss aber noch nicht, wie das geht.
Vage Vorstellung:
Wenn die letzte Meldung zeitlich mehr als 30 Minuten zurück liegt, dann ist der CUL_FHTTK kaputt oder die Batterie leer, dann also Meldung.
Mal schauen, ob ich ein Beispiel finden kann.
Danke für die Aufmerksamkeit.
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: MisterEltako am 06 Februar 2013, 14:40:32
Hi!

Vielleicht hilft dir nachfolgender Beitrag weiter, wenn du den Code entsprechend abwandelst:

Link (http://forum.fhem.de/index.php?topic=10349.msg58358#msg58358)

MfG, MisterEltako.
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 06 Februar 2013, 18:12:55
Danke, hilft mir nicht wirklich oder ich habe es mal wieder nicht verstanden.

Was mir fehlt ist der Vergleich, das kapiere ich nicht.

Ich habe die Readings der letzten Meldung:
Readings:
     2013-02-06 16:17:38   Battery         Low
     2013-02-06 16:05:33   Previous        Closed
     2013-02-06 16:17:38   Reliability     ok
     2013-02-05 17:20:02   Sync            Syncing
     2013-02-06 16:17:38   Window          Closed, Low Batt

und FHEM kennt sicherlich auch die aktuelle Uhrzeit.

Wie aber kommt man an den Zeitstempel ?
Wie aber kommt man an die Uhrzeit
Wie aber zieht man davon 1 Stunde ab ?
Wie vergleicht man die beiden Werte ?
Dabei ist wohl auch noch ein Format zu beachten ?
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: MisterEltako am 07 Februar 2013, 21:28:08
Hi!

Also einfach wäre doch, wenn man das Device z.B. alle 30 min abfragt. Wenn es keinen Wert liefert ist die Batterie oder das Device ausgefallen.

define Batterie_Check at +*00:30:00 {\
             if (Value("CUL_FHTTK") ne "") {\
             Log 1, "CUL_all: Batteriestatus ist o.k."}\
             else {Log 1, "CUL_FHTTK: Batterie leer oder Device ausgefallen !!!!"}\
}

Man könnte die Abfrage auch in der Anzahl begrenzen z.B. 2x alle 30 min: "at +*{2}00:30:00"

Wenn du den Zeitstempel brauchst dann:
my $hm = sprintf("%02d:%02d", $hour, $min);;\

Differenzen kann man z.B. so bilden:
my $diff = $min-20;;\

MfG, MisterEltako.
Titel: Aw: Batterieüberwachung: ich bekomme es nicht hin
Beitrag von: GoinAway am 08 Februar 2013, 10:39:58
Danke schön,
kann das jetzt gerade nicht nachvollziehen, aber
ungeprüft und nur besichtigt denke ich, dass das bei genau einem CUL_FHTTK funktioniert.

Nun frage ich mich,
wie ich denn herausfinde, bei welchem der CUL_FHTTK nun das Problem auftritt.

Dein Gedankengang war ja auch der meinige, an der Logik scheitert es ja auch nicht, denke ich.

Es sind ja eher die mangelnden Perl-Kenntnisse, die mich schon 3 Tage verzweifeln lassen.

Und, das soll auch mal gesagt werden, alee hier haben sich wirklich ganz toll Mühe gegeben, Großes Lob,
für Neueinsteiger liegt trotz prima Einsteighilfe die Latte einfach noch zu hoch.
Der globale Überblick - wo finde ich was - fehlt einfach noch.

Mir persönlich fehlen noch viele komplette Einfach-Beispiele,
mit der Einbindung von Fragmenten komme ich schlecht zurecht, weil ich schon am Rahmen aussenrum scheitere.

Beispiel:
Bei zyklisch sich meldenden Geräten aller Art sollte es eine Routine geben,
die in zu definierenden zeitlichen Abständen die "Anwesenheit" der Geräte anhand der Meldungen prüft
und bei "Nichtanwesenheit" eines der Geräte eine Fehlermeldung mit Benennung des Gerätes
und dessen Fehlerstatus ausgibt.
Man kann ja (bei FS20) die Geräten nicht nach dead or alive fragen, leider.
Und Fehlermeldungen haben Bringpflicht, d. h. der User muss geweckt werden, damit er was macht.