Modul 98_monitoring zur Überwachung von Geräten

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

Vorheriges Thema - Nächstes Thema

igami

Zitat von: l2r am 09 Mai 2017, 13:35:13
Wenn ich das richtig verstehe werden dann aber für den Fall dass ich beispielsweise 2 Beamer damit überwache  und beide im Error-Reading stehen auch beide wieder raus geworfen, oder? Sprich eine Zuordnung vom Auslösenden Device und dem Error-Device ist nicht möglich, oder? (Ist jetzt auch keine Anforderung von mir, ist mir nur gerade in den Sinn gekommen)
Man könnte sich überlegen ob man die dummys passend benennt oder eine reinigung über "trigger <hourcounter> service done" oder so bekanntgibt

Zitat von: l2r am 09 Mai 2017, 13:35:13
Wobei es rein logisch ja auch sinn macht, wenn beide im Error sind auch beide zu reinigen?!
Ne, soll ja Betriebsstunden abhängig sein
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

l2r

Zitat von: igami am 09 Mai 2017, 13:38:44
Ne, soll ja Betriebsstunden abhängig sein

Richtig. Wenn sie im Error stehen, dann sollten sie ja auch die nötigen Betriebsstunden zur Reinigung auf dem Buckel haben ;-)

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

igami

Zitat von: l2r am 09 Mai 2017, 13:42:48
Richtig. Wenn sie im Error stehen, dann sollten sie ja auch die nötigen Betriebsstunden zur Reinigung auf dem Buckel haben ;-)
Aber das bedeutet ja nicht, dass man das auch tut :D
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

l2r

wir verstehen uns ;-)

so war nämlich auch mein Gedankengang und daher kam ich auf die Zuordnung  8)

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

gloob

#64
Ich wollte jetzt einen Aktivity Monitor einbinden allerdings erzeugt er für viele Geräte ein Warning und Error obwohl ein Update in den Geräten statt findet:
Internals:
   DEF        .*:.* .*:.*
   NAME       Activity_monitoring
   NR         580
   NTFY_ORDER 50-Activity_monitoring
   STATE      active
   TYPE       monitoring
   Readings:
     2017-05-09 13:42:18   error
     2017-05-09 13:44:48   errorAdd_ActionDetector 2017-05-10 13:44:48
     2017-05-09 13:45:32   errorAdd_AgroWeather 2017-05-10 13:45:32
     2017-05-09 13:49:59   errorAdd_HM_BA_Heizung 2017-05-10 13:49:59
     2017-05-09 13:49:59   errorAdd_HM_BA_Heizung_Clima 2017-05-10 13:49:59
     2017-05-09 13:50:31   errorAdd_HM_KU_Heizung 2017-05-10 13:50:31
     2017-05-09 13:50:31   errorAdd_HM_KU_Heizung_Clima 2017-05-10 13:50:31
     2017-05-09 13:49:28   errorAdd_HM_KZ_Heizung 2017-05-10 13:49:28
     2017-05-09 13:49:28   errorAdd_HM_KZ_Heizung_Clima 2017-05-10 13:49:28
     2017-05-09 13:50:15   errorAdd_HM_WZ_Heizung 2017-05-10 13:50:15
     2017-05-09 13:50:15   errorAdd_HM_WZ_Heizung_Clima 2017-05-10 13:50:15
     2017-05-09 13:48:50   errorAdd_LaCrosse_BA 2017-05-10 13:48:50
     2017-05-09 13:48:50   errorAdd_LaCrosse_BK 2017-05-10 13:48:50
     2017-05-09 13:48:51   errorAdd_LaCrosse_KU 2017-05-10 13:48:51
     2017-05-09 13:48:50   errorAdd_LaCrosse_KZ 2017-05-10 13:48:50
     2017-05-09 13:48:52   errorAdd_LaCrosse_SZ 2017-05-10 13:48:52
     2017-05-09 13:48:53   errorAdd_LaCrosse_WZ 2017-05-10 13:48:53
     2017-05-09 13:50:01   errorAdd_Presence_TV 2017-05-10 13:50:01
     2017-05-09 13:44:52   errorAdd_Presence_iMac 2017-05-10 13:44:52
     2017-05-09 13:49:09   errorAdd_Sonos  2017-05-10 13:49:09
     2017-05-09 13:46:08   errorAdd_Sonos_Balkon 2017-05-10 13:46:08
     2017-05-09 13:47:29   errorAdd_Sonos_Kueche 2017-05-10 13:47:29
     2017-05-09 13:49:11   errorAdd_Sonos_Wohnzimmer 2017-05-10 13:49:11
     2017-05-09 13:44:50   errorAdd_Switch_Licht 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_Tanken_HEM 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_Tanken_HEM_Bensheim 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_Tanken_Rewe 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_Tanken_Shell 2017-05-10 13:44:50
     2017-05-09 13:49:09   errorAdd_WEB    2017-05-10 13:49:09
     2017-05-09 13:44:48   errorAdd_WifiLight_1 2017-05-10 13:44:48
     2017-05-09 13:44:49   errorAdd_abfallkalender 2017-05-10 13:44:49
     2017-05-09 13:49:09   errorAdd_global 2017-05-10 13:49:09
     2017-05-09 13:45:06   errorAdd_kamera_keno 2017-05-10 13:45:06
     2017-05-09 13:50:13   errorAdd_miniCUL433 2017-05-10 13:50:13
     2017-05-09 13:50:13   errorAdd_miniCUL433_reconnect 2017-05-10 13:50:13
     2017-05-09 13:49:48   errorAdd_mqtt   2017-05-10 13:49:48
     2017-05-09 13:44:52   errorAdd_myHmUARTLGW 2017-05-10 13:44:52
     2017-05-09 13:50:31   errorAdd_myLaCrosseGateway 2017-05-10 13:50:31
     2017-05-09 13:44:50   errorAdd_netatmo_2 2017-05-10 13:44:50
     2017-05-09 13:46:19   errorAdd_netatmo_gateway 2017-05-10 13:46:19
     2017-05-09 13:50:01   errorAdd_rgr_Home 2017-05-10 13:50:01
     2017-05-09 13:50:01   errorAdd_rr_Stefan 2017-05-10 13:50:01
     2017-05-09 13:50:01   errorAdd_rr_Tina 2017-05-10 13:50:01
     2017-05-09 13:44:50   errorAdd_sonoff0 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff1 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff2 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff3 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff4 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff5 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff6 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff7 2017-05-10 13:44:50
     2017-05-09 13:44:50   errorAdd_sonoff8 2017-05-10 13:44:50
     2017-05-09 13:48:41   errorAdd_sysmon 2017-05-10 13:48:41
     2017-05-09 13:44:49   errorAdd_update_check 2017-05-10 13:44:49
     2017-05-09 13:44:52   errorAdd_vccu   2017-05-10 13:44:52
     2017-05-09 13:48:39   state           active
     2017-05-09 13:42:18   warning
     2017-05-09 13:44:48   warningAdd_ActionDetector 2017-05-10 01:44:48
     2017-05-09 13:45:32   warningAdd_AgroWeather 2017-05-10 01:45:32
     2017-05-09 13:49:59   warningAdd_HM_BA_Heizung 2017-05-10 01:49:59
     2017-05-09 13:49:59   warningAdd_HM_BA_Heizung_Clima 2017-05-10 01:49:59
     2017-05-09 13:50:31   warningAdd_HM_KU_Heizung 2017-05-10 01:50:31
     2017-05-09 13:50:31   warningAdd_HM_KU_Heizung_Clima 2017-05-10 01:50:31
     2017-05-09 13:49:28   warningAdd_HM_KZ_Heizung 2017-05-10 01:49:28
     2017-05-09 13:49:28   warningAdd_HM_KZ_Heizung_Clima 2017-05-10 01:49:28
     2017-05-09 13:50:15   warningAdd_HM_WZ_Heizung 2017-05-10 01:50:15
     2017-05-09 13:50:15   warningAdd_HM_WZ_Heizung_Clima 2017-05-10 01:50:15
     2017-05-09 13:48:50   warningAdd_LaCrosse_BA 2017-05-10 01:48:50
     2017-05-09 13:48:50   warningAdd_LaCrosse_BK 2017-05-10 01:48:50
     2017-05-09 13:48:51   warningAdd_LaCrosse_KU 2017-05-10 01:48:51
     2017-05-09 13:48:50   warningAdd_LaCrosse_KZ 2017-05-10 01:48:50
     2017-05-09 13:48:52   warningAdd_LaCrosse_SZ 2017-05-10 01:48:52
     2017-05-09 13:48:53   warningAdd_LaCrosse_WZ 2017-05-10 01:48:53
     2017-05-09 13:50:01   warningAdd_Presence_TV 2017-05-10 01:50:01
     2017-05-09 13:44:52   warningAdd_Presence_iMac 2017-05-10 01:44:52
     2017-05-09 13:49:09   warningAdd_Sonos 2017-05-10 01:49:09
     2017-05-09 13:46:08   warningAdd_Sonos_Balkon 2017-05-10 01:46:08
     2017-05-09 13:47:29   warningAdd_Sonos_Kueche 2017-05-10 01:47:29
     2017-05-09 13:49:11   warningAdd_Sonos_Wohnzimmer 2017-05-10 01:49:11
     2017-05-09 13:44:50   warningAdd_Switch_Licht 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_Tanken_HEM 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_Tanken_HEM_Bensheim 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_Tanken_Rewe 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_Tanken_Shell 2017-05-10 01:44:50
     2017-05-09 13:49:09   warningAdd_WEB  2017-05-10 01:49:09
     2017-05-09 13:44:48   warningAdd_WifiLight_1 2017-05-10 01:44:48
     2017-05-09 13:44:49   warningAdd_abfallkalender 2017-05-10 01:44:49
     2017-05-09 13:49:09   warningAdd_global 2017-05-10 01:49:09
     2017-05-09 13:45:06   warningAdd_kamera_keno 2017-05-10 01:45:06
     2017-05-09 13:50:13   warningAdd_miniCUL433 2017-05-10 01:50:13
     2017-05-09 13:50:13   warningAdd_miniCUL433_reconnect 2017-05-10 01:50:13
     2017-05-09 13:49:48   warningAdd_mqtt 2017-05-10 01:49:48
     2017-05-09 13:44:52   warningAdd_myHmUARTLGW 2017-05-10 01:44:52
     2017-05-09 13:50:31   warningAdd_myLaCrosseGateway 2017-05-10 01:50:31
     2017-05-09 13:44:50   warningAdd_netatmo_2 2017-05-10 01:44:50
     2017-05-09 13:46:19   warningAdd_netatmo_gateway 2017-05-10 01:46:19
     2017-05-09 13:50:01   warningAdd_rgr_Home 2017-05-10 01:50:01
     2017-05-09 13:50:01   warningAdd_rr_Stefan 2017-05-10 01:50:01
     2017-05-09 13:50:01   warningAdd_rr_Tina 2017-05-10 01:50:01
     2017-05-09 13:44:50   warningAdd_sonoff0 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff1 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff2 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff3 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff4 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff5 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff6 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff7 2017-05-10 01:44:50
     2017-05-09 13:44:50   warningAdd_sonoff8 2017-05-10 01:44:50
     2017-05-09 13:48:41   warningAdd_sysmon 2017-05-10 01:48:41
     2017-05-09 13:44:49   warningAdd_update_check 2017-05-10 01:44:49
     2017-05-09 13:44:52   warningAdd_vccu 2017-05-10 01:44:52
Attributes:
   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))
}
   errorWait  60*60*24
   room       System
   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))
}
   warningWait 60*60*12



Eine Idee, wo der Fehler liegt?

Die Geräte erzeugen auch Events bzw werden Readings geupdatet. Ein Schalten einer Lampe zum Beispiel hilft nicht, damit es aus Error oder Warning verschwindet.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

igami

Zitat von: gloob am 09 Mai 2017, 13:52:19
Ich wollte jetzt einen Aktivity Monitor einbinden allerdings erzeugt er für viele Geräte ein Warning und Error obwohl ein Update in den Geräten statt findet:
Die readings geben nur an, wann das Gerät auf die warning/error Liste gesetzt wird. Die Listen selbst sind jedoch leer.
Allerdings wollte ich das Beispiel mal auf DeviceMonitor umabuen. Siehe:
Zitat von: igami am 25 April 2017, 21:05:10
Gucken wir uns dazu mal das Beispiel aus der Commandref an;
Zitat

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 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

Geräte werden erst überwacht, wenn sie mindestens ein Event ausgelöst haben. Sollte das Gerät in 12 Stunden kein weiterer Event auslösen, wird es auf die warning-Liste gesetzt. Sollte das Gerät in 24 Stunden kein weiteres Event auslösen, wird es von der warning- auf die error-Liste verschoben.
Dabei ändern wir das errorWait Attribut auf {ReadingsVal($name, "device_timeout", 0)} und ergänzen das monitoring um das Attribut whitelist device_timeout=.+
Um den das Reading Activity auf dead or alive zu setzen wird noch ein notify benötigt.

Zusammengefasst haben wir dann folgendens (ungetestet):

defmod DeviceMonitor monitoring .*:.*
attr DeviceMonitor errorReturn {return unless(@errors);;\
\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
\
return("Das Gerät \"$errors[0]\" scheint nicht mehr aktiv zu sein.")\
   if(int(@errors) == 1);;\
\
@errors = sort {lc($a) cmp lc($b)} @errors;;\
\
return(join("\n - ", "Die folgenden ".@errors." Geräten scheinen nicht mehr aktiv zu sein:", @errors))\\
}
attr DeviceMonitor errorWait {AttrVal($name, "device_timeout", 0)}
attr DeviceMonitor whitelist device_timeout=.+

defmod DeviceMonitorSetActivity notify DeviceMonitor:error.(add|remove):..+ {\
  $EVENT =~ m/error (add|remove): (.+)/;;\
  \
  readingsSingleUpdate(\
    $defs{$2}, "Activity", $1 eq "add" ? "dead" : "alive", 0\
  );;\
  \
  return;;\
}

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: l2r am 09 Mai 2017, 13:51:16
wir verstehen uns ;-)

so war nämlich auch mein Gedankengang und daher kam ich auf die Zuordnung  8)

Gruß Michael
Also was wäre nun am sinnvollsten?
Pro Beamer 1 Hourcounter (hc_Beamer) ist klar. Dann noch je Beamer ein reset dummy oder dash button (hc_Beamer_done) und ein notify welches so aussehen könne:

define ntfy_Beamer_done hc_Beamer.*_done:.* {$NAME =~ m/(.+)_done/; fhem("trigger $1 done");}

das monitoring würde dann so aussehen:

define mon_BeamerFilter monitoring hc_Beamer.*:pulseTimeOverall hc_Beamer.*:done


Müsste man mal testen :D
Ich hatte das damals nur mit einem Dummy simuliert und der hieß ja immer gleich ::)
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

l2r

macht für mich nach dem ersten drüber schauen sinn... Werde ich bei Gelegenheit mal testen.

Ich habe aber noch eine andere Frage.

Ist es richtig/gewollt, dass die Geräte aus dem Warning-Reading nicht verschwinden wenn sie in den Error-Status wechseln?

Wenn man mit get default im doif sich die Liste aufrufen möchte, dann bekommt man die Meldung für warning und error... Klar kann man das umstellen auf get error. Aber man möchte das ja auch für die Geräte haben die nur warning haben.

hier das list:

Internals:
   CFGFN
   DEF        .*:(open|tilted) .*:closed
   NAME       mon_Fenster
   NR         46077
   NTFY_ORDER 50-mon_Fenster
   STATE      error remove: di_Michael_SZ_Lueften
   TYPE       monitoring
   Readings:
     2017-05-10 12:21:54   error           SZ_M_Fenster,sen_RaumFenster1,sen_RaumFenster2
     2017-05-10 12:21:54   state           error remove: di_Michael_SZ_Lueften
     2017-05-10 08:52:49   warning         SZ_M_Fenster,sen_RaumFenster1,sen_RaumFenster2
   Powermap:
   Readingsdesc:
     Pm_consumption:
       rtype      w
     Pm_energy:
       rtype      whr
