[gelöst] Gäste WLAN Fritzbox auswerten

Begonnen von Dia81, 01 Mai 2019, 11:46:03

Vorheriges Thema - Nächstes Thema

Dia81

Hallo zusammen,

es gab vor einigen Jahren schon einige ähnliche Threads zu dem Thema, aber dort finde ich keine Lösung.

Ich möchte gerne per Telegram eine Nachricht bekommen wer sich in mein Gäste-WLAN eingewählt hat.
Es scheitert jetzt an Code und Kombination.
Die Anzahl der im GästeWLAN befindlichen Geräte bekomme ich ja über das entsprechende Fritzbox Reading.
Die Geräte sind im Fritzbox-Modul ebenfalls aufgeführt. Die Geräte werden dort unter der entsprechenden MAC-Adresse als Reading angelegt und bekommtn den Beispielwert Jennys-iPad (gWLAN, 150 / 135 Mbit/s, -32). Man müsste also jetzt einen Codebauen, dass wenn der GästeWLAN-Count >0 ist, entsprechende Readings mit den WErten gWLAN rausgesucht werden und dann dort, allerdings nur mit den Namen, hier Jennys Ipad zugeschickt werden.

Als Readingsgroup konstruiert habe ich dies mr hier zusammen gesucht (was auch klappt):

