Die beliebten Powerline Adapter mit WLAN-Funktion „TL-WPA4220“ von TP-Link lassen sich neben dem Webinterface auch über HTTP-GET-Requests steuern. Damit kann man sie auch bequem von außen z.B. in eigenen Python-Scripts konfigurieren und ansprechen. Einem automatisieren, regelmäßigen Neustart nachts (zur Vermeidung von deren obligatorischen Verbindungsabbrüchen) oder einer nächtlichen Deaktivierung des WLANs steht somit nichts mehr im Weg.
Grundlagen
Ich habe hier TL-WPA4220-Adapter in der Hardware-Version 1 mit der momentan aktuellsten, deutschen Firmware (TL-WPA4220v1_140711.DE) im Einsatz. Möglicherweise funktionieren die Befehle 1:1 nur mit dieser Kombination – also aktualisiert die Software auf den Adaptern am Besten bei Problemen. Ob andere Adapter sich genau so ansprechen lassen, ist mir nicht bekannt.
Als Authentifizierung (Nutzername und Passwort) setzen die Adapter auf die weit verbreitete HTTP Basic Authentication. Dabei werden Nutzername und Passwort im Format
1 | Nutzername:Passwort |
Base64 kodiert. Eure Nutzername-Passwort-Kombination könnt ihr unter Linux ganz simpel in einen Base64-String umwandeln:
1 | echo -n user:pass | base64 |
Statt „user“ und „pass“ müsst ihr natürlich eure Daten eintragen. Es gibt auch entsprechende Online-Tools für die komfortable Umwandlung (siehe z.B. hier).
Auf Client-Seite wird euch häufig die manuelle Umwandlung in einen Base64-String abgenommen – dazu später mehr.
Befehle
Für die nachfolgenden Befehle ist es wichtig, dass ihr die IP-Adresse eures Adapter habt. Nutzt ihr die REST-Schnittstelle öfters, bietet es sich an, dem /den Adapter[n] eine feste IP zu geben.
Neustart
Einer der wichtigsten Befehle vorab: der Neustart. Dieser muss bei vielen Änderungen an der Konfiguration im Anschluss abgeschickt werden, damit die Änderungen übernommen werden.
Die URL sieht folgendermaßen aus:
1 | http://[IP]/userRpm/SysRebootRpm.htm?Reboot=Neustart |
Parameter müssen hier keine zusätzlichen geschickt werden, sodass dieser Befehl selbsterklärend sein sollte.
Netz-Einstellungen
Den Adaptern kann wie bereits erwähnt eine statische IP zugewiesen werden. Das (und noch mehr) ist auch über die Schnittstelle möglich, wie nachfolgende URL zeigt:
1 | http://[IP]/userRpm/NetworkLanCfgRpm.htm?lanip=192.168.11.82&lanmask=2&inputMask=255.255.255.0&Save=Speichern |
Hier würden wir die IP-Adresse „192.168.11.82“ setzen mit der Subnetzmaske „255.255.255.0“. Die Parameterliste ist äquivalent mit der des Webinterfaces.
WLAN
Die Standard-Einstellungen des WLAN sind über folgende URL zu setzen:
1 | http://[IP]/userRpm/WlanNetworkRpm.htm?ssid1=meinwlan®ion=32&channel=13&mode=5&chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid=&keytype=1&wepindex=1&authtype=1&keytext=&Save=Speichern |
Lasst ihr den Teil „&ap=1“ weg, so deaktiviert ihr die WLAN-Funktion. Alle weiteren Parameter in der URL sind wieder gleich denen im Webinterface.
Zusätzlich zu den Grundeinstellungen des WLANs gibt es auch noch eine URL für die erweiterten Einstellungen. Diese ist folgendermaßen aufgebaut:
1 | http://[IP]/userRpm/WlanAdvRpm.htm?txPower=1&beaconPeriod=100&rtsThreshold=2346&fragThreshold=2345&dtimInterval=1&wmm=2&shortGI=2&Save=Speichern |
Auch hier sind die Parameter identisch mit denen im Webinterface, sodass sich für eine genauere Erläuterung der einzelnen Parameter in Blick dorthinein anbietet.
Nutzung
Zum Testen der Befehle bieten sich HTTP-REST-Browsererweiterungen wie z.B. RESTClient unter Firefox an. Dort könnt ihr unter „Authentication“ direkt die Basic-Authentication auswählen und euren Nutzernamen und Passwort eintragen. Alternativ könnt ihr den Base64-String manuell eintragen, indem ihr den Header
1 | Authorization: Basic xxx |
eintragt, wobei „xxx“ natürlich für euren Base64-Nutzernamen:Passwort-String steht.
Die Nutzung über Python ist auch sehr komfortabel möglich dank des Moduls „requests“. Mit diesem könnt ihr z.B. ein Script zum Neustart des Adapters schreiben:
1 2 3 | import requests request = requests.get('http://[IP]/userRpm/SysRebootRpm.htm?Reboot=Neustart', auth=('user', 'pass')) |
Wie ihr sehen könnt, ist es recht einfach, die Adapter über einfache HTTP-GET-Requests anzusteuern und damit einige Dinge zu automatisieren und konfigurieren ohne Nutzung des Webinterfaces über einen Browser.
Hallo!
Darf man fragen woher du die URLs hast?
Gruß
Hi Waldler,
die habe ich mit Wireshark mitgesnifft.
Danke für den Artikel. Dies wird mir helfen, da mein TL-WPA4220, Firmware Version: 1.2.8 Build 140401 Rel.49960n nach x Tagen die Verbindung zum restlichen Netzwerk verliert.
Mein Adapter ist mit Name & Passwort geschützt.
Bei mir funktioniert der Aufruf auch ganz einfach so:
http://name:[email protected]/userRpm/SysRebootRpm.htm?Reboot=Neustart
Klar, alles im Klartext, aber im LAN eigentlich unkritisch.
Diesen Befehl kann ich jetzt in FHEM einbinden, dann wird mein Adapter zu festgelegten Zeiten neu gestartet…
Wozu benötige ich also den Umweg oben mit REST-Client?
Hallo Heiko,
interessant, diese Syntax war mir nicht bekannt.
Einen REST-Client brauche ich für die oben beschriebene Verwendung auch nicht – nur zum Testen kann dieser hilfreich sein.