Hallo zusammen,
ich möchte gern die Fritz Box für Presence nutzen und nebenbei auch die Anbindung mit auslesen, insbesondere die Stärke der WLAN-Verbindung.
Im Moment scheitert es noch am Auffinden des DUMMY-Gerätes.
Ich habe ein userattr namens "mac_address" gesetzt und möchte daran ein Gerät auch wiederfinden. Mein Ansatz war:
...
my @devicearray = defInfo('mac_address=$mac','NAME');
my $numofelements = @devicearray;
if ($numofelements eq 0 and $mac ne "")
{ $device = Network_Device_$mac;
fhem("define $device dummy");
fhem("attr $device userattr mac_address");
fhem("attr $device mac_address $mac");
}
if ($numofelements eq 1 and $mac ne "")
{ $device = @devicearray[0]; }
...
Die Variable $mac enthält die Mac-Adresse gemäß Fritz Box. Erwartungshaltung ist, dass mir "defInfo('mac_address=$mac','NAME');" exakt einen Gerätenamen zurückliefert und zwar den mit "mac_address=$mac".
Falls das Array leer ist, wird ein generisches Element angelegt.
Am Ende steht in der Variable $device der Gerätename des Zielgerätes.
Schau Dir mal devspec2array an
Vielen Dank, nach einigem Probieren funktioniert das Code-Fragment. Nun habe ich ein Notify, welches mir die Fritz-Box-Werte in einzelne Dummy-Elemente schreibt:
Netzwerk_Router:mac_([ABCDEF0-9_]*):.* {
my $device = "none";
my $router = $EVENT;
my $sleep_id_absent = $EVTPART0."sleepAbsent";
my $timer = InternalVal($NAME,"INTERVAL","300") + 10;
my $mac;
my $devicename;
my $connectiontype;
my $wlan50;
my $wlan24;
my $rssi;
my $lan;
# Extract the information for Wifi connection
if ($EVENT =~ m /^mac_([ABCDEF0-9_]*): ([A-Za-z0123456789-]*) \((WLAN), ([0-9]*) \/ ([0-9]*) Mbit\/s, ([-0-9]*)\)/)
{
$mac = $1;
$devicename = $2;
$connectiontype = $3;
$wlan50 = $4;
$wlan24 = $5;
$rssi = $6;
}
# Extract the information for Wifi connection
if ($EVENT =~ m /^mac_([ABCDEF0-9_]*): ([A-Za-z0123456789-]*) \((LAN).*, ([0-9]*) Mbit\/s\)/)
{
$mac = $1;
$devicename = $2;
$connectiontype = $3;
$lan = $4;
}
my $devspec = "mac_address=".$mac;
foreach my $dev (devspec2array($devspec)) {
$device = $dev;
}
if ( $device eq "none")
{ $device = "Network_Device_".$mac;
fhem("define $device dummy");
fhem("attr $device userattr mac_address");
fhem("attr $device mac_address $mac");
fhem("attr $device group Netzwerk");
fhem("attr $device stateFormat presence");
fhem("attr $device event-on-change-reading .*");
}
if ($device ne "none")
{
fhem("setreading $device mac $mac");
fhem("setreading $device devicename $devicename");
fhem("setreading $device connection $connectiontype");
fhem("setreading $device wlan50 $wlan50");
fhem("setreading $device wlan24 $wlan24");
fhem("setreading $device rssi $rssi");
fhem("setreading $device presence present");
fhem("setreading $device lan $lan");
# Cancel existing sleep command and create it with 310 seconds
fhem("cancel $sleep_id_absent quiet");
fhem("sleep $timer $sleep_id_absent quiet;setreading $device presence absent");
}
}