ich würde gerne ein Konstrukt bauen welches das Alter des Battereie Readings aller devices abfragt.
Es gibt jaschüne Beispiele z.B. mit DOIF oder auch watchdog die auf events triggern aber ich möchte halt auf das Alter des jeweiligen Readings auswerten.
Also wenn das reading battery älter ist wie 36 Stunden -> dann
Ich habe schon mit einigen Suchbegiffen geschaut abe komme irgendwie nicht weiter. Bitte um anstupser. :-[
Kurz gesucht und das gefunden: https://forum.fhem.de/index.php?topic=50783.0
Grüße Jörg
Also wenn es dir reicht zyklisch abzufragen, ob bestimmte Readings länger nicht mehr aktualisiert wurden, dann hier mal was ich täglich um 17:00 bzgl. ZWave Batterie-Devices laufen lasse (ein Reagieren ist ja schwer weil es kommt ja eben kein Event ;) ):
sub my_CheckZWaveDevices()
{
my @ZWaveDevices = devspec2array("TYPE=ZWave");
my $ActDevice = "na";
my $WakeupInterval = 65535;
# loop through all ZWave-Devices
foreach $ActDevice (@ZWaveDevices)
{
if(AttrVal($ActDevice, "disable", "0") eq "1")
{
Log3(undef, 1, "my_CheckZWaveDevices Device $ActDevice disabled.");
next;
}
# check if the Device has wakeupReport available (Battery-Device)
# if(ReadingsVal($ActDevice, "wakeupReport", "na") ne "na")
if(ReadingsVal($ActDevice, "wakeup", "na") ne "na")
{
$WakeupInterval = ReadingsNum($ActDevice, "wakeupReport", 65535);
# if(ReadingsAge($ActDevice, "wakeup", 3 * $WakeupInterval) > 2 * $WakeupInterval)
if((ReadingsAge($ActDevice, "wakeup", $WakeupInterval) > 2 * $WakeupInterval) && (ReadingsAge($ActDevice, "battery", $WakeupInterval) > 2 * $WakeupInterval))
{
Log3(undef, 1, "my_CheckZWaveDevices Device $ActDevice is dead!");
fhem("set $myTelegramBot message $ActDevice is dead!");
}
}
else
{
Log3(undef, 1, "my_CheckZWaveDevices Device $ActDevice ignored.");
}
Log3(undef, 1, "my_CheckZWaveDevices ActDevice: $ActDevice WakeupInterval: $WakeupInterval");
}
}
Da sich ZWave Batterie-Geräte (im Standard) meist nur ca. 1x am Tag melden reicht mir die einmalige Abfrage am Tag um 17:00 durch ein at.
Ich lasse mir zunächst alle ZWave Devices geben, dann schaue ich ob welche disabled sind (manche Geräte nutze ich nicht immer) und dann "frage" ich das Device wie die "Meldeeinstellungen" sind und schaue, ob das Reading älter als 2x dieses Interval ist.
Wenn ja: Nachricht, wenn nein: alles gut.
Gruß, Joachim
ich nutze das hier:
https://fhem.de/commandref.html#readingsWatcher (https://fhem.de/commandref.html#readingsWatcher)
funktioniert prima und ist, glaube ich, genau was Du suchst.
Es erzeugt im jeweiligen Device ein Reading, was sowas wie alive/dead annehmen kann. Das nutzt Du dann um ein DOIF/notify zu triggern um z.B. eine Pushmessage zu schicken.
Viel Erfolg!