Autor Thema: [gelöst] Identifizieren wo man gerade über WLAN angemeldet ist?  (Gelesen 378 mal)

Offline hoods

  • Jr. Member
  • **
  • Beiträge: 61
Hallo zusammen,

ich nutze 2 Fritzbox WLAN Repeater als Access Points im Erdgeschoss und 1. Stockwerk.
Nun habe ich gelesen das die Fritzbox neuerdings auch rssi und speed der Wlan Verbindung liefert.
Aufgabenstellung: Ist es möglich durch Auswertung der Werte zu identifizieren, wo mein Handy gerade angemeldet ist?

AP 1. Stock:
list FB_Repeater_Ole mac_xx_xx_xx_xx_xx_xx--> liefert kein result

AP Erdgeschoss:
list FB_Repeater_WZ mac_xx_xx_xx_xx_xx_xx--> liefert: FB_Repeater_WZ 2017-02-10 21:48:10 PC-192-168-178-20 (WLAN, 234 / 195 Mbit/s, 26)

FB im Keller:
list Fritzbox7362SL mac_xx_xx_xx_xx_xx_xx--> liefert: Fritzbox7362SL 2017-02-10 21:48:11 P9-Sven (LAN1)

Versuch:
define di_Location_Handy DOIF ([FB_Repeater_WZ:mac_xx_xx_xx_xx_xx_xx] eq "WLAN")(set teleBot msg ### angemeldet an $DEVICE)
Ich scheitere leider bereits daran  :'(, dass ich nicht 100%ig verstehe ob die mac Adresse wirklich das reading ist, denn vom Aufbau sieht das soweit ich verstehe wie folgt aus:

<device> : <reading> : <reading?> : <wert>
FB_Repeater_WZ : mac_xx_xx_xx_xx_xx_xx : rssi : 0


1. Sind mac und rssi beides readings?

2. Wie müsste die DOIF Bedingung aussehen wenn ich auf WLAN oder vielleicht sogar den Wert nach dem letzten Komma in der Klammer suchen möchte?

Ich hoffe einer der Experten hier kann mir einen Tipp geben.

Danke & Gruß,
Sven


Hier noch ein list des Fritzbox Repeaters:
Internals:
   APICHECKED 1
   DEF        192.168.178.2
   HOST       192.168.178.2
   INTERVAL   300
   LUAQUERY   1
   M3U_LOCAL  ./www/images/FB_Repeater_WZ.m3u
   M3U_URL    unknown
   NAME       FB_Repeater_WZ
   NR         481
   REMOTE     1
   SECPORT    49443
   STATE      WLAN: on gWLAN: off
   TELNET     0
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   Readings:
     2017-02-11 15:23:46   box_connect     5
     2017-02-11 15:23:46   box_cpuTemp     0
     2017-02-11 15:23:46   box_fwVersion   134.06.51
     2017-02-11 15:23:46   box_guestWlan   off
     2017-02-11 15:23:46   box_guestWlanCount 0
     2017-02-11 15:23:46   box_guestWlanRemain 0
     2017-02-11 15:23:46   box_ipExtern    192.168.178.2
     2017-02-11 13:58:39   box_model       FRITZ!WLAN Repeater 1750E [avm]
     2017-02-11 15:23:46   box_powerRate   76
     2017-02-11 15:23:46   box_tr064       on
     2017-02-11 15:23:46   box_tr069       off
     2017-02-11 15:23:46   box_wlanCount   11
     2017-02-11 15:23:46   box_wlan_2.4GHz on
     2017-02-11 15:23:46   box_wlan_5GHz   on
     2017-02-11 15:23:46   lastReadout     105 values captured in 0.31 s
     ...
     2017-02-11 15:23:46   mac_xx_xx_xx_xx_xx_xx PC-192-168-178-35 (WLAN, 77 / 50 Mbit/s, 48)
     2017-02-11 15:23:46   mac_xx_xx_xx_xx_xx_xx PC-192-168-178-33 (WLAN, 37 / 35 Mbit/s, 46)
     2017-02-11 15:23:46   state           WLAN: on gWLAN: off
   Fhem:
     LOCAL      0
     definedHost 192.168.178.2
     is_double_wlan 1
     lastHour   0
     modulVersion $Date: 2017-01-27 19:09:22 +0100 (Fri, 27 Jan 2017) $
     radioCount 0
     sid        4ca4b7730eda48e1
     sidTime    1486823026.09045
     Landevice:
       192.168.178.46 PC-192-168-178-46
       192.168.178.47 PC-192-168-178-47
       192.168.178.53 PC-192-168-178-53
       landevice200391 PC-192-168-178-46
       landevice200417 PC-192-168-178-53
       landevice200466 PC-192-168-178-26
        ...
     Wlandevice:
       xx_xx_xx_xx_xx_xx:
         rssi       48
         speed      56
         speed_rx   15
       ... 
« Letzte Änderung: 17 Februar 2017, 16:58:58 von hoods »
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #1 am: 11 Februar 2017, 16:45:18 »
Hallo Sven,

mach doch mal in der Kommandozeile {ReadingsVal("FB_Repeater_WZ","mac_xx_xx_xx_xx_xx_xx","")}

Dann siehst Du was Name und was Inhalt ist.

Mich wundert der positive rssi Wert  :-[

Also meine sind alle negativ, Du musst ja Power Wlan haben?

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline hoods

  • Jr. Member
  • **
  • Beiträge: 61
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #2 am: 11 Februar 2017, 17:21:20 »
Hallo Otto,

hier das Ergebnis:
PC-192-168-178-20 (WLAN, 390 / 433 Mbit/s, 53)
Du meinst mit Power Wlan die Power LAN Adapter (also LAN über 220V)? Davon sind 2 im Haus verbaut und einer der beiden APs ist darüber angebunden, ja.

Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #3 am: 11 Februar 2017, 17:39:43 »
Hi,

das mit dem Power Wlan war ein Scherz :) bei mir sehen alle Werte so aus:
PC-192-168-178-26 (WLAN, 64 / 6 Mbit/s, -53)
Typischerweise steht vor dem rssi Wert ein minus Zeichen. Es ist ein relatives logarithmisches Maß normalerweise mit einer Skala 0 bis -100. 0 Ist also das Maximum -100 minimum. Ab -80 und kleiner ist es normalerweise kritisch.

Bei dir steht 53 - fehlt jetzt das minus Zeichen oder ist es plus 53? das wären 100 dB Unterschied also Faktor 100000.

Dann wäre bei Dir zu Hause quasi eine große Mikrowelle die alles bruzelt.  :o

Zum Thema: Damit Du jetzt weitermachen kannst musst Du den Inhalt des Readings splitten.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline hoods

  • Jr. Member
  • **
  • Beiträge: 61
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #4 am: 11 Februar 2017, 19:22:29 »
Hi Otto,

und ich dachte schon es gäb neue Gadget's - Power Wlan - von denen ich bisher nichts mitbekommen habe ...

Warum bei mir das minus Zeichen fehlt, keine Ahnung aber es fehlt zumindest konsistent bei allen Devices.

Bzgl. reading splitten, ich nehme an das geht nicht mit einem Fhem Befehl direkt, sonder mittels perl / regexp oder? Leider bin ich blutiger perl Anfänger  :-\.

Ich hatte bereits versucht auf WLAN zu matchen aber mangel Verständnis passt das nicht:
{ ReadingsVal("FB_Repeater_WZ","mac_94_FE_22_FA_59_1D","") =~ /WLAN/; return $1 }

Wie müsste der Code aussehen?

Danke & Gruss,
Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #5 am: 11 Februar 2017, 19:40:53 »
Hi Sven,

da sind wir schon zu zweit  ;)