define UserGWLAN readingsGroup <MAC-Adresse>,<Gerät> Fritzbox7490:mac_.*
attr UserGWLAN mapping {$READING =~ s/mac_//;;;; return $READING}
attr UserGWLAN nolinks 1
attr UserGWLAN notime 1
attr UserGWLAN valueFormat { return (split(/ /,$VALUE))[0] if ( $VALUE =~ m/gWLAN/ );; return undef;; }


Vielleicht kann hier jemand weiterhelfen?


amenomade

Kannst eine kleine Routine in myUtils bauen, die alle MAC_ Readings auwertet und entsprechend deine Nachricht vorbereitet.

Beispiel Routine mit der Schleife:
https://forum.fhem.de/index.php/topic,72753.msg645215.html#msg645215

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Dia81

Zitat von: amenomade am 02 Mai 2019, 18:26:06
Kannst eine kleine Routine in myUtils bauen, die alle MAC_ Readings auwertet und entsprechend deine Nachricht vorbereitet.

Beispiel Routine mit der Schleife:
https://forum.fhem.de/index.php/topic,72753.msg645215.html#msg645215
angeschaut und verwirrt stehen geblieben :> Verstehe leider nicht wie ich den dortigen Code auf meine Anforderung umbauen kann

amenomade

ZitatDie Anzahl der im GästeWLAN befindlichen Geräte bekomme ich ja über das entsprechende Fritzbox Reading.
Ein gutes Trigger für ein notify.

Und im notify übernimmst Du den Code für die Schleife, und machst dann was Du willst:
{my $key; my $nachricht = "";
my $hash = $defs{"FritzBox"};
while (($key) = each($hash->{READINGS})){
if ($key =~ 'mac_' and ReadingsVal("Fritzbox",$key,"")=~'WLAN') {
        $nachricht .= ReadingsVal("Fritzbox",$key,"");
}
}
<nachricht> schicken;
}

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Dia81

Zitat von: amenomade am 03 Mai 2019, 19:01:40
Ein gutes Trigger für ein notify.

Und im notify übernimmst Du den Code für die Schleife, und machst dann was Du willst:
{my $key; my $nachricht = "";
my $hash = $defs{"FritzBox"};
while (($key) = each($hash->{READINGS})){
if ($key =~ 'mac_' and ReadingsVal("Fritzbox",$key,"")=~'WLAN') {
        $nachricht .= ReadingsVal("Fritzbox",$key,"");
}
}
<nachricht> schicken;
}



Okay aber verstehe das script so dass er mir alle angemeldeten MAC-ADressen liefert aber nicht die Gerätenamen derer Mac-ADresse die zugleich im gWLAN angemeldet sind

Byte09

Zitat von: Dia81 am 01 Mai 2019, 11:46:03
Hallo zusammen,

es gab vor einigen Jahren schon einige ähnliche Threads zu dem Thema, aber dort finde ich keine Lösung.

Ich möchte gerne per Telegram eine Nachricht bekommen wer sich in mein Gäste-WLAN eingewählt hat.
Es scheitert jetzt an Code und Kombination.
Die Anzahl der im GästeWLAN befindlichen Geräte bekomme ich ja über das entsprechende Fritzbox Reading.
Die Geräte sind im Fritzbox-Modul ebenfalls aufgeführt. Die Geräte werden dort unter der entsprechenden MAC-Adresse als Reading angelegt und bekommtn den Beispielwert Jennys-iPad (gWLAN, 150 / 135 Mbit/s, -32). Man müsste also jetzt einen Codebauen, dass wenn der GästeWLAN-Count >0 ist, entsprechende Readings mit den WErten gWLAN rausgesucht werden und dann dort, allerdings nur mit den Namen, hier Jennys Ipad zugeschickt werden.

Als Readingsgroup konstruiert habe ich dies mr hier zusammen gesucht (was auch klappt):

define UserGWLAN readingsGroup <MAC-Adresse>,<Gerät> Fritzbox7490:mac_.*
attr UserGWLAN mapping {$READING =~ s/mac_//;;;; return $READING}
attr UserGWLAN nolinks 1
attr UserGWLAN notime 1
attr UserGWLAN valueFormat { return (split(/ /,$VALUE))[0] if ( $VALUE =~ m/gWLAN/ );; return undef;; }


Vielleicht kann hier jemand weiterhelfen?

angehängtes MSwitch sollte genau das tun was du möchtest.
ggf. musst du die Namen der devices anpassen.

telegrammversand erfolgt bei anzahl gastuser > 0

wenn du magst kannst du es dir ja mal anschauen.

gruss Byte09

defmod wlan_Info MSwitch Fritzbox # FreeCmd teleBot
attr wlan_Info MSwitch_Debug 0
attr wlan_Info MSwitch_Delete_Delays 1
attr wlan_Info MSwitch_Expert 1
attr wlan_Info MSwitch_Extensions 0
attr wlan_Info MSwitch_Help 1
attr wlan_Info MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr wlan_Info MSwitch_Include_Devicecmds 1
attr wlan_Info MSwitch_Include_MSwitchcmds 0
attr wlan_Info MSwitch_Include_Webcmds 0
attr wlan_Info MSwitch_Inforoom MSwitch
attr wlan_Info MSwitch_Lock_Quickedit 1
attr wlan_Info MSwitch_Mode Full
attr wlan_Info eventMap /exec_cmd_1:read_info/exec_cmd_1 ID 1:clear_readings/
attr wlan_Info room 1_test
attr wlan_Info stateFormat {my $out = ReadingsVal($name,'Devices_all','no_info');;$out=~ s/\n/<br>/ig;;return $out;;}
attr wlan_Info webCmd read_info:clear_readings

setstate wlan_Info Angemeldete Gastuser :<br>
setstate wlan_Info 2019-05-04 13:42:31 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,teleBot-AbsCmd1
setstate wlan_Info 2019-05-04 16:45:15 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$alldevices#[se]#[nl]my#[sp]$devhash#[sp]=#[sp]$defs{"Fritzbox"}#[se]#[nl]my#[sp]$testreading#[sp]=#[sp]$devhash#[sp]->{READINGS}#[se]#[nl]my#[sp]@areadings#[sp]=#[sp](#[sp]keys#[sp]%{$testreading}#[sp])#[se]#[nl]my#[sp]@username#[se]#[nl]foreach#[sp]my#[sp]$key#[sp](@areadings)#[sp]#[nl]{#[nl]my#[sp]$tmp#[sp]=#[sp]ReadingsVal(#[sp]'Fritzbox'#[ko]#[sp]$key#[ko]#[sp]'undef'#[sp])#[se]#[nl]if#[sp](#[sp]$tmp#[sp]=~#[sp]m/#[bs](gWLAN/#[sp])#[nl]{#[nl]@username#[sp]=#[sp]split(/#[sp]/#[ko]#[sp]$tmp)#[se]#[nl]$alldevices#[sp].=#[sp]$username[0]."#[bs]n"#[se]#[nl]}#[nl]}#[sp]#[sp]#[sp]#[nl]fhem("setreading#[sp]$SELF#[sp]Devices_all#[sp]Angemeldete#[sp]Gastuser#[sp]#[dp]#[bs]n$alldevices")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]{#[nl]fhem("deletereading#[sp]$SELF#[sp]Devices_.*")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]0#[NF]0#[NF]1#[ND]teleBot-AbsCmd1#[NF]_msg#[NF]no_action#[NF][$SELF#[dp]Devices_all]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF][$SELF#[dp]EVTPART3]#[sp]>#[sp]0#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate wlan_Info 2019-05-04 16:42:44 .Device_Events box_guestWlanCount:*#[tr]no_trigger
setstate wlan_Info 2019-05-04 13:10:48 .First_init done
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_Whitelist undef
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_cmd_off no_trigger
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_cmd_on box_guestWlanCount:*
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_condition "$EVENT"#[sp]=#[ti]#[sp]m/(#[pt]*#[dp]?)box_guestWlanCount(#[dp]#[pt]*)/
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_off no_trigger
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_on no_trigger
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_time
setstate wlan_Info 2019-05-04 13:10:48 .V_Check V2.00
setstate wlan_Info 2019-05-04 13:10:48 .sysconf undef
setstate wlan_Info 2019-05-04 16:44:40 Devices_all Angemeldete Gastuser :\

setstate wlan_Info 2019-05-04 16:37:46 EVENT box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:37:46 EVTFULL Fritzbox:box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:37:46 EVTPART1 Fritzbox
setstate wlan_Info 2019-05-04 16:37:46 EVTPART2 box_guestWlanCount
setstate wlan_Info 2019-05-04 16:37:46 EVTPART3 0
setstate wlan_Info 2019-05-04 13:10:48 Sys_Extension undef
setstate wlan_Info 2019-05-04 16:37:22 Trigger_device Fritzbox
setstate wlan_Info 2019-05-04 16:33:05 Trigger_log off
setstate wlan_Info 2019-05-04 16:42:44 last_activation_by event
setstate wlan_Info 2019-05-04 16:44:40 last_cmd 1
setstate wlan_Info 2019-05-04 16:37:46 last_event box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:44:40 last_exec_cmd   {my $alldevices;;my $devhash = $defs{"Fritzbox"};;my $testreading = $devhash ->{READINGS};;my @areadi....
setstate wlan_Info 2019-05-04 13:34:57 state on



Dia81

#6
Zitat von: Byte09 am 04 Mai 2019, 16:48:55
angehängtes MSwitch sollte genau das tun was du möchtest.
ggf. musst du die Namen der devices anpassen.

telegrammversand erfolgt bei anzahl gastuser > 0

wenn du magst kannst du es dir ja mal anschauen.

gruss Byte09

defmod wlan_Info MSwitch Fritzbox # FreeCmd teleBot
attr wlan_Info MSwitch_Debug 0
attr wlan_Info MSwitch_Delete_Delays 1
attr wlan_Info MSwitch_Expert 1
attr wlan_Info MSwitch_Extensions 0
attr wlan_Info MSwitch_Help 1
attr wlan_Info MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr wlan_Info MSwitch_Include_Devicecmds 1
attr wlan_Info MSwitch_Include_MSwitchcmds 0
attr wlan_Info MSwitch_Include_Webcmds 0
attr wlan_Info MSwitch_Inforoom MSwitch
attr wlan_Info MSwitch_Lock_Quickedit 1
attr wlan_Info MSwitch_Mode Full
attr wlan_Info eventMap /exec_cmd_1:read_info/exec_cmd_1 ID 1:clear_readings/
attr wlan_Info room 1_test
attr wlan_Info stateFormat {my $out = ReadingsVal($name,'Devices_all','no_info');;$out=~ s/\n/<br>/ig;;return $out;;}
attr wlan_Info webCmd read_info:clear_readings

setstate wlan_Info Angemeldete Gastuser :<br>
setstate wlan_Info 2019-05-04 13:42:31 .Device_Affected FreeCmd-AbsCmd1,FreeCmd-AbsCmd2,teleBot-AbsCmd1
setstate wlan_Info 2019-05-04 16:45:15 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]{#[nl]my#[sp]$alldevices#[se]#[nl]my#[sp]$devhash#[sp]=#[sp]$defs{"Fritzbox"}#[se]#[nl]my#[sp]$testreading#[sp]=#[sp]$devhash#[sp]->{READINGS}#[se]#[nl]my#[sp]@areadings#[sp]=#[sp](#[sp]keys#[sp]%{$testreading}#[sp])#[se]#[nl]my#[sp]@username#[se]#[nl]foreach#[sp]my#[sp]$key#[sp](@areadings)#[sp]#[nl]{#[nl]my#[sp]$tmp#[sp]=#[sp]ReadingsVal(#[sp]'Fritzbox'#[ko]#[sp]$key#[ko]#[sp]'undef'#[sp])#[se]#[nl]if#[sp](#[sp]$tmp#[sp]=~#[sp]m/#[bs](gWLAN/#[sp])#[nl]{#[nl]@username#[sp]=#[sp]split(/#[sp]/#[ko]#[sp]$tmp)#[se]#[nl]$alldevices#[sp].=#[sp]$username[0]."#[bs]n"#[se]#[nl]}#[nl]}#[sp]#[sp]#[sp]#[nl]fhem("setreading#[sp]$SELF#[sp]Devices_all#[sp]Angemeldete#[sp]Gastuser#[sp]#[dp]#[bs]n$alldevices")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]FreeCmd-AbsCmd2#[NF]cmd#[NF]cmd#[NF]{#[nl]fhem("deletereading#[sp]$SELF#[sp]Devices_.*")#[se]#[nl]}#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]0#[NF]0#[NF]1#[ND]teleBot-AbsCmd1#[NF]_msg#[NF]no_action#[NF][$SELF#[dp]Devices_all]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF][$SELF#[dp]EVTPART3]#[sp]>#[sp]0#[NF]#[NF]0#[NF]0#[NF]2#[NF]0#[NF]#[NF]0#[NF]0#[NF]1
setstate wlan_Info 2019-05-04 16:42:44 .Device_Events box_guestWlanCount:*#[tr]no_trigger
setstate wlan_Info 2019-05-04 13:10:48 .First_init done
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_Whitelist undef
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_cmd_off no_trigger
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_cmd_on box_guestWlanCount:*
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_condition "$EVENT"#[sp]=#[ti]#[sp]m/(#[pt]*#[dp]?)box_guestWlanCount(#[dp]#[pt]*)/
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_off no_trigger
setstate wlan_Info 2019-05-04 16:33:05 .Trigger_on no_trigger
setstate wlan_Info 2019-05-04 16:37:22 .Trigger_time
setstate wlan_Info 2019-05-04 13:10:48 .V_Check V2.00
setstate wlan_Info 2019-05-04 13:10:48 .sysconf undef
setstate wlan_Info 2019-05-04 16:44:40 Devices_all Angemeldete Gastuser :\

setstate wlan_Info 2019-05-04 16:37:46 EVENT box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:37:46 EVTFULL Fritzbox:box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:37:46 EVTPART1 Fritzbox
setstate wlan_Info 2019-05-04 16:37:46 EVTPART2 box_guestWlanCount
setstate wlan_Info 2019-05-04 16:37:46 EVTPART3 0
setstate wlan_Info 2019-05-04 13:10:48 Sys_Extension undef
setstate wlan_Info 2019-05-04 16:37:22 Trigger_device Fritzbox
setstate wlan_Info 2019-05-04 16:33:05 Trigger_log off
setstate wlan_Info 2019-05-04 16:42:44 last_activation_by event
setstate wlan_Info 2019-05-04 16:44:40 last_cmd 1
setstate wlan_Info 2019-05-04 16:37:46 last_event box_guestWlanCount:0
setstate wlan_Info 2019-05-04 16:44:40 last_exec_cmd   {my $alldevices;;my $devhash = $defs{"Fritzbox"};;my $testreading = $devhash ->{READINGS};;my @areadi....
setstate wlan_Info 2019-05-04 13:34:57 state on



Wow! ERsmal fettes Dank. Habe den Kompletten Code übernommen und mein Fritz-Device angepasst. Es funktioniert auf jedenfall wobei ich zugeben muss dass der Code über mein KnowHow herausgeht. Vielen lieben Dank! ABER bekomme jetzt alle 5 Minuten also bei jedem neuen Fritzboxabfragen eine Meldung mit dem selben einen User. Hab ich da nochwas falsch? sollte ja nur bei Veränderungen kommen da man sonst zu"gespamt" wird :)

Byte09

eigentlich brauchst du keine setstate einträge entfernen - im grunde im code gar nichts ändern. alle anbpassungen kannst du über die weboberfläche des MSwitch-Devices machen.

bei interesse: https://wiki.fhem.de/wiki/MSwitch

gruss Byte09

Dia81

Zitat von: Byte09 am 04 Mai 2019, 18:46:51
eigentlich brauchst du keine setstate einträge entfernen - im grunde im code gar nichts ändern. alle anbpassungen kannst du über die weboberfläche des MSwitch-Devices machen.

bei interesse: https://wiki.fhem.de/wiki/MSwitch

gruss Byte09

jo befasse mich gerade näher damit. Wie oben editiert folgt nun aber ein 5 minütiger "Spam" des immer gleichen "Gastes". Wie ist dies zu ändern? (nur bei Anzahl Änderung z.b:)

Byte09

#9
Zitat von: Dia81 am 04 Mai 2019, 19:08:53
jo befasse mich gerade näher damit. Wie oben editiert folgt nun aber ein 5 minütiger "Spam" des immer gleichen "Gastes". Wie ist dies zu ändern? (nur bei Anzahl Änderung z.b:)

am einfachsten in dem du dafür sorgst, das nur ein event von dem fritzmodul generiert wird, wenn sich das reading ändert.

setz im fritzbox device mal testweise das attribut 'event-on-change-reading' auf '.*' und schau mal ob es dann weg ist.

gruss Byte09


edit: ich werde das device noch entsprechend ändern , so das eine mitteilung nur dann erfolgt, wenn sich die 'Gastuser' geändert haben. Schaffe ich aber wahrscheinlich erst morgen und ich denke das Problem sollte mit setzen des Attributes auch behoben sen.

Dia81

Astrein LÄUFT! Fetten Dank!!!

Maista

@Byte09

Funktioniert auch bei mir nach dem ich alle "teleBot" und "Fritzbox" angepasst habe  ;)

Danke und Gruss

Gerd

PS: Kommt das mit ins Wiki? Zum. der Verweis darauf?

Byte09

Zitat von: Maista am 04 Mai 2019, 22:08:30
@Byte09

Funktioniert auch bei mir nach dem ich alle "teleBot" und "Fritzbox" angepasst habe  ;)

Danke und Gruss

Gerd

PS: Kommt das mit ins Wiki? Zum. der Verweis darauf?


ich habe es nicht so mit Wiki-Schreiben , weisst du doch  ;)

gruss Byte09

stratege-0815

Ist zwar ein älteres Thema, passt für mich aber 1A. Nur wo definiere ich den Telegram Adressaten?

Maista

#14
Soweit ich mich erinnere schickt das Bot-Modul ohne Angabe eines Empfängers den Text an den Default Empfänger.

Nur am Mobiltelefon deswegen nicht genau  ;)

Edit: Attribut "defaultPeer"

Gruß Gerd