FHEM Forum

FHEM => Automatisierung => Thema gestartet von: deune am 08 November 2014, 06:44:12

Titel: Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: deune am 08 November 2014, 06:44:12
Hallo Zusammen,

Im Wiki steht ein HowTo zur Batterieüberwachung, dort hat sich wahrscheinlich ein Druckfehler eingeschlichen!
Im ersten Code Beispiel steht in der ersten Zeile:
define n_batt_chk notify .*:[Bb]attery.* { $EVENT !~ m/ok/) {

bei funktioniert es mit
define n_batt_chk notify .*:[Bb]attery.* {if ( $EVENT !~ m/ok/) {        <- if(  ergänzt

Liebe Grüße aus der Eifel
Holger
Titel: Antw:Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: UliM am 08 November 2014, 08:18:19
Hi Holger,
gut gesehen :)
Ein Wiki lebt davon, dass es von allen aktualisiert wird.
Am besten wäre es also, wenn Du Dir nen user für das fhemwiki besorgst und das selbst dort korrigierst.
Schönen Tag,
Uli
Titel: Antw:Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: deune am 08 November 2014, 16:19:08
Hallo Uli,

Ist erledigt!

Herzlichen Gruß

Holger
Titel: Antw:Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: Elektrolurch am 08 November 2014, 17:39:54
Hallo,

mal so als Anmerkung:
Fand das auch zuerst Klasse, wie einfach das in fhem geht, aber wenn man eine größere Installation laufen hat, dann ist so ein notify "recht teuer":

define n_batt_chk notify .*:[Bb]attery.* #
Jedes Event, was in fhem rein kommt (.*) muss über alle Objekte im fhem "gematched" werden. Wieviele?
{int(keys %defs);;} Bei mir 319.

Das merkt man dann, wenn man mit einem Schaltersignal zwei verschiedene Lampen einschaltet und die zweite etwas Zeit braucht.

Da ja nur bestimmte devices ein "low bat" überhaupt melden, z.B. fht-Thermostate, habe ich das dort in das notify für das Thermostat mit fest eingebaut.
Soweit als Tipp.

Gruß

Elektrolurch
Titel: Antw:Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: betateilchen am 08 November 2014, 17:47:14
Zitat von: UliM am 08 November 2014, 08:18:19
Am besten wäre es also, wenn Du Dir nen user für das fhemwiki besorgst

Wenn das mal so einfach wäre. Ich habe das mindestens schon dreimal bei den im Wiki dafür angegebenen email-Adressen erfolglos versucht. Irgendwann verliert man die Lust zum Betteln.

Titel: Antw:Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung
Beitrag von: PeMue am 06 September 2015, 20:10:10
Hallo zusammen,

ich hole den Thread mal wieder hoch.
Meine aktuelle Version für die Geräte ohne Messung der Batteriespannung ist die folgende:
#------------------------------------------------------------------------------
# alive_check:
# checks, if devices w/o battery status are alive or not, if not it is assumed
# that the battery is empty
#
# call in fhem:
# {alive_check <devicename>, <age>}
# <devicename> ... name of the device to be checked
# <age> ... duration in hours for which alive status is tested
# sets a dummy reading for <devicename> battery_dummy with values ok or low
# function return values:
#   0 -> device alive
#   1 -> device dead
#   2 -> error
#
# source:
# http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung
#
# programming:
# fhem wiki/modifications: Peter Mühlbeyer
#
# changes to wiki:
# - additional reading instead of dummy
# - definition of return values changed
#
# comments/bugs/improvements:
#  - perl module Time::Local must be installed on Fritz Box 7170/7270 distribution:
#    http://search.cpan.org/~drolsky/Time-Local-1.2300/lib/Time/Local.pm to be stored
#    on <fhemdir>/lib/perl/Time
#------------------------------------------------------------------------------
sub alive_check($$)
{
  my ($device,$threshold_hrs) = @_;

  # code from http://forum.fhem.de/index.php/topic,12545.msg75820.html#msg75820
  my $oldstamp   = ReadingsTimestamp($device,"state",0);
  if ($oldstamp eq "0") { return 2; }
  my @old        = split(" ",$oldstamp);
  my @old_day    = split("-",$old[0]);
  my @old_time   = split(":",$old[1]);
  my $old_time   = fhemTimeLocal($old_time[2],$old_time[1],$old_time[0],$old_day[2],$old_day[1],$old_day[0]);

  my $nowstamp   = TimeNow();
  my @now        = split(" ",$nowstamp);
  my @now_day    = split("-",$now[0]);
  my @now_time   = split(":",$now[1]);
  my $now_time   = fhemTimeLocal($now_time[2],$now_time[1],$now_time[0],$now_day[2],$now_day[1],$now_day[0]);

  my $age_hrs    = int(($now_time - $old_time)/3600);

  if ($age_hrs > $threshold_hrs)
  {
    Log 1, ("alive_check: $device dead, last state was more than $age_hrs hours ago");
    fhem("setreading ".$device." battery_dummy low");
    return 1;
  } else
  {
    fhem("setreading ".$device." battery_dummy ok");
    return 0;
  }
}
#----- alive_check ------------------------------------------------------------

Warum? Naja, die FritzBox hat halt das Modul Time::Local nicht, daher habe ich mal im Forum gestöbert und den Code entsprechend abgeändert ...
Vielleicht kann das jemand brauchen  ;)

Schönen Abend.

Gruß PeMue