Schau mal wenn Du dies in der Google Suche eingibst site:forum.fhem.de reading splitten
findest Du ziemlich interessante Beiträge und in einem findest Du sowas in der Art:
{(split ' ',ReadingsVal("FB7490","mac_5C_CF_7F_C1_2F_48",""))[6]}
ReadingsVal("FB7490","mac_5C_CF_7F_C1_2F_48","")ergibt bei mir PC-5C-CF-7F-C1-2F-48 (WLAN, 40 / 6 Mbit/s, -76)
und {(split ' ',ReadingsVal("FB7490","mac_5C_CF_7F_C1_2F_48",""))[6]}
ergibt -76)


Also das wäre ein Anfang :)

Gruß Otto
« Letzte Änderung: 11 Februar 2017, 19:42:59 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline hoods

  • Jr. Member
  • **
  • Beiträge: 61
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #6 am: 11 Februar 2017, 21:43:22 »
Hi Otto,

oh man danke fürs "schubsen" ich hatte schon gesucht nach split und reading aber offensichtlich zu früh aufgegeben.

Aktueller Status:

{ (split ' ', ReadingsVal("FB_Repeater_WZ","mac_94_FE_22_FA_59_1D",""))[6] =~/(\d+)/ }

-> liefert 1 wenn der Inhalt der Variable zur regexp passt.

also

Fritzbox7362SL    ->
FB_Repeater_WZ -> 1
FB_Repeater_Ole ->


Nächster Schritt notify bauen:
define n_Location_Handy notify (Fritzbox7362SL|FB_Repeater_WZ|FB_Repeater_Ole) {
my $loc = (split ' ', ReadingsVal($NAME,"mac_94_FE_22_FA_59_1D",""))[6] =~/(\d+)/;;
if ( $loc eq 1 ) { Log 1, "###  P9-Sven $NAME $loc" } }


Leider liefert das notify im Moment noch Fehler und zu viele Log Einträge:
2017.02.11 21:33:51 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106319) line 1.
2017.02.11 21:33:51 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106320) line 1.
2017.02.11 21:33:51 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106321) line 1.
2017.02.11 21:33:51 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106322) line 1.
2017.02.11 21:33:51 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106323) line 1.
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: ###  P9-Sven FB_Repeater_WZ 1
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106354) line 1.
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106355) line 1.
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106356) line 1.
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106357) line 1.
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106358) line 1.
2017.02.11 21:33:52 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 106359) line 1.


Vermutlich weil der Ausdruck manchmal leer ist, richtig?
Aber warum so viele Log Einträge ...

So long, Sven

Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #7 am: 11 Februar 2017, 22:16:36 »
Hallo Sven,

Du triggerst mit dem notify auf jeden event Deines FB definitionen!
ich würde auf lastReadout triggern. Eventuell so
(Fritzbox7362SL:lastReadout:.*|FB_Repeater_WZ:lastReadout:.*|FB_Repeater_Ole:lastReadout:.*)
Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline hoods

  • Jr. Member
  • **
  • Beiträge: 61
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #8 am: 17 Februar 2017, 16:45:19 »
Hallo Otto,

ich war ein paar Tage beruflich unterwegs aber ich wollte hier noch meine Ergebnisse hinterlassen, vielleicht kann es ja noch jemand gebrauchen.

Das notify funktioniert in der Zwischenzeit wie gewünscht und ich erhalte recht zuverlässig die Info wo ich gerade angemeldet bin.

define n_Location_Handy_Sven notify (Fritzbox.*:lastReadout:.*)
{ no warnings;;
my $mac = "mac_94_FE_22_FA_59_1D";;
my $name = "Sven";;
my $rssi = ((split ' ',ReadingsVal("$NAME","$mac",""))[6]=~/(\d+)/);;
if ( $rssi == 1 ){
    { fhem ("setreading Location_Handy_Sven state $NAME");;
    Log 1, "### $NAME --- $rssi" }
  }
   else {
    { fhem ("setreading Location_Handy_Sven state none") }
  }
}

Soll ich den Titel des Thread auf [gelöst] setzen?

Edit:
Das "no warnings" brauche im Moment noch weil ich eine Warnung im Log einfach nicht abgestellt bekomme . ....
=> ​PERL WARNING: Use of uninitialized value in pattern match (m//) at (eval 94036) line 1.

Anmerkungen, Hinweise?

Vielen Dank nochmal für die super Unterstützung!

Gruss Sven

« Letzte Änderung: 17 Februar 2017, 16:54:01 von hoods »
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:Identifizieren wo man gerade über WLAN angemeldet ist?
« Antwort #9 am: 17 Februar 2017, 16:57:25 »
Hallo Sven,

ne weitere Idee habe ich nicht. Kannst Du auf gelöst setzen :)

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266