Modul 98_monitoring zur Überwachung von Geräten

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

Vorheriges Thema - Nächstes Thema

dora71

Hallo zusammen,

habe auch mal eine Frage: Ich möchte mit dem Monitoring-Modul gerne sowohl eine Aktivitäts-Überwachung als auch eine Batterie-Überwachung machen. Beide Fälle sind MQTT-Geräte, allerdings habe ich nicht für jedes Gerät ein eigenes Device.

Konkret:
Im Fall der Aktivitätsüberwachung soll nur das Gerät standorte, hierunter aber die beiden Readings helligkeit und helligkeitssensor unabhängig überwacht werden.
Ähnlich bei der Batterieüberwachung: Hier gibt es nur das Gerät interfhem und Readings für die verschiedenen Batteriestände als Zahl.
Die Beispiele beziehen sich ja alle auf unterschiedliche Devices.

Was wäre denn hier das optimale Vorgehen? Oder kann ich das so nicht mit dem monitoring Modul umsetzen?

Gruß Rainer

Gisbert

Hallo Rainer,

ich nutze das Modul monitoring in der Weise, dass ich bei den zu überwachenden Devices ein userReadings "Zeitstempel" definiert habe, welches sich entsprechend aktualisiert, solange das Device lebt.

Meine Definition für das monitoring-Device lautet deshalb:
defmod mymonitoring monitoring .*:Zeitstempel.*

Die commabdref sagt:
ZitatDefine
define <name> monitoring <add-event> [<remove-event>]
The syntax for <add-event> and <remove-event> is the same as the pattern for notify (device-name or device-name:event).
Demzufolge müsste dann auch eine Suche nach mehreren Suchmustern funktionieren:
.*:(Suchmuster1|Suchmuster2|...)
Wie oben beschrieben, habe ich das für mich anders gelöst.

Viele​ Grüße​ und viel Erfolg
Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

igami

Zitat von: dora71 am 20 August 2020, 18:08:44
Die Beispiele beziehen sich ja alle auf unterschiedliche Devices.
Du kannst dich an dem Beispiel "regelmäßige Wartungsarbeiten (z.B. Räume putzen)" in der commandref orientieren. Da wird auch die variable $name geändert weil es nur ein device in FHEM gibt aber mehrere Einträge im monitoring erscheinen sollen.

Zum besseren Verständnis bitte ein list von deinem device posten.
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

dora71

Hallo igami, danke für die schnelle Rückmeldung.

Hier die (relevanten Teile) von list:

1. Für die Aktivitätsüberwachung:
Internals:
   FUUID      5ec55aa2-f33f-1942-a276-xxxxxxxxxxx
   IODev      myBroker
   NAME       standorte
   NR         804
   STATE      1255 lx, 1024 LDR
   TYPE       MQTT_DEVICE
   READINGS:
     2020-08-21 10:27:26   helligkeit      1024
     2020-08-21 10:27:26   helligkeitssensor 1255


2. Für die Batterieüberwachung:
Internals:
   FUUID      5f119eba-f33f-1942-6a01-xxxxxxxxxxxxxxx
   IODev      myBroker
   NAME       interfhem
   NR         826
   STATE      ???
   TYPE       MQTT_DEVICE
   OLDREADINGS:
   READINGS:
     2020-08-20 22:10:04   samsungtvstate  absent
     2020-08-20 13:15:28   shellyw1        {"event":"SS","event_cnt":1}
     2020-08-20 13:15:29   shellyw1_event  SS
     2020-08-20 13:15:29   shellyw1_event_cnt 1
     2020-08-20 13:15:28   shellyw1batterie 53
     2020-08-20 20:33:26   shellyw5wz      {"event":"L","event_cnt":1}
     2020-08-20 20:33:26   shellyw5wz_event L
     2020-08-20 20:33:26   shellyw5wz_event_cnt 1
     2020-08-20 20:33:26   shellyw5wzbatterie 66
     2020-08-19 11:37:33   sonospresence   disappeared
     2020-08-20 22:10:04   transmission-state incoming publish received


Alle weiteren Readings / Sets beziehen sich auf MQTT und sollten für diese Funktion hier nicht relevant sein.

Nach Deinem Vorschlag mit der commandref sieht meine Definition für den Aktivitätsmonitor jetzt wie folgt aus:
defmod Activity_monitoring_Luxsensor monitoring standorte:helligkeit.*:.*
attr Activity_monitoring_Luxsensor errorFuncAdd {$event =~ m/^(.+):/;;\
$name = $1;;\
return 1;;\
}
attr Activity_monitoring_Luxsensor errorReturn {return unless(@errors);;\
return("Der Sensor \"$errors[0]\" hat sich seit mehr als 12 Stunden nicht mehr gemeldet.") if(int(@errors) == 1);;\
return(join("\n - ", "Die folgenden Sensoren haben sich seit mehr als 12 Stunden nicht mehr gemeldet:", @errors))\
}
attr Activity_monitoring_Luxsensor errorWait 60*60*12
attr Activity_monitoring_Luxsensor room Internals
attr Activity_monitoring_Luxsensor warningFuncAdd {$event =~ m/^(.+):/;;\
$name = $1;;\
return 1;;\
}
attr Activity_monitoring_Luxsensor warningReturn {return unless(@warnings);;\
return("Der Sensor \"$warnings[0]\" hat sich seit mehr als 1 Stunde nicht mehr gemeldet.") if(int(@warnings) == 1);;\
return(join("\n - ", "Die folgenden Sensoren haben sich seit mehr als 1 Stunde nicht mehr gemeldet", @warnings))\
}
attr Activity_monitoring_Luxsensor warningWait 60*60


Würde das so passen?

An der Batteriewarnung arbeite ich noch  :-[

Gruß Rainer

igami

Zitat von: dora71 am 21 August 2020, 10:49:41
Nach Deinem Vorschlag mit der commandref sieht meine Definition für den Aktivitätsmonitor jetzt wie folgt aus:

[...]

Würde das so passen?
Sollte passen.
errorFuncAdd und warningFuncAdd brauchst du nicht, da es hier nur ein physikalischen Gerät im FHEM device gibt.
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

StephanFHEM

Hallo igami,

du hattest folgendes Thema erst mal als erledigt abgehakt. Ich hab das Modul gestern bei mir eingerichtet und hab das Problem jetzt leider auch. Da ich sehr viele Geräte habe wäre die Suche nach dem fast gleichen Namen etwas schwierig. Evnt. kannst du ja noch mal schauen, warum bei $Name nicht auf 100% geprüft wird sondern nur ob DeviceName in Name enthalten ist (so hab ich es von meier81 jedenfalls verstanden).
Evnt. kann man damit auch einen Bug für zukünftige Modul-Nutzer lösen:-)

Zitat von: meier81 am 15 Juni 2019, 07:46:03
Moin moin,

ich wollte nur Bescheid geben das ich mein Problem

2019.06.06 03:52:46 2: monitoring (DeviceMonitor) set "errorWait" while "errorFuncAdd" and "errorFuncRemove" are same

lösen konnte, ich hatte als Raumfühler den ich mit monitoring überwache "Fuehler_Elias" als Definition gehabt und beim ROOMMATE hatte ich die Definition einfach nur "Elias" genannt. Anscheinend ist dem Attribut im monitoring-Device

errorWait  AttrVal($name, "device_timeout", 0)

der Anfang des Device-Namens egal und er bringt deswegen die Meldung. Ist aber kein Problem, habe das ROOMMATE-Device umbenannt in "rr_Elias", jetzt läuft´s prima.

Gruß
Markus

sn0000py

#336
Hallo habe eine Frage zu der Whitelist, wie gebe ich das ein?
ich möchte ein paar Netzwerkgeräte auf aktivität überwachen
attr Activity_monitoring whitelist securityHaustuer:status\
ECL310:Warmwasser


so ist das whitelist definiert habe es auch schon getestet mit Leerzeichen statt dem zeilenumbruch usw.
Irgendwie übernimmt er immer nur den ersten der in der Whitelist steht.

Es sind beides "normale" READINGS also keine internals

das ganze RAW sieht so aus
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*5
attr Activity_monitoring room Status
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
attr Activity_monitoring whitelist comfoconnect:Abluftventilatorvolumen\
ECL310:Warmwasser\
securityHaustuer:status

setstate Activity_monitoring warning add: securityHaustuer
setstate Activity_monitoring 2020-09-18 09:56:53 allCount 1
setstate Activity_monitoring 2020-09-18 09:59:44 errorAdd_ECL310 2020-09-18 10:04:44
setstate Activity_monitoring 2020-09-18 09:55:53 errorAdd_securityHaustuer 2020-09-18 10:00:53
setstate Activity_monitoring 2020-09-18 09:56:53 state warning add: securityHaustuer
setstate Activity_monitoring 2020-09-18 09:56:53 warning securityHaustuer
setstate Activity_monitoring 2020-09-18 09:59:44 warningAdd_ECL310 2020-09-18 10:00:44
setstate Activity_monitoring 2020-09-18 09:56:53 warningCount 1



hat wer eine tipp wie man das korrekt eingibt?

sn0000py

Hmmm irgendwie ist es komisch nach einen Neustart hat es funktioniert, es wurden alle 3 Devices ständig aktualisiert.

Dann habe ich ein weiteres Device in die whitelist gegeben, und nun funktioniert immer nur das erste Device in der whitelist.
Stellte ich die whitelist um das das letzte Device nun vorne steht, dann geht nur dieses.


sn0000py

#338
niemand eine idee?

Kennt jemand ein anderes Modul das ich testen kann?

Hätte es nun mal auch so getestet:
KEin Eintrag in der Whitelist dafür im Def
Zitatdefmod Activity_monitoring monitoring (can_EG_1:alive.*|comfoconnect:Abluftventilatorvolumen.*|securityHaustuer:status.*|ECL310:Warmwasser.*)

wenn ich das gleiche Def bei einem notify verwende dann geht das ohne Probleme.
Zitatdefmod n_test notify (can_EG_1:alive.*|comfoconnect:Abluftventilatorvolumen.*|securityHaustuer:status.*|ECL310:Warmwasser.*) {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}

[edit]Also es ist definitiv so, gerade 3 mal getestet.
Nach einem neustart von FHEM funktioniert die Whitelist, so wie sie soll.
Gehe ich nun auf die Whitelist und übernehme genau das gleiche also keine Änderung, dann funktioniert nur mehr der erste Eintrag in der whitelist.

sn0000py

keiner eine idee?

Hat das Modul irgendwer produktiv in Verwendung?

Gisbert

Zitat von: sn0000py am 23 September 2020, 15:49:25
keiner eine idee?

Hat das Modul irgendwer produktiv in Verwendung?

Ich benutze das Modul erfolgreich seit längerem. Ich kann leider nichts zu deiner Konfiguration sagen, aber ich hänge gerne meine Definition an, vielleicht kannst du etwas davon gebrauchen.

