Modul 98_monitoring zur Überwachung von Geräten

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

Vorheriges Thema - Nächstes Thema

mar3d@RPi3

Hallo,
ich benutze FHEM jetzt schon ein Jahr auf meinem RPi3 und dieses Forum hat mir bei vielen Fragen immer sehr geholfen. Danke dafür. Da mir FHEM immer noch sehr viel Spaß macht und hier um ein feedback gebeten wird, schreibe ich heute meinen ersten Beitrag.
Ich finde das Monitoring-Modul echt klasse! Mir ist nur aufgefallen, dass obwohl ich das Attribut verbose auf 2 eingestellt habe, noch immer 3er Meldungen (jedes get) im Logfile landen. Ein FHEM-Update habe ich gestern gemacht, ist aber immer noch so.
Des weiteren würde ich mir für dieses Modul noch ein Attribut für wenn "nichts auf den Listen" ist wünschen, damit kein leeres return entsteht (PERL WARNING: Use of uninitialized value...). Kann aber auch sein, das man so etwas auch in die Attribute warningReturn und errorReturn integrieren kann, die habe ich nämlich noch nicht so ganz verstanden. Ich frage jetzt immer erst die Readings error und warning auf ne "" ab bevor ich ein get mache.
Liebe Grüße

igami

Ich bemerke grad, dass ich mich schon länger nicht um das Modul gekümmert habe :-[
Das versuche ich mal heue Nachmittag aufzuarbeiten!

Zitat von: mar3d@RPi3 am 08 Juni 2018, 22:39:21
Ich finde das Monitoring-Modul echt klasse!
Vielen Dank für das Lob :)

Zitat von: mar3d@RPi3 am 08 Juni 2018, 22:39:21
Ich finde das Monitoring-Modul echt klasse! Mir ist nur aufgefallen, dass obwohl ich das Attribut verbose auf 2 eingestellt habe, noch immer 3er Meldungen (jedes get) im Logfile landen. Ein FHEM-Update habe ich gestern gemacht, ist aber immer noch so.
Poste doch bitte mal die Betreffende Logzeile. Vom Modul selbst wird nur ein "clear" und fehlerhafte Konfiguration bei verbose 2 ins Log geschrieben.

Zitat von: mar3d@RPi3 am 08 Juni 2018, 22:39:21
Des weiteren würde ich mir für dieses Modul noch ein Attribut für wenn "nichts auf den Listen" ist wünschen, damit kein leeres return entsteht (PERL WARNING: Use of uninitialized value...). Kann aber auch sein, das man so etwas auch in die Attribute warningReturn und errorReturn integrieren kann, die habe ich nämlich noch nicht so ganz verstanden. Ich frage jetzt immer erst die Readings error und warning auf ne "" ab bevor ich ein get mache.
Das lässt sich tatsächlich mit den Return Attributen umsetzen.
In den Beispielen steht oft die Zeile

return unless(@errors);

in dem errorReturn Attribut. Diese bedeutet, dass nichts zurückgegeben wird, wenn es keien Fehler gibt. Du kannst aber auch einen Text zurück geben:

return("keine Einträge vorhanden") unless(@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

mar3d@RPi3

Danke für die Hilfe.
Hier einer der Logeinträge:
2018.06.08 22:07:35.058 3: get Kontakt_monitoring error : Die folgenden 2 Fenster/Türen sind schon länger geöffnet:
- Badezimmerfenster
- Terrassentür

igami

Zitat von: mar3d@RPi3 am 09 Juni 2018, 19:11:00
Danke für die Hilfe.
Hier einer der Logeinträge:
2018.06.08 22:07:35.058 3: get Kontakt_monitoring error : Die folgenden 2 Fenster/Türen sind schon länger geöffnet:
- Badezimmerfenster
- Terrassentür

Ich vermute du machst das über

{fhem("get Kontakt_monitoring error")}

Dass es dann geloggt wird ist normal. Siehe dazu in der commandref den Abschnitt Perl specials
Zitat
To use FHEM commands from the perl expression, use the function fhem(), which takes a string argument, this string will be evaluated as a FHEM command:

    { fhem "set light on" }
    define n1 notify piri:on { fhem "set light on" }

Note: if this function returns a value, it will also be logged into the global FHEM log. Use 1 as a second argument to disable this logging, this makes sense when obtainig some values via FHEM "get...".
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

mar3d@RPi3

Ja, du hast recht, das ist es. Da habe ich auch noch gar nicht alles gelesen. UNENDLICHE WEITEN... XD
Vielen Danke!

igami

Zitat von: raiderxxl am 23 März 2018, 12:42:43
Hallo Tolles Modul ! Habs auch gleichmal eingebunden (Die Zwei Vorschläge Monitoring und Batterie) :-)
Eins hab ich mir noch für Lanpings eingerichtet presence absent/present funktioniert alles Tutti!

Nun eine kleine Frage könnte mir jemand Helfen beim erstellen einer Temperaturüberwachung?
Ich habe im ganzen Haus Sensoren und möchte nun diese auf ungewöhnliche Temperaturen Überwachen.
Also wenn die Temperatur kleiner als 5 (Frostwächter) oder Größer als 50 (Brandalarm) ist...

Vielleicht mit Abstufungen ... Warnung ab 45°C Error ab 50°C und umgekehrt Warnung ab 10°C und Error ab 5°C

Natürlich inkl. Meldung per Push und Lichtan in einem Raum usw...

wie bekomme ich das hin...
Hier ein Beispiel für den Frostwächter:

defmod Frostwa.chter monitoring .+:temperature:..+
attr Frostwa.chter errorFuncAdd {\
  return 1\
    if($event =~ m/temperature: (.+)/ && $1 < 5);;\
  return;;\
}
attr Frostwa.chter errorFuncRemove {\
  return 1\
    if($event =~ m/temperature: (.+)/ && $1 >= 5);;\
  return;;\
}

Der Brandwächter kann dann Analog gebaut werden. Zur Abstufung müssen noch die Attribute warningFuncAdd und warningFuncRemove mit den jeweils anderen Werten gepflegt werden.

Eine implementiertung mit Meldung werde ich dir nicht bauen. Ich überlege aber schon seit längerem ob ich nicht als FHEM Dienstleister anfangen soll 8)
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

igami

Zitat von: choetzu am 30 März 2018, 23:08:10
Kann man das Reading warning oder error mit Umbruch darstellen anstelle von , ?
Das Reading selbst nicht, aber bei warining-/errorReturn kann man das ja so formatieren wie man es mag. In den Beispielen wird auch alles mit einem Zeilenumbruch dargestellt.
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

igami

Zitat von: moonsorrox am 31 März 2018, 14:12:22
Ich setze das Modul noch nicht ein, meine Frage gibt es in dem Modul ein reading was einfach nur zählt, z.B. Batterieüberwachung 1 Gerät  das es eine 1 anzeigt oder 2 Geräte eben eine 2..?
Ab morgen im Update gibt es dann die Readings errorCount und warningCount.
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

igami

Zitat von: Reinerlein am 05 April 2018, 15:36:15
Dafür ist es notwendig, dass man beim Definieren des Monitors nicht nur eine AddRegex angeben kann, sondern auch eine DevSpec für das Device.
Ist bereits möglich mit dem Attribut whitelist.

Zitat von: Reinerlein am 05 April 2018, 15:36:15
Des weiteren habe ich natürlich das Attribut "errorWait" (und auch "warningWait") wie folgt gesetzt:

{ eval(AttrVal($name, 'ActivityTimeout', '24*60*60')) }

eval ist an der Stelle nicht notwendig, das es sowieso schon vom Modul gemacht wird. Schadet aber auch nicht.

Zitat von: Reinerlein am 05 April 2018, 15:36:15
EDIT: Hier noch die Definition des Monitor-Devices:
Müsste dann abegewandelt werden zu:

defmod global_Monitoring_DeviceActivity monitoring .*:.*
attr global_Monitoring_DeviceActivity whitelist ActivityTimeout=.+


Zitat von: Reinerlein am 05 April 2018, 20:09:58
Ich habe noch etwas hinzugefügt, was die Perfomance massiv steigern dürfte.

Im Define (bei Zeile 84):

  my ($device, $tail) = split(/:/, $re[0]);
  $hash->{NOTIFYDEV} = $device;
Damit werden bereits nur noch die Events der angegebenen Geräte gemeldet.
Werde ich mir noch anschauen wie ich das umsetzen kann.

Zitat von: Reinerlein am 05 April 2018, 20:09:58
Außerdem muss ich mir nochmal die Notify-Funktion anschauen. Ich habe z.B. in meinem Activity-Reading-Setzen-Notify den Aufruf für readingsSingleUpdate mit Trigger auf 1 aufgerufen, damit ich auch auf die Änderung des Reading "Activity" reagieren kann, bzw. dieses Reading in einer Readingsgroup auf der Oberfläche auch per longpoll aktualisiert wird.

Leider ist das natürlich eine Reaktion vom überwachten Device, womit es wieder von der error-Liste heruntergenommen wird :(
Irgendwie muss dieses indirekte Event auch noch unterbunden werden, nur weiß ich noch nicht wie... Vielleicht indem man dieses Reading-Setzen direkt ins Modul verbaut, und damit weiß, dass nicht darauf zu reagieren ist.
Alternativ könnte man natürlich auch den Regex entsprechend anpassen... Wobei ich mich mit diesen Negationen immer sehr schwer tue.
Das sieht dann leider etwas kryptisch aus, aber folgendes sollte funktionieren:

defmod global_Monitoring_DeviceActivity monitoring ^[^:]+:(?!Activity).+$


Also bis auf das NOTIFYDEV alles schon möglich ;)
Ich werde gleich noch das Beispiel in der commandref überarbeiten und dann zu morgen einchecken.

