DOIF - für Ausfallerkennung von Sensoren

Begonnen von jojop2, 21 Dezember 2016, 22:42:33

Vorheriges Thema - Nächstes Thema

jojop2

Hallo,
folgendes DOIF Statement versuche ich einzusetzen, um zu erkennen, wenn ein Sensor länger als 30 min off ist.
Ich habe 7 solcher Sensoren, die alle ein Reading "temperature3" haben.
Wenn mein Gateway offline ist, und somit auch alle 7 Sensoren für fhem offline sind, erhalte ich aber immer nur eine Meldung, statt 7.
Leider blicke ich mit der Device und Reading Angabe beim DOIF noch nicht ganz durch.

define di_devicewarning30 DOIF ([":temperature3"]) \
(\
   ({ SendStdMsg("FHEM - Device-Offline Warning from device: $DEVICE", "Attention! \n$DEVICE is offline longer than 30 min");;;;\
      my $counter=ReadingsVal("DeviceOfflineWarning30","count",0);;;;\
      $counter = $counter+1;;;;\
      fhem("setreading DeviceOfflineWarning30 count $counter");;;;}),\
   (setreading DeviceOfflineWarning30 $DEVICE off)\
)\

attr di_devicewarning30 do resetwait
attr di_devicewarning30 notexist "novalue"
attr di_devicewarning30 room FhemMonitor
attr di_devicewarning30 wait 1800

MadMax-FHEM

Hi,

bzgl. deinem DOIF Problem kann ich dir leider nicht helfen...

(wenn es aber prinzipiell funktioniert, weil 1x löst es ja aus, dann könnte es evtl. auch an der "Parametrierung" liegen. Also so Attribute wie do Always etc. / aber wie gesagt DOIF ist nicht so meine Baustelle)

Aber es gibt ein Modul zumindest einen Thread über ein Modul was so etwas (ähnliches) macht wie du erreichen willst:

https://forum.fhem.de/index.php/topic,8821.0.html

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)

automatisierer

Dein DOIF triggert auf ein Event.
[":temperature3"]
Nach dem Event rennt der Timer los. Kommt innerhalb der 1800 Sekunden kein neues trigger-Event, wird der Befehl ausgelöst. Thats all.

Der Befehl kann also maximal alle 1800 Sekunden wiederholt ausgeführt werden...

abc2006

Also ich würde das aus meiner bescheidenen Erfahrung so deuten:

du bekommst Events:
TempsensorA:temperature3 21°
TempsensorB:temperature3 21°
TempsensorC:temperature3 21°

Jetzt kommt dein DOIF dazu:
DOIF: Warte 1800 Sekunden
Nach 100 Sekunden:
DOIF: Warte 1700 Sekunden
TempsensorA:temperature3 21°
DOIF: Warte 1800 Sekunden (resetwait)
Nach 100 Sekunden:
DOIF: Warte 1700 Sekunden
TempsensorB:temperature3 21°
DOIF: Warte 1800 Sekunden (resetwait)
TempsensorC:temperature3 21°
DOIF: Warte 1800 Sekunden (resetwait)

Bedeutet: Solange irgendeiner der Temperatursensoren (nein, um korrekt zu sein, überhaupt irgendein beliebiges Device in Fhem) ein ":temperature3"-Event auslöst, wird der Timer zurückgesetzt und fängt von vorne an zu Zählen.

Soweit isses dir sicher klar, aber darin liegt eigentlich auch schon die Lösung:

Wenn jetzt alle Temperatursensoren versagen, bis auf einen einzigen, und der liefert alle 60 Sekunden einen Wert, macht dein DOIF - gar nichts (auch nicht korrekt, es resettet natürlich den Timer. Aber es sendet keine Nachricht)

Wenn jetzt gar kein Event mehr kommt, läuft der Timer ab, und das DOIF führt das CMD (1) aus. Ob in dem Device jetzt das letzte, welches gesendet hat, drinsteht, oder vielleicht gar keines, kann ich dir so offline (bin nicht zuhause) nicht sagen.
Auf jeden Fall wirst du so erstmal nicht herausfinden, welches Device nicht gesendet hat. (und auch keine 7 Meldungen erhalten).

Lösungsansätze (Ideen) von mir:

1. 7 DOIF's machen. Funktion vor Schönheit :P
2. ein DOIF machen, und für jedes Device einen DOELSEIF-Zweig mit eigenem Timer und entsprechend angepasster Meldung
3. Ich muss gleich mal suchen, man kann irgendwo auslesen, wieviel Zeit seit dem letzten Update eines Readings vergangen ist (oder so ähnlich). Das könnte man dann regelmäßig prüfen, und dementsprechend Informationen ausgeben.

Hier:
http://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung



Vielleicht hilft dir das weiter..

Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

MadMax-FHEM

Zitat von: abc2006 am 21 Dezember 2016, 23:42:51
3. Ich muss gleich mal suchen, man kann irgendwo auslesen, wieviel Zeit seit dem letzten Update eines Readings vergangen ist (oder so ähnlich). Das könnte man dann regelmäßig prüfen, und dementsprechend Informationen ausgeben.

ReadingsAge ;-)
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)

Damian

Zitat von: jojop2 am 21 Dezember 2016, 22:42:33
Hallo,
folgendes DOIF Statement versuche ich einzusetzen, um zu erkennen, wenn ein Sensor länger als 30 min off ist.
Ich habe 7 solcher Sensoren, die alle ein Reading "temperature3" haben.
Wenn mein Gateway offline ist, und somit auch alle 7 Sensoren für fhem offline sind, erhalte ich aber immer nur eine Meldung, statt 7.
Leider blicke ich mit der Device und Reading Angabe beim DOIF noch nicht ganz durch.

define di_devicewarning30 DOIF ([":temperature3"]) \
(\
   ({ SendStdMsg("FHEM - Device-Offline Warning from device: $DEVICE", "Attention! \n$DEVICE is offline longer than 30 min");;;;\
      my $counter=ReadingsVal("DeviceOfflineWarning30","count",0);;;;\
      $counter = $counter+1;;;;\
      fhem("setreading DeviceOfflineWarning30 count $counter");;;;}),\
   (setreading DeviceOfflineWarning30 $DEVICE off)\
)\

attr di_devicewarning30 do resetwait
attr di_devicewarning30 notexist "novalue"
attr di_devicewarning30 room FhemMonitor
attr di_devicewarning30 wait 1800


DOIF ([":temperature3"]) (defmod at_$DEVICE at +00:30 Attention! \n$DEVICE is offline longer than 30 min)

attr di_devicewarning30 do always
attr di_devicewarning30 notexist "novalue"
attr di_devicewarning30 room FhemMonitor



Der Einzeiler sollte schon funktionieren.


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

@jojop2: schau mal hier (für resetwait gilt das gleiche wie für wait).

Zitat von: Damian am 22 Dezember 2016, 09:40:29defmod at_$DEVICE at ...
Das hast du in dein Herz geschlossen?!  ;D

Damian

Zitat von: Per am 22 Dezember 2016, 12:21:38
@jojop2: schau mal hier (für resetwait gilt das gleiche wie für wait).
Das hast du in dein Herz geschlossen?!  ;D

ja, das ist  eine Kombination aus DOIF und at, die tatsächlich auch Sinn macht. In diesem Fall ergänzen sich beide Module, denn normalerweise braucht der DOIF-User ja kein at mehr.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jojop2

Herzlichen Dank an alle Mitwirkenden, vor allem an Damian für sein super DOIF Modul und seinen Support.

Gruß
Johannes