Presence mit FritzBox für ein Gerät mit mehreren MAC Adressen

Begonnen von Cetheus, 06 Oktober 2023, 15:51:35

Vorheriges Thema - Nächstes Thema

Cetheus

Moin Gemeinde,

Ich versuche mich gerade an einer Anwesenheitserkennung über die FritzBox per WLAN.
Dazu habe ich den folgenden Codeschnipsel gefunden und konnte ihn erfolgreich anwenden:
function {MacAddressPresent("AA:BB:CC:DD:EE:FF")} 30
Nun hat aber das Smartphone meiner Partnerin 2 WLAN Module für 2,4 und 5 gHz WLAN Netzwerke und damit auch zwei MAC Adressen.
Dementsprechend habe ich versucht die Funktion umzubauen.
Wenn ich den folgenden Code nutze, bekomme ich die Fehlermeldung "The function call must be encapsulated by brackets ( {...} ).":
function {
if(MacAddressPresent("AA:BB:CC:DD:EE:FF") eq "1") {
return 1;
} elsif (MacAddressPresent("11:22:33:44:55:66") eq "1") {
return 1;
} else {
return 0;
}
} 30

Verkapsel ich den Code in die geschweiften Klammern, wie gefordert, erhalte ich einen Error:
{function {
if(MacAddressPresent("AA:BB:CC:DD:EE:FF") eq "1") {
return 1;
} elsif (MacAddressPresent("11:22:33:44:55:66") eq "1") {
return 1;
} else {
return 0;
}
} 30}

Die Ausgabe zeigt dann:
Readings
model {function 2023-10-06 15:21:52
presence absent 2023-10-06 15:03:44
state error 2023-10-06 15:47:22

Verstehe ich hier einfach die Syntax falsch oder wo liegt mein Fehler?
Ich kenne das aus anderen Programmiersprachen so, dass
function { Do Something }und
function {
Do Something
}
die gleiche Wirkung haben und letzteres einfach nur der Lesbarkeit dienlich ist.

Danke schon mal für die Unterstützung.
Gruß Cetheus

betateilchen

Das, was Du da tust, ist halt kein Funktionsaufruf, sondern ein perl codeblock.

Verpacke den Kram in eine Funktion in Deiner 99_myUtils.pm und rufe dann diese Funktion auf.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pcbastler

Ich musste (wegen eines Bugs in FritzOS 7.50) ohnehin erweitern, daher hab ich jetzt mehrere Presence-Checks.
Mein Handy ist jetzt aktiv wenn mindestens einer der Trigger zuschlägt:
- GetMacPresence.sh auf einem meiner OpenWRT-APs
- function {NetDevDa("C4:14:11:B6:A7:6D")} auf der Fritzbox
 
Das sollte doch auch mit unterschiedlichen MAC-Adressen funktionieren.

fz55

#3
Ich habe das bei mir so gelöst:
defmod mobile_Xxx PRESENCE function {MacAddressPresent("AF:B7:2E:E2:2E:8A") or MacAddressPresent("AF:B7:2E:5B:2E:8A") } 120 120