98_FBREMOTE.pm - Anwesenheitserkennung mit entkoppelter remoter Fritzbox Abfrage

Begonnen von frankbeckers, 07 April 2014, 21:13:54

Vorheriges Thema - Nächstes Thema

frankbeckers

Hallo zusammen,

um es direkt vorweg zu nehmen: Ich bin an Verbesserungen, Ergänzungen, Fehlerhinweisen interessiert und werde dies auch hier wieder zur Verfügung stellen.


Meine Motivation:

Leider haben in meiner Installation alle mir bekannten Anwesenheitserkennungen (PRESENCE, GEOFANCY, Lösungen aus dem Forum, Lösungen aus Wiki, eigene Versuche) irgendwann ein Problem verursacht. Entweder hat die Infrastruktur (z.B. Bluetooth) nicht dauerhaft funktioniert oder es hat Sekundenlange Stillstände in meiner Fhem Installation gegeben. Auch die Abfrage mehrere Endgeräte verschärfte die Situation merklich.

Außerdem wollte ich keine Modifikation an meiner FritzBox 7390 vornehmen, d.h. keine Scripte, kein Server oder auch keine eigene Fhem Instanz auf der Fritzbox. Weiterhin fand ich die offene Architektur von HTTPMOD sehr gut, da man dort mit den abgerufenen Daten eines HttpRequest's machen kann, was man will.



Umsetzung:

Aus diesen Rahmenbedingungen ist ein eigenes Modul (hier z.Zt. 98_FBREMOTE.pm) entstanden, welches ich hier vorstellen und zur Verfügung stellen möchte:


Die Device Definition sieht wie folgt aus: (Hinweis: Passwort und MAC Adressen hier absichtlich nicht sinnvoll)

define fbremote_network FBREMOTE http://fritz.box/net/network_user_devices.lua 120
attr fbremote_network event-on-update-reading iphone.*,samsung.*,imac.*
attr fbremote_network fb_password geheim
attr fbremote_network fb_user fhem
attr fbremote_network readingsExprPre $val =~ s/\s//g;; $val
attr fbremote_network readingsName10_data data
attr fbremote_network readingsName20_iphone3 iphone3
attr fbremote_network readingsName20_iphone4 iphone4
attr fbremote_network readingsName20_iphone5 iphone5
attr fbremote_network readingsName20_samsunggalaxy4mini samsunggalaxy4mini
attr fbremote_network readingsName30_imac imac
attr fbremote_network readingsRegex10_data (.*)
attr fbremote_network readingsRegex20_iphone3 ([^\{]+00:00:00:00:00:00[^\}]+)
attr fbremote_network readingsRegex20_iphone4 ([^\{]+00:00:00:00:00:00[^\}]+)
attr fbremote_network readingsRegex20_iphone5 ([^\{]+00:00:00:00:00:00[^\}]+)
attr fbremote_network readingsRegex20_samsunggalaxy4mini ([^\{]+00:00:00:00:00:00[^\}]+)
attr fbremote_network readingsRegex30_imac ([^\{]+00:00:00:00:00:00[^\}]+)
attr fbremote_network readingsRegexPre \<pre\>([\s\S]+)\<\/pre\>
attr fbremote_network room Anwesenheit


Dabei haben die Definitionen folgende Bedeutung:

...es wird die die Seite http://fritz.box/net/network_user_devices.lua alle 120 Sekunden überwacht:

define fbremote_network FBREMOTE http://fritz.box/net/network_user_devices.lua 120


