(Gelöst) Meldung, falls ein Device ausfällt

Begonnen von Cyber1000, 24 November 2018, 23:51:25

Vorheriges Thema - Nächstes Thema

Cyber1000

Hallo,

Habe einige Devices, welche spielt mal prinzipiell keine Rolle. Vor einiger Zeit ist mir ein Temperatursensor ausgefallen (Technoline), ist mir allerdings erst ein paar Tage später aufgefallen, der Batteriestatus war ja bis zur letzten Sendung ok, dann hatte der Sensor offensichtlich einen technischen Defekt und hat einfach nichts mehr gesendet.

Gibt es vielleicht die Möglichkeit ein notify zu erstellen, das die letzte Änderung aller Geräte überprüft (egal was sich ändert, es sollte sich nur irgendein reading ändern) und wenn die über einen bestimmten Zeitraum hinaus ist eine Meldung schreibt?

Etwa so (Achtung Pseudocode, den ich vom der Batteriemeldung im Wiki angepasst habe):

define notify_device_notresponding notify .*:LastChangeOfDevice { if ($EVENT > 24*3600) { \
  { FB_mail('recipient@internet.de', 'FHEM Gerätewarnung - Keine Rückmeldung', $NAME.': '.$EVENT)};; \
   Log 3, "$NAME : Keine Rückmeldung nach $EVENT s";; \
  } \
}


Oder eine andere Möglichkeit, ich hab zwar im Wiki und im Forum gesucht, aber möglicherweise geh ich auch von den falschen Ansätzen aus, hab zumindest nichts vernünftiges gefunden.
Hoffe das war verständlich.
Danke!

MadMax-FHEM

#1
Ein Notify wird schwierig:

auf welches RegEx soll es reagieren? Es müsste ein Reading geben das bei allen Geräten gleich ist o.ä.
Oder immer auf alles triggert: Systemlast...

Unterschiedliche Geräte haben unterschiedliche Update-Zyklen, das muss ja dann beim jeweiligen Abfragen (z.B. mittels ReadingsAge) bekannt sein: evtl. userAttr wo das dann je Gerät eingestellt und ausgelesen wird... (so ist es im HomeMatic-Umfeld: ActionDetector)

Aber es gibt ein Modul was sowas tut/tun kann: https://forum.fhem.de/index.php?topic=68765.0

Alternative: ein regelmäßiges "at" was dann eben prüft.
Aber auch dazu: es muss wissen welches Reading bei welchem Gerät eine entsprechende Aussage liefert und welchen Updatezyklus das hat.

Ich habe mir sowas für meine ZWave gebaut, da man da den Zyklus auslesen kann (wakeup) und ich einfach das battery-Reading nehme weil ich das regelmäßig "abfrage"...
...und ich nur Batterie-ZWave-Geräte habe...
Bei HomeMatic wie gesagt habe ich den ActionDetector und das zusammen reicht mir...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Cyber1000

Hi,
vielen Dank für die schnelle (späte :-) Antwort)
Ja auf das Problem mit dem notify bin ich jetzt selbst auch gekommen, es ist ja ein zeitliches Problem und keine Status Änderung.

Ich hab mir jetzt mal sowas zusammengebastelt mit einem at


defmod Timedcheck_DeviceError at *01:03:00 { \
    my @devices=devspec2array("(Steckdose_.*)");; \
    my $device;; \
    foreach $device (@devices) { \
          my $lastRead=time()-time_str2num(OldTimestamp($device));; \
          if ( $lastRead > 600 ) { \
              sendMessage('Gerätewarnung', 'Gerät "'.$device.'" hat sich seit '.$lastRead.' s nicht gemeldet!');; \
              Log 3, "$device : Keine Meldung seit $lastRead s";; \
          } \
    } \
}


Der Reihe nach:

  • devspec2array holt sich die einzelnen Devices, ich hol mir hier alle Steckdosen
  • foreach geht dann in einer Schleife durch alle gefundenen devices
  • OldTimestamp holt sich die Zeit des letzten Logeintrags dieses devices, mehr oder weniger ist das was ich will, das betrifft dann alle Änderungen, die ich auch im log-file haben will
  • time_str2num wandelt das in einen unix-timestamp um. $lastRead ergibt dann die Sekunden seitdem das letzte Mal ins Logfile dieses Devices geschrieben wurde
  • zum Testen hab ich jetzt mal 600s genommen, das muss natürlich größer sein
  • sendMessage ist eine eigene Funktion von mir, die ich überall einbinde, damit es überall gleich aussieht (und ich schnell mal den messenger zentral wechseln kann

Das ganze muss sich jetzt nur noch in der Praxis bewähren: mit devspec2array kann man relativ viel machen, z.B. auch nach Type oder anderen Sachen filtern, muss ich mir noch genauer ansehen, sollte also auch möglich sein alle Fibaros oder Zwave Geräte zu filtern. Oder man sucht alle, die ein attribut "power/energy" haben. Also vermutlich werden das dann im Endeffekt mehrere At-Befehle. Da die meisten Energie-Geräte zumindest alle Stunde mal einen Energiewert senden, würde ein Wert größer als 2-3 Stunden ohne Daten reichen für eine Fehlernachricht. Für meine Steckdosen reicht mir eigentlich wenn das alle 24h Stunden geprüft wird (nicht so tragisch wenn mir einen Tag mal die Waschmaschine nicht schreibt, dass sie fertig ist), also solangs nicht was kritisches wie Kühlschrank oder dgl ist.

Muss ich wohl noch ein wenig basteln, aber danke für deine Hinweise!

Tom111

Den Code aus folgendem Thread benutze ich schon seit Jahren und bin mehr als zufrieden damit!
https://forum.fhem.de/index.php/topic,15173.msg261574.html#msg261574
FHEM 5.9 auf Raspberry Pi - 3B+ - Stretch-5.10.88+ | CUL868 CC1101 - USB - Lite module - V3 FW 1.67
Fritz!Box 7490 OS 07.29 / Fritz!Dect200 / Fritz!Powerline 546E
FS20ST-4/ FS20 DI-5/ FS20LS/ FS20 PIRI-2-KU/ FS20 TFK/ FS20S4A/FS20 SU-3/FS20 S20-3
HMS100TF/FHT80TF-2/ASH2200/S300TH/MiLight-Bridge V

Cyber1000

Danke ja das klingt auch gut, werd zwar vermutlich bei OldTimestamp bleiben, weil das eben alles was geloggt wird einschließt und nicht nur den State (bei Fibaro Steckdosen steht da immer on oder off drin, also bei meinem Kühlschrank steht für ReadingsTimestamp von state ein Datum von vor 2 Monaten drin, weil ich da vielleicht mal explizit auf on geklickt hab, aber off kann ich den auch gar nicht schalten - macht auch keinen Sinn bei einem Kühlgerät - steckerseitig gesperrt)

Aber den Rest werd ich mal so verwenden und an meine Bedürfnisse adaptieren.
Danke!

binford6000

Moin,
vielleicht kannst du das Modul Monitoring hier gebrauchen:
https://forum.fhem.de/index.php/topic,68765

VG Sebastian

Cyber1000

Guter Tipp hab mal mein Battery-Monitoring auf diese Modul umgestellt, dort hab ichs auch mal mit einem dummy-device schnell testen können.

Activity ist jetzt auch eingerichtet, muss aber sagen, das modul ist ziemlich greedy, gut man gibt ja auch .*:.* als DEF an, hab jetzt schon einiges geblacklistet, z.B. global und meine notifies. Wenn ich die abspeicher wird ein event warningAdd_notify_xyz und errorAdd_notify_xyz erzeugt, was nicht gerade sinnvoll ist, wenn ich erfahre, dass meine notifies 12/24 Stunden nicht geändert wurden.
Ich muss mich da vermutlich noch ein wenig spielen und schaun, was da rauskommt, eventuell mal fhem updaten, ich muss gestehn, mein Modul (und fhem) sind noch nicht auf Letztstand.

Danke für den Tipp, das Modul erfüllt meine Anforderungen!

Cyber1000

Ja das funktioniert ganz gut, verwende jetzt für folgende Punkte das Modul:

  • Batterieüberwachung
  • Aktivitätsüberwachung
  • Über-/Unterschreiten von Temperaturen falls ein Sensor mal seltsame Werte anzeigen sollte oder die Kühlgeräte streiken

Ich markier das mal als gelöst.