Edimax SP2101W

Verbrauche zu müssen und zu schalten ist ein interessantes Thema, nicht nur in der Hausautomatisation oder Solarsteuerung, sondern auch bei der Überwachung von Servern und notfalls auch zur Fernschaltung. Es gibt verschiedene Ansätze, z.B. Netzwerkdosen mit Ethernet oder z.B. HomeMatic. Interessant ist aber auch eine Netzwerkdose, die den Strom misst und per WIFI kommunizieren kann. Durch den Preisverfall kosten solche Geräte kaum mehr als 40€ und sind damit schon viel billiger als der Einbau einen S0-Zwischenzähler mit Messerfassung.

Hardware

Als Beispiel bin ich hier auf den Edimax 2101W gestoßen, dem Nachfolger des SP1101W, weil in einem Forum von ELV (siehe Weitere Links) die API beschrieben wurde, die sehr nach REST und SOAP aussieht. Und wer natürlich eine Management-System hat, welches per IP die Daten abfragt, kann damit auch aktiv das System direkt schalten.

Generell muss man bei all diesen Geräten etwas sensibel sein. Die Kunden scheinen zu erwarten, dass die Ansteuerung per Smartphone auch "unterwegs" funktioniert. Dazu bedienen sich alle Produkte einem Cloud Service, zu dem sich dann auch das Smartphone verbindet. Sie sicher das bezüglich der Steuerung (Ein/Aus) und der Zugriff auf die gemessenen Daten durch Dritte ist, ist ebenso fraglich wie die Funktion nach Abschalten des Cloud Dienstes (Cloud - Abruptes Ende)

Die komplette Konfiguration erfolgt leider nur in der App und nicht über eine Webseite und auch nach der Integration in das Haus WLAN gibt es keine dokumentierte API zum Auslesen mit anderen Programmen. Sehr unschön. Wenn in ein paar Jahren die App nicht mehr funktioniert, hat man Elektronikschritt im Haus.

Das Edimax-Gerät scheint z.B. ohne Internet nicht zu starten.

Einrichtung

Achtung: Ehe Sie das Gerät in Betrieb nehmen, sollten Sie den gesamten Artikel gelesen haben. das SP2101W spricht ungefragt mit einem Cloud-Service und öffnen Ports. Wenn Sie ihren Stromzähler nicht von "unterwegs" kontrollieren oder schalten wollen, und andere es auch nicht sollen, dann konfigurieren Sie ihren Router mit den entsprechenden Filtern.

Ich habe also ein Gerät bestellt, ausgepackt, eingesteckt und geschaut. Die erste Installation erfolgt wieder wie bei den meisten der WiFi-Geräte, dass Sie ein eigenes offenen WLAN aufspannen, mit dem man sich per Smartphone (IOS oder Android) und einer App verbindet. Damit ist eine erste Steuerung und Messing möglich und natürlich die KonfigurationsÄnderung, damit das Gerät sich als Client ein ein vorhandenes WLAN einbuchen kann. Leider ist die Ersteinrichtung aktuell einfach nur per APP möglich. eine "Browseroberfläche" oder Windows konnte ich für das Gerät nicht finden. Hoffentlich gibt es also die App und die Mobilgeräte "lange" genug, damit aus so einen Gerät nicht ganz schnell Elektronikschrott wird. Da hilft es auch nicht, wenn Edimax Teile des Code unter GPL veröffentlich hat. Ein kleiner Webserver zur Konfiguration wäre sicher universeller.

Sie verbinden also ihr Smartphone mit der installierten App mit dem temporären Wifi-Netzwerk "EdiPlugSetup", welches ihnen dann eine IP-Adresse gibt. Die App kann so das Gerät finden und die Konfiguration abfragen und hinterlegen. Danach bootet das Device und sie haben einen neuen Teilnehmer in ihrem WLAN. Bei einer Firma oder abgesicherten Umgebung sollte das WLAN natürlich nicht grade das allgemeine WLAN sein sondern ein z.B. per WPA2 gesichertes "Management"-WLAN ohne unsichere Clients oder gar Gäste. Entsprechende AccessPoints zum Aufspannen eines solchen kleinen WLAN sind auch für kleines Geld zu haben und die meisten Enterprise-APs können eh mehrere SSIDs.

Ich habe mir erst mal nicht die Mühe gemacht, auch die "Setupphase" des Geräts zu analysieren. Vielleicht hat es einen Zugang per Browser, vielleicht sind es aber auch proprietäre HTTP-Post oder UDP-Pakete. Das hebe ich mir für später oder einen Azubi als Aufgabe aus. Ich gehe in der Folge davon aus, dass das SP2101W im LAN erreichbar ist.

