Modul 98_monitoring zur Überwachung von Geräten

Begonnen von igami, 09 März 2017, 22:12:42

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

ZitatEs werden zu beginn alle subs geladen und machen damit das system etwas träger.
Das ist falsch - denn ebenso müssen die Zeilen aus der Konfigurationsdatei geladen werden. Und da diese a.) länger sind und b.) erst durch den Perl-Code für das Interpretieren der Konfigurationsdatei hindurch müssen, ist IM GEGENTEIL das Ablegen von Code in den Device-Attributen VIEL langsamer als das Einlesen einer ordentlichen Perl-Datei.

ZitatEin Fehler in der utils kann dazu führen, dass sämtliche subs in der utils nicht mehr funktionieren.
Halb falsch - das stimmt nur für Syntaxfehler, die beim Einlesen des Moduls auffallen. Dem kann man durch eine separate Utils-Datei für ungetesteten Code entgegentreten. Laufzeitfehler in einer sub beeinträchtigen die anderen subs nicht.

ZitatIch müsste dann wissen in welcher utils datei ich die sub abgespeichert habe und kann diese nicht einfach im device ändern.
Erstens kann man so etwas im Namen der subroutine einbauen, Zweitens habe ich so wie Benni mehrere Util-Dateien. Für Plotfunktionen, Zeitfunktionen, Sicherheit, Licht, Heizung und Sonstiges.


Zitat
        - Erhöht die Lesbarkeit am Device
       - Evtl. Wiederverwendbarkeit der Subs für mehrere Devices
       - Eine zentrale Stelle für die Pflege

Eben.

LG

pah

Marlen

Hi cooles Modul!  :)

aber wie pack ich denn hier
attr Activity_monitoring errorReturn {return unless(@errors);;\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
return("Das Gerät \"$errors[0]\" hat sich seit mehr als 24 Stunden nicht mehr gemeldet.") if(int(@errors) == 1);;\
@errors = sort {lc($a) cmp lc($b)} @errors;;\
return(join("\n - ", "Die folgenden ".@errors." Geräten haben sich seit mehr als 24 Stunden nicht mehr gemeldet:", @errors))\


das mit ein:

fhem "set teleBot message " . '@123456789' . " "Die folgenden ".@errors." Geräten haben sich seit mehr als 24 Stunden nicht mehr gemeldet";

Damit ich die Meldung per Telegram bekomme!

LG
Marlen

l2r

in ein extra notify /Doif welches dann ausgelöst wird, wann du es möchtest.


Das Modul erkennt die Geräte, die im Error sind und bereitet die Meldung dementsprechend so auf, dass sie komfortabel abgegriffen werden kann.

Das Versenden usw. ist nicht Teil des Moduls

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

ToKa

Hallo zusammen,

meine batteriebetriebenen Z-Wave Geräte liefern für battery numerische Werte zurück inkl. %-Zeichen, z.B. 67 %

Im Beispiel wird low und ok verwendet, wie kann ich das monitoring definieren, dass z.B. bei < 10 % add-event und z.B. bei > 95 % ein remove-event verwendet wird?

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

igami



Zitat von: ToKa am 16 Mai 2017, 21:54:03
meine batteriebetriebenen Z-Wave Geräte liefern für battery numerische Werte zurück inkl. %-Zeichen, z.B. 67 %

Im Beispiel wird low und ok verwendet, wie kann ich das monitoring definieren, dass z.B. bei < 10 % add-event und z.B. bei > 95 % ein remove-event verwendet wird?

Bei errorFuncAdd bzw. errorFuncRemove eine 1 zurück geben wenn ReadingsNum kleiner bzw. größer ist als dein Grenzwert.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ToKa

Super, vielen Dank - doch so einfach, wenn man alle attribute richtig versteht  :-[
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

ToM_ToM

Hallo,

ich verstehe das mit den Events noch nicht ganz. Welches Event wird denn vom monitoring getriggert, damit ich per Telegram oder Pushover, etc. darauf reagieren kann und mir das zusenden lassen kann?
Kann da mal jemand ein komplettes Beispiel posten?

Vielen Dank! :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Brockmann

Zitat von: ToM_ToM am 10 Juli 2017, 14:56:08
ich verstehe das mit den Events noch nicht ganz. Welches Event wird denn vom monitoring getriggert, damit ich per Telegram oder Pushover, etc. darauf reagieren kann und mir das zusenden lassen kann?
Kann da mal jemand ein komplettes Beispiel posten?
Zitat von: Commandref
Das monitor sendet selbst keine Benachrichtung, hierfür ist ein notify oder DOIF notwendig, welches auf das Event "<monitoring-name> error add: <name>" reagiert und dann den Rückgabewert von "get <monitoring-name> default" versendet.

igami

Schon etwas ausführlicher:

defmod ServiceNotifications_DI DOIF ((\
   [":^error add:"]\
   || [$SELF:cmd] == 2\
) \
&& (\
   (\
     [ServiceNotifications_cu:state] eq "ein"\
     && [NRW:state] eq "none"\
   ) \
   || AttrVal("$DEVICE", "priority", 0) == 1\
) \
)(\
  {my $msg = fhem("get TYPE=monitoring default");;\
   my $oldMsg = $defs{$SELF}{helper}{oldMsg};;\
\
   if($msg && (!$oldMsg || $msg ne $oldMsg)){\
    sendEmail("XXX", $msg);;\
\
$defs{$SELF}{helper}{oldMsg} = $msg;;\
   }\
   \
   return;;\
  }\
)\
DOELSEIF\
([":^error add:"])

attr ServiceNotifications_DI cmdState send notifications|notifications pending
attr ServiceNotifications_DI cmdpause 60*15
attr ServiceNotifications_DI do always
attr ServiceNotifications_DI wait 60*15

Ich überprüfe immer auf error add:

Umschriben bedeutet der code:
Falls ein Gerät ein "error add:" Event auslöst, oder ich mich im Status zwei Befinde
Und, mein Weekdaytimer eingeschaltet ist und kein Feiertag ist, oder die Benachrichtigung Priorität hat,
warte 15 Minuten ob noch weitere Fehlermeldungen kommen und schicke mir dann eine Nachricht, sofern die Nachricht sich von der vorherigen unterscheidet und nicht leer ist.
Andernfalls falls ein Gerät ein "error add:" Event auslöst, speichere das als Status zwei.

Dieses DOIF nutze ich auf der Arbeit um mich nur während der Arbeitszeit informieren zu lassen. Ich möchte ja nicht zu Hause wissen, dass ich Batterien tauschen muss. Falls aber etwas wichtiges ist, z.B. Klimaanlage im Serverraum ausgefallen werde ich trotzdem benachrichtigt. Dafür habe ich meinen monitoring einer userattr priority spendiert.

Zu Hause mache ich das ganz anders, da lasse ich mir einfach alle Nachrichten schicken, wenn ich 15 Minuten zu hause bin. Und nicht dann, wenn sie auftreten.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ToM_ToM

Hey, kann man in dem Modul auch irgendwie einen Counter einbauen damit ich ein Reading habe welches mir anzeigt wieviele aktuell auf der Warining Liste sind und wieviele aktuell auf der Error Liste sind?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Und es wäre auch cool wenn man statt dem DEVICE Namen, auf den Alias zurückgreifen könnte (evtl. überein Attribut gesteuert).

LG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Kann man doch beides über das Attribut errorReturn machen.
Bsp:

{return unless(@errors);
return("Das Thermostat \"".AttrVal(InternalVal($errors[0], "channel_04", $errors[0]), "alias", $errors[0])."\" meldet einen Fehler: ".ReadingsVal($errors[0], "motorErr", ""))
   if(int(@errors) == 1);

$_ = AttrVal(InternalVal($_, "channel_04", $_), "alias", $_)."\n     Fehler: ".ReadingsVal($_, "motorErr", "") for(@errors);

@errors = sort {lc($a) cmp lc($b)} @errors;

return(join("\n - ", "Die folgenden ".@errors." Thermostate melden einen Fehler:", @errors));
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ToM_ToM

ZitatKann man doch beides über das Attribut errorReturn machen.
Ach cool, danke! Das mit dem Alias funktioniert jetzt super.

Nur wie ich mir ein UserReading erzeuge welches die Anzahl der Warnings enthält, habe ich noch nicht ganz herausfinden können.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Zitat von: ToM_ToM am 14 Juli 2017, 14:44:29
Nur wie ich mir ein UserReading erzeuge welches die Anzahl der Warnings enthält, habe ich noch nicht ganz herausfinden können.
Ich schreibe das meist in die Nachricht mit rein.
Ein userreading könnte so aussehen:

attr <name> userreadings error_count:error.+ {split(",", ReadingsVal($name, "error", ""))}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ToM_ToM

ZitatEin userreading könnte so aussehen:

Ach cool. Super danke. Das funktioniert. Auch wenn sich mir nicht ganz erschließt, wie es funktioniert, da du hier mit
ReadingsVal($name, "error", "")
ja das Reading error ausliest, welches es zumindest bei mir, gar nicht gibt.  :o

Aber es funktioniert.  :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8