Das ganze monitoring sollte dann wie folgt aussehen:

defmod global_Monitoring_DeviceActivity monitoring ^[^:]+:(?!Activity).+$
attr global_Monitoring_DeviceActivity errorWait AttrVal($name, "ActivityTimeout", 60*60*6)
attr global_Monitoring_DeviceActivity whitelist ActivityTimeout=.+
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

igami

Zitat von: igami am 09 Juni 2018, 21:41:13
Also bis auf das NOTIFYDEV alles schon möglich ;)
Habe ich jetzt auch noch fix eingebaut. Es wird das whitelist Attribut verwendet, falls vorhanden, ansonsten die DEF.
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

ZitatAb morgen im Update gibt es dann die Readings errorCount und warningCount

Oh da kann ich ja dann meine userReadings entfernen.  8) Ich habe zusätzlich noch einen Gesamtzähler integriert.


warning_count:warning.+ {split(",", ReadingsVal($name, "warning", ""))},
error_count:error.+ {split(",", ReadingsVal($name, "error", ""))},
all_count:(warning.+|error.+) {split(",", ReadingsVal($name, "warning", "")) + split(",", ReadingsVal($name, "error", ""))}


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 16 März 2018, 17:28:45
Hi igami, konntest du schon etwas wegen meines Pflanzenmonitor herausfinden (Warning wird auf Error kopiert statt verschoben)?
Ich habe nun eine Überprüfung eingebaut, dass das Reading nur auf eine Liste gesetzt werden kann, wenn es noch nicht auf der error Liste steht. Da gab es noch ein Problem bei der Abarbeitung, wenn die FuncAdd Attribute genutzt werden.

Zitat von: ToM_ToM am 10 Juni 2018, 00:02:08
Oh da kann ich ja dann meine userReadings entfernen.  8) Ich habe zusätzlich noch einen Gesamtzähler integriert.
Habe das mal als allCount eingebaut.

Ab morgen im Updaten.
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

mrbreil

Hallo igami auch ich möchte dir danken für deine tolle arbeit, sollte man viel öfter machen.
Setzte auch schon mehrere Devices deines Moduls ein und wollte mich jetzt mal an den Activity Monitor wagen.
Möchte aber nicht inkludieren sondern lieber exkludieren, wann vergisst ja doch mal ein neu angelegtes Device auf die liste zu setzten, dies ist ja mit der blacklist möglich.
Könntest du mir bitte einen Tipp geben wie ich nur Devices auf die Liste setzte die kein einziges Reading besitzen welches jünger als 24 ist.
Manche Readings mancher Devices werden so selten aktualisiert das dein Modul, laut meiner Regex aus der Commandref, denkt die Devices wären Tod obwohl sie mindestens ein Reading innerhalb der Zeit geschrieben haben. Hoffe du verstehst mein Kauderwelsch.

Gruß Christian

igami

Zitat von: mrbreil am 10 Juni 2018, 20:37:14
Manche Readings mancher Devices werden so selten aktualisiert das dein Modul, laut meiner Regex aus der Commandref, denkt die Devices wären Tod obwohl sie mindestens ein Reading innerhalb der Zeit geschrieben haben.
Es geht ja nicht um Readings sondern um Events. Wenn das  event durch event-on-... Attribute eingeschränkt wird kann monitoring das nicht erkennen. Also das bitte noch mal überprüfen.
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

mrbreil

Habe es so definiert.

defmod Activity_monitoring monitoring .*:.*
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))\
}
attr Activity_monitoring errorWait 60*60*24
attr Activity_monitoring room System
attr Activity_monitoring warningReturn {return unless(@warnings);;\
$_ = AttrVal($_, "alias", $_) foreach(@warnings);;\
return("Das Gerät \"$warnings[0]\" hat sich seit mehr als 12 Stunden nicht mehr gemeldet.") if(int(@warnings) == 1);;\
@warnings = sort {lc($a) cmp lc($b)} @warnings;;\
return(join("\n - ", "Die folgenden ".@warnings." Geräten haben sich seit mehr als 12 Stunden nicht mehr gemeldet:", @warnings))\
}
attr Activity_monitoring warningWait 60*60*12


Nehmen wir z.B. ein AMAD Device ohne jedes event-on-.. Attribut.
Nach einem "set Activity_monitoring clear all" landet dieses und jedes weitere Device welches ein Event erzeugt sofort auf der Warning und Error Liste.
Wo ist mein Denkfehler?

Gruß Christian