Ich habe aber mit der App auch mal ohne LAN-Verbindung über Internet versucht, das SP2101W anzusprechen, was aber nicht möglich war. Die App spricht direkt mit dem SP2101W und nutzt nicht einen Cloud Dienst als Relais: Aber die Box kommuniziert dennoch mit externen Systemen, was nicht so schön ist, wie die nachfolgende Analyse zeigt.

Firmware Update

Bei der heute schnelllebigen Zeit ist es immer mal sinnvoll zu schauen, ob man die aktuelle Firmware auf dem Gerät hat. Edimax versteckt das Update aber ziemlich gut. Auf den offiziellen Download-Seiten was nichts zu finden und erst eine Google-Suche nach "FWUpgradeTool" hat den Link geliefert.

Es mag für "Privatkunden" einfach sein, eine EXE zu starten, die im LAN nach allen vorhandenen Ediplugs schaut und diese einfach aktualisiert. Eine Übersicht, welche Firmware aber gerade aktuell ist und Release Notes mit den Änderungen sind aber Fehlanzeige.

Schnüffeln und Suchen

Mein Ziel war es ja, diese Gerät auch von einem PC aus auszulesen, um die Verbrauchswerte anderweitig zu erfassen. Also galt es z-B. über die Fritz!Box einen Mitschnitt anzufertigen (unter http://fritz.box/html/capture.html können sie den Mitschnitt starten und dann mit Wireshark anschauen. Ich habe die Box auf der WLAN-Schnittstelle "AP2 (2.4 GHz, ath0) - Schnittstelle 0" meiner Fritz!Box 7390 erwischt. Die Pakete habe ich dann über den Filter "wlan.addr == 80:1f:02:fa:71:0d" ausgefiltert.

Dabei sind dann mehrere Verbindungen aufgefallen:

Ich habe dann im Trace die Verbindungen im zeitlichen Ablauf gesucht und analysiert:

  • 192.168.178.1:53/UDP
    Das erste Lebenszeichen von der Box ist eine DNS-Abfrage. Ich vermute fast, dass so einfach geprüft wird, ob eine Internet-Verbindung möglich sein könnte.
  • 173.194.113.17:80/TCP (fra02s19-in-f17.1e100.net)
    Dann wird eine TCP-Verbindung zu einem Host aufgebaut, ohne dass aber Daten übertragen werden.
    Diese letze Verbindung besteht nur aus einem TCP-Handshake und Abbau ohne dass Daten übertragen wurden
  • 122.248.252.67:8765/UDP (ec2-122-248-252-67.ap-southeast-1.compute.amazonaws.com)
    Dann baut das Gerät eine UDP-Verbindung auf, auf die 15 Antworten a 700 Bytes kommen.

    Aus den Daten kann ich nichts auslesen, was das sein könnte. Anscheinend löst die Box die Adresse nicht per DNS auf.
  • DNS-Queries
    Es scheint so, als ob das SP2101W sich noch die Uhrzeit holt und dann doch tatsächlich auch noch eine Anfrage auf ein Edimax-System macht

    Wenn man danach sucht, dann findet man sehr wohl diese Webseite, um z.B. eine Edimax Kamera anzuzeigen. Ein Zugriff auf http://801f02fa710d.myedimax.com wird dann auf http://www.myedimax.com/Webindex/Webviewer.php?ID=801f02fa710d umgeleitet. Angezeigt wird diesbezüglich aber nichts.

Das ist aber dennoch ein Hinweis mal zügig das "Default Kennwort" von "admin" und "1234" zu ändern. Ich weiß nicht, wie "sicher" dennoch der Zugriff ist, denn es wäre ein leichtes auf der Webseite ein Zertifikat für "*.myedimax.com" zu nutzen. So aber aber wird nichts verschlüsselt. Daher habe ich der Steckdose in der Fritz!Box erst mal eine statische IP-Adresse gegeben und den Internet Zugriff abgebunden.

  • 255.255.255.255:65422/UDP (und auch andere Ports)
    Über diesen Broadcast scheint das Gerät Daten zu senden, wer auch immer sie hören möchte

    Die Information ändert sich manchmal und auch der Zielport scheint immer mal wieder anders zu sein. Die Nummer im den Daten entspricht aber genau der Portnummer beim UDP. Vielleicht lauscht der Empfänger einfach auf UDP-Broadcasts und fischt sich den Ports raus.

Aber auch dies würde ich nicht gerade als "sicher" ansehen, wenn ein Device auch ohne Verbindung eines Clients per UDP-Subnetzbroadcast unverschlüsselt Informationen verteilt.

  • 122.248.234.231:8767/TCP (ec2-122-248-234-231.ap-southeast-1.compute.amazonaws.com)
    Eine zweite Verbindung in die Cloud. Diesmal per TCP und nicht wirklich was in den Daten zu erkennen.
  • 192.168.178.23:10000/HTTP
    Das ist eine Verbindung der App auf dem Smartphone mit der Box. Diese ist unverschlüsselt und sieht sehr nach einem, HTTP-Interface aus, wenngleich nicht auf Port 80 sondern 10.000

    Es ist sicher nicht schwer hier das Default Kennwort zu extrahieren. Aus "YWRtaW46MTIzNA==" wird lesbar ein "admin:1234".
    Ein einfacher HTTP-GET auf diese Adresse liefert aber keine Daten oder HTML-Seite

Von allen Verbindung ist eigentlich nur eine Verbindung, die per HTTP auf Port 10.000 für die weitere Verwendung interessant. Allerdings finde ich es schon etwas nervig, wenn ein Gerät ohne Angabe von Gründen nach extern kommuniziert und eventuell sogar Daten dort bereitstellt, die man allein über die MAC-Adresse wieder auslesen könnte. Die MAC-Adresse ist ja kein "Geheimnis". Insofern habe ich meinen DSL-Router derart konfiguriert, dass dieses Gerät nicht ins Internet darf.

Ich habe noch einige weitere Pakete mitgeschnitten, z.B. wenn ich auf der App einen "Zeitplan" anschaue oder die historischen Daten abrufe. Anscheinend speichert der SP2101W all diese Daten selbst und sind auch  ohne Cloud abfragbar. für mein Projekt hier ist das aber nicht weiter von Belang.

Steuerung per HTTP-Post

Ich habe dann mir wieder per Netzwerkmittschnitt die unverschlüsselten Pakete und Anfragen angeschaut. Anscheinend setzt der Client immer nur HTTP-PORT-Pakete ab, in denen die Basic Authentication per Default der Benutzername "admin" und das Kennwort "1234" übergeben werden. Das bekommen wir auch per PowerShell einfach hin. Als Payload des Post ist eine XML-Datei vorzusehen, bei denen ich folgende Daten gefunden habe.

Ein/Aus-Schalten 

  • Einschalten der Box
<?xml version="1.0" encoding="utf-8"?>
<SMARTPLUG id="edimax">
  <CMD id="setup">
    <Device.System.Power.State>ON</Device.System.Power.State>
  </CMD>
</SMARTPLUG>
  • Ausschalten der Box
<?xml version="1.0" encoding="utf-8"?>
<SMARTPLUG id="edimax">
  <CMD id="setup">
    <Device.System.Power.State>OFF</Device.System.Power.State>
  </CMD>
</SMARTPLUG>

Hierbei liefert die Box dann einfach ein "OK" zurück

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="setup">OK</CMD>
</SMARTPLUG>

Aktuellen Zustand abfragen

Wenn ich nicht schalten sondern nur den Zustand abfragen will, dann ist das kein "Setup" sondern ein "get".

<?xml version="1.0" encoding="utf-8"?>
<SMARTPLUG id="edimax">
  <CMD id="get">
    <Device.System.Power.State></Device.System.Power.State>
  </CMD>
</SMARTPLUG>

Hierbei liefert die Box eine Rückmeldung mit dem aktuellen Status

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get">
    <Device.System.Power.State>OFF</Device.System.Power.State>
  </CMD>
</SMARTPLUG>

Aktueller Stromverbrauch

Für die Nutzung mit PRTG möchte ich natürlich weniger Schalten sondern die Betriebsdaten auslesen. Auch das kann man mit Wireshark auslesen 

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get">
    <NOW_POWER></NOW_POWER>
  </CMD>
</SMARTPLUG>

Dann antwortet er z. B. wie folgt. (Die Last ist einfach mal ein Ladegerät eines DECT-Telefons, also ein kleiner Verbraucher und das Gerät habe ich erst wenige Tage)

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get"> 
    <NOW_POWER>
      <Device.System.Power.LastToggleTime>20150115221023</Device.System.Power.LastToggleTime>
      <Device.System.Power.NowCurrent>0.0211</Device.System.Power.NowCurrent>
      <Device.System.Power.NowPower>2.71</Device.System.Power.NowPower>
      <Device.System.Power.NowEnergy.Day>0.001</Device.System.Power.NowEnergy.Day>
      <Device.System.Power.NowEnergy.Week>0.001</Device.System.Power.NowEnergy.Week>
      <Device.System.Power.NowEnergy.Month>0.001</Device.System.Power.NowEnergy.Month>
    </NOW_POWER>
  </CMD>
</SMARTPLUG>

Einzelwertabfragen

Wenn man auf der App einen einzelnen Wert anklickt, dann gibt es anscheinend auch eine Option einen einzelnen Wert abzufragen:

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get">
    <NOW_POWER>
      <Device.System.Power.NowCurrent/>
    </NOW_POWER>
  </CMD>
</SMARTPLUG

Und die passende Antwort dazu:

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get"> 
    <NOW_POWER>
      <Device.System.Power.LastToggleTime>20150115221023</Device.System.Power.LastToggleTime>
      <Device.System.Power.NowCurrent>0.0211</Device.System.Power.NowCurrent>
    </NOW_POWER>
  </CMD>
</SMARTPLUG> 

Weitere Einstellungen

Damit ist die Funktion des SP2101W aber noch lange nicht erschöpft. Man kann z.B. einen "Historischer Verbrauch" als Grafik sich anzeigen. Über die App kann man sogar ein Diagramm abrufen. Anscheinend kommen diese Daten nicht aus einer Cloud sondern werden im SP2101W gespeichert und durch die App aufbereitet. gleiches gilt für die Alarmierung per Mail beim Überschreiten von Budget-Grenzen. Auch das zeitgesteuerte Ein/Aus-Schalten scheint nicht durch die App ausgelöst zu werden, sondern ist in der Box selbst enthalten. Zumindest lassen die Daten aus Mitschnitten dies vermuten. Ein Post mit folgenden Request:

<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
  <CMD id="get">
    <SCHEDULE></SCHEDULE>
  </CMD>
</SMARTPLUG>

Liefert eine Liste von 7 Zeitplänen mit je 360 "0"-Werten, die den Zeitplan darstellen könnten. Eine Beschreibung dieser und weiterer EinstellMöglichkeiten (z.B. NTP-Server, MailServer etc.) ist aber nicht öffentlich und für mein weiteres Projekt auch nicht erforderlich.

Sicherheit und Schalten !

Wenn ich diese Box z.B. nutzen möchte, um den Stromverbrauch von Servern o.ä. zu überwachen, dann ist die Schaltfunktion natürlich ein Risiko. Allzu schnell ist über die App nicht die Anzeige der Daten sondern der Schalter ausgewählt.

Zudem werden alle Steuerungsinformationen unverschlüsselt übertragen. Es ist also ein leichtes die Anmeldedaten per Netzwerkschnüffler mit etwas ARP-Spoofing zu erhalten und dann selbst zu schalten. Es bietet sich für Firmeneinsätze auf jeden Fall an, diese Geräte nicht im normalen Haus-WLAN zu betreiben, sondern in einem eigenen Device-WLAN mit ausreichend guter Verschlüsselung und einem WPA2-PSK-Schlüssel, den wirklich nur wenige Personen können.

Zudem "spricht" mir die App zu intensiv mit einer Cloud, von der ich gar nichts weiß. Einen Vertrag o.ä. gibt es hier nicht zu unterschreiben und welche Daten letztlich gesendet und welche Fernwirkfunktion möglich ist, ist gänzlich unbekannt. Sicherheitshalber habe ich natürlich in meinem DSL-Router diesem Gerät den Zugriff auf das Internet erst mal verboten.

Um das Risiko des Schaltens aber 100% auszuschließen, kann man als Elektronik-Bastler auch zum Lötkolben greifen. Intern hört man beim Schalten ganz deutlich ein Relais und dieses lässt sich natürlich permanent überbrücken. Es kann dann ruhig das Relais schalten, aber die Steckdose bleibt unter Dauerstrom. Die "besonderen" Schraubenköpfe sind für einen gut sortierten Elektronikbastler kein echtes Problem.

Allerdings sind zwei Schrauben sehr tief versenkt, so dass man mit den klassischen Bit-Sortimenten nicht tief genug ran kommt.

Einschätzung

Ich finde es immer wieder erstaunlich, wie viele Funktionen heute in so kleinen Boxen konzentriert werden können. Das ist ein Embedded-Computer mit Steuerung, Netzwerk und Messeinheit und das alles ist für weniger als 50€ erhältlich. Mag sein, dass ein Smartphone oder Tablet elektronisch noch hochwertiger sind aber die Entwicklung und Produktion, Versand und Vertrieb wollen alle bezahlt sein. Man muss natürlich im Hinterkopf haben, dass Edimax mit dem SP2101W auf der "aktuellen "Internet of Things"-Welle mit schwimmt und zuerst an eine App für Smartphones und Tablets gedacht hat. Was davon zu halten ist, dass diese (und tausende Kopien) ungefragt eine Verbindung zu einem Edimax-Service aufbauen und es dazu kein Hinweisblatt weder im Karton noch in der App gibt, finde ich persönlich bedenklich. Andererseits bin ich vielleicht einfach "älter" und sehe das kritischer als die WhatsApp-Generation.

Andere Stromsteckdosen

Es gibt natürlich immer mehr Geräte, die sich per "App" auslesen lassen. Solange sich diese nicht per Bluetooth direkt verbinden, sondern irgendwie direkt oder indirekt im LAN erscheinen und nicht allzu kryptisch anzusprechen sind, können diese sicher auch eingelesen werden. Hier ein paar Links ohne vollständig zu sein.

Weitere Links