ReadingsGroup oder Notify - Inaktive oder defekte Geräte

Begonnen von Stril, 14 November 2016, 11:19:31

Vorheriges Thema - Nächstes Thema

Stril

Hallo!

Es kommt bei mir manchmal vor, dass Geräte nicht mehr erreichbar sind - z.B. weil:
- Batterie leer ohne brauchbares Reading
- Außer Funkreichweite
- Defekt

Ich würde gerne all diese Fälle irgendwie im Auge behalten und hätte dafür gerne eine Übersicht aller Geräte ohne "Reading-Update" seit einer Woche oder ähnlich.

Kennt ihr irgendeine gute Möglichkeit, das ohne ein Notify für jedes einzelne Gerät?

Danke und Grüße
Phil

DeeSPe

Wenn es um HM Geräte geht würde ein notify auf den ActionDetector reichen um Dir den Status aller Geräte ausgeben zu lassen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stril

Hallo!

Es geht um verschiedenste Geräte. Enocean, HMCCUDEV und und und.

Was für mich auch ausreichen würde, wäre z.B. ein DOIF das triggert, wenn ein Device die "Woche Inaktivität" überschreitet.

Grüße
Phil

Hans Franz

Du kannst ReadingsAge verwenden. Pack' soetwas
sub
get_readings_older_than($$) {
my ($mdevspec,$days) = @_;
my $ret = '';
my @mdevarray = devspec2array($mdevspec);
foreach my $mdev (@mdevarray) {
my $readings = $defs{$mdev}->{READINGS};
foreach my $key (keys %{$readings}) {
my $age = int(ReadingsAge($mdev,$key,"")/60/60/24);
if ($age > $days) {
$ret .= $mdev.': '. $key.":".$readings->{$key}{VAL}."\n";
$ret .= $age."\n";
}
}
}
return $ret ;
}

in eine 99_myUtils. Und ruf' es mit
{get_readings_older_than(".*",7)}
auf.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Stril

Hallo!

Vielen Dank! Das sieht schonmal richtig gut aus.
Schade ist nur, dass ein Device auftaucht, wenn es ein einzelnes, altes Reading hat.
Gibt es auch so etwas wie einen "Geräteweisen" Timestamp?

Danke und Grüße
Phil

Hans Franz

ZitatGibt es auch so etwas wie einen "Geräteweisen" Timestamp?
Meinst du soetwas?
{get_readings_older_than("IT.*,CUL.*",7)}
{get_readings_older_than("TYPE=Enocean",7)}
{get_readings_older_than("room=Wohnzimmer",7)}
Das geht auch.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Stril

Hallo!

Nicht ganz. Eigentlich meinte ich die Logik:

Zeige Devices, die seit 7 Tage _keines_ ihrer Readings aktualisiert haben.
Bei Deinem Aufruf tauchen auch Geräte auf, die andere ihrer Readings aktualisiert haben.

Danke und Grüße
Phil

Hans Franz

#7
Vlt. geht's ja so:
Sorry. Ist ja Quatsch. Blackout >:(
Aber evtl. so:
sub
get_readings_older_than($$) {
my ($mdevspec,$days) = @_;
my $ret = '';
my @mdevarray = devspec2array($mdevspec);
foreach my $mdev (@mdevarray) {
my $readings = $defs{$mdev}->{READINGS};
my $r = 1;
foreach my $key (keys %{$readings}) {
my $age = int(ReadingsAge($mdev,$key,"")/60/60/24);
if ($age <= $days){
$r = 0;
last;
}
}
$ret .= $mdev."\n" if ($r == 1);
}
return $ret ;
}


Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Stril

Hallo!

Tut mir Leid, aber ich hab Deine Antwort übersehen gehabt.

Das Ganze ist einfach super! Vielen Dank!!!

Grüße
Phil