defmod mymonitoring monitoring .*:Zeitstempel.*
attr mymonitoring alias monitor
attr mymonitoring blacklist Wassermelder Radiation Lufdaten
attr mymonitoring comment Zeilenumbruch statt Komma-separierte Liste (userReadings):\
https://forum.fhem.de/index.php/topic,68765.msg964742.html#msg964742\
Durch Suchen mit den Stichworten "split fhem" bin ich auf diesen Beitrag von dir gestoßen, der mich zur Lösung geführt hat:\
https://forum.fhem.de/index.php/topic,58059.msg494877.html#msg494877\
{my $ret = AttrVal(...);; $ret =~ s/<suchen>/<ersetzen>/g;; return $ret}\
Im stateFormat werden Begriffe in "" mit einem Punkt (.) mit Perlausdrücken verknüpft.
attr mymonitoring errorReturn {return unless(@errors);;\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
return("Das Gerät \"$errors[0]\" hat sich seit mehr als 2 Stunden nicht mehr gemeldet.") if(int(@errors) == 1);;\
@errors = sort {lc($a) cmp lc($b)} @errors;;\
return(join("\n - ", "Die folgenden ".@errors." Geräte haben sich seit mehr als 2 Stunden nicht mehr gemeldet:", @errors))\
}
attr mymonitoring errorWait 7200
attr mymonitoring icon security
attr mymonitoring room CUL_HM,Heizung,Rollladen,Weather
attr mymonitoring stateFormat {if (ReadingsVal($name,'warningCount','') > 0 and ReadingsVal($name,'errorCount','') > 0)\
{"<i>Warnung</i>:<br><span style='color:#2e5e87'>".(ReadingsVal($name,'mywarning',''))."</span><br>\
<i>Fehler</i>:<br><span style='color:#FF0000'>".(ReadingsVal($name,'myerror',''))."</span>"} \
elsif (ReadingsVal($name,'warningCount','') > 0)\
{"<i>Warnung</i>:<br><span style='color:#2e5e87'>".(ReadingsVal($name,'mywarning',''))."</span>"} \
elsif (ReadingsVal($name,'errorCount','') > 0)\
{"<i>Fehler</i>:<br><span style='color:#FF0000'>".(ReadingsVal($name,'myerror',''))."</span>"}}
attr mymonitoring userReadings myerror {my $ret = ReadingsVal($name,'error','');; $ret =~ s/,/<br>/g;; return $ret}, \
mywarning {my $ret = ReadingsVal($name,'warning','');; $ret =~ s/,/<br>/g;; return $ret}
attr mymonitoring warningReturn {return unless(@warnings);;\
$_ = AttrVal($_, "alias", $_) foreach(@warnings);;\
return("Das Gerät \"$warnings[0]\" hat sich seit mehr als 1 Stunde nicht mehr gemeldet.") if(int(@warnings) == 1);;\
@warnings = sort {lc($a) cmp lc($b)} @warnings;;\
return(join("\n - ", "Die folgenden ".@warnings." Geräte haben sich seit mehr als 1 Stunde nicht mehr gemeldet:", @warnings))\
}
attr mymonitoring warningWait 3600


Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Wolle02

Zitatdefmod Activity_monitoring monitoring *.:*.
Ich kann mich irren aber müsste es nicht .*:.* heißen?

Des weiteren steht in der CommandRef:
Zitatwhitelist {<perl code>}
Durch Leerzeichen getrennte Liste von devspecs die erlaubt sind werden.
Wenn das Attribut gesetzt wird werden alle Geräte die nicht durch die devspecs definiert sind von beiden Listen gelöscht.

Also Leerzeichengetrennt; keine Zeilenumbrüche.
Vielleicht auch mal mit reinen Devspecs ohne Readings probieren.

Gruß
Wolle

sn0000py

ok danke mal für die Rückmeldungen
das mit dem *.:*. war ein Tippfehler, der nur kurz drinnen war richtig ist natürlich .*:.*

das ganz komische ist das er immer nur den ersten Eintrag in der Whitelist verwendet und da ist es egal ob ich mit Leerzeichen oder mit Zeilenumbrüchen eingebe.
Nach einem Neustart vom FHEM funktioniert es immer kurz, bis ich dann wieder mal was ändere, dann geht nur mehr der erste

Wolle02

Also ich verwende nur blacklist. Sieht bei mir so aus:
.*_RK R_.* global Rollladen_alle Alarm_.* Eingang_.*
Damit funktioniert es bei mir dauerhaft tadellos.

Vielleicht irgendein Bug im Attribut whitelist?

sn0000py

ja vermute ich auch, hab mir den code angeschaut, nur leider sehe ich nur Bahnhof :O