Auswertung LAN devices

Begonnen von martinp876, 12 Juni 2020, 08:55:03

Vorheriges Thema - Nächstes Thema

martinp876

Ich will die (W)LAN devices im Heimnetz auswerten. Das beinhaltet
- Definierten Devices (komplette MAC Liste)
- IP <->MAC<->name zuordnung
- Operational Zustand: Active, speed,...
- Topologie (WLAN/Router,...) für das Device

Alle Daten werden schon ausgelesen - leider werden sie wieder verworfen. In Zeile 1570 habe ich mir es zusammengebastelt. Anhand dieser Daten kann ich dann eigene Auswertungen machen. Diese sehen ggf. bei jeden User unterschiedlich aus.
         my $Mmac = defined $_->{mac} ? $_->{mac}: "";
         FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->UID" , $UID;
         FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->ip"  , $dIp;
         FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->name", $dName;
         FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->active", $_->{active};
         FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->mac", $Mmac;
         if(defined $wlanList{$Mmac}){
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->WLAN"    , 1;
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->guest",
                 ((defined $wlanList{$Mmac}{is_guest} && $_->{guest} eq "") ? $wlanList{$Mmac}{is_guest} :0);
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->speed"   ,$wlanList{$Mmac}{speed};
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->speed_rx",$wlanList{$Mmac}{speed_rx};
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->rssi"    ,$wlanList{$Mmac}{rssi};
         }
         else{
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->WLAN"    ,0;
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->guest"   ,0;
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->speed"   ,"-";
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->speed_rx","-";
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->rssi"    ,"-";
         }
         if ( $_->{ethernet_port} ) {
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->guest"   ,"g"         if $_->{guest};
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->LANport" ,$_->{ethernet_port};
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->LANspeed",($_->{speed} eq "1000" ? ", 1 Gbit/s"
                                                                                                                         :", $_->{speed} Mbit/s");
         }
         else{
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->LANport" ,'-';
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->LANport" ,'-';
            FRITZBOX_Readout_Add_Reading $hash, \@roReadings, "fhem->LANdevice->$dName->LANspeed",'-';
         }



Wozu brauche ich das - nun um mein Netz zu verwalten. Die FB bietet hier keine Optionen.
Zum weiter-denken (falls die Optionen auch andere interessieren) möchte ich Devices klassifizieren/gruppieren
- Infrastruktur (FB, NAS, Multi-Media)
- FHEM (IO devices, Raspberry,...)
- always on devices (Fernseher, Steuer-tablet)
- dynamic-devices (smartphones, laptops, Netzwerk-drucker)
- new(devices noch nicht erfasst)
Anhand der Gruppierung kann ich dann alarme und Auswertungen machen. Die Gruppierung muss der User einstellen, also ein Attribut. Da schon die Gruppen nicht fix sind wäre eine 2-stufige eingabe optimal:
Attr "LANGroup"- hier definiert der Anwender seine Gruppen. Ich würde einen Default vorgeben. Die Gruppen werden komma-separiert eingegeben.
Attr "LANdev_<LANGroup>" (ein attribut je LANGroup). Hier trägt man eine Liste der Devicename ein, welche zu dieser Gruppe gehören
Attr "LANattr_<LANGroup>" hier sehe ich eine Feature-list der Gruppe. Dies könnte sein:
   - list: es wird eine Liste der aktiven Devices in Internals angezeit (für present bspw)
   - required: Devices müssen aktiv sein. Das Fehlen muss einen Alarm auslösen - also ein entsprechendes Reading triggern. In Internals sollten alle inaktiven Devices stehen.
   - count: die Anzahl der aktiven Devices wird in einem Reading dargestellt.

Beispiel:
attr fb LANGroup network,fhem,dynamic,static # meine Liste der Gruppen
attr fb LANdev_network FB,PowerLine1, PowerLine2,NAS  # liste der Devices, welche ich als Netzwerk betrachte
attr fb LANdev_fhem Rasp1,IOlan,CCU1,HMCCU  # liste der Devices, welche ichzu FHEM zähle
attr fb LANdev_dynamic meinSmart,FrauSmart,KindSmart  # liste der dynamischen Devices

