Beide Schnittstellen wurden aus Sicherheitsgründen entfernt. Als einzige Schnittstelle wird jetzt TR-064 unterstützt.
Damit ist es an der Zeit das Konstrukt mit der FHEM Instanz auf der Fritzbox zu überdenken. Das System soll ja "supported" bleiben. Im Vordergrund steht für mich nach wie vor die Anwesenheitserkennung über Wlan.
Umstellung FHEM auf neues FB Interface
Das FRITZBOX Modul wurde von seinem Entwickler in den letzten Wochen kräftig überarbeitet.Installation des Fritzbox Moduls
Update FHEM neue Version (FRITZBOX.pm mindestens 8978 2015-07-15)Eingeleitet wird jede Installation mit Aptitude täglich mit einer Aktualisierung
sudo apt-get update
Wenn man noch mit telnet experimentieren will (macht nur Sinn bis Version 06.24 oder mit Freetz) braucht man telnet
sudo apt-get install libnet-telnet-perl
Auf alle Fälle braucht man folgende perl Module, bei mir waren die alle schon installiert (Basis, Sonos und netatmo)
sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl
Jetzt kann das FRITZBOX Device angelegt werden
define FB7490 FRITZBOX
set FB7490 password xxxx
attr FB7490 allowTR064Command 1
set FB7490 password xxxx
attr FB7490 allowTR064Command 1
Wenn die Fritzbox nicht über die Namensauflösung fritz.box im Netz erreichbar ist, muss das Attribute fritzBoxIP mit der IP Adresse bestückt werden.
Jetzt spricht FHEM mit der FB über telnet oder/und TR064 und das Device sollte mit Werten gefüllt werden. Es dauert eventuell zwei drei Abfragerunden eh alles komplett ist. In den Internals kann man ablesen ob die FB überprüft ist (APICHECKED) und welche Schnittstellen zur Verfügung stehen (LUAQUERY, TELNET, TR064, WBCM)
Über das Attribute INTERVALL kann man das Abfrageintervall auf 60 sec stellen.
Jetzt spricht FHEM mit der FB über telnet oder/und TR064.
Anwesenheit von WLAN Geräten ermitteln.
Aktive Wlan Geräte werden in den Readings gelistet:mac_xx_xx_xx_xx_xx_xx Name
Werden Geräte im Wlan abgemeldet, erscheinen sie kurzzeitig mit dem Namen "inactive" und werden später nicht mehr gelistet.
Eine Abfrage liefert den Namen des Gerätes zurück oder nichts, eventuell auch "inactive". Das kann man direkt in der Befehlszeile von FHEM testen:
{ReadingsVal("FB7490","mac_11_22_33_44_55_66","")}
Daraus habe ich nun folgende Abfrage gebaut
Zunächst wird eine Routine in 99_myUtils eingefügt. Ist die 99_myUtils.pm noch nicht vorhanden kann man das Template von FHEM verwenden. War die Datei schon vorhanden, darf man nach dem editieren ein reload 99_myUtils nicht vergessen. Wie es genau geht steht im Wiki
Das ist meine erste wirklich selbstgeschrieben Perl Routine:
######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($$$)
{
my ($FB, $Reading, $Device) = @_;
my $Name = ReadingsVal($FB,$Reading,"");
if( $Name eq $Device) {
return 1;
}
else {
return 0;
}
}
sub
NetDevDa($$$)
{
my ($FB, $Reading, $Device) = @_;
my $Name = ReadingsVal($FB,$Reading,"");
if( $Name eq $Device) {
return 1;
}
else {
return 0;
}
}
Definition mit dem PRESENCE Modul
Die interne Fritzbox Funktion aus dem Modul können wir derzeit so nicht mehr verwenden. Sie funktioniert nur wenn FHEM lokal auf der Fritzbox läuft.Die Abfrage im PRESENCE Modul kann auch mit eigenen Funktionen erfolgen. Die Funktion habe ich in der 99_myUtils vorbereitet.
define Wlan_Device PRESENCE function {NetDevDa("FB7490","mac_xx_xx_xx_xx_xx_xx","<Name aus dem Reading>")} 10 30
Das PRESENCE Modul würde nach dieser Definition alle 30 Sekunden zwei Events feuern, man kann sich das gut im "Event monitor" anschauen. Einen Event mit <state> und einen Event mit "presence: <state>". Egal ob sich am Status was geändert hat oder nicht. Das wollen wir nicht, deshalb setzt man noch das Attribute event-on-change-reading auf den Wert state. Damit wird nur ein Event mit dem Inhalt <state> gesendet in dem Moment wo sich der Status ändert. Das ist für die angeschlossene Auswertelogik von Bedeutung.
attr Wlan_Device event-on-change-reading state
Jetzt könnte man noch die Anwesenheit protokollieren:
define FileLog_MobileGeraete FileLog ./log/MobileGeraete-%Y.log Wlan_Device:.*|Wlan_Device2:.*
Diese Abfrage der Fritzbox funktioniert im Gegensatz zur simplen LAN-PING Methode des PRESENCE Modules auch für Geräte, die die Wlan Schnittstelle bei Inaktivität abschalten (z.B. iPhone).
Etwas mehr Komfort
Die obige Abfrage erfüllt ihren Zweck auf die Schnelle, ist aber etwas unkomfortabel. Eigentlich werden MAC Adressen in der Form 11:22:33:44:55:66 verwendet und eigentlich will man ja nur wissen ob eine bestimmte MAC Adresse im Netzwerk vorhanden ist. Ob eine oder mehrere Fritzboxen oder Fritz Repeater im Netz vorhanden sind, sowie der konkrete Name des Gerätes sollte dabei egal sein.In Anlehnung an diesen Beitrag im Forum habe ich den Code noch etwas ergänzt. Im Wiki gibt es jede Menge Varianten und Informationen dazu.
######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($)
{
my $n = 0;
my ($Reading) = @_;
$Reading =~ tr/:/_/;
my @fbs = devspec2array("TYPE=FRITZBOX");
foreach( @fbs ) {
my $Name = ReadingsVal($_,"mac_" . $Reading,"");
if( ($Name ne "") && ($Name ne "inactive") ) {
$n++;
}
}
if( $n == 0) {
return 0;
} else {
return 1;
}
}
Damit wird die Definition im PRESENCE Modul einfacher und wesentlich flexibler:sub
NetDevDa($)
{
my $n = 0;
my ($Reading) = @_;
$Reading =~ tr/:/_/;
my @fbs = devspec2array("TYPE=FRITZBOX");
foreach( @fbs ) {
my $Name = ReadingsVal($_,"mac_" . $Reading,"");
if( ($Name ne "") && ($Name ne "inactive") ) {
$n++;
}
}
if( $n == 0) {
return 0;
} else {
return 1;
}
}
define Wlan_Device PRESENCE function {NetDevDa("xx:xx:xx:xx:xx:xx")} 10 30
Fritzbox auf neues System aktualisieren
Damit ich relativ sicher bin, das die Anwesenheitserkennung reibungslos funktioniert hatte ich Telnet auf der FB deaktiviert und die FHEM Instanz beendet. Nach ein paar Wochen Test ist es an der Zeit die Umstellung durch Update der Fritzbox zu beenden.Ich habe eine Sicherung der Fritzbox Einstellungen gemacht, die Wiederherstellungsprogramme von AVM für die Version 6.24 und 6.30 heruntergeladen und dann einfach Update gedrückt.
Funktioniert!
Man bekommt über die FRITZ!NAS Funktion immer noch den alten fhem Pfad, der wird nicht gelöscht. Wer also vergessen hat, dass nach dem Update FHEM nicht mehr läuft und auf ein anderes System umziehen will, kann jetzt immer noch alles retten.
Was bleibt ist die Ausschrift auf der Startseite "Vom Hersteller nicht unterstützte Änderungen". Wer also sein System noch ganz sauber machen will, kann jetzt das Recovery Programm starten und anschließend die Sicherung der Einstellung zurückspielen. Dazu unbedingt die Hinweise von AVM beachten.
Dabei wird der Speicher der Fritzbox komplett gelöscht. Also vorher alle Daten über FRITZ!NAS sichern!
Hallo,
AntwortenLöschenmeine Fritzbox braucht 10 Minuten bis sie erkennt, dass ein Smartphone nicht mehr imn WLAN aktiv ist. konntest du das auch feststellen?
Hallo Christian, die Erkennung (Anmeldung) im WLAN kann zwischen Sekunden und mehreren Minuten dauern, ganz selten auch mal mehr als 5 min. Die Abwesenheit (Verlassen des WLAN) dauert immer einige Minuten. Ich würde fast sagen 10 min sind die Regel. Das ist aber der Fritzbox geschuldet, das war mit der alten Erkennung auch schon so.
LöschenEs wäre jetzt noch interessant zu wissen was Du mit dieser Anwesenheitserkennung realisiert hast
LöschenHallo,
Löschenwäre es möglich die Zeit zu verkürzen sodass beim Verlassen des WLANs das Gerät auch innerhalbvon 10 Sekunden auf abwesend steht?
Welche Zeit? WLAN Anmelden und Verlassen regelt der Router, auf den hat man keinen Einfluss.
LöschenMan könnte LAN-Ping verwenden, damit würde das gehen. Ist aber ne völlig andere Methode. Hier ging es darum, den Router und seine Information zu angemeldeten Geräten zu nutzen.
Naja Anwesenheit :-) Also: Einer kommt nach Hause und bestimmte Zustände werden aktiviert, Licht, Heizung usw. Wenn der letzte das Haus verlässt wieder andersherum, Licht aus usw. Das Verlassen ist, aus meiner Sicht, zeit unkritisch. Zur "schnellen" Ankunft setze ich zusätzlich auf Bluetooth.
AntwortenLöschenWenn Du Schlafen gehst und auf Flugmodus stellst, denkt Dein System, dass Du weg bist? Oder wie hast Du das gelöst?
AntwortenLöschenIch habe festgestellt, der Flugmodus funktioniert nicht, das Ding fliegt einfach nicht! :-) Nein, Spaß beiseite: Ich lege mein Smartphone auch schlafen, auf den Qi Lader in der Küche.
LöschenHi,
AntwortenLöschenhabe gerade Fitz!OS 6.50 auf meiner 7490 eingespielt und die Anwesenheitserkennung geht leider nicht mehr :(
Hab ich noch nicht probiert, aber sollte gehen wie unter 6.30
LöschenHmmmm, erstmal Danke für den Blog :-)
AntwortenLöschenAaaalso , bei meinem Handy funktioniert es tadellos ( iPhone 6s ) , aber das Handy meiner Frau geht regelmäßig auf absend ,obwohl es weiter im Netz ist ...( iPhone 5s )
Kann es daran liegen ?
Das die Eiföner sich aus dem WLAN abmelden wenn sie schlafen gehen, sagen einige Leute. Ich selbst habe keines aber bei Bekannten funktioniert es mit allen Generationen 4 5 6 einwandfrei. Ich vermute es hängt davon ab, ob irgendwelche Apps etwas tun (z.B. synchronisieren) oder nicht.
LöschenSeit einem letzten Update Android 6 habe ich ein ähnliches Verhalten. Offenbar wird WLAN wegen Akku Schonung wirklich irgendwann deaktiviert. Momentan keine Idee.
Hallo Otto!
AntwortenLöschenIch würde gerne deinen MyUtils Code in einem meiner Video-Tutorials verwenden und anderen zeigen wenn du nichts dagegen hast.
Grüße
Jan
Hallo Jan,
Löschennaja der Ursprung des Codes liegt ja im FHEM Forum. Der Code liegt im Netz, wenn Du ne Quellenangabe machst habe ich nichts dagegen. Wie finde ich Deine Tutorials?
Gruß Otto
Hallo Otto,
AntwortenLöschensuper Blog. Läuft bei mir Newbie ebenso. Allerdings braucht es sehr lange, bis die Information, dass ein Gerät nicht mehr im W-Lan ist sehr lange beim Fhem. (10-15 min). An der Fritzbox 7490 mit 6.5 Update geht das im Sekundenbereich. Liegt das evtl. an der Schnittstelle zum Fhem?
Hast du noch einen weiteren guten Blog am laufen zum Thema Weiterverarbeiten/ Zusammenschalten FHEM mit Homematic bzw. KNX?
Besten Dank für deine Unterstützung.
Grüße
Axel
Hallo Axel,
Löschendie Schnittstelle zu FHEM (FRITZBOX Modul) läuft im Polling. Wenn man das attribute INTERVAL nicht gesetzt hat, pollt das Modul alle 300 sec. Falls die FB wirklich nach Sekunden merken sollte, dass ein Gerät nicht mehr angemeldet ist, kann es also knapp 10 Minuten dauern bis die Info in FHEM ankommt. Ich würde die Polling Frequenz nicht allzu sehr hochdrehen. Ich arbeite mit 60 sec.
Das hier ist mein einziger Blog, ich setze nur Homematic ein, kein KNX.
Gruß Otto
Hallo Axel,
AntwortenLöschenich habe zwar kein KNX, habe aber z.B. FS20 mit HM kombiniert - da in fhem alles zusammen läuft, fannst Du z.B. mit notify einen FS20-Handsender benutzen, um HM-Heizungssteuerung auf eine andere (feste) Temperatur zu switchen. Oder einen HM-Fenster-Magnetschalter, um mit einer FS20-Steckdose der Feuerstättenverordnung gerecht zu werden und die Dunstabzugshaube vom Fenster schalten lassen ... Der Möglichkeiten sind (fast) unbegrenzt.
Gruß, Christoph
Hallo
AntwortenLöschenDas funktioniert super.
Kannst du mir vieleicht sagen wi und wo ich eine pushover Benachrichtigung einbauen kann
Gruss
Wolfgang
Hi Otto,
AntwortenLöschenich kriege die States richtig in FHEM angezeigt. Aber in der Tablet UI bekomme ich es nicht hin die Stati richtig anzuzeigen / auszulesen...
https://codepaste.net/bh6pat
http://i.imgur.com/qyAFerX.png
Hi soRai,
Löschensorry, die Frage wirst Du im Forum stellen müssen. Ich verwende die Tablet UI nicht.
Gruß Otto
Seit dem Update auf die FW 6.83 funktioniert das nicht mehr. In den Readings bei der FritzBox steht keine mac_... mehr. Lediglich an meinem Router mit FW 6.51 klappt es noch. Da hat AVM wohl was geändert. Ist das bekannt, gibt es eine Lösung?
AntwortenLöschenDie Lösung hat ewig gut funktioniert, sehr schade falls das nicht mehr gehen sollte.
Bei mir funktioniert alles nach wie vor ohne Probleme. Ich weiß, viele hatten Probleme, wenn man den Thread im Forum mit liest. Am Ende hatte ich immer verstanden, war ein Neustart auf beiden Seiten die Lösung. Aber eigentlich macht man die ja sowieso?
LöschenDANKE. Ein simpler shutdown restart des fhem-Servers hat tatsächlich gereicht.
LöschenBin irgendwie nicht drauf gekommen, dass es daran liegen könnte.
Nochmals besten Dank
Hi
AntwortenLöschenich versuche gerade meine Heizung zu automatisieren, ich möchte anhand von der Zeit und der Personen die in der Wohnung sind meine HM Thermostaten zu steuern. Ich habe 2 WLan_Device definiert (Wlan_Device_J und Wlan_Device_M) mit NetDevDa. Zusätzlich habe ich eine subroutine erstellt um den Thermostat auf eine bestimmte
Temperatur für eine bestimmte Zeit zu stellen.
define Heizung_WirDa_05 at *05:40:00 {if((ReadingsVal("Wlan_Device_J","presence","") eq "present")||(ReadingsVal("Wlan_Device_M","presence","") eq "present")){fhem(aufheizen("NN_OZ1_HZ1_Clima","21","1"));;fhem(aufheizen("NN_PZ1_HZ1","21","1"))}}
Ist der Timer formal richtig, wen eines der beiden Geräte da ist und der timer die Funktion aufheizen aufruft.
mfg
Michael
Hallo Michael, vornweg: Support über diese Platform ist schwierig und aufwendig. Im FHEM Forum ist so eine Frage besser aufgehoben, ich bin da täglich unterwegs und würde das dort auch zeitnah finden.
LöschenFalls aufheizen() eine Perl sub ist (sieht so aus), dann ist der Aufruf über fhem() falsch. Das geht dann einfach direkt: { if(){aufheizen();;aufheizen()} }. Die Klammern um ReadingsVal() kannst Du auch weglassen.
Gruß Otto
Hi Otto
Löschendanke für die schnelle Antwort. Ich baue es um.
Generell funktioniert das ganze auch mit der aktuellen Version 7.57 FritzOS?
Das habe ich lange nicht geprüft, es gab da mal noch Anpassungen dieser Funktion im Forum weil sich immer mal der Inhalt des Readings geändert hat. Dazu gab es diesen Wiki Eintrag, aber es gibt auch noch ein angepasstes Fritzbox Modul.
LöschenIch verwende mittlerweile BT zur Anwesenheitserkennung.
Gruß Otto