anwesenheitscheck PRESENCE Fritzbox MAC + Ping?!

Begonnen von draddy, 28 März 2022, 15:34:54

Vorheriges Thema - Nächstes Thema

draddy

moin zusammen,

gibt ja unzählige Beiträge zum Thema, aber wirklich das passende habe ich nicht gefunden.

Situation:
Diverse Mobilegeräte (Smartphone, Tablets, Iphones ..)

es fing einfach an, mit PRESENCE lan-ping - durch die mitte, läuft.
da einige Geräte jedoch mehr als ein WLAN Modul besitzen (2,4 und 5G getrennt / 2 MAC Adressen = 2 IP Adressen) wurden es also schnell mehrfache PRESENCE für ein Gerät, in Notify "zusammengefasst" und Ergebnis in einen Presence Dummy ... naja - geht ... bis (besonders bei Iphone) der Energiespar zuschlägt ...

gut, also, vll. über die Fritzbox, nicht gaanz so schnell, aber 5 minuten rauf oder runter (will Intervall fürs Fritzmodul nicht kürzer stellen) ... habe das wohl bekannte Script dafür rausgesucht und bearbeitet (da meine AVM im Mesh laufen, brauche ich  nicht ALLE boxen abfragen, dafür aber eventuell mehrere MAC's pro Gerät.


sub checkFritzMACpresent(@) {
my $Status = 0;
my $FB = "FritzBox";
foreach(@_) {
my ($MAC) = $_;
$MAC =~ tr/:/_/;
$MAC = "mac_".uc($MAC);
my $StatusFritz = ReadingsVal($FB, $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

}


Nächster Sonderfall, und jetzt brauche ich euch! ;)

neben den AVM Geräten, gibt es noch einen Outdoor AP für den Garten, dieser ist wunder oh wunder NICHT von AVM - also nicht im Mesh.

Wenn jetzt ein Gerät, welches die Fritzbox sonst als WLAN Gerät kennt, über diesen AP verbunden ist, steht in der Fritzbox sowas wie "Gerätename - LAN 2 mit 100 Mbit/s" in den Details des Gerätes steht aber "WLAN: keine Verbindung." (diesen Eintrag finde ich NICHT bei Geräten die immer nur per LAN angeschlossen sind). Das Fritzbox Modul stickt jetzt daraus:

<MAC> M2103K19G (WLAN, 0 / 0 Mbit/s, 0) 2022-03-28 15:21:02

das Script strickt daraus: "0" offline, nicht da.

jetzt die Überlegung; wenn ich für den fall "WLAN, 0 / 0 Mbit/s, 0)" den Status 2 setzen lasse, und in diesem Fall nochmal nach hacke (mit ping?) sollte ich doch wenigstens für Android Geräte einen recht zuverlässigen Staus erhalten oder?

Oder komme ich irgendwie an den "Echten" Status für das Device in der Fritzbox? die Übersicht unter "Netzwerk" ist schnell aktualisiert und zeigt recht zuverlässig den Status an.

thx
Jens
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Otto123

Hallo Jens,

das FB Modul kann tr064
Frag mal deine MAC Adresse so ab
get DeinFBName tr064Command Hosts:1 hosts GetSpecificHostEntry NewMACAddress '11:22:33:44:55:66'

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

draddy

moin Otto,

das sieht schonmal gut aus, glaub ich,


Service='Hosts:1'   Control='hosts'   Action='GetSpecificHostEntry'
Parameter1='NewMACAddress' => '11:22:33:44:55:66'
----------------------------------------------------------------------
$VAR1 = {
          'GetSpecificHostEntryResponse' => {
                                              'NewHostName' => 'M2103K19G',
                                              'NewInterfaceType' => 'Ethernet',
                                              'NewAddressSource' => 'DHCP',
                                              'NewIPAddress' => '192.168.177.84',
                                              'NewActive' => '1',
                                              'NewLeaseTimeRemaining' => '0'
                                            }
        };


auf die schnelle auch nen Verarbeitungsansatz für mich zur hand? ;)

gruss
Jens
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

draddy

ich hätte gehofft es ist irgendein tolles format wo ich im nächsten schritt gezielt das rauspicken kann was ich will / brauch ...

ok ... also string trimming verstehe ich das richtig?  ;D
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

TomLee

Zitatda einige Geräte jedoch mehr als ein WLAN Modul besitzen (2,4 und 5G getrennt / 2 MAC Adressen = 2 IP Adressen) wurden es also schnell mehrfache PRESENCE für ein Gerät, in Notify "zusammengefasst" und Ergebnis in einen Presence Dummy ... naja

Wie ich dich verstehe kann man das auch in einem (zusätzlichem) PRESENCE-Device umsetzen (function-Modus) und spart sich das/den notify/dummy.

Oder gleich mit RESIDENTS, da trägst nur im ROOMATE-Device in einem Attribut die Devicenamen ein und gut ist.




Ist Owntracks evtl. eine Alternative ? Bei mir klappt das mit mehreren Standorten (jetzt nicht auf den Meter genau) recht gut bisher, bin aber auch noch am austüfteln, die Lösung hab ich auch noch nicht für mich gefunden, G-Tags sind auch noch interessant, oder ganz einfach irgendwo am richtigen Ort nen Taster zum auslösen ?


draddy

#6
hey tomLee,

ehm, also alles wo ich auf dem jeweiligen Device was installieren muss fällt quasi weg.

wiegesagt, die aktuelle "ping" Lösung läuft jeh nach Gerät mit 3 PRESENCE Devices (wobei ich jeweils 1 IP im Auge habe die nach Fritzbox Leichen aussehen ... war aber erstmal egal)

diese werte ich dann eben Zusammen aus und lasse den wert einfach in einen dummy schreiben .. und JA das ist alles andere als schön oder elegant xD

noch dazu die IPhone Problematik ... drum  eben der versuch mit der 99er Funktion ...

die tr064 abfrage von Otto sieht schonmal ganz gut aus, braucht eben die zeit welche die Fritzbox braucht um einen Status zu ändern (kann mal schneller gehn, oder mal bissl dauern, ist halt so ... soll ja keine Sekunden genaue Stempeluhr werden ;D)
muss halt jetzt irgendwie "kämpfen" die Ausgabe zu beschneiden - Interessieren tut mich ja nur 'NewActive' => '0|1' ...

€dit:
schnipp schnapp balast ab

sub myTest() {
my $var1 = 1;
$var1=fhem("get FritzBox tr064Command Hosts:1 hosts GetSpecificHostEntry NewMACAddress '50:98:39:1B:E9:6E'",1);$var1 =~/'NewActive' => '(.*)'/;return $1;;
return $var1
}

liefert 0 oder 1 ... jetzt das ganze mal ins Gesamtwerk verwursten.

OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

TomLee

#7
Zitatdiese werte ich dann eben Zusammen aus und lasse den wert einfach in einen dummy schreiben .. und JA das ist alles andere als schön oder elegant xD

So in der Art kann ich mir das mit PRESENCE vorstellen, wie mans genau umsetzt ist was anderes, hat aber nichts mit deiner Frage zu tun:

define main_presence_device PRESENCE function {ReadingsVal('<PRESENCE-Device1-Name>','presence','present') eq 'absent' && ReadingsVal('<PRESENCE-Device2-Name>','presence','present') eq 'absent' ? '0' : '1'} 60 60

Deine PRESENCE-Devices bleiben, du frägst nur den Status derer ab und gibst den  Zustand zurück, mehr ist es nicht um das notify/den dummy zu ersetzen/sparen. ... weiter gehts dann vmtl. irgendwann mit RESIDENTS   :)


draddy

ok, dann hatte ich dich falsch verstanden ... ;)

aber


#Fritzbox MAC Check PRESENCE
sub checkFritzMACpresent(@) {
my $Status = 0;
my $FB = "FritzBox";
foreach(@_) {
my ($MAC) = $_;
my $StatusFritz = fhem("get FritzBox tr064Command Hosts:1 hosts GetSpecificHostEntry NewMACAddress $MAC",1);$StatusFritz =~/'NewActive' => '(.*)'/;return $1;
if ($StatusFritz == 1) { $Status = 1  };
}
return $Status

}


das ding läuft über die fhem Befehlszeile jetzt und scheint sauber  Status 0 oder 1 zu liefern (mit einer mac, 2 mac, 3 mac ...)

brauch doch jetzt nur noch das in PRESENCE mit funktion zu hauen, alle bekannten MACs für das Gerät angeben - fisch geputzt - 1 PRESENCE / Device ...

werde mal testen die nächsten Tage wie zuverlässig das läuft ;)
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

TomLee

brauch doch jetzt nur noch das in PRESENCE mit funktion zu hauen, alle bekannten MACs für das Gerät angeben - fisch geputzt - 1 PRESENCE / Device ...

MMn. ja.

draddy

#10
hm, zufrüh gefreut / falsch getestet xD

irgendwie funzt die foreach nicht - es wird nur die erste mac geprüft

jemand ne idee?

€dit:
kann es  sein das das  return 1 meine foreach beendet? in dem trim teil? ... kann ich das anders lösen?
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

draddy

habs das  tr064 request ausgelagert - should work now


##TEST MAC on Fritzbox using tr064##
sub myFbMacTest($$) {
my $var1 = 0;
my ($FB, $MAC) = @_;
$var1 = fhem("get FritzBox tr064Command Hosts:1 hosts GetSpecificHostEntry NewMACAddress $MAC",1);$var1 =~/'NewActive' => '(.*)'/; return $1;
}
#Fritzbox MAC Check PRESENCE
sub checkFritzMACpresent(@) {
my $Status = 0;
my $FB = "FritzBox";
my $MAC1 = "00:00:00:00:00:00";
my $StatusFritz = 0;
foreach(@_) {
$MAC1 = $_;
$StatusFritz = myFbMacTest($FB, $MAC1);
if ($StatusFritz == 1) {
$Status = 1; 
};
}
return $Status
}
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

draddy

habe ich noch ne Möglichkeit die Logeinträge zu unterdrücken die bei jeder MAC abfrage geschrieben werden?
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

OdfFhem


TomLee

Komisch, zur Bestätigung, bei mir erfolgt auch mit der Angabe ",1" nach dem FHEM-Befehl ein Logeintrag, vlt. "fehlt" da dem Fritzbox-Modul was das die Angabe nicht greift, keine Ahnung vom Hintergrund.