Wahrscheinlich Druckfehler im Wiki zu Batterieüberwachung

Begonnen von deune, 08 November 2014, 06:44:12

Vorheriges Thema - Nächstes Thema

deune

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

UliM

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
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

deune


Elektrolurch

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
configDB und Windows befreite Zone!

betateilchen

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.

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

PeMue

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
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser