99_myUtils.pm erstellen und den Sub eintragen.
checkAllFritzMACpresent($) {
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
sub checkAllFritzMACpresent($) { # Benötigt: nur die zu suchende MAC ($MAC), # Es werden alle Instanzen vom Type FRITZBOX abgefragt # # Rückgabe: 1 = Gerät gefunden # 0 = Gerät nicht gefunden my ($MAC) = @_; # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0 my $Status = 0; $MAC =~ tr/:/_/; $MAC = "mac_".uc($MAC); my @FBS = devspec2array("TYPE=FRITZBOX"); foreach( @FBS ) { my $StatusFritz = ReadingsVal($_, $MAC, "weg"); if ($StatusFritz eq "weg") { # Dieser Zweig testet ob das Reading vorhanden ist } elsif ($StatusFritz eq "inactive") { # Dieser Zweig testet ob im Reading inactive steht } elsif ($StatusFritz =~ /(.*)s, 0/) { # Dieser Zweig testet auf "<geraetename> (WLAN, 0 / 0 Mbit/s, 0)" } else { $Status = 1} } return $Status } |
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:
1 |
define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60 |
wobei
Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,
AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.
„60 60“ sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit attr Fritzbox INTERVAL 60 den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.
„Log 1“ führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM attr