Modul 98_monitoring zur Überwachung von Geräten

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

Vorheriges Thema - Nächstes Thema

igami

So pauschal fällt mir keine Lösung mit monitoring dafür ein. Mit dem Modul Sequence lässt sich das jedoch umsetzen.
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

Byte09

geht auch mit einem MSwitch - das kann es erkennen , da bekommst du es mit einem Device hin und brauchst nicht nochzusätzlich einen Eventhandler.

gruss Byte09

ulli

Hallo zusammen,
ich möchte überwachen ob meine batteriebetriebenen mqtt geräte alle aktiv und erreichbar sind.
Dazu habe ich auf Basis der modulbeispiele ein activity monitoring mit folgender raw Definition eingerichtet
defmod mon_Activity monitoring .*:.*
attr mon_Activity errorReturn {\
return unless(@errors);;\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
return("Das Gerät \"$errors[0]\" hat sich seit mehr als 6 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 6 Stunden nicht mehr gemeldet:", @errors));;\
}
attr mon_Activity errorWait 60*60*6
attr mon_Activity group Monitoring
attr mon_Activity room Conditions
attr mon_Activity whitelist i:TYPE=MQTT2_DEVICE

setstate mon_Activity clear all
setstate mon_Activity 2020-03-23 07:19:50 allCount 4
setstate mon_Activity 2020-03-23 08:01:37 error
setstate mon_Activity 2020-03-23 18:14:44 errorAdd_BU_Fenster 2020-03-24 00:14:44
setstate mon_Activity 2020-03-23 18:19:50 errorAdd_BZ_Climate 2020-03-24 00:19:50
setstate mon_Activity 2020-03-23 18:14:00 errorAdd_BZ_Fenster 2020-03-24 00:14:00
setstate mon_Activity 2020-03-23 18:37:36 errorAdd_EG_GangLicht_Motion 2020-03-24 00:37:36
setstate mon_Activity 2020-03-23 18:36:08 errorAdd_GH_Lichterkette 2020-03-24 00:36:08
setstate mon_Activity 2020-03-23 18:31:53 errorAdd_GaszaehlerKontakt 2020-03-24 00:31:53
setstate mon_Activity 2020-03-23 18:21:41 errorAdd_HZ_Climate 2020-03-24 00:21:41
setstate mon_Activity 2020-03-23 18:35:22 errorAdd_KG_GangLicht_Motion 2020-03-24 00:35:22
setstate mon_Activity 2020-03-23 18:26:03 errorAdd_KL_Climate 2020-03-24 00:26:03
setstate mon_Activity 2020-03-23 18:35:31 errorAdd_KL_Fenster 2020-03-24 00:35:31
setstate mon_Activity 2020-03-23 18:24:18 errorAdd_KZ_Climate 2020-03-24 00:24:18
setstate mon_Activity 2020-03-23 18:19:44 errorAdd_OG_GangLicht 2020-03-24 00:19:44
setstate mon_Activity 2020-03-23 18:19:44 errorAdd_OG_GangLicht_Motion 2020-03-24 00:19:44
setstate mon_Activity 2020-03-23 18:17:29 errorAdd_SZ_Climate 2020-03-24 00:17:29
setstate mon_Activity 2020-03-23 18:11:12 errorAdd_SZ_Fenster 2020-03-24 00:11:12
setstate mon_Activity 2020-03-23 18:20:08 errorAdd_SZ_SchrankLicht 2020-03-24 00:20:08
setstate mon_Activity 2020-03-23 18:20:08 errorAdd_SZ_SchrankLicht_Motion 2020-03-24 00:20:08
setstate mon_Activity 2020-03-23 18:35:15 errorAdd_WK_BodenLicht 2020-03-24 00:35:15
setstate mon_Activity 2020-03-23 18:37:53 errorAdd_WK_Climate 2020-03-24 00:37:53
setstate mon_Activity 2020-03-23 18:28:12 errorAdd_WK_Cube 2020-03-24 00:28:12
setstate mon_Activity 2020-03-23 17:52:28 errorAdd_WK_Fenster 2020-03-23 23:52:28
setstate mon_Activity 2020-03-23 18:21:30 errorAdd_WZ_Climate 2020-03-24 00:21:30
setstate mon_Activity 2020-03-23 08:01:37 errorCount 0
setstate mon_Activity 2020-03-23 08:01:37 state clear all
setstate mon_Activity 2020-03-23 08:01:37 warning
setstate mon_Activity 2020-03-23 08:01:37 warningCount 0


Das Problem ist das auch Geräte überwacht werden die nicht dem type, wie in dem whilelist Attribute definiert, entsprechen.
Nämlich shelly devices. Ich habe dann versucht explizit über die Blacklist nochmal die shelly raus zu bekommen, aber das zeigt auch keine Wirkung.

Hier das shelly define als Beispiel
defmod SZ_SchrankLicht Shelly 192.168.188.102
attr SZ_SchrankLicht userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr SZ_SchrankLicht group Beleuchtung
attr SZ_SchrankLicht icon scene_dressing_room
attr SZ_SchrankLicht model shelly1
attr SZ_SchrankLicht room Schlafzimmer

setstate SZ_SchrankLicht off
setstate SZ_SchrankLicht 2019-01-15 18:59:55 cloud disabled
setstate SZ_SchrankLicht 2020-03-21 11:04:28 firmware v1.6.1(update needed to v1.6.2)
setstate SZ_SchrankLicht 2020-03-22 22:12:32 network <html>connected to <a href="http://192.168.188.102">192.168.188.102</a></html>
setstate SZ_SchrankLicht 2020-03-23 18:20:08 relay off
setstate SZ_SchrankLicht 2020-03-23 18:20:08 state off



Weiß wer was ich falsch gemacht habe?



thorte

Hallo igami,

kurze Anmerkung zum Reading "allCount": Kann es sein, dass dieses bei einem "set clear " nicht aktualisiert wird. "set clear all" funktioniert, "errorCount" und "warningCount" werden entsprechend auf "0" gesetzt, "allCount" bleibt auf dem alten Wert. Erst wenn wieder eines der Readings "errorCount" oder "warningCount" sich ändert, wird auch "allCount" wieder korrekt gesetzt.

Nicht tragisch, und leider zu wenig in Perl bewandert, um eine Lösung vorzuschlagen. Vielleicht aber beim nächsten Update einen Blick wert.

Ansonsten: Super Modul, habe es für verschiedene Aufgaben schätzen gelernt.

Gruß Thorsten

ToKa

Hallo zusammen,

beschäftige mich auch gerade mal wieder mit dem Montoring der Batterien meiner Ventile (z-wave). Die liefern leider sehr spät erst ein "low". Es gibt noch die beiden Werte "battery" z.B. 10 % und batteryPercent z.B. 10.

Wie müsste ich denn die Definition machen, dass bei 10 (10 %) Warning und bei 5 (5 %) Error ausgelöst wird? Geht das überhaupt?

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

ulli

Zitat von: ToKa am 26 März 2020, 19:31:29
Hallo zusammen,

beschäftige mich auch gerade mal wieder mit dem Montoring der Batterien meiner Ventile (z-wave). Die liefern leider sehr spät erst ein "low". Es gibt noch die beiden Werte "battery" z.B. 10 % und batteryPercent z.B. 10.

Wie müsste ich denn die Definition machen, dass bei 10 (10 %) Warning und bei 5 (5 %) Error ausgelöst wird? Geht das überhaupt?

Beste Grüße
Torsten

Ich habe es wie folgt gelöst

defmod mon_BatterieLow monitoring .*:battery:.*
attr mon_BatterieLow errorFuncAdd {\
return 1 if(ReadingsVal($name, "battery", "high") eq "low" || ReadingsNum($name, "battery", 100) <= 20);;\
return;;\
}
attr mon_BatterieLow errorFuncRemove {\
return 1 if(ReadingsVal($name, "battery", "high") ne "low" && ReadingsNum($name, "battery", 100) > 20);;\
return;;\
}
attr mon_BatterieLow errorReturn {\
return unless(@errors);;\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
return("Bei dem Gerät \"$errors[0]\" muss die Batterie gewechselt werden.") if(int(@errors) == 1);;\
@errors = sort {lc($a) cmp lc($b)} @errors;;\
return(join("\n - ", "Die folgenden ".@errors." Geräten muss die Batterie gewechselt werden:", @errors));;\
}
attr mon_BatterieLow errorWait 60*60*6

thorte

Hallo igami,

ich habe noch eine weitere Frage zu monitoring:

Ich versuche, mittels "whitelist  model=HM-CC-RT-DN:FILTER=lastMsg=..*" alle HM-Ventiltriebe zu überwachen. Ein "list model=HM-CC-RT-DN:FILTER=lastMsg=..*" liefert auch genau die Geräte zurück, die ich suche:


HZ.Bad.Heizungsthermostat
HZ.K.Heizungsthermostat
HZ.KiJM.Heizungsthermostat
HZ.KiL.Heizungsthermostat
HZ.KiS.Heizungsthermostat
HZ.SZ.Heizungsthermostat


In den "waringAdd/errorAdd"-Readings tauchen auch nur genau diese Geräte auf. Allerdings hat mein Monitoring 29 Fehler:
ActionDetector,HMLAN1,HZ.WZ.Ventiltrieb1,HZ.WZ.Ventiltrieb2,HZ.WZ.Wandthermostat,HZ.WZ.Wandthermostat_Weather,L.KiL.LED_Bett_Device,S.Bad.Fenster,S.K.Fenster_rechts,S.KiJM.Fenster_rechts,S.KiL.Fenster_rechts,S.KiS.Fenster_rechts,S.SZ.Fenster_links,S_virt.Bad,S_virt.Bad.Temp,S_virt.K,S_virt.K.Temp,S_virt.KiJM,S_virt.KiJM.Temp,S_virt.KiL,S_virt.KiL.Temp,S_virt.KiS,S_virt.KiS.Temp,S_virt.SZ,S_virt.SZ.Temp,dblog,dblog_hz,gassistant,vccu

Was mache ich falsch?

Das komplette list des monitoring:


Internals:
   DEF        .*
   FUUID      5e6defca-f33f-4189-e987-f6c538a3144e3e01
   NAME       monitoring.ActivityHM
   NR         301
   NTFY_ORDER 50-monitoring.ActivityHM
   STATE      0 warnings - 29 errors
   TYPE       monitoring
   Helper:
     DBLOG:
       allCount:
         dblog:
           TIME       1586438332.65689
           VALUE      29
       error:
         dblog:
           TIME       1586438332.65689
           VALUE      ActionDetector,HMLAN1,HZ.WZ.Ventiltrieb1,HZ.WZ.Ventiltrieb2,HZ.WZ.Wandthermostat,HZ.WZ.Wandthermostat_Weather,L.KiL.LED_Bett_Device,S.Bad.Fenster,S.K.Fenster_rechts,S.KiJM.Fenster_rechts,S.KiL.Fenster_rechts,S.KiS.Fenster_rechts,S.SZ.Fenster_links,S_virt.Bad,S_virt.Bad.Temp,S_virt.K,S_virt.K.Temp,S_virt.KiJM,S_virt.KiJM.Temp,S_virt.KiL,S_virt.KiL.Temp,S_virt.KiS,S_virt.KiS.Temp,S_virt.SZ,S_virt.SZ.Temp,dblog,dblog_hz,gassistant,vccu
       errorCount:
         dblog:
           TIME       1586438332.65689
           VALUE      29
       state:
         dblog:
           TIME       1586438332.65689
           VALUE      error add
       warning:
         dblog:
           TIME       1586438332.63563
           VALUE     
       warningCount:
         dblog:
           TIME       1586438332.63563
           VALUE      0
   READINGS:
     2020-04-09 15:18:52   allCount        29
     2020-04-09 15:18:52   error           ActionDetector,HMLAN1,HZ.WZ.Ventiltrieb1,HZ.WZ.Ventiltrieb2,HZ.WZ.Wandthermostat,HZ.WZ.Wandthermostat_Weather,L.KiL.LED_Bett_Device,S.Bad.Fenster,S.K.Fenster_rechts,S.KiJM.Fenster_rechts,S.KiL.Fenster_rechts,S.KiS.Fenster_rechts,S.SZ.Fenster_links,S_virt.Bad,S_virt.Bad.Temp,S_virt.K,S_virt.K.Temp,S_virt.KiJM,S_virt.KiJM.Temp,S_virt.KiL,S_virt.KiL.Temp,S_virt.KiS,S_virt.KiS.Temp,S_virt.SZ,S_virt.SZ.Temp,dblog,dblog_hz,gassistant,vccu
     2020-04-10 16:12:52   errorAdd_HZ.Bad.Heizungsthermostat 2020-04-10 18:12:52
     2020-04-10 16:11:40   errorAdd_HZ.K.Heizungsthermostat 2020-04-10 18:11:40
     2020-04-10 16:11:25   errorAdd_HZ.KiJM.Heizungsthermostat 2020-04-10 18:11:25
     2020-04-10 16:11:08   errorAdd_HZ.KiL.Heizungsthermostat 2020-04-10 18:11:08
     2020-04-10 16:11:55   errorAdd_HZ.KiS.Heizungsthermostat 2020-04-10 18:11:55
     2020-04-10 16:12:02   errorAdd_HZ.SZ.Heizungsthermostat 2020-04-10 18:12:02
     2020-04-09 15:18:52   errorCount      29
     2020-04-09 15:18:52   state           error add: HZ.WZ.Wandthermostat_Weather
     2020-04-09 15:18:52   warning         
     2020-04-10 16:12:52   warningAdd_HZ.Bad.Heizungsthermostat 2020-04-10 17:12:52
     2020-04-10 16:11:40   warningAdd_HZ.K.Heizungsthermostat 2020-04-10 17:11:40
     2020-04-10 16:11:25   warningAdd_HZ.KiJM.Heizungsthermostat 2020-04-10 17:11:25
     2020-04-10 16:11:08   warningAdd_HZ.KiL.Heizungsthermostat 2020-04-10 17:11:08
     2020-04-10 16:11:55   warningAdd_HZ.KiS.Heizungsthermostat 2020-04-10 17:11:55
     2020-04-10 16:12:02   warningAdd_HZ.SZ.Heizungsthermostat 2020-04-10 17:12:02
     2020-04-09 15:18:52   warningCount    0
Attributes:
   errorReturn {return unless(@errors);
  $_ = AttrVal($_, "alias", $_) foreach(@errors);
  return("Das folgende Gerät hat sich seit längerem nicht mehr gemeldet (Error):\\n - $errors[0]") if(int(@errors) == 1);
  @errors = sort {lc($a) cmp lc($b)} @errors;
  return(join("\\n - ", "Die folgenden ".@errors." Geräten haben sich seit längerem nicht mehr gemeldet (Error):", @errors));
}
   errorWait  2*60*60
   room       System->Monitoring
   stateFormat warningCount warnings - errorCount errors
   warningReturn {return unless(@warnings);;
  $_ = AttrVal($_, "alias", $_) foreach(@warnings);
  return("Das folgende Gerät ist derzeit on hold (Warnung):\\n - $warnings[0]") if(int(@warnings) == 1);
  @warnings = sort {lc($a) cmp lc($b)} @warnings;
  return(join("\\n - ", "Die folgenden ".@warnings." Geräte sind derzeit on Hold (Warnung):", @warnings));
}
   warningWait 1*60*60
   whitelist  model=HM-CC-RT-DN:FILTER=lastMsg=..*


Gruß Thorsten

kadettilac89

Hi


whitelist {<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.


Meine whitelist beinhaltet



gassistant speedtest sysmon sysmon_dockerup twilight


Obwohl global nicht enthalten ist, erhalte ich Warnungen, und Error.



state
warning add: global
2020-05-12 01:34:29


Ich beobachte das schon eine Weile. Um irgend welche Timer im Hintergrund auszuschließen haben ich das Device auch schon gelöscht und per RAW-Import wieder angelegt. List s. u.


Irgend eine Idee? Danke!


Internals:
   CFGFN     
   DEF        .*:.*
   FUUID      5eb93844-f33f-eb0d-4a59-3cb0d92efc59c707
   NAME       mn_ActivityMonitoring24h
   NR         454819
   NTFY_ORDER 50-mn_ActivityMonitoring24h
   STATE      Warning: global
Error:
   TYPE       monitoring
   READINGS:
     2020-05-12 01:34:29   allCount        1
     2020-05-11 13:34:29   errorAdd_global 2020-05-12 13:34:29
     2020-05-12 11:55:25   errorAdd_speedtest 2020-05-13 11:55:25
     2020-05-12 11:38:45   errorAdd_twilight 2020-05-13 11:38:45
     2020-05-12 01:34:29   state           warning add: global
     2020-05-12 01:34:29   warning         global
     2020-05-12 11:55:25   warningAdd_speedtest 2020-05-12 23:55:25
     2020-05-12 11:38:45   warningAdd_twilight 2020-05-12 23:38:45
     2020-05-12 01:34:29   warningCount    1
Attributes:
   DbLogExclude .*
   DbLogInclude none
   alias      mn_ActivityMonitoring24h
   errorWait  60*60*24
   event-on-change-reading state
   group      Monitoring
   room       Server
   stateFormat {"Warning: " . ReadingsVal($name,"warning","") . "\nError: " . ReadingsVal($name,"error","")  }
   warningWait 60*60*12
   whitelist  gassistant speedtest sysmon sysmon_dockerup twilight

igami

Zitat von: kadettilac89 am 12 Mai 2020, 12:08:25
Irgend eine Idee? Danke!
Auf die Schnelle nicht. Das Modul soll demnächst auch noch ein refactoring bekommen, da es aus meiner Anfangszeit stammt als ich noch weniger Ahnung hatte.
Nur momentan kann ich mir leider nicht die Zeit dafür nehmen.
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

kadettilac89

Zitat von: igami am 12 Mai 2020, 16:12:31
Auf die Schnelle nicht. Das Modul soll demnächst auch noch ein refactoring bekommen, da es aus meiner Anfangszeit stammt als ich noch weniger Ahnung hatte.
Nur momentan kann ich mir leider nicht die Zeit dafür nehmen.
OK, trotzdem danke ... es gibt ein paar warning/error-remove functions ... muss mir die mal ansehen, damit kicke ich dann global raus und schau mal welche noch daher kommen ...

igami

Ich habe die Vermutung, dass es daran liegt, dass global ein sehr spezielles device ist. In der Raw definition davon steht zum Beispiel kein "define/defmod".

Teste bitte ob es hilft global im blacklist-Attribut einzutragen.
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

kadettilac89

Zitat von: igami am 13 Mai 2020, 06:18:58
Ich habe die Vermutung, dass es daran liegt, dass global ein sehr spezielles device ist. In der Raw definition davon steht zum Beispiel kein "define/defmod".

Teste bitte ob es hilft global im blacklist-Attribut einzutragen.
Ich habe es mal gesetzt, bis jetzt ist global noch nicht aufgenommen. Sieht bis jetzt gut aus. Danke

Altrec

Ich habe einen kleinen Fehler in der commandref gefunden.

<code>
define &lt;name&gt; mointoring &lt;add-event&gt; [&lt;remove-event&gt;]
</code>

Zeilen 1117-1119

Das soll bestimmt "monitoring" heißen und nicht "mointoring"  :P

igami

Zitat von: Altrec am 09 Juni 2020, 15:53:16
Ich habe einen kleinen Fehler in der commandref gefunden.
Danke, habs korrigiert.
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