http://wiki.fhem.de/w/api.php?action=feedcontributions&user=Gisbert&feedformat=atomFHEMWiki - Benutzerbeiträge [de]2024-03-28T09:47:57ZBenutzerbeiträgeMediaWiki 1.39.3http://wiki.fhem.de/w/index.php?title=Fhem-rhasspy&diff=36314Fhem-rhasspy2021-11-28T18:15:21Z<p>Gisbert: Ergänzung bei Quickstart/Vorbereitung, falls Pakete fehlen.</p>
<hr />
<div>{{Baustelle}}<br />
[https://github.com/rhasspy/rhasspy Rhasspy] ist eine Open-Source Lösung für Spracherkennung und Sprachsteuerung. Es besteht aus einer Sammlung von Scripten, die unter einer einheitlichen Bedienoberfläche zusammengefasst sind, die sehr flexibel genutzt und erweitert werden können. Die Besonderheit an Rhasspy ist, dass es nach der Installation komplett Offline betrieben wird. Es wir also keine Sprache zur Erkennung an einen Server im Internet geschickt, und für den Betrieb nur für FHEM werden nur moderate Hardwareanforderungen gestellt - ein aktueller Raspberry Pi ab Modell 3B+ sollte in der Regel genügen.<br />
<br />
Die Anbindung weiterer Räume ist über sogenannte "Satelliten" möglich. Dies kann z.B. ein Pi Zero mit Mikro und Lautsprecher sein, ein ESP32 mit entsprechender Hardware oder ein Mobiltelefon mit Android und der entsprechenden App.<br />
<br />
{{Hinweis| In diesem Artikel und der commandref werden folgende Schreibweisen verwendet:<br />
* '''RHASSPY''' bezieht sich auf das FHEM-Modul oder das FHEM-Device<br />
* '''Rhasspy''' bezeichnet die (zentrale) Installation bzw. das Web-Interface, unter dem die Scriptsammlung verwaltet werden kann.}}<br />
<br />
== Quick-Start ==<br />
Die folgende Kurzanleitung soll den Einstieg erleichtern. Es ist dabei wichtig, '''jeden der Schritte vollständig abgeschlossen''' zu haben, '''bevor mit dem nächsten''' begonnen wird!<br />
=== Vorbereitung ===<br />
Zunächst muss ''Rhasspy'' funktionsfähig sein. Dazu bitte der Anleitung in der [https://rhasspy.readthedocs.io/en/latest/#getting-started offiziellen Dokumentation] folgen. [Gisbert: Es kann vorkommen, dass andere Pakete, die für die Installation von Rhasspy unbedingt erforderlich sind, fehlen und seperat heruntergeladen werden müssen. Es wird dann bei der Installation explizit darauf hingewiesen.] Für diese Anleitung wird vorausgesetzt, dass der Dienst an sich läuft und mind. ein Audio Ein- und Ausgabegerät funktionsfähig ist. <br />
<br />
Die Vorbereitung ist abgeschlossen, wenn im [https://rhasspy.readthedocs.io/en/latest/#web-interface Web-Interface von Rhasspy] der gesprochene Testsatz ''wie spät ist es'' erkannt wird und links als erkannter ''intent'' "GetTime" angezeigt wird.<br />
=== FHEM Modul ===<br />
==== Download ====<br />
Das für FHEM erforderliche Modul ist in contrib verfügbar und kann über FHEMWEB mit <br />
{ Svn_GetFile('contrib/RHASSPY/10_RHASSPY.pm', 'FHEM/10_RHASSPY.pm') }<br />
heruntergeladen werden.<br />
<br />
Hinweis: Für die hier dargestellte Vorgehensweise ist mind. Version 0.5.02 erforderlich.<br />
<br />
Aktuelle Entwicklungsversionen sind im [https://github.com/fhem/fhem-rhasspy GitHub-Repository] des Moduls zu finden.<br />
==== MQTT2_CLIENT ====<br />
Rhasspy kommuniziert hauptsächlich über das [[MQTT]]-Protokoll, und zwar sowohl intern wie mit FHEM. Da dies auch für Audiodaten gilt, sollte schlicht der interne MQTT-Server aktiviert bleiben und die für FHEM relevanten Daten über einen [[MQTT2_CLIENT]] bezogen werden:<br />
defmod rhasspyMQTT2 MQTT2_CLIENT localhost:12183<br />
attr rhasspyMQTT2 clientOrder RHASSPY<br />
attr rhasspyMQTT2 subscriptions setByTheProgram<br />
<br />
Läuft Rhasspy auf einem anderen Server und/oder wird ein anderer Port verwendet, sind die passenden Daten im obigen ''defmod'' entsprechend anzupassen. Passt alles, sollte '''opened''' im ''STATE'' dieses Devices stehen.<br />
<br />
==== Define ====<br />
Läuft der Rhasspy-Dienst auf derselben Maschine mit den Standardeinstellungen, genügt für ein erstes Kennenlernen:<br />
define Rhasspy RHASSPY<br />
Für einen entfernten Rhasspy-Dienst muss angeben werden, wo dessen '''Web-Interface''' zu erreichen ist:<br />
defmod rhasspy RHASSPY baseUrl=http://192.168.1.210:12101<br />
<br />
Dieser Schritt war erfolgreich, wenn <br />
* ein Reading ''intents'' vorhanden ist, das z.B. den Wert ''GetTime'' enthält, und <br />
* ''STATE'' auf ''online'' gegangen ist.<br />
<br />
==== Sprache ====<br />
===== Basissprache =====<br />
Unterstellt, RHASSPY und Rhasspy sollen deutsch miteinander sprechen, sollte das Internal ''LANGUAGE'' den Wert ''de'' anzeigen. Ist dies nicht der Fall, kann entweder in den allgemeinen FHEM-Einstellungen (zu finden im Device ''global'') das Attribut ''language'' auf ''DE'' eingestellt und anschließend die DEF der RHASSPY-Instanz geändert werden (z.B. indem ein Leerzeichen angefügt wird), oder es kann direkt die DEF geändert werden, indem ''language=de'' ergänzt wird:<br />
defmod rhasspy RHASSPY baseUrl=http://192.168.1.210:12101 language=de<br />
Das Internal ''LANGUAGE'' hat den Wert ''de''? Dann ist dieser Teilschritt abgeschlossen.<br />
<br />
===== Sprachdatei =====<br />
RHASSPY enthält einige vorgefertigte Antwortsätze für diverse Situationen. Um diese von Englisch auf Deutsch umzustellen, wird eine zusätzliche (Muster-) Sprachdatei benötigt, die man mit folgendem Befehl erhält:<br />
{ Svn_GetFile('contrib/RHASSPY/rhasspy-de.cfg', './rhasspy-de.cfg') }<br />
Ergänzend muss RHASSPY mitgeteilt werden, wo diese zu finden ist: <br />
attr Rhasspy languageFile ./rhasspy-de.cfg<br />
<br />
Dieser Schritt war erfolgreich, wenn <code>list Rhasspy</code> einen Abschnitt ''lng'' enthält, der deutsche Antworten auflistet.<br />
<br />
=== Erste Interaktion ===<br />
Im Menüpunkt [https://rhasspy.readthedocs.io/en/latest/tutorials/#training sentences] muss jetzt zunächst der vorhandene Intent ''[GetTime]'' '''umbenannt''' werden. Jede Instanz von RHASSPY reagiert nur auf intents, die "für sie" ist und entsprechend gekennzeichnet wird. Diese Kennung besteht aus dem ''language''-Kürzel und der ''fhemId'' und ist in der ''sentences.ini'' wie folgt zu verwenden:<br />
[de.fhem:GetTime]<br />
wie spät ist es<br />
sag mir die uhrzeit<br />
<br />
Die Schritte bis hierhin waren erfolgreich, wenn nach einer gesprochenen Anfrage nach der Uhrzeit eine (deutsche) Sprachansage erfolgt.<br />
<br />
=== Erstes Gerät steuern ===<br />
==== Erfassung ====<br />
Sollten mit <code>list Rhasspy</code> bereits Geräte im Abschnitt ''devicemap'' aufgeführt sein, kann eines davon als erstes Testgerät verwendet werden. Es empfiehlt sich, eines zu wählen, dass man ein- und ausschalten kann, also dem ''genericDeviceType'' ''light'' oder ''switch'' entspricht. Ist noch kein solches im ''list'' enthalten, sollten ein oder zwei Geräte über das (jetzt) verfügbare globale Attribut ''genericDeviceType'' als ''light'' oder ''switch'' gekennzeichnet werden. Anschließend muss die Erkennung für neue Geräte gestartet werden:<br />
set rhasspy update devicemap<br />
<br />
Dieser Teilschritt war erfolgreich, wenn <br />
* im list der RHASSPY-Instanz die Geräte unter ''devicemap'' erscheinen und in deren Unterstruktur Kommandos unter ''SetOnOff'' gelistet sind, und<br />
* im Rhasspy-Webinterface unter [https://rhasspy.readthedocs.io/en/latest/usage/#slots-page Slots page] diverse Einträge <br />
** mit der ''de.fhem''-Kennung vorhanden sind und<br />
** diese Geräte- und Raumnamen usw. auch in den slots enthalten sind (z.B. das gewählte Licht in ''de.fhem.device-SetOnOff''). Die Bezeichnungen in den Slots sollte dabei denen entsprechen, die im list unter ''alias'' bzw. ''names'' aufgeführt sind.<br />
==== Intent erstellen ====<br />
Analog zu ''[GetTime]'' muss jetzt ein neuer, passender Intent in ''sentences.ini'' aufgenommen werden. Da hierbei ja potentiell eines von vielen Geräten gesteuert werden soll, muss mind. der Gerätename speziell als Übergabeelement für die Automatisierung "gekennzeichnet" werden, damit RHASSPY daraus eine sinnvolle Aktion ableiten kann. Entsprechendes gilt für Zielwerte usw.. Eine erste Fassung könnte sein:<br />
[de.fhem:SetOnOff]<br />
schalte (den|die|das) $de.fhem.Device-SetOnOff{Device} [(im|in (der|dem)) $de.fhem.Room{Room}] ( an{Value:on} | aus{Value:off} )<br />
<br />
{{Hinweis | Dieses Beispiel enthält bereits einige Sprech-Alternativen und optionale Elemente. Die vorhandenen Möglichkeiten sind zum einen der offiziellen Dokumentation zu entnehmen, zur Vertiefung gibt es in den Links unten ein sehr informatives Video.}}<br />
<br />
Nunmehr sollte sich das Gerät mit gesprochenen Anweisungen (unter Verwendung eines eventuell "komischen" Namens) an- und ausschalten lassen. <br />
<br />
'''Gratulation: Damit sollte die prinzipielle Vorgehensweise klar sein, wie RHASSPY und Rhasspy miteinander interagieren.'''<br />
<br />
==== Abrundung ====<br />
Um die an Rhasspy übermittelten Infos (im Sinne der Sprechbarkeit etc.) zu verbessern, stehen diverse Optionen zur Auswahl:<br />
* Im Attribut ''rhasspyTweaks'' (an rhasspy) können beliebige Schlüsselwörter für ''rooms'' und ''groups'' zentral ausgefiltert werden (FHEM-Restart erforderlich):<br />
attr rhasspy rhasspyTweaks ignoreKeywords=rooms=alexa|mqtt.*device|googleassistant|huedevice groups=türen.und.fenster<br />
* Statt des technischen Device-Namens des FHEM-Devices wird <br />
** das globale ''alias'' verwendet, oder (falls gesetzt) das von RHASSPY an den "untergeordneten Geräten" bereitgestellte Attribut <br />
** ''rhasspyName'' <br />
* entsprechendes gilt für ''rhasspyGroup'' und ''rhasspyRoom''<br />
Werden die speziellen Attribute verwendet, können (komma-getrennt) mehrere Angaben gemacht werden. Dabei ist das jeweils erste Element der "Hauptname", der im RHASSPY-list dann als ''alias'' erscheint.<br />
* danach verbleibende "unverständliche Wörter" (z.B. für Dialekt) zeigt Rhasspy in seinem Web-Interface an und können dort "lautmalerisch" so abgebildet werden, dass Rhasspy auch diese erkennen kann.<br />
{{Hinweis| RHASSPY arbeitet "kontextbezogen" und unterscheidet (anhand der ''siteId'' des Spracheingabegeräts) gleich benannte Geräte u.U. einfach darüber, aus welchem Raum die Anweisung kommt. "Mach das Licht an" hat im Esszimmer gesprochen daher eine andere Auswirkung als im Wohnzimmer.}}<br />
<br />
=== Weitere Geräte steuern ===<br />
Für weitere Geräte gilt das oben gesagte entsprechend. <br />
<br />
==== Gruppen ====<br />
Mehrere Geräte lassen sich über den ''intent'' [SetOnOffGroup] schalten<br />
[de.fhem:SetOnOffGroup]<br />
\[(schalt|mach)] ( alle | sämtliche ) $de.fhem.Group-SetOnOff{Group} [im] [( überall:global | $de.fhem.Room ){Room}] ( an{Value:on} | aus{Value:off} )<br />
Dabei sollte darauf geachtet werden, dass es keine Überschneidungen mit "Sätzen" gibt, die für andere intents verwendet werden. Hier ist dies das obligatorische ''alle'' oder ''sämtliche'' gegeben.<br />
<br />
==== Zahlenwerte ====<br />
Hier ein Beispielsatz, um z.B. Leuchten zu hoch- und herunterzudimmen:<br />
[de.fhem:SetNumeric]<br />
( mach |schalt|schalte|stelle) $de.fhem.Device-light{Device} [um] [(0..100){Value}] [prozent{Unit:percent}] ( heller:lightUp | dunkler:lightDown){Change}<br />
Für andere ''genericDeviceType''-Geräte könnten passende weitere Satz-Muster ergänzt werden, z.B. für Rollladen.<br />
<br />
Das geht auch für Gruppen, wenn man einen passenden intent anlegt, und es geht mit dem passenden Satzmuster auch für die direkte Ansteuerung eines Werts.<br />
<br />
==== Farben ====<br />
Farben erwartet RHASSPY als nummerischen Wert von 0-360 , entsprechend der Hue-Dimension im [https://de.wikipedia.org/wiki/HSV-Farbraum HSV-Farbraum]. Für deutsch ist ein entsprechender Abschnitt in der oben genannten ''rhasspy-de.cfg'' (languageFile) enthalten, der direkt auch an Rhasspy als slot übermittelt wird. Für Farbtemperatur-Werte gilt das entsprechend mit einem Wertebereich von 0-100.<br />
[de.fhem:SetColor]<br />
\[setze|färbe] $de.fhem.Device-light{Device} [$de.fhem.Room{Room}] [auf die Farbe] ( $de.fhem.Colors{Hue} | $de.fhem.Colortemp{Colortemp} )<br />
Alternativ kann <br />
* auch ein RGB-Wert übergeben oder erzwungen werden (siehe den entsprechenden ''slot'' bzw. ''rhasspySpecials''). Dabei ist zu beachten, dass RGB immer auch einen festen Hellikheitswert enthält;<br />
* ''rhasspyColors'' als Attribut gesetzt werden. Diese Methode ist historisch bedingt und nicht mehr zu empfehlen.<br />
<br />
==== Abfragen ====<br />
RHASSPY kann - abhängig von den konkreten Einstellungen - auf Fragen nach Zuständen usw. beantworten. Dazu und für weitere Optionen ist am Ende der commandref eine Liste der von RHASSPY direkt verstandenen intents zu finden, samt der Datenfelder, die Benötigt werden.<br />
<br />
== Links ==<br />
* [https://github.com/rhasspy/rhasspy Rhasspy auf Github]<br />
* [https://rhasspy.readthedocs.io/en/latest/ offizielle Rhasspy Doku-Seite]<br />
* [https://community.rhasspy.org/ Offizielles Rhasspy Forum]<br />
* [https://github.com/fhem/fhem-rhasspy fhem-rhasspy Modul auf GitHub]<br />
* [https://github.com/Romkabouter/ESP32-Rhasspy-Satellite ESP32-basierte Hardware als Satelliten]<br />
* [https://github.com/razzo04/rhasspy-mobile-app App für Adroid-Satelliten]<br />
* [https://www.youtube.com/watch?v=sWVl0ZoXZEo Video zu sentences.ini]<br />
<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Sprachsteuerung]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32240PROPLANTA2019-12-30T20:06:56Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
<br />
https://www.proplanta.de/Wetter/Legende/ </br><br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/ </br></br><br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32239PROPLANTA2019-12-30T20:06:22Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
<br />
https://www.proplanta.de/Wetter/Legende/ </br><br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/<br />
</br></br><br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32238PROPLANTA2019-12-30T20:05:48Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
<br />
https://www.proplanta.de/Wetter/Legende/<br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/<br />
</br></br><br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32237PROPLANTA2019-12-30T20:05:12Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/<br />
</br><br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32236PROPLANTA2019-12-30T16:15:21Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32235PROPLANTA2019-12-30T16:14:58Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635/<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32234PROPLANTA2019-12-30T16:14:15Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
https://forum.fhem.de/index.php/topic,87753.msg801635.html#msg801635<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32233PROPLANTA2019-12-30T16:13:04Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32232PROPLANTA2019-12-30T16:12:33Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32231PROPLANTA2019-12-30T16:11:33Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=PROPLANTA&diff=32230PROPLANTA2019-12-30T16:11:10Z<p>Gisbert: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen von Wetterdaten der Webseite proplanta.de<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=59_PROPLANTA.pm<br />
|ModOwner=tupol ({{Link2FU|5432|Forum}}/[[Benutzer Diskussion:Topos|Wiki]]) <br />
}}<br />
<br />
Modul zum Auslesen der Wetterdaten von www.proplanta.de<br />
<br />
<br />
== Voraussetzungen ==<br />
<br />
<br />
== Anwendung ==<br />
<br />
<br />
== Bekannte Probleme / Hilfe bei der Fehlersuche ==<br />
Die korrekte Darstellung des <code>weblink htmlCode</code> braucht evtl. etwas Zeit (lange Abrufzyklen).<br />
<br />
=== Fehler: Could not capture all data. Please check URL or city name. ===<br />
Bei mehrdeutigen Wohnort hilft es statt nur den Ort oder nur die Postleitzahl einfach beides zu verwenden, verbunden mit einem +. (XXXXX+Stadt)<br />
<br />
Bei einer Stadt mit Umlauten wie "Hinterwürfelhäusen (Oberflössen)" muss PROPLANTA wie folgt definiert werden<br />
<br />
<pre>define myProPlanta PROPLANTA Hinterw%FCrfelh%E4usen+(Oberfl%F6ssen) de</pre><br />
<br />
*Ä %C4<br />
*Ö %D6<br />
*Ü %DC<br />
*ä %E4<br />
*ö %F6<br />
*ü %FC<br />
<br />
=== Fehler: 500 Can't connect to www.proplanta.de:443 (certificate verify failed) ===<br />
Das PROPLANTA-Modul nutzt ''https'' - also einen verschlüsselten Zugang zu www.proplanta.de. Wie ''https'' genau funktioniert, steht [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure hier].<br />
<br />
Bei einer https-Verbindung schickt der Webserver zuerst einen zertifizierten öffentlichen Schlüssel, mit dem die Daten an ihn verschlüsselt werden. Dessen Zertifikat muss von einer Zertifizierungsstelle (engl. Certificate Authority oder kurz CA) digital signiert sein, um sicherzustellen, das Schlüssel und Webadresse zusammengehören. Der FHEM-Rechner prüft diese Signierung mit Hilfe von auf dem Rechner gespeicherten Stammzertifikaten (engl. Root Certificates oder CA Certificates). Details dazu [https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure#Vorinstallierte_Zertifikate hier] und [https://wiki.ubuntuusers.de/CA/ hier].<br />
<br />
Der Fehler tritt auf, wenn das verwendete Stammzertifikat auf dem FHEM-Rechner fehlt (nicht gefunden wird) oder abgelaufen ist. Das Zertifikat von www.proplanta.de kann dann nicht verifiziert werden. Der Herausgeber gilt als unbekannt und nicht vertrauenswürdig.<br />
<br />
Die Fehlerbehebung hängt vom Rechner und vom Betriebssystem ab. Hier hilft nur eine Internetrecherche. <br />
<br />
Standard-Lösung:<br />
*Stammzertifikate aktualisieren (z.B. bei Debian mit ''sudo dpkg-reconfigure ca-certificates'')<br />
<br />
oder über eine manuelle Installation:<br><br />
*aktuelle Stammzertifikate herunterladen<br />
*ins '''richtige''' Verzeichnis kopieren (z. B. in ''/usr/share/ca-certificates'')<br>Achtung!! Manchmal ist im Betriebssytem der falsche Speicherort deklariert. <br />
*neue Stammzertifikate (und evtl. das Verzeichnis) dem Betriebsystem bekannt machen (z. B. mit ''sudo update-ca-certificates'')<br />
<br />
== Anwendungsbeispiel(e) ==<br />
[[Datei:Screenshot_Proplanta.png|600px]]<br />
<br />
<pre><br />
# erzeugt den Proplanta-Datenabruf<br />
define WetterProplanta PROPLANTA Siegen de<br />
attr WetterProplanta DbLogExclude .*<br />
attr WetterProplanta group Wettervorhersage (Proplanta)<br />
attr WetterProplanta room Wetter-vorhersage<br />
<br />
# erzeugt die Anzeige zum Datenabruf<br />
define VorschauProplanta weblink htmlCode {PROPLANTA_Html("WetterProplanta")}<br />
attr VorschauProplanta DbLogExclude .*<br />
attr VorschauProplanta group Wettervorhersage (Proplanta)<br />
attr VorschauProplanta room Wetter-vorhersage<br />
</pre><br />
<br />
; Erläuterung:<br />
: <code>DbLogExclude .*</code> die Daten sollen nicht ins Log geschrieben werden (hier [[DbLog]]) und es nicht "zumüllen"<br />
<br />
<br />
[[Datei:ProplantaQuerformat.png|600px]]<br />
<br />
<pre><br />
# erzeugt Ansicht im Querformat <br />
defmod weblink_meinwetter weblink htmlCode {PROPLANTA_Html_Landscape("<Proplanta-device, anpassen!>",4)}<br />
attr weblink_meinwetter group <anpassen><br />
attr weblink_meinwetter room <anpassen></pre><br />
<br />
== Liste der Wetterbedingungen bei Proplanta ==<br />
Hier gibt es eine Liste der Wetterbedingungen bei Proplanta:<br />
https://www.proplanta.de/Wetter/Legende/<br />
<br />
[[Kategorie:Gerätemodul]]</div>Gisberthttp://wiki.fhem.de/w/index.php?title=TelegramBot&diff=20122TelegramBot2017-02-20T15:22:04Z<p>Gisbert: /* Registrierung eines neuen Bot */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=38328<br />
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]<br />
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}<br />
<br />
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). <br />
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.<br />
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.<br />
<br />
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein. <br />
<br />
== Über Telegram Instant Messaging ==<br />
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. <br />
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und <br />
können auch aus dem WebBrowser verwendet werden. <br />
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. <br />
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.<br />
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.<br />
<br />
Für die Unterstützung von ''WhatsApp'' siehe Modul [[yowsup]].<br />
<br />
== Features ==<br />
Unterstützt werden:<br />
<br />
* Versand von Textnachrichten <br />
* Versand und Empfang von Bildern/Audio/etc <br />
* Empfang von Textnachrichten von beliebigen Kontakten<br />
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen<br />
* Ergebnisse der Kommandos zusenden lassen<br />
<br />
Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.<br />
<br />
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.<br />
}}<br />
<br />
Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl <code>/newbot</code> einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf "Bot" enden.<br><br />
<br />
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:<br />
<br />
<code>define &lt;name&gt; TelegramBot &lt;token&gt; </code><br />
<br />
Beispiel: <code>define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw</code><br />
<br />
'''Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes''' <br />
<code>pollingTimeout</code> '''auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.''' <br />
<br />
Beispiel: <code>attr teleBot pollingTimeout 120</code><br />
<br />
'''Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.'''<br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.<br />
}}<br />
<br />
== Registrierung eines neuen Bot ==<br />
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.<br />
Hier ein Beispiel, wie so ein Chat aussehen könnte:<br />
<pre>Client: <br />
/newbot<br />
----------------<br />
BotFather:<br />
Alright, a new bot. How are we going to call it? Please choose a name for your bot. <br />
----------------<br />
Client: <br />
Mein Name <br />
----------------<br />
BotFather: <br />
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.<br />
----------------<br />
Client: <br />
fhem_bot<br />
----------------<br />
BotFather: <br />
Sorry, this username is already taken. Think of something different.<br />
----------------<br />
Client: <br />
fhem1234_bot<br />
----------------<br />
BotFather: <br />
Done! Congratulations on your new bot.<br />
You will find it at telegram.me/fhem1234_bot.<br />
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.<br />
----------------<br />
Use this token to access the HTTP API:<br />
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz <br />
<br />
For a description of the Bot API, see this page: https://core.telegram.org/bots/api <br />
</pre><br />
Um einen Chat an einen "Contact" versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.<br />
<br />
== Tipps ==<br />
<br />
=== Privacyeinstellungen ===<br />
<br />
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.<br>Beispielchat:<pre>Client:<br />
/setprivacy<br />
----------------<br />
BotFather:<br />
Choose a bot to change group messages settings.<br />
----------------<br />
Client:<br />
@fhem1234_bot<br />
----------------<br />
BotFather:<br />
'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.<br />
'Disable' - your bot will receive all messages that people send to groups.<br />
Current status is: ENABLED<br />
----------------<br />
Client:<br />
Disable<br />
----------------<br />
BotFather:<br />
Success! The new status is: DISABLED. /help</pre><br />
<br />
=== Kontakte ===<br />
<br />
Der Bot merkt sich die bereits bekannten Kontakte im Reading <code>Contacts</code>. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). <br />
<br />
Beispiel: <code>123456:Ralf_Mustermann:@ralf</code><br />
<br />
Verschiedene Einträge werden durch Leerzeichen getrennt.<br />
<br />
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl <code>replaceContacts</code>. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.<br />
<br />
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)<br />
<br />
=== Reset ===<br />
<br />
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl <code>reset</code>). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. <br />
<br />
=== Gruppen ===<br />
<br />
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf 'Disabled' gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.<br />
<br />
==== Supergroups / Supergruppen ====<br />
<br />
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.<br />
<br />
== Beispielszenarien ==<br />
<br />
=== Benachrichtigungen über Ereignisse ===<br />
<br />
Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:<br />
<br />
<code>define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !</code><br />
<br />
In diesem Beispiel wird der Nachrichtentext "fhem newly started - just now !" an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.<br />
<br />
=== Versand von Bildern ===<br />
<br />
Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.<br />
<br />
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 <br />
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).<br />
<br />
<br />
<code>define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg</code><br />
<br />
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.<br />
<br />
=== Versand von SVG-Plots ===<br />
<br />
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl 'TelegramBot_ExecuteCommand':<br />
<br />
<code>{TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. <br />
<br />
mit <code> define cmd_sendTelegramSVG cmdalias TGSVG .* AS {TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng($EVENT)}');; return;;}</code><br />
<br />
kann man mit einem kurzen <br />
<code> TGSVG SVG_Garten </code><br />
ein beliebiges SVG versenden.<br />
<br />
Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:<br />
<br />
<code>{fhem "set mein_telegramBot message \@meine_ZielID Mein Text" ;; TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
<br />
<br />
==== Voraussetzungen für den Versand von SVG-Plots ====<br />
Es muss das Modul libimage-librsvg-perl installiert sein:<br />
<br />
<code>sudo apt-get install libimage-librsvg-perl</code><br />
<br />
Evtl. sind weitere Module erforderlich:<br />
<br />
<code>sudo apt-get install libgd-graph-perl<br />
<br />
sudo apt-get install libgd-text-perl</code><br />
<br />
=== Empfang von Bildern oder ähnlichem ===<br />
<br />
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading <code>msgFileId</code> angelegt (<code>123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx</code>) und im Reading <code>msgText</code> steht dann so etwas wie<br />
<code>received photo # Size: 107701</code><br />
<br />
Über das Get-Kommando <code>urlForFile</code> mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: <br />
<br />
<code>https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg</code><br />
<br />
<br />
=== Versand von Emojis (Smileys) ===<br />
<br />
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite <br />
<br />
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte "Native") <br />
<br />
übernehmen und mit der Nachricht verschicken. <br />
<br />
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).<br />
<br />
=== Kommandos auslösen ===<br />
<br />
Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: "cmdKeyword")erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.<br />
<br />
<code>attr telebotdevice cmdKeyword doit</code><br />
<br />
Somit kann man dann durch Nachrichten die mit "doit" beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.<br />
<br />
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.<br />
<br />
Beispiele<br />
<br />
<code>doit set schalter on</code><br />
<br />
<code>doit list telegrambot</code><br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut "cmdRestrictedPeer" setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.<br />
}}<br />
<br />
==== Favoriten für Kommandos anlegen ====<br />
<br />
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf "Kurzwahl" legt.<br />
<br />
Beispiel-Kommandos wie z.B. <code>set TYPE=ROLLADEN pos 100</code> und <code>set TYPE=ROLLADEN pos 0</code>, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.<br />
<br />
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:<br />
<br />
<code>attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0</code><br />
<br />
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.<br />
Nehmen wir mal an man möchte die Favoriten mit <code>/short</code> ausführen können. Dazu muss dann das Attribut "cmdFavorites" setzen<br />
<br />
<code>attr telegrambotdevice cmdFavorites /short</code><br />
<br />
Wenn man nun im Telegram Client <br />
<code>/short 1</code> an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.<br />
<br />
Ausserdem kann man im Telegram Client <br />
<code>/short</code> an den Bot schicken, dann antwortet der Bot mit<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = set TYPE=ROLLADEN pos 100<br />
<br />
/short2 = set TYPE=ROLLADEN pos 0<br />
<br />
</pre><br />
<br />
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.<br />
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:<br />
<br />
<code>/[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;/[Rollaeden auf]=set TYPE=ROLLADEN pos 0</code><br />
<br />
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = Rollaeden zu<br />
<br />
/short2 = Rollaeden auf<br />
<br />
</pre><br />
<br />
== Links ==<br />
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem<br />
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather<br />
<br />
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm<br />
<br />
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}<br />
* Telegram messaging system https://telegram.org/<br />
* TelegramBot API https://core.telegram.org/bots/api</div>Gisberthttp://wiki.fhem.de/w/index.php?title=TelegramBot&diff=20121TelegramBot2017-02-20T15:20:17Z<p>Gisbert: /* Registrierung eines neuen Bot */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=38328<br />
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]<br />
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}<br />
<br />
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). <br />
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.<br />
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.<br />
<br />
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein. <br />
<br />
== Über Telegram Instant Messaging ==<br />
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. <br />
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und <br />
können auch aus dem WebBrowser verwendet werden. <br />
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. <br />
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.<br />
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.<br />
<br />
Für die Unterstützung von ''WhatsApp'' siehe Modul [[yowsup]].<br />
<br />
== Features ==<br />
Unterstützt werden:<br />
<br />
* Versand von Textnachrichten <br />
* Versand und Empfang von Bildern/Audio/etc <br />
* Empfang von Textnachrichten von beliebigen Kontakten<br />
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen<br />
* Ergebnisse der Kommandos zusenden lassen<br />
<br />
Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.<br />
<br />
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.<br />
}}<br />
<br />
Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl <code>/newbot</code> einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf "Bot" enden.<br><br />
<br />
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:<br />
<br />
<code>define &lt;name&gt; TelegramBot &lt;token&gt; </code><br />
<br />
Beispiel: <code>define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw</code><br />
<br />
'''Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes''' <br />
<code>pollingTimeout</code> '''auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.''' <br />
<br />
Beispiel: <code>attr teleBot pollingTimeout 120</code><br />
<br />
'''Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.'''<br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.<br />
}}<br />
<br />
== Registrierung eines neuen Bot ==<br />
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.<br />
Hier ein Beispiel, wie so ein Chat aussehen könnte:<br />
<pre>Client: <br />
/newbot<br />
----------------<br />
BotFather:<br />
Alright, a new bot. How are we going to call it? Please choose a name for your bot. <br />
----------------<br />
Client: <br />
Mein Name <br />
----------------<br />
BotFather: <br />
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.<br />
----------------<br />
Client: <br />
fhem_bot<br />
----------------<br />
BotFather: <br />
Sorry, this username is already taken. Think of something different.<br />
----------------<br />
Client: <br />
fhem1234_bot<br />
----------------<br />
BotFather: <br />
Done! Congratulations on your new bot.<br />
You will find it at telegram.me/fhem1234_bot.<br />
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.<br />
----------------<br />
Use this token to access the HTTP API:<br />
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz <br />
<br />
For a description of the Bot API, see this page: https://core.telegram.org/bots/api <br />
</pre><br />
Um einen Chat an einen "Contact" versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.<br />
<br />
== Tipps ==<br />
<br />
=== Privacyeinstellungen ===<br />
<br />
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.<br>Beispielchat:<pre>Client:<br />
/setprivacy<br />
----------------<br />
BotFather:<br />
Choose a bot to change group messages settings.<br />
----------------<br />
Client:<br />
@fhem1234_bot<br />
----------------<br />
BotFather:<br />
'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.<br />
'Disable' - your bot will receive all messages that people send to groups.<br />
Current status is: ENABLED<br />
----------------<br />
Client:<br />
Disable<br />
----------------<br />
BotFather:<br />
Success! The new status is: DISABLED. /help</pre><br />
<br />
=== Kontakte ===<br />
<br />
Der Bot merkt sich die bereits bekannten Kontakte im Reading <code>Contacts</code>. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). <br />
<br />
Beispiel: <code>123456:Ralf_Mustermann:@ralf</code><br />
<br />
Verschiedene Einträge werden durch Leerzeichen getrennt.<br />
<br />
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl <code>replaceContacts</code>. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.<br />
<br />
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)<br />
<br />
=== Reset ===<br />
<br />
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl <code>reset</code>). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. <br />
<br />
=== Gruppen ===<br />
<br />
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf 'Disabled' gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.<br />
<br />
==== Supergroups / Supergruppen ====<br />
<br />
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.<br />
<br />
== Beispielszenarien ==<br />
<br />
=== Benachrichtigungen über Ereignisse ===<br />
<br />
Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:<br />
<br />
<code>define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !</code><br />
<br />
In diesem Beispiel wird der Nachrichtentext "fhem newly started - just now !" an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.<br />
<br />
=== Versand von Bildern ===<br />
<br />
Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.<br />
<br />
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 <br />
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).<br />
<br />
<br />
<code>define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg</code><br />
<br />
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.<br />
<br />
=== Versand von SVG-Plots ===<br />
<br />
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl 'TelegramBot_ExecuteCommand':<br />
<br />
<code>{TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. <br />
<br />
mit <code> define cmd_sendTelegramSVG cmdalias TGSVG .* AS {TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng($EVENT)}');; return;;}</code><br />
<br />
kann man mit einem kurzen <br />
<code> TGSVG SVG_Garten </code><br />
ein beliebiges SVG versenden.<br />
<br />
Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:<br />
<br />
<code>{fhem "set mein_telegramBot message \@meine_ZielID Mein Text" ;; TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
<br />
<br />
==== Voraussetzungen für den Versand von SVG-Plots ====<br />
Es muss das Modul libimage-librsvg-perl installiert sein:<br />
<br />
<code>sudo apt-get install libimage-librsvg-perl</code><br />
<br />
Evtl. sind weitere Module erforderlich:<br />
<br />
<code>sudo apt-get install libgd-graph-perl<br />
<br />
sudo apt-get install libgd-text-perl</code><br />
<br />
=== Empfang von Bildern oder ähnlichem ===<br />
<br />
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading <code>msgFileId</code> angelegt (<code>123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx</code>) und im Reading <code>msgText</code> steht dann so etwas wie<br />
<code>received photo # Size: 107701</code><br />
<br />
Über das Get-Kommando <code>urlForFile</code> mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: <br />
<br />
<code>https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg</code><br />
<br />
<br />
=== Versand von Emojis (Smileys) ===<br />
<br />
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite <br />
<br />
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte "Native") <br />
<br />
übernehmen und mit der Nachricht verschicken. <br />
<br />
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).<br />
<br />
=== Kommandos auslösen ===<br />
<br />
Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: "cmdKeyword")erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.<br />
<br />
<code>attr telebotdevice cmdKeyword doit</code><br />
<br />
Somit kann man dann durch Nachrichten die mit "doit" beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.<br />
<br />
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.<br />
<br />
Beispiele<br />
<br />
<code>doit set schalter on</code><br />
<br />
<code>doit list telegrambot</code><br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut "cmdRestrictedPeer" setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.<br />
}}<br />
<br />
==== Favoriten für Kommandos anlegen ====<br />
<br />
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf "Kurzwahl" legt.<br />
<br />
Beispiel-Kommandos wie z.B. <code>set TYPE=ROLLADEN pos 100</code> und <code>set TYPE=ROLLADEN pos 0</code>, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.<br />
<br />
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:<br />
<br />
<code>attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0</code><br />
<br />
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.<br />
Nehmen wir mal an man möchte die Favoriten mit <code>/short</code> ausführen können. Dazu muss dann das Attribut "cmdFavorites" setzen<br />
<br />
<code>attr telegrambotdevice cmdFavorites /short</code><br />
<br />
Wenn man nun im Telegram Client <br />
<code>/short 1</code> an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.<br />
<br />
Ausserdem kann man im Telegram Client <br />
<code>/short</code> an den Bot schicken, dann antwortet der Bot mit<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = set TYPE=ROLLADEN pos 100<br />
<br />
/short2 = set TYPE=ROLLADEN pos 0<br />
<br />
</pre><br />
<br />
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.<br />
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:<br />
<br />
<code>/[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;/[Rollaeden auf]=set TYPE=ROLLADEN pos 0</code><br />
<br />
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = Rollaeden zu<br />
<br />
/short2 = Rollaeden auf<br />
<br />
</pre><br />
<br />
== Links ==<br />
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem<br />
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather<br />
<br />
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm<br />
<br />
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}<br />
* Telegram messaging system https://telegram.org/<br />
* TelegramBot API https://core.telegram.org/bots/api</div>Gisberthttp://wiki.fhem.de/w/index.php?title=DOIF&diff=20120DOIF2017-02-20T14:56:55Z<p>Gisbert: /* Links */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Do ... if ... <br />
|ModType=h<br />
|ModForumArea=Automatisierung/DOIF<br />
|ModTechName=98_DOIF.pm<br />
|ModOwner=Damian}}<br />
<br />
[[DOIF]] ist ein universelles Modul, welches sowohl [[Event|ereignis]]- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen ("do") unter bestimmten Bedingungen ("if") auszuführen. Bedingungen umfasst auch Konstrukte wie "wenn Zustand x für y Minuten... (Zeitsteuerung)".<br />
<br />
== Voraussetzungen ==<br />
keine <br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF Define]<br />
<br />
=== Attribute ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Attribute Attribute]<br />
<br />
===Kurzreferenz===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Kurzreferenz Kurzreferenz]<br />
<br />
<br />
== Anwendungsbeispiele ==<br />
Der Modulautor hat im deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref] eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.<br />
<br />
== Links ==<br />
* [[DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen]]<br />
* [[DOIF/Tools und Fehlersuche]]<br />
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, Zeileinnummerierung, uvm. (nicht nur) von DOIF<br />
* [[DOIFtools]] Das Modul zum DOIF als Download im {{Link2Forum|Topic=63938|LinkText=Forenthread}}<br />
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]<br />
* [[DOIF/Import von Code Snippets]]<br />
* [[DOIF/Operatorenrangfolge]]<br />
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]<br />
* [[DOIF/Mehrfachnutzung eines Tasters]]<br />
* [[DOIF/Zeitgeber]] Wecker, Kurzzeitwecker, Tageszeitgeber<br />
* [[DOIF/Zeitspanne zwischen zwei Terminen schalten]]<br />
* [[DOIF/do always Alternative am Beispiel einer Rollladenautomatik]]<br />
* [[DOIF/Zeitspanne im DOIF und disabledForIntervals im Vergleich]]<br />
* [[DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich]]<br />
* DOIF/Verwenden von sunrise / sunset in Zeitintervall im {{Link2Forum|Topic=58884|LinkText=Forenthread}}<br />
<br />
===Entwicklungshistorie===<br />
<br />
* {{Link2Forum|Topic=67367|LinkText=Forenthread}} Ausblick: akkumulierte Abfrage, Aggregationsfunktion<br />
* {{Link2Forum|Topic=66153|LinkText=Forenthread}} neue Features: set <DOIF_Modul> <beliebiger Ausdruck><br />
* {{Link2Forum|Topic=63375|LinkText=Forenthread}} neue Features: checkall: timer|event|all, timertrigger, timerintervall <br />
* {{Link2Forum|Topic=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList<br />
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable<br />
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)<br />
* {{Link2Forum|Topic=51117|LinkText=Forenthread}} Möglichkeit auf passende Events zu beschränken<br />
* {{Link2Forum|Topic=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...<br />
* {{Link2Forum|Topic=49109|LinkText=Forenthread}} DOIF als endlicher Automat (finite state maschine)<br />
* {{Link2Forum|Topic=48925|LinkText=Forenthread}} serialisierte Timer<br />
* {{Link2Forum|Topic=46327|LinkText=Forenthread}} neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist<br />
* {{Link2Forum|Topic=43638|LinkText=Forenthread}} Attribut repeatcmd<br />
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden<br />
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative<br />
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)<br />
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features<br />
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster<br />
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekten Zeitangaben, readingFnAttributes<br />
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekten Zeitangaben<br />
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.<br />
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls<br />
<br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=DOIF&diff=20117DOIF2017-02-20T09:29:28Z<p>Gisbert: /* Links */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Do ... if ... <br />
|ModType=h<br />
|ModForumArea=Automatisierung/DOIF<br />
|ModTechName=98_DOIF.pm<br />
|ModOwner=Damian}}<br />
<br />
[[DOIF]] ist ein universelles Modul, welches sowohl [[Event|ereignis]]- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen ("do") unter bestimmten Bedingungen ("if") auszuführen. Bedingungen umfasst auch Konstrukte wie "wenn Zustand x für y Minuten... (Zeitsteuerung)".<br />
<br />
== Voraussetzungen ==<br />
keine <br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF Define]<br />
<br />
=== Attribute ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Attribute Attribute]<br />
<br />
===Kurzreferenz===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Kurzreferenz Kurzreferenz]<br />
<br />
<br />
== Anwendungsbeispiele ==<br />
Der Modulautor hat im deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref] eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.<br />
<br />
== Links ==<br />
* [[DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen]]<br />
* [[DOIF/Tools und Fehlersuche]]<br />
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, Zeileinnummerierung, uvm. (nicht nur) von DOIF<br />
* [[DOIFtools]] Das Modul zum DOIF als Download im {{Link2Forum|Topic=63938|LinkText=Forenthread}}<br />
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]<br />
* [[DOIF/Import von Code Snippets]]<br />
* [[DOIF/Operatorenrangfolge]]<br />
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]<br />
* [[DOIF/Mehrfachnutzung eines Tasters]]<br />
* [[DOIF/Zeitgeber]] Wecker, Kurzzeitwecker, Tageszeitgeber<br />
* [[DOIF/Zeitspanne zwischen zwei Terminen schalten]]<br />
* [[DOIF/do always Alternative am Beispiel einer Rollladenautomatik]]<br />
* [[DOIF/Zeitspanne im DOIF und disabledForIntervals im Vergleich]]<br />
* [[DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich]]<br />
* DOIF/Verwenden von sunrise / sunset in DOIF im {{Link2Forum|Topic=58884|LinkText=Forenthread}}<br />
<br />
===Entwicklungshistorie===<br />
<br />
* {{Link2Forum|Topic=67367|LinkText=Forenthread}} Ausblick: akkumulierte Abfrage, Aggregationsfunktion<br />
* {{Link2Forum|Topic=66153|LinkText=Forenthread}} neue Features: set <DOIF_Modul> <beliebiger Ausdruck><br />
* {{Link2Forum|Topic=63375|LinkText=Forenthread}} neue Features: checkall: timer|event|all, timertrigger, timerintervall <br />
* {{Link2Forum|Topic=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList<br />
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable<br />
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)<br />
* {{Link2Forum|Topic=51117|LinkText=Forenthread}} Möglichkeit auf passende Events zu beschränken<br />
* {{Link2Forum|Topic=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...<br />
* {{Link2Forum|Topic=49109|LinkText=Forenthread}} DOIF als endlicher Automat (finite state maschine)<br />
* {{Link2Forum|Topic=48925|LinkText=Forenthread}} serialisierte Timer<br />
* {{Link2Forum|Topic=46327|LinkText=Forenthread}} neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist<br />
* {{Link2Forum|Topic=43638|LinkText=Forenthread}} Attribut repeatcmd<br />
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden<br />
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative<br />
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)<br />
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features<br />
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster<br />
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekten Zeitangaben, readingFnAttributes<br />
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekten Zeitangaben<br />
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.<br />
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls<br />
<br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=DOIF&diff=20116DOIF2017-02-20T09:26:49Z<p>Gisbert: Hinweis auf Forenthread zur Verwendung von sunrise / sunset in DOIF</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Do ... if ... <br />
|ModType=h<br />
|ModForumArea=Automatisierung/DOIF<br />
|ModTechName=98_DOIF.pm<br />
|ModOwner=Damian}}<br />
<br />
[[DOIF]] ist ein universelles Modul, welches sowohl [[Event|ereignis]]- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen ("do") unter bestimmten Bedingungen ("if") auszuführen. Bedingungen umfasst auch Konstrukte wie "wenn Zustand x für y Minuten... (Zeitsteuerung)".<br />
<br />
== Voraussetzungen ==<br />
keine <br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF Define]<br />
<br />
=== Attribute ===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Attribute Attribute]<br />
<br />
===Kurzreferenz===<br />
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Kurzreferenz Kurzreferenz]<br />
<br />
<br />
== Anwendungsbeispiele ==<br />
Der Modulautor hat im deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref] eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.<br />
<br />
== Links ==<br />
* [[DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen]]<br />
* [[DOIF/Tools und Fehlersuche]]<br />
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&Ersetzen, Zeileinnummerierung, uvm. (nicht nur) von DOIF<br />
* [[DOIFtools]] Das Modul zum DOIF als Download im {{Link2Forum|Topic=63938|LinkText=Forenthread}}<br />
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]<br />
* [[DOIF/Import von Code Snippets]]<br />
* [[DOIF/Operatorenrangfolge]]<br />
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]<br />
* [[DOIF/Mehrfachnutzung eines Tasters]]<br />
* [[DOIF/Zeitgeber]] Wecker, Kurzzeitwecker, Tageszeitgeber<br />
* [[DOIF/Zeitspanne zwischen zwei Terminen schalten]]<br />
* [[DOIF/do always Alternative am Beispiel einer Rollladenautomatik]]<br />
* [[DOIF/Zeitspanne im DOIF und disabledForIntervals im Vergleich]]<br />
* [[DOIF/partielle Deaktivierung der Befehlsausführung, Zurücksetzen eines Wait-Timers mit $SELF oder IsDisabled verhindern, im Vergleich]]<br />
* DOIF/ Verwenden von sunrise / sunset in DOIF im {{Link2Forum|Topic=58884|LinkText=Forenthread}}<br />
<br />
===Entwicklungshistorie===<br />
<br />
* {{Link2Forum|Topic=67367|LinkText=Forenthread}} Ausblick: akkumulierte Abfrage, Aggregationsfunktion<br />
* {{Link2Forum|Topic=66153|LinkText=Forenthread}} neue Features: set <DOIF_Modul> <beliebiger Ausdruck><br />
* {{Link2Forum|Topic=63375|LinkText=Forenthread}} neue Features: checkall: timer|event|all, timertrigger, timerintervall <br />
* {{Link2Forum|Topic=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList<br />
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable<br />
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)<br />
* {{Link2Forum|Topic=51117|LinkText=Forenthread}} Möglichkeit auf passende Events zu beschränken<br />
* {{Link2Forum|Topic=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...<br />
* {{Link2Forum|Topic=49109|LinkText=Forenthread}} DOIF als endlicher Automat (finite state maschine)<br />
* {{Link2Forum|Topic=48925|LinkText=Forenthread}} serialisierte Timer<br />
* {{Link2Forum|Topic=46327|LinkText=Forenthread}} neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist<br />
* {{Link2Forum|Topic=43638|LinkText=Forenthread}} Attribut repeatcmd<br />
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden<br />
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative<br />
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)<br />
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features<br />
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster<br />
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekten Zeitangaben, readingFnAttributes<br />
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekten Zeitangaben<br />
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.<br />
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls<br />
<br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19194FRITZBOX2017-01-29T19:28:51Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. <br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung: <br />
<code>attr FritzBox6490 allowTR064Command 1</code> <br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: <br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19193FRITZBOX2017-01-29T19:27:37Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. <br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung. <br />
<code>attr FritzBox6490 allowTR064Command 1</code> <br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: <br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19192FRITZBOX2017-01-29T19:27:03Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. <br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung. <br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: <br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19191FRITZBOX2017-01-29T19:25:44Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19190FRITZBOX2017-01-29T19:25:20Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19189FRITZBOX2017-01-29T19:23:39Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) \<br />
DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19188FRITZBOX2017-01-29T19:22:39Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
Eine Rufumleitung bei Abwesenheit funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) \<br />
DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19187FRITZBOX2017-01-29T19:22:08Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) \<br />
DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19186FRITZBOX2017-01-29T19:21:41Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<code>attr FritzBox6490 allowTR064Command 1</code><br />
<br />
Eine Rufumleitung bei Abwesenheit funktioniert mit einer vorher eingerichten Telefonnummer wie folgt:<br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) \<br />
DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisberthttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=19185FRITZBOX2017-01-29T19:16:15Z<p>Gisbert: /* Kabelboxen */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Steuerung einer Fritz!Box über FHEM <br />
|ModType=d<br />
|ModForumArea=FRITZ!Box<br />
|ModTechName=72_FRITZBOX.pm<br />
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}<br />
<br />
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.<br />
<br />
== Voraussetzungen ==<br />
=== Remote-Zugang ===<br />
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
:<code>sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl</code><br />
<br />
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.<br />
<br />
=== Telnet ===<br />
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: <br />
<br />
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon<br />
# Auf dem System, auf dem FHEM läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&nbsp;B. mit dem Befehl<br />
::<code>sudo apt-get install libnet-telnet-perl</code><br />
<br />
== Installation ==<br />
=== Erste Schritte ===<br />
Zur Erstinstallation reicht ein einfaches <code>define FritzBox FRITZBOX</code>, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).<br />
<br />
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):<br />
<br />
Fritzbox definieren:<br />
:<code>define FritzBox FRITZBOX</code><br />
<br />
Wenn die Fritzbox nicht unter <nowiki>http://fritz.box</nowiki> erreichbar ist, IP im define setzen:<br />
:<code>define FritzBox FRITZBOX 192.168.168.168</code><br />
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.<br />
<br />
Wenn ('''und nur wenn''') das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:<br />
:<code>attr FritzBox boxUser ''Benutzername'' </code><br />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<br />
<br />
Passwort konfigurieren:<br />
:<code>set FritzBox password ''Passwort''</code> - legt das zugehörige Passwort fest (nur einmal --> gehört nicht in die cfg-Datei) <br />
<br />
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):<br />
:<code>attr FritzBox allowTR064Command 1</code><br />
<br />
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====<br />
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]<br />
Bei Fernzugriff über Telnet sind weitere Schritte nötig:<br />
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)<br />
# TelnetUser definieren (wie im Screenshot gezeigt)<br />
# Passwort zum Benutzer auf der Fritzbox definieren<br />
<br />
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]<br />
<br />
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)<br />
<br />
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:<br />
<br />
:<code>define FritzBox FRITZBOX</code><br />
:<code>attr FritzBox telnetUser ''Benutzername'' </code> - legt den Benutzer fest<br />
:<code>set FritzBox password ''Passwort'' </code> - legt das zugehörige Passwort fest<br />
<br />
Wer keinen User konfiguriert hat, kann das Feld "telnetUser" leer lassen.<br />
<br />
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:<br />
<br />
:<code>attr FritzBox forceTelnetConnection 1</code><br />
<br />
=== mögliche Fehlermeldungen ===<br />
Sollte schon bei <code>define FritzBox FRITZBOX</code> die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].<br />
<br />
Kommt jetzt bei der erneuten Definition die Fehlermeldung <code>Error: Perl modul Net::Telnet is missing on this system</code> bitte wie oben schon erwähnt den Befehl <br />
:<code>sudo apt-get install libnet-telnet-perl</code> <br />
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.<br />
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Siehe [http://fhem.de/commandref_DE.html#FRITZBOX commandref]<br />
<br />
=== Attribute ===<br />
Siehe commandref<br />
<br />
=== TR-064 ===<br />
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.<br />
<br />
mit dem Attribute<br/><br />
<code>attr <device> allowTR064Command 1</code><br/><br />
kann man den Befehl<br/><br />
<code>get <device> tr064Command <service> <control> <action> [[parameterName1 parameterValue1] ...]</code><br/><br />
freischalten und damit auf diese Schnittstelle zugreifen.<br />
<br />
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.<br><br />
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.<br><br />
Die möglichen TR-064-Aktionen kann man auch über den Befehl <code>get <device> tr064ServiceList</code> auslesen.<br />
<br />
Folgende Service und Controls existieren (für den get-Befehl ''tr064Command'' werden nur die fett formatierten Wörter benötigt)<br />
<br />
{| class="wikitable"<br />
|-<br />
!serviceType!!controlURL!!XML!!Dokument bei AVM<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceInfo:1'''||/upnp/control/'''deviceinfo'''||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''DeviceConfig:1'''||/upnp/control/'''deviceconfig'''||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Layer3Forwarding:1'''||/upnp/control/'''layer3forwarding'''||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANConfigSecurity:1'''||/upnp/control/'''lanconfigsecurity'''||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''ManagementServer:1'''||/upnp/control/'''mgmsrv'''||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Time:1'''||/upnp/control/'''time'''||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''UserInterface:1'''||/upnp/control/'''userif'''||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_VoIP:1'''||/upnp/control/'''x_voip'''||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Storage:1'''||/upnp/control/'''x_storage'''||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_OnTel:1'''||/upnp/control/'''x_contact'''||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_WebDAVClient:1'''||/upnp/control/'''x_webdav'''||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_UPnP:1'''||/upnp/control/'''x_upnp'''||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_RemoteAccess:1'''||/upnp/control/'''x_remote'''||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_MyFritz:1'''||/upnp/control/'''x_myfritz'''||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_TAM:1'''||/upnp/control/'''x_tam'''||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_AppSetup:1'''||/upnp/control/'''x_appsetup'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''X_AVM-DE_Homeauto:1'''||/upnp/control/'''x_homeauto'''||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:1'''||/upnp/control/'''wlanconfig1'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:2'''||/upnp/control/'''wlanconfig2'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WLANConfiguration:3'''||/upnp/control/'''wlanconfig3'''||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''Hosts:1'''||/upnp/control/'''hosts'''||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANEthernetInterfaceConfig:1'''||/upnp/control/'''lanethernetifcfg'''||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''LANHostConfigManagement:1'''||/upnp/control/'''lanhostconfigmgm'''||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANCommonInterfaceConfig:1'''||/upnp/control/'''wancommonifconfig1'''||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLInterfaceConfig:1'''||/upnp/control/'''wandslifconfig1'''||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANDSLLinkConfig:1'''||/upnp/control/'''wandsllinkconfig1'''||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANEthernetLinkConfig:1'''||/upnp/control/'''wanethlinkconfig1'''||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANPPPConnection:1'''||/upnp/control/'''wanpppconn1'''||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]<br />
|-<br />
|<nowiki>urn:dslforum-org:service:</nowiki>'''WANIPConnection:1'''||/upnp/control/'''wanipconnection1'''||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]<br />
|-<br />
|}<br />
<br />
=== Status-Symbol ===<br />
<code>attr <device> devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off</code><br />
<br />
Im Verzeichnis www/images/default müssen die passenden Dateien "WLAN_on_gWLAN_off.png", "WLAN_on_gWLAN_on.png" und "WLAN_off.png" liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.<br />
<br />
== Anwendungsbeispiele ==<br />
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM Oberfläche]]<br />
Sollte alles geklappt haben, seht ihr nun unter "Unsortiert" den im nebenstehenden Screenshot gezeigten Eintrag für das "Gerät" (hier mit dem Icon "it_router").<br />
<br />
=== TR-064 Beispiele ===<br />
*Box Reboot: <code>get <device> tr064Command DeviceConfig:1 deviceconfig Reboot</code><br />
*Internet Reconnect: <code>get <device> tr064Command WANIPConnection:1 wanipconnection1 ForceTermination</code><br />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</code><br />
<br />
=== Klingel- und Sprachausgabe per TR-064 ===<br />
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.<br />
<br />
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===<br />
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.<br />
<br />
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:<br />
<br />
Funktion in [[99_myUtils anlegen|99_myUtils]]:<br />
<br />
<source lang='perl'>sub checkFritzMACpresent($$) {<br />
# Benötigt: Name der zu testenden Fritzbox ($Device),<br />
# zu suchende MAC ($MAC), <br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($Device, $MAC) = @_;<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");<br />
$Status = 0;<br />
} elsif ($StatusFritz eq "inactive") {<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");<br />
$Status = 0;<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.<br />
Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");<br />
$Status = 1;<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:<br />
:<code>define <Name> PRESENCE function {checkFritzMACpresent("Fritzbox","AA:BB:CC:DD:EE:FF")} 60 60</code><br />
wobei<br />
*<Name> ein beliebig zu wählender Name für die PRESENCE-Funktion ist,<br />
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,<br />
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.<br />
* "60 60" sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit <code>attr Fritzbox INTERVAL 60</code> den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.<br />
* "Log 1" führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM <code>attr <device> verbose 5</code> setzen muss. Wenn es läuft, können die "Log 1"-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in "Log 5" geändert werden.<br />
<br />
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===<br />
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.<br />
<br />
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen<br />
<br />
<source lang='perl'>sub checkAllFritzMACpresent($) {<br />
# Benötigt: nur die zu suchende MAC ($MAC), <br />
# Es werden alle Instanzen vom Type FRITZBOX abgefragt<br />
#<br />
# Rückgabe: 1 = Gerät gefunden<br />
# 0 = Gerät nicht gefunden<br />
my ($MAC) = @_;<br />
# Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0<br />
my $Status = 0;<br />
$MAC =~ tr/:/_/;<br />
$MAC = "mac_".uc($MAC);<br />
my @FBS = devspec2array("TYPE=FRITZBOX");<br />
foreach( @FBS ) {<br />
my $StatusFritz = ReadingsVal($_, $MAC, "weg");<br />
if ($StatusFritz eq "weg") {<br />
} elsif ($StatusFritz eq "inactive") {<br />
} else {<br />
# Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.<br />
$Status = 1;<br />
}<br />
}<br />
return $Status<br />
}<br />
</source><br />
<br />
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.<br />
<br />
:<code>define <Name> PRESENCE function {checkAllFritzMACpresent("AA:BB:CC:DD:EE:FF")} 60 60</code><br />
<br />
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.<br />
<br />
=== Anwesenheitserkennung per Notify ===<br />
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:<br />
<br />
<source lang="perl">define <Name> notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") <br />
{<br />
fhem("set anwesend_smartphone absent");<br />
} <br />
else <br />
{<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}</source><br />
<br />
Hinweise:<br />
* <code>fhem("set anwesend_smartphone absent");</code> ist nur ein Beispiel, das einen Dummy auf den Status "absent" bzw. "present" setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (<code>define anwesend_smartphone dummy</code>).<br />
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.<br />
* "Fritzbox" ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.<br />
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status "inactive" erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf "inactive" stand, wurde die Abwesend-Aktion schon ausgeführt.<br />
* Damit der Notify nicht andauernd losgeht, sollte man mittels <code>attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF</code> Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL</code> setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.<br />
<br />
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===<br />
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).<br />
<br />
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch "anwesend". Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. <br />
Der Nachteil des Notify kann verringert werden, wenn man statt <code>attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF</code> ein <code>attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF</code> setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status "anwesend". Bei "abwesend" ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.<br />
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf "GLOBAL:initialized":<br />
<source lang="perl"><br />
global:INITIALIZED {<br />
Reset_Variables;<br />
if (ReadingsVal("Fritzbox", "mac_AA_BB_CC_DD_EE_FF", "inactive") eq "inactive") {<br />
fhem("set anwesend_smartphone absent");<br />
} else {<br />
fhem("set anwesend_smartphone present");<br />
}<br />
}<br />
</source><br />
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.<br />
<br />
=== userReadings per get tr064Command ===<br />
Um dem Gerätewert <userReadingName> den Wert von <VariabelName> aus der Rückgabe des get-Befehls ''tr064Command'' zuzuordnen<br />
<pre><br />
attr <device> userReadings <userReadingName> {my $resp=fhem("get <device> tr064Command <service> <control> <action> [[<argName1> <argValue1>] ...]",1);;$resp =~/\'<VariabelName>\' => '(.*)'/;;return $1;;}<br />
</pre><br />
Beispielsweise<br />
<pre>attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;return $1;;}</pre><br />
<br />
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen >6.24 ===<br />
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.<br />
<br />
Es gibt eine Behelfslösung über das Attribut ''useGuiHack''. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. <br />
<br />
'''ACHTUNG''': Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.<br />
<br />
Bei Verwendung der ring-Parameter "play:" und "say:" wird die abzuspielende URL in die M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder ''set <webdevice> rereadicons'' ausführen oder FHEM neu starten.<br><br />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<br />
<br />
=== Ring auf mehreren Telefonen gleichzeitig ===<br />
<br />
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.<br />
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.<br />
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [http://http://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]<br />
<br />
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.<br />
Danach kann mit folgendem Beispiel Code gearbeitet werden:<br />
<br />
<code>set FritzBox ring 791 15 show:Türklingel</code><br />
<br />
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<br />
=== Modul bleibt im Status "Check APIs" hängen===<br />
Im Log steht die Meldung: "Error: Timeout when reading Fritz!Box data.".<br />
<br />
Mögliche Ursache: Nutzung des FHEM-Befehls [[FHEM_Command_Beispiele#rereadcfg|rereadcfg]]. Dieser verträgt sich nicht mit dem Modul "blocking.pm", das für parallel laufende FHEM-Prozesse genutzt wird.<br />
<br />
Abhilfe schafft ein Neustart <code>shutdown restart</code> oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch <code>define tPortLocal telnet 7073</code><br />
<br />
=== Nachtschaltung Doppel-WLAN ===<br />
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.<br />
<br />
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.<br />
<br />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<br />
<br />
=== Kabelboxen ===<br />
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.<br />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064.<br />
Man muss das Attribut allowTR064Command setzen, dann funktioniert z.B. problemlos das Ein- und Ausschalten des Wlans oder der Rufumleitung.<br />
<br />
=== Wenn's nicht klingelt ===<br />
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in "box_stdDialPort".<br />
<br />
=== TR064-Transport-Error: 500 Can't connect to ...:49443 (certificate verify failed) ===<br />
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.<br />
<br />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Gisbert