attr fb LANattr_network required,count
attr fb LANattr_dynamic list,count
attr fb LANattr_static required,count,list


Zusammenfassend:
- wichtig ist für mich erst einmal, dass die Daten in FRITZBOX erfasst und nicht wie aktuell verworfen werden
- der 2. Teil mit der Auswertung ist sekundär. Wenn das nicht eingeabut wird kann ich es auch selbst machen.



Hollo

Auf die Gefahr hin, dass ich hier quasi wieder ,,Gotteslästerung" betreibe...
Meiner persönlichen Meinung nach sind die ,,Heimnetzwerk"-Informationen der Fritzbox nutzlos, weil Schätzungen.

Das mag in einer Minimal-Konfiguration (Fritte + Laptop / Handy über WLAN) gehen, aber in einem größeren Geräte-Park, den ich dir jetzt mal unterstelle, nicht.

Beispiel:
Bei meiner Fritzbox ist netzwerkmässig alles aus (WLAN, DHCP, DNS), trotzdem
- werden LAN-Devices als ,,per WLAN" verbunden (und umgekehrt) angezeigt
- stimmt der aktuelle Status natürlich nicht
- verschieben sich zwischendurch IP- und MAC-Adressen
- verhindert die Fritte zwischendurch die korrekte Namensauflösung
- ...

Da du eh Gruppen bilden willst, könnte der Weg über PiHole evtl. interessant sein.
Für DHCP liegt meines Wissens weiterhin dnsmasq zugrunde, wo du (früher) auch eigene Aktionen wie z.B. scripte aufrufen kannst. Damit könntest du z.B. beim An-/Abmelden ein notify triggern.
Die IP/MAC Kombi hättest du ebenfalls.

Wenn sich das dann noch über eine API steuern ließe, wäre das ja für einige recht cool.

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

martinp876

danke für die Tips. Das werde ich mir ansehen.
Allerdings finde ich es (sehr) schade, die bereits eingeholte Info einfach zu verwerfen. Auf dieser Basis kann ich quasi nichts damit anfangen.
Interessant sind dann in jedem Fall die Infos zu den in der FB eingetragenen MAC Adressen. Die Auswertung der FB selbst ist ... unangenehm.

In meinem Setup habe ich neben der FB auch powerline mit eigenen WLAN (quasi-repeater). Da auch schon einmal ein Powerline den Dienst quitierte will(muss) ich das überwachen.....

dnsmasq sagt mir nichts, läst sich aber sicher finden.

Den Update in FRITZBOX halte ich in jedem Fall für notwendig.



Wernieman

@Hollo

auf "Abmeldung" bei DHCP und/oder WLAN o.Ä. würde ich mich nie verlassen. Wie soll z.B. das Handy sich abmelden, wenn Du das Haus verlässt?

Nur mal Teoretisch:
Das handy verlässt das WLAN, braucht aber zum abmelden ein intaktes WLAN ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MadMax-FHEM

#4
Wie wäre es statt Fritzbox mit dem nmap-Modul...
...gut "viel (zusätzliche) Last" und keine Unterscheidung LAN/WLAN etc.

Aber (verm.) zuverlässig(er)...

Nur als (weitere) Idee...

(ich habe es weder im Einsatz [doch: ganz kurz zum Test aber wie auch jetzt mit Unifi: mehr aus "Interesse"] noch bekomme ich Provision ;)  )

(ich habe hinter meiner "Zwangs-Fritte" ein Unifi-Netz, das geht mit dem Unifi-Modul ganz gut aber für mich mehr zur "Übersicht" und "Spielerei" denn "verlässliche" Info für "Automatismen"... ;)  [obwohl da sicher was ginge, die Daten scheinen gut/verlässlich zu sein]  / auch hier: leider keine Provision... ;)  )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

martinp876

Zitatauf "Abmeldung" bei DHCP und/oder WLAN o.Ä. würde ich mich nie verlassen. Wie soll z.B. das Handy sich abmelden, wenn Du das Haus verlässt?
nun - ist das eine rethorische Frage? So etwas macht man seit Computer-gedenken mit timern. Das ist dann nicht echtzeit, aber nach ein paar min ist man auf Stand (jenach timer)
Nicht böse gemeint, aber ein Problem sehe ich wirklich nicht. Möglich, dass es nicht realisiert ist.
Meine FB zeigt inaktive Devices an.... den Mechanismus kenne ich nicht im Detail... timer?

Meine zeitliche Vorstellung zur Überwachung ist eher entspannt. Ich will nicht das Licht anschalten, wenn das Smartphone das Haus verlässt. Es reicht mir, wenn ich nach 5min defekte im Netzwerk erkenne. Schneller reagiere ich eh nicht.

martinp876

#6
So, habe die Begriffe einmal sortiert....
A) Ich habe kein exzesives Netzwerk - einige Devices sind natürlich vorhanden...
B) Die FB ist im Bezug auf DNS,... m.E.ok. Ich brauche nicht wirklich etwas anderes. Ich versuche mein Netzwerk schlank zu halten und die FB ist als Network-Sternpunkt (aktuell) bei mir gesetzt. PiHole u.ä. scheiden also erst einmal aus.
C) Die FB ist in der Lage, eini paar Infos über Devices bereitzustellen
i) genutzt/ungenutzt, also aktiv/inaktiv. Das genaue Timing kenne ich nicht, allerdings  scheint es zu taugen
ii) Art der Verbindung: Device verbunden über PowerLine "A"  / transfere-rate
iii) Power-line information (datenraten)

Damit habe ich doch das Wesentliche um auszuwerten und zu alarmieren. Alarm reicht bei mir in 5min präzision locker. Typisch schaue ich es mir eh nur gelegentlich an....
Device "A": Required, aktiv, Verbunden über WLAN/PowerlineDevice "x", Datenrate
Device "B": not-Required, aktiv, Verbunden über LAN, Datenrate

Ein externes "ping" tool scheint mir also nicht hilfreich - ich will nur gucken, nicht mein Netz umstellen.

Nachtrag:
in der aktuellen FRITZBOX sind einige Daten vorhanden. Allerdings  m.E. sinnlos, weil nicht korrelierbar. Wie komme ich von der WLAN tabelle auf den Device-Name?

Ich habe die Struktur am Device-namen festgemacht, weil es einfach war. Besser ist sicher die UID. So stelle ich mir die interne Datenablage vor
       nas:
         LANport    2
         LANspeed   , 1 Gbit/s
         UID        landevice12962
         WLAN       0
         active     1
         guest      0
         ip         192.168.178.34
         mac        00:11:32:71:F5:DC
         name       nas
         rssi       -
         speed      -
         speed_rx   -


Wernieman

Der "Timer" ist bei der Fritte 15 Minuten .....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

martinp876

Ich bekräftige noch einmal meine Forderung das Verfahren zu mac adressen im fritzbox modul zu verbessern.
A) mac adressen werden  wenn nicht vorhanden schlicht heimlich entfernt. Das es sich nicht um konfigurationsdaten handelt ist das schlicht ein Unding. Der status ist auf not-connected o.ä. zu setzen. Ich will so etwas per event auswerten können.
B) die möglicherweise wertvolle info zum connectiontyp ist vorhanden, wird aber nur für WLAN ausgegeben. Warum nicht alles?
C) die connection info enthält bspw auch den zusatz vpn. Das ist wertvoll den das device ist eingeloggt, aber nicht im haus, also nicht present ( nur virtuell)

Leider werden die infos noch nicht einmal im hindergrund gehalten so dass ich sie Anfragen könnte. Muss nicht alles in readings stehen.

Klar ist mir mittlerweile, dass ich das modul an dieser stelle umschreiben muss, damit ich etwas anfangen kann. Es geht sehr knapp am ziel vorbei, erzielt aber leider treffen.

Kann man über eine verbesserung reden?