...es werden die readingFnAttributes unterstützt. (Doku: http://fhem.de/commandref.html#readingFnAttributes). In diesem Beispiel werden nur alle Reading Updates von "iphone.*,samsung.*,imac.*" weiter geschickt.

attr fbremote_network event-on-update-reading iphone.*,samsung.*,imac.*


...es werden der User "fhem" mit dem Passwort "geheim" für die remote Anmeldung genutzt. Ich habe zur besseren Unterscheidung einen eigenen User "fhem" mit eigenem Passwort auf der Fritzbox definiert, dies ist aber nicht zwingend notwendig. Falls kein User angegeben ist, wird der Master/Root Login der Fritzbox mit dem entsprechenden Passwort versucht. Die Angabe des Passwortes ist natürlich zwingend erforderlich.

attr fbremote_network fb_password geheim
attr fbremote_network fb_user fhem


Bei dieser Anmeldung wird das neue Anmeldeverfahren (ab FritzOS 5.50) genutzt. Die daraus resultierende SID wird als Reading gespeichert und für alle weiteren Abfragen genutzt. Da solch eine SID eine Gültigkeit von 10 Minuten nach ihrer letzten Nutzung hat, wird diese SID bei einem Intervall von 120 Sekunden ewig gültig sein. Falls die bekannte SID einmal nicht mehr gültig sein sollte, wird automatisch ein neue SID bestimmt. (Das Bestimmen der SID ist der einzige nicht entkoppelte Teil, welcher zu einer kurzen Verzögerung führen kann. Da dies aber selten passiert, habe ich diesen Teil absichtlich nicht entkoppelt.)


...optional können die empfangenen Rohdaten bearbeitet (hier verkleinert bzw. verdichtet) werden. Man kann sich grob den gewünschten Daten nähern. Reine Performance Gesichtspunkte.

attr fbremote_network readingsExprPre $val =~ s/\s//g;; $val
attr fbremote_network readingsRegexPre \<pre\>([\s\S]+)\<\/pre\>




...nun werden dynamisch die Rohdaten analog HTTPMOD untersucht und Teile davon in eigenen Readings gespeichert. In diesem Beispiel werden die für eine Anwesenheitserkennung notwendigen Teile eines beliebigen LAN/WLAN Endgerätes anhand seiner MAC Adresse aus den Rohdaten gefischt. (00:00:00:00:00:00 sind durch die eigene Mac Adresse zu ersetzen)

attr fbremote_network readingsName20_iphone5 iphone5
attr fbremote_network readingsRegex20_iphone5 ([^\{]+00:00:00:00:00:00[^\}]+)


Das Ergebnis kann wie folgt aussehen (private Daten wieder unkenntlich gemacht):

["UID"]="landevice9165",["_node"]="landevice27",["active"]="1",["auto_wakeup"]="0",["deleteable"]="1",["dhcp"]="1",["ethernet"]="0",["ethernet_port"]="0",["guest"]="0",["ip"]="192.168.178.36",["ipv6_ifid"]="",["mac"]="00:00:00:00:00:00",["manu_name"]="1",["name"]="iPhone5",["online"]="0",["parentname"]="",["parentuid"]="",["plc"]="0",["source"]="0x1316",["speed"]="65",["static_dhcp"]="1",["url"]="",["vendorname"]="",["wakeup"]="0",["wlan"]="1",["wlan_UIDs"]="wlan00:00:00:00:00:00",["wlan_show_in_monitor"]="1",["wlan_station_type"]="default"

Dies kann auch gleichzeitig für mehrere Geräte definiert werden (siehe Beispiel oben), d.h. es muss nicht mehr für jedes Gerät ein erneuerter Aufruf/Abruf stattfinden, sondern in jedem Zeitzyklus (im Beispiel hier 120 Sekunden) können alle Geräte zeitgleich bestimmt werden.

Optional könnten diese Teildaten auch mit "attr fbremote_network readingsExpr20_iphone5 was_auch_immer_mit_$val_gemacht_werden_kann" verändert werden. Dies ist in diesem Ablauf aber nicht notwendig/sinnvoll.


An dieser Stelle ist die reine Funktionalität des Moduls (remote Daten der Fritzbox abrufen) zu Ende. Die eigentliche Anwesenheitserkennung findet nun an andere Stelle statt. Ab hier können natürlich alle bekannten Funktionen von PRESENCE oder ähnlichem wieder ziehen. Ich habe mich allerdings für einen eigenen Weg entschieden, welcher aus eine Notify, einem Dummy und einem Watchdog Device besteht, welche ich im folgenden noch beschreibe:




In dem Notify Device werden die Daten des Endgerätes verarbeitet (hier wieder das Beispiel iPhone5) und in eigene Readings gespeichert:

define iPhone5RemoteFritzbox notify fbremote_network:iphone5.* {\
\
my $landevice = $EVENT;;\
my $speed = "";;\
my $active = "";;\
\
fhem("setreading iPhone5 landevice $landevice");;\
\
if ( $landevice =~ /speed\"\]\s*=\s*\"([0-9]+)/ ) { $speed=$1;; fhem("setreading iPhone5 speed $1");; }\
if ( $landevice =~ /active\"\]\s*=\s*\"([0-9]+)/ ) { $active=$1;; fhem("setreading iPhone5 active $1");; }\
\
if ( $landevice =~ /\[\"name\"\]\s*=\s*\"([a-zA-Z0-9-]+)\"/ ) { fhem("setreading iPhone5 name $1");; }\
if ( $landevice =~ /\[\"ip\"\]\s*=\s*\"([0-9.]+)\"/ ) { fhem("setreading iPhone5 ip $1");; }\
\
my $status = "off";;\
if ( $speed > 0 ) { $status = "on";; } else { if ( $active == 1 ) { $status = "on";; } }\
\
fhem("set iPhone5 $status");;\
\
}
attr iPhone5RemoteFritzbox room Anwesenheit


Anhand von "speed>0" kann direkt festgestellt werden, ob ein Endgerät "anwesend" ist. Sollte man sich in einem repeat'eten Netzwerk befinden, gibt bei "speed=0" noch der Zustand von "active=[0|1]" Hinweise auf eine mögliche Anwesenheit. Allerdings sind auch hier der Fritzbox die Hände gebunden, und eine Nicht-Anwesenheit in einem repeat'eten Netzwerk wird erst nach 15-20 Minuten festgestellt. Daher sollten die überwachten Endgeräte, wenn möglich, immer den direkten Kontakt zur Fritzbox aufbauen, nicht zu einem WLAN Repeater.

Zum Schluss wird mit Hilfe eines Dummy Devices der Zustand des Endgerätes visualisiert:

define iPhone5 dummy
attr iPhone5 eventMap 1
attr iPhone5 icon it_smartphone
attr iPhone5 room Anwesenheit


Um es noch zu vervollständigen, löst erst ein Watchdog die Abwesenheit (hier eine Pushover Nachricht: "trigger Pushover iPhone5 abwesend") aus. Somit sind auch kleinere Aussetzer, z.B. Handy kurz ausgeschaltet etc., abgedeckt. Außerdem muss der Watchdog wieder zurückgesetzt werden.

define iPhone5Watchdog watchdog iPhone5:off.* 00:05 iPhone5:on.* trigger Pushover iPhone5 abwesend
attr iPhone5Watchdog regexp1WontReactivate 1
attr iPhone5Watchdog room Anwesenheit

...

define iPhone5WatchdogSetDefined notify iPhone5:on.* trigger iPhone5Watchdog .
attr iPhone5WatchdogSetDefined room Anwesenheit



Somit wäre die Nutzung des Moduls zur Anwesenheitserkennung vollständig. In meiner Umgebung habe ich damit zuverlässige Ergebnisse erzielt.




Beispiele für weitere Anwendungen um Daten remote aus der Fritzbox zu holen:

Auslastungsüberwachung der Fritzbox in Fhem. Dazu werden wieder zyklisch von der entsprechenden Seite die Performancewerte der Fritzbox ausgewertet. Diese lassen sich dann in einem Graphen (über FileLog und SVG) visualisieren:

define fbremote_energy FBREMOTE http://fritz.box/system/energy.lua 60
attr fbremote_energy event-on-update-reading power.*,sid
attr fbremote_energy fb_password geheim
attr fbremote_energy fb_user fhem
attr fbremote_energy readingsExprPre $val =~ s/[\r\n\s+]//g;; $val
attr fbremote_energy readingsName10_data data
attr fbremote_energy readingsName20_power_status_rate_systemact power_status_rate_systemact
attr fbremote_energy readingsName21_power_status_rate_systemcum power_status_rate_systemcum
attr fbremote_energy readingsName22_power_status_rate_wlanact power_status_rate_wlanact
attr fbremote_energy readingsName23_power_status_rate_wlancum power_status_rate_wlancum
attr fbremote_energy readingsName24_power_status_rate_sumact power_status_rate_sumact
attr fbremote_energy readingsName25_power_status_rate_sumcum power_status_rate_sumcum
attr fbremote_energy readingsRegex10_data (.*)
attr fbremote_energy readingsRegex20_power_status_rate_systemact power:status/rate_systemact"]="([0-9]+)"
attr fbremote_energy readingsRegex21_power_status_rate_systemcum power:status/rate_systemcum"]="([0-9]+)"
attr fbremote_energy readingsRegex22_power_status_rate_wlanact power:status/rate_wlanact"]="([0-9]+)"
attr fbremote_energy readingsRegex23_power_status_rate_wlancum power:status/rate_wlancum"]="([0-9]+)"
attr fbremote_energy readingsRegex24_power_status_rate_sumact power:status/rate_sumact"]="([0-9]+)"
attr fbremote_energy readingsRegex25_power_status_rate_sumcum power:status/rate_sumcum"]="([0-9]+)"
attr fbremote_energy readingsRegexPre \<pre\>([\s\S]+)\<\/pre\>
attr fbremote_energy room Anwesenheit


Überwachung der Internetverbindung:

define fbremote_inetstat FBREMOTE http://fritz.box/internet/inetstat_monitor.lua 300
attr fbremote_inetstat event-on-update-reading connection.*,sid
attr fbremote_inetstat fb_password geheim
attr fbremote_inetstat fb_user fhem
attr fbremote_inetstat readingsExprPre $val =~ s/[\r\n\s+]//g;; $val
attr fbremote_inetstat readingsName10_data data
attr fbremote_inetstat readingsName20_connection0_status_ip connection0_status_ip
attr fbremote_inetstat readingsName30_connection0_status_conntime_date connection0_status_conntime_date
attr fbremote_inetstat readingsName40_connection0_status_conntime_time connection0_status_conntime_time
attr fbremote_inetstat readingsRegex10_data (.*)
attr fbremote_inetstat readingsRegex20_connection0_status_ip connection0:status/ip"]="([0-9.]+)"
attr fbremote_inetstat readingsRegex30_connection0_status_conntime_date connection0:status/conntime_date"]="([0-9.]+)"
attr fbremote_inetstat readingsRegex40_connection0_status_conntime_time connection0:status/conntime_time"]="([0-9:]+)"
attr fbremote_inetstat readingsRegexPre \<pre\>([\s\S]+)\<\/pre\>
attr fbremote_inetstat room Anwesenheit



Diese drei Anwendungen des Moduls laufen bei mir seit einiger Zeit stabil und fehlerfrei, und führen zu keinerlei Performance Beeinträchtigung.




#   Changelog:
#   2014-03-23   initial version
#   2014-03-25   login.lua with HttpUtils_NonblockingGet
#   2014-04-07   InternalTimer verlagert, damit Timeout bei GetSID laufen
#   2014-04-10   added Attribute timeout, default 5 seconds
#   2014-04-10   added Internals for next execution time TRIGGERTIME, TRIGGERTIME_FMT
#   2014-04-16   deleted DevIo_CloseDev($hash) from sample
#   2014-06-02   added Attribute noshutdown, default 0

FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

Loredo

Über PRESENCE auf einer FHEM Instanz auf der Fritzbox und Verbindung via FHEM2FHEM auf deine externe FHEM Instanz hast du nicht nachgedacht? Deine Lösung klingt umständlich/kompliziert und diese Kombination macht vermutlich das gleiche. Vorteil: Es muss nicht gepollt werden.


Ich hab's anders im Einsatz (GEOFANCY+ROOMMATE), daher kann ich nicht aus Erfahrung sprechen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

frankbeckers

#2
Zitat von: Loredo am 07 April 2014, 21:18:11
Über PRESENCE auf einer FHEM Instanz auf der Fritzbox und Verbindung via FHEM2FHEM auf deine externe FHEM Instanz hast du nicht nachgedacht? Deine Lösung klingt umständlich/kompliziert und diese Kombination macht vermutlich das gleiche. Vorteil: Es muss nicht gepollt werden.

Über Fhem auf 7390 und Nutzung PRESENCE und FHEM2FHEM hatte ich auch nachgedacht, aber für mich verworfen, da ich keine Installation auf der Fritzbox haben möchte.

Wer nun das Polling macht, ist wahrscheinlich egal, denn PRESENCE macht auf der Fritzbox auch ein Polling, nur halt via (Shell)cmd "/usr/bin/ctlmgr_ctl". Allerdings muss bei PRESENCE je Endgerät ein Device definiert werden, welches auch einzeln gepollt wird. Ohne es in Zahlen aufzeigen zu können, wird das redundante Abfragen eventuell mehr Overhead erzeugen.

Zitat von: Loredo am 07 April 2014, 21:18:11Ich hab's anders im Einsatz (GEOFANCY+ROOMMATE), daher kann ich nicht aus Erfahrung sprechen.

Die Variante mit GEOFANCY hatte ich auch getestet. Da aber der minimale Radius von geofancy so "gross" ist, hat es bei mir auch nicht zuverlässig funktioniert.


Vielleicht liest sich meine Variante auch so kompliziert, weil ich sie so ausführlich hier beschrieben habe.  ;)
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

rudolfkoenig

ZitatIch bin an Verbesserungen, Ergänzungen, Fehlerhinweisen interessiert...
- ich wuerde entweder LWP oder HttpUtils verwenden, beide machen ungefaehr das gleiche
- sprintf("%s",$val) (aus readingsExprPre) ist das gleiche wie $val
- Fuer ein HTTPMOD ist sowas wie readingsExprPre sinnvoll, bei einer festen Struktur wie beim Fritzbox muesste man das sparen bzw. fest kodieren koennen, damit der Benutzer weniger wissen muss.
- statt readingsName30_imac und readingsRegex30_data wuerde ich ein Attribut mit zwei Argumenten (Leerzeichen getrennt) nehmen, das wuerde den Anzahl der "Benutzerattribute" und damit die Komplexitaet verringern.


Das ist nur meine Meinung und nicht als Kritik gedacht, das Modul finde ich sonst ok und sinnvoll.

erwin

FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

frankbeckers

Hallo Erwin,

Deine Lösung kenne ich auch.

Zitat von: erwin am 08 April 2014, 18:26:05
Allerdings als "addon" zu PRESENCE.

Nachdem meine Versuche mit den "normalen" Funktionen von PRESENCE leider nicht so erfolgreich waren (siehe mein erstes Posting), habe ich mir Deine Lösung von RemoteFritzBoxWeb() via PRESENCE function() aufzurufen sehr genau angesehen. Leider benutzt Du HttpUtils_BlockingGet() für die Aufrufe, wodurch es wie bei meinen eigenen Versuchen zu sekundenlangen Stillständen in Fhem kommt. Ich prüfe halt mehrere Endgerät für verschiedene Szenarien ab. Und ab und zu liefert die Fritzbox eben nicht ganz so schnell zurück. Deshalb musste für mich eine Lösung mit HttpUtils_NonblockingGet() her...

Gruß
Frank
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

frankbeckers

Zitat von: rudolfkoenig am 08 April 2014, 13:24:43
Das ist nur meine Meinung und nicht als Kritik gedacht, das Modul finde ich sonst ok und sinnvoll.

Ist auch gar nicht als Kritik angekommen. Schließlich möchte ich noch mehr erfahren/lernen.


Zitat von: rudolfkoenig am 08 April 2014, 13:24:43
- sprintf("%s",$val) (aus readingsExprPre) ist das gleiche wie $val

...habe ich bereits ausprobiert. Funktioniert einwandfrei. Werde auch mein erstes Posting um folgendes
attr fbremote_energy readingsExprPre $val =~ s/[\r\n\s+]//g;; $val
abändern und ergänzen.


Zitat von: rudolfkoenig am 08 April 2014, 13:24:43
- ich wuerde entweder LWP oder HttpUtils verwenden, beide machen ungefaehr das gleiche

...ja, es macht Sinn nur eine Variante zu nutzen. Wenn ich schon für die Nonblocking Aufrufe die HttpUtils verwende, dann macht dies für die Blocking Aufrufe natürlich auch Sinn. Werde mich demnächst daran setzen.


Zitat von: rudolfkoenig am 08 April 2014, 13:24:43
- Fuer ein HTTPMOD ist sowas wie readingsExprPre sinnvoll, bei einer festen Struktur wie beim Fritzbox muesste man das sparen bzw. fest kodieren koennen, damit der Benutzer weniger wissen muss.

...hier bin ich anderer Meinung. Auch wenn die Nutzung komplexer ist, so ist sie damit aber auch flexibler. So kann jeder die Daten extrahieren, die er braucht. z.Zt. sind meine Beispiele alle auf die Struktur ...<pre>hier_stehen_die_Daten</pre>... angepasst. Es gibt aber auch Fritzbox Seiten, wo die Daten in anderen Bereichen "versteckt" sind.


Zitat von: rudolfkoenig am 08 April 2014, 13:24:43
- statt readingsName30_imac und readingsRegex30_data wuerde ich ein Attribut mit zwei Argumenten (Leerzeichen getrennt) nehmen, das wuerde den Anzahl der "Benutzerattribute" und damit die Komplexitaet verringern.

...darüber werde ich mal etwas länger nachdenken müssen.


Vielen Dank für Deine Verbesserungsvorschläge und Anregungen.
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

blueberry63

Hallo,

ich habe Dein Modul mal eingebaut, bekomme aber die Geräte (iPhones) aber immer als "anwesend" angezeigt, obwohl sie in der FB-Oberfläche unter "ungenutze Verbindungen" aufgelistet sind. Kann es an der "Speed-Abfrage" liegen? Jedenfalls ist auf der FB-Oberfläche in der Spalte "Verbindung" "WLAN" zu sehen, auch wenn das Gerät gerade nicht im Netzwerk ist (s. Anhang).

Gruß
Blueberry63

FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

Hallo,

noch ein Nachtrag zu meinem vorherigen Post:

Zitat
["UID"]="landevice6890",["_node"]="landevice16",["active"]="0",["auto_wakeup"]="0",["deleteable"]="2",["dhcp"]="0",["ethernet"]="1",["ethernet_port"]="1",["guest"]="0",["ip"]="192.168.99.104",["ipv6_ifid"]="",["mac"]="60:C5:47:7E:8C:C0",["manu_name"]="0",["name"]="iPhone4s-xxxxx",["online"]="0",["parentname"]="",["parentuid"]="",["plc"]="0",["source"]="0x1202",["speed"]="100",["static_dhcp"]="0",["url"]="",["vendorname"]="",["wakeup"]="0",["wlan"]="0",["wlan_UIDs"]="wlan60:C5:47:7E:8C:C0",["wlan_show_in_monitor"]="1",["wlan_station_type"]="default"

Speed=100 bei Abwesenheit ist schon komisch, oder?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

frankbeckers

Nabend blueberry63,

Zitat von: blueberry63 am 09 April 2014, 13:44:09
Speed=100 bei Abwesenheit ist schon komisch, oder?

Ja, das ist wirklich komisch.

Jetzt kommen wir bestimmt in die Problematik "Welche Fritzbox? Welches FritzOS? etc."

Also ich habe eine 'FRITZ!Box Fon WLAN 7390' mit 'FRITZ!OS 06.03' im Einsatz und der Wert von speed ist nur größer Null, wenn das iPhone im WLAN angemeldet ist. Wenn das iPhone nicht im WLAN angemeldert ist, ist auch speed=0. Allerdings auch active=0. Daher habe ich mal einen Test mit dieser Variabeln aufgesetzt. Erfolgreich. Du könntest folgende Anpassung testen. Passe dazu bitte das entsprechende Notify Device an.

alt:
if ( $speed > 0 ) { $status = "on"; } else { if ( $active == 1 ) { $status = "on"; } }

neu:
if ( $active == 1 ) { $status = "on"; }

Grüße
Frank
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

blueberry63

Hallo Frank,

ich werde es nachher mal ausprobieren, ob es über "Active" funktioniert. Allerdings habe ich gerade gemerkt, das die Readings nicht aktualisiert werden (letztes Reading von gestern Mittag!). Kann man die Aktualisierung manuell ausloesen?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

Hai,

ich habe eben noch etwas gefunden. Das Reading "data" fängt so an:
Zitat
data
   
<!DOCTYPE html>
   
2014-04-10 16:30:56
iphonem
   
alert('Das Gerät oder der Benutzer kann nicht gelöscht werden.'); return false; } return true; }
wlanap2
Angemeldet | FRITZ!Box | FRITZ!NAS | MyFRITZ! |

    Übersicht
    Internet
    Telefonie
    Heimnetz
        Netzwerk
        USB-Geräte
        Speicher (NAS)
        FRITZ!Box-Name
        Smart Home
    WLAN
    DECT
    System

    Assistenten
    Einrichten, Update, Telefone

    FRITZ!NAS

Hat die Meldung in der 8. Zeile etwas zu bedeuten?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

frankbeckers

Zitat von: blueberry63 am 10 April 2014, 11:03:06
ich werde es nachher mal ausprobieren, ob es über "Active" funktioniert. Allerdings habe ich gerade gemerkt, das die Readings nicht aktualisiert werden (letztes Reading von gestern Mittag!). Kann man die Aktualisierung manuell ausloesen?

Bei mir war es auch "stehen" geblieben. Dazu habe ich auch einen Fehler im Coding gefunden. Im ersten Posting findest Du ab jetzt ein Changelog und immer die neuste Version des Modules. Bitte zuerst dieses neue Modul installieren, bevor Du mit weiteren Test beginnst.
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

frankbeckers

Zitat von: blueberry63 am 10 April 2014, 16:40:53
ich habe eben noch etwas gefunden. Das Reading "data" fängt so an:
Hat die Meldung in der 8. Zeile etwas zu bedeuten?

Anscheinend hat das Extrahieren der Rohdaten nicht funktioniert. Denn so bekommt man den gesamten HTML Code der Antwortseite in dem Reading "data" abgelegt. Bei der Anzeige werden dann die HTML Tags verarbeitet und angezeit.

Hast Du

attr fbremote_network readingsExprPre $val =~ s/\s//g;; $val
attr fbremote_network readingsRegexPre ipv6_ifid\)"\]\s+=\s+\{([\s\S]+)\},\s+\["landevice:settings/landevice0/ipv6addrs0


genau so eingefügt?

Wenn Du dennoch in dem Reading "data" weiterhin HTML Daten erhälst, könntest du

attr fbremote_network readingsExprPre $val =~ s/\s//g;; $val
attr fbremote_network readingsRegexPre \<pre\>([\s\S]+)\<\/pre\>


versuchen. Hier werden die wichtigen Daten anders ausgeschnitten.
FHEM 5.7 auf Raspberry Pi 2 Jessy 4.1.16-v7+
CCU2 --> hm2mqtt --> MQTT --> Fhem
ehz361z5 --> RPi --> MQTT --> Fhem
Lightify
Fritz!DECT 200

blueberry63

 :D
mit dem letzten Vorschlag funktioniert es!

Allerdings hat man natürlich dasselbe Problem, wen die iPones im "Standby" sind, da dann das WLAN abgeschaltet wird.

Trotzdem: vielen Dank für Deine tolle Arbeit.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower