Hallo,
(wenn dies in Codeschnipsel besser aufgehoben ist, bitte verschieben - und ich hoffe ich habe das Rad nicht neu erfunden, GEfunden habe ich jedenfalls nichts in der Art...)
nachdem mit dem Fritz!OS 6.30 nun der Telnet-Zugang endgültig Geschichte ist, musste eine neue Lösung her (in diesem Zusammenhang ein dickes SORRY an @Erwin, dass ich mich nach Deinen letzten Script-Verbesserungen nicht mehr gemeldet habe!). Dabei ist mir aufgefallen, dass man mit dem FRITZBOX-Modul ja auch Info über die aktiven Geräte bekommt. Bei mir kam noch die Problematik dazu, dass ich auch noch einen Repeater im Einsatz habe. Da es aber auch ein AVM-Gerät ist, stellt das mit folgendem Code kein Problem dar:
in der
99_MyUtils.pm passend einfügen:
my @fbmacs = ("00_00_00_00_00_00","11_11_11_11_11_11");
sub AtHomeCheck {
my $n = 0;
my @fbs = devspec2array("TYPE=FRITZBOX");
for( my $i = 0; $i < @fbmacs; $i++ ) {
foreach( @fbs ) {
if( ReadingsVal($_,"mac_" . $fbmacs[$i],"") ne "") {
$n++;
}
}
}
Log 4, "Anwesenheit: " . $n . " aktive Devices.";
if(($n == 0) && (Value("HomeStatus") < 2)) {
fhem("trigger whg_HomeStat3 on")
} elsif (($n != 0) && (Value("HomeStatus") > 1) && (Value("HomeStatus") < 4)) {
fhem("trigger whg_HomeStat1 on")
}
undef;
}
In das Array kommen die MAC-Adressen all der Geräte, die als Indiz für Anwesenheit dienen sollen. Die ":" müssen durch "_" ersetzt werden.
Es werden alle Devices vom Typ FRITZBOX ausgelesen, man kann also diverse (und eben auch Repeater) im Einsatz haben!
In der
fhem.cfg steht dazu bei mir dann noch:
define HomeStatus dummy
attr HomeStatus comment 1=Anwesenheit, 2=Nacht/inaktiv, 3=kurz weg, 4=lange weg (Urlaub)
attr HomeStatus devStateIcon 1:HOME_Status.1 2:HOME_Status.4 3:HOME_Status.0 4:HOME_Status.3
attr HomeStatus room Wohnung
attr HomeStatus setList 1 2 3 4
define whg_HomeStat1 FS20 abcd 00
attr whg_HomeStat1 comment Schalter-Anwesenheit ein
attr whg_HomeStat1 icon HOME_Status.1
define whg_HomeStat2 FS20 abcd 01
attr whg_HomeStat2 comment Schalter-Nacht ein
attr whg_HomeStat2 icon HOME_Status.4
define whg_HomeStat3 FS20 abcd 02
attr whg_HomeStat3 comment Schalter-kurze Abwesenheit ein
attr whg_HomeStat3 icon HOME_Status.0
define whg_HomeStat4 FS20 abcd 03
attr whg_HomeStat4 comment Schalter-Urlaub ein
attr whg_HomeStat4 icon HOME_Status.3
define FritzBox FRITZBOX
attr FritzBox icon it_router
define FritzRep FRITZBOX
attr FritzRep fritzBoxIP fritz.repeater
attr FritzRep icon it_wifi
define at_Anwesenheit at +*00:05:00 {AtHomeCheck()}
(Ich verwende auch (immer noch) einen 4-Kanal-Schalter, um den Zustand manuell zu setzen)
So wird alle 5 min der Status abgefragt und entsprechend reagiert. Die reale Verzögerung kann aber durchaus auch mal bei 10 Minuten liegen, denn
- die Abfrage der Boxen erfolgt standardmäßig alle 2 min
- es dauert auch seine Zeit, bis die Box ein Gerät als "nicht (mehr) verbunden" meldet