Attributes:
   errorReturn {return unless(@errors);
$_ = AttrVal($_, "alias", $_) foreach(@errors);
return("Das Fenster \"$errors[0]\" ist schon länger geöffnet.") if(int(@errors) == 1);
@errors = sort {lc($a) cmp lc($b)} @errors;
return(join("\n - ", "Die folgenden ".@errors." Fenster sind schon länger geöffnet:", @errors))
}
   errorWait  {AttrVal($name, "winOpenTimer", 60*10)}
   room       FHEM
   warningReturn {return unless(@warnings);
$_ = AttrVal($_, "alias", $_) foreach(@warnings);
return("Das Fenster \"$warnings[0]\" ist seit kurzem geöffnet.") if(int(@warnings) == 1);
@warnings = sort {lc($a) cmp lc($b)} @warnings;
return(join("\n - ", "Die folgenden ".@warnings." Fenster sind seit kurzem geöffnet:", @warnings))
}



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

igami

Zitat von: l2r am 10 Mai 2017, 12:27:26
Ist es richtig/gewollt, dass die Geräte aus dem Warning-Reading nicht verschwinden wenn sie in den Error-Status wechseln?
Nein, ist nicht gewollt, momentan hängt es damit zusammen, dass bei einem neustart erst error und dann die warnings geprüft werden. Da muss ich mir noch was einfallen lassen.
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

l2r

ich habe vorhin mal ein set clear all gemacht und nach kurzer Zeit sind warning und error wieder mit den gleichen Devices gefüllt.

Dazwischen wurde kein shutdown restart durchgeführt, oder redest du vom internen Neustart der Timer?

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

igami

Zitat von: l2r am 10 Mai 2017, 18:27:35
ich habe vorhin mal ein set clear all gemacht und nach kurzer Zeit sind warning und error wieder mit den gleichen Devices gefüllt.

Dazwischen wurde kein shutdown restart durchgeführt, oder redest du vom internen Neustart der Timer?

Gruß Michael
Nein, es war schon ein fhem neustart gemeint.
Ich gucke mir das noch mal genauer an.
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

ioT4db

Zitat von: kvo1 am 08 Mai 2017, 08:15:09
Hallo  friesenjung,

ist vlt. etwas offtop aber kannst Du die Benachrichtigungslogik mal bitte kurz beschreiben ?

danke

vko1

Hi und sorry für die späte Rückmeldung...

Also eigentlich meinte ich damit nichts besonderes. Nur dieses kleine DOIF

defmod DI_AlarmDeviceStatus DOIF ([":Activity: dead"] and [?$SELF:B_$DEVICE] ne "dead") (set Pushover msg 'Device-Alarm' 'Das Gerät +++ $DEVICE +++ meldet sich nicht mehr!' 'iPhone6s' 0 '', setreading $SELF B_$DEVICE dead)\
DOELSEIF ([":Activity: alive"] and [?$SELF:B_$DEVICE] ne "alive") (setreading $SELF B_$DEVICE alive)
attr DI_AlarmDeviceStatus DbLogExclude .*
attr DI_AlarmDeviceStatus do always
attr DI_AlarmDeviceStatus group Benachrichtigung
attr DI_AlarmDeviceStatus room 9.1_Steuerung


Das reagiert sowohl auf das Activity eines Homematic-Devices, als auch bspw. auf die durch das monitoring-Modul überwachten Lacrosse-Sensoren.

Hoffe das beantwortet Deine Frage...

VG...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

Prof. Dr. Peter Henning

#72
Nur so mal als Tipp in die Runde: Das System ist wesentlich wartungsfreundlicher, wenn man in irgendeine der Utils-Dateien einfache Helper-Funktionen einbaut, z.B.
sub BatteryHelper($@){
   my ($err,@ew) = @_;
   $_ = AttrVal($_, "alias", $_) foreach(@ew);
   @ew = sort {lc($a) cmp lc($b)} @ew;
   my $ts = ($err)?"":"demnächst ";
   return("Bei dem Gerät ".$ew[0]." muss ".$ts."die Batterie gewechselt werden.") if(int(@ew) == 1);
   return(join("\n - ", "Bei den folgenden ".@ew." Geräten muss ".$ts."die Batterie gewechselt werden:", @ew));
}

sub ActivityHelper($@){
   my ($err,@ew) = @_;
   $_ = AttrVal($_, "alias", $_) foreach(@ew);
   @ew = sort {lc($a) cmp lc($b)} @ew;
   my $ts = ($err)?"60 Minuten":"10 Minuten";
   return("Das Gerät ".$ew[0]." hat sich seit ".$ts."nicht mehr gemeldet") if(int(@ew) == 1);
   return(join("\n - ", "Die folgenden ".@ew." Geräte haben sich seit ".$ts." nicht mehr gemeldet:", @ew));
}


und dann im Monitoring-device

attr  Batterie_monitoring errorReturn {BatteryHelper(1,@errors)}
attr  Batterie_monitoring warningReturn {BatteryHelper(0,@warnings)}

setzt.

LG

pah

igami

Zitat von: Prof. Dr. Peter Henning am 13 Mai 2017, 12:07:31
Nur so mal als Tipp in die Runde: Das System ist wesentlich wartungsfreundlicher, wenn man in irgendeine der Utils-Dateien einfache Helper-Funktionen einbaut, z.B.
sub BatteryHelper($@){
   my ($err,@ew) = @_;
   $_ = AttrVal($_, "alias", $_) foreach(@ew);
   @ew = sort {lc($a) cmp lc($b)} @ew;
   my $ts = ($err)?"":"demnächst ";
   return("Bei dem Gerät ".$ew[0]." muss ".$ts."die Batterie gewechselt werden.") if(int(@ew) == 1);
   return(join("\n - ", "Bei den folgenden ".@ew." Geräten muss ".$ts."die Batterie gewechselt werden:", @ew));
}

sub ActivityHelper($@){
   my ($err,@ew) = @_;
   $_ = AttrVal($_, "alias", $_) foreach(@ew);
   @ew = sort {lc($a) cmp lc($b)} @ew;
   my $ts = ($err)?"60 Minuten":"10 Minuten";
   return("Das Gerät ".$ew[0]." hat sich seit ".$ts."nicht mehr gemeldet") if(int(@ew) == 1);
   return(join("\n - ", "Die folgenden ".@ew." Geräte haben sich seit ".$ts." nicht mehr gemeldet:", @ew));
}


und dann im Monitoring-device

attr  Batterie_monitoring errorReturn {BatteryHelper(1,@errors)}
attr  Batterie_monitoring warningReturn {BatteryHelper(0,@warnings)}

setzt.

LG

pah
Warum ist das Wartungsfreundlicher?

Kontra:
Ich müsste dann wissen in welcher utils datei ich die sub abgespeichert habe und kann diese nicht einfach im device ändern.
Ein Fehler in der utils kann dazu führen, dass sämtliche subs in der utils nicht mehr funktionieren.
Es werden zu beginn alle subs geladen und machen damit das system etwas träger.

Pro:
in der fhem.cfg (in die niemand reinguckt ;)) stehen weniger Zeilen?
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

Benni

Zitat von: igami am 13 Mai 2017, 14:52:01
Warum ist das Wartungsfreundlicher?

Kontra:
Ich müsste dann wissen in welcher utils datei ich die sub abgespeichert habe und kann diese nicht einfach im device ändern.
Ein Fehler in der utils kann dazu führen, dass sämtliche subs in der utils nicht mehr funktionieren.
Es werden zu beginn alle subs geladen und machen damit das system etwas träger.

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

Deswegen ist es clever wenn man sich für unterschiedliche Anwendungs-/Themenbereiche eigene 99_xxxUtils.pm Dateien anlegt. Dann weiß man auch einfacher in welcher .pm die jeweilige sub zu suchen/finden ist. Und am besten noch eine 99_TestUtils.pm in der man nur  Entwickelt und testet.

Jedenfalls hab ich mir das so eingerichtet.

Die Trägheit durch die "vielen" subs dürfte sich wohl kaum bemerkbar machen, der Code in den Devices (Hashes) belegt ja schließlich auch Speicherplatz.