Simon Szustkowski

Ein Blog über alles, was mir gerade so durch den Kopf geht

Aug 31, 2017 - Comments

Sonoff: WLAN-Schalter für kleines Geld

Eines der einfachsten und grundlegendsten Dinge, die man im IoT-Bereich tun kann ist sicherlich, Steckdosen und Lampen zu modifizieren, dass man sie über WLAN, womöglich noch mit einer Smartphone-App, steuern kann. Guckt man sich hierzu im kommerziellen Bereich um, ist Philips mit seiner Hue-Produktlinie sicherlich der große Platzhirsch, der gute Produkte herstellt, sich hierfür aber auch fürstlich bezahlen lässt. Auch andere Anbieter, z.B. Belkin WeMo sind nicht gerade welche, bei denen man das Attribut “preiswert” assoziiert. Das schreckt natürlich erst einmal ab.

Auch im DIY-Bereich waren lange Zeit die 433MHz-Funksteckdosen der Quasistandard. Günstig, einfach, aber nicht unbedingt gut. Inkompatibilitäten zwischen den einzelnen Herstellern und mangelnde Zuverlässigkeit (durch das unidirektionale Protokoll war nie prüfbar, ob die Steckdose das Funksignal überhaupt bekommen hat) sorgten dafür, dass diese Funksteckdosen mittlerweile eher auf den Wühltischen von Bau- und Elektromärkten zu finden sind.

Das ganze hat sich seit dem Erscheinen des esp8266-Chips vor einigen Jahren massiv verändert. DIY-IoT-Projekte sind einfach und schnell zu realisieren. Der aktuelle Trend hin zu Smart Home ist mit Sicherheit auch der Verfügbarkeit dieses Chips zuzurechnen.

Nun kann man hingehen, und sich mittels eines esp und einem Relais eine eigene schaltbare Schuko-Steckdose bauen - oder man greift einfach auf die Produktreihe Sonoff der chinesischen Firma ITEAD zurück.

ITEAD hat sich nämlich bemüht, auch “smarte” Produkte auf den Markt zu werfen, und hat hierzu tatsächlich einfach einen esp plus Relais in ein Gehäuse gestopft (je nach Produktart mit verschiedenen Anschlüssen), eine eigene Firmware hingeschmiert, und verkauft die Teile jetzt über die üblichen großen Chinashops für Preise von um die 10-15€ pro Stück. Normalerweise müsste man sich jetzt eine gammelige App runterladen, und hätte das grandiose Feature, dass man diese Geräte mit dem Handy steuern könnte. 3rd-Party-Integration und Automation? Fehlanzeige.

Der eigentliche Clou, der diese Geräte so großartig macht ist, neben der Tatsache, dass ein esp8266-Microcontroller verbaut ist, dass die Ingenieure von ITEAD die Programmierkontakte auf der Platine belassen haben - in der Serienfertigung. Man muss zwar immer noch das Gehäuse aufschrauben (und sollte dabei sicher gehen, dass das Gerät auf keinen Fall noch auf der 230V-Seite mit Strom versorgt wird), und dann eine 4-polige Stiftleiste einlöten, aber das ist schnell gemacht, und auch für Anfänger keine große Herausforderung.

Mittels eines USB-UART-Adapters lässt sich der verbaute esp nun recht einfach mit eigener Firmware programmieren, z.B. mit der großartigen Tasmota-Firmware, die es ermöglicht, zum einen die Geräte mittels MQTT zu steuern, als auch, bei den Geräten, die noch einen eigenen Sensor verbaut haben, den Messwert mittels MQTT auszulesen. Nun steht der Integration in verschiedene Smart Home Hubs, wie z.B. dem großartigen Home Assistant nichts mehr im Wege…

…zumindest fast. Die Erfahrung hat mir gezeigt, dass es doch etwas frickelig sein kann, eine eigene Firmware auf die Sonoff-Geräte zu programmieren. Bei neueren Sonoff-Steckdosen ist z.B. die Headerleiste nicht mehr beschriftet, und man vertauscht leicht irgendwelche Kontakte, o.ä. Ich habe schon einige Stunden fluchend verbracht, bis es denn dann irgendwann geklappt hat.

Aber die Geräte haben einen derart großen Zuspruch von der Community, dass es seit gut 5 Monaten eine Möglichkeit gibt, die alternative Firmware direkt over-the-air aufzuspielen. Das Öffnen des Gehäuses und das Einlöten der Pin-Header ist nicht mehr notwendig. Man muss nur noch folgendes machen:

  1. Ein Notebook (oder einen Computer mit WLAN-Adapter) bereit halten, auf dem git und Python 3, sowie das für Python passende pip-tool (z.B. pip3 unter Debian Linux) installiert sind.
  2. Das Repository klonen: git clone https://github.com/sillyfrog/SonOTA.git && cd SonOTA
  3. Die Abhängigkeiten dieses Scripts installieren: pip install --user -r requirements.txt (ggf. heißt euer pip-Binary für Python 3 anders, z.B. pip3)
  4. Den Computer mit dem WLAN verbinden
  5. Die Sonoff mit Strom versorgen. Hierzu beispielsweise eine S20-Steckdose einfach in die Steckdose stecken. Beim “originalen” Sonoff, was nur die Drahtklemmen hat kann das gefährlich sein, da die Drahtklemmen, wo 230V anliegen, keinen Berührungsschutz haben - hier unbedingt darauf achten, dass das Gehäuse wieder geschlossen ist, oder aber doch eben zumindest die VCC und GND Stifte einlöten, und den esp von außen mit 3,3V versorgen
  6. Das Script ausführen: ./sonota.py
  7. Das Script fragt euch nun nach der IP des Computers, auf dem es gerade läuft. Hat der Computer nur eine aktive Netzwerkverbindung reicht es hier, Enter zu drücken - ansonten muss die Zahl vor der IP ausgewählt werden, und dann bestätigt werden.
  8. Nun fragt das Script nach den Zugangsdaten des WLANs. Diese werden, genau so wie die IP, nachher an das Sonoff übergeben, damit dieses sich die Firmware von dem Computer laden kann. Man kann also bedenkenlos einfach SSID und Zungangsschlüssel eingeben. Benutzer mit WPA2-Enterprise-Authentifizierung haben übrigens Pech gehabt, es geht tatsächlich nur mit WPA2-PSK.
  9. Als nächstes müsst ihr das Sonoff in den Pairing-Mode versetzen. Hierzu müsst ihr den Button am Gerät 7 Sekunden lang drücken, bis die LED anfängt, regelmäßig schnell zu blinken.
  10. Das Gerät erzeugt nun ein eigenes WLAN, names ITEAD-xxxxx. Diesem WLAN müsst ihr nun mit dem Computer beitreten, ohne das Script zu beenden. Der Zugangsschlüssel lautet “12345678”.
  11. Das Script macht nun ein paar HTTP-Requests an das Gerät, ähnlich wie es die originale App machen würde, um dem Gerät mitzuteilen, in welches WLAN es sich einbuchen soll. Hierzu werden die Zugangsdaten genommen, die ihr in Schritt 7 eingegeben habt.
  12. Das ITEAD-WLAN verschwindet nun, und ihr müsst euch wieder mit dem normalen WLAN verbinden. Stellt sicher, dass ihr die gleiche IP bekommt wie in Schritt 7 angegeben
  13. Das Script spawned nun einen kleinen Webserver auf Port 8080, und triggert im Sonoff, dass das Gerät sich bitte von diesem Webserver den ersten Teil der Firmware herunterladen soll. Diese erste Firmware hat den einzigen Zweck, nachher die “richtige” Firmware herunterzuladen
  14. Nachdem das geklappt hat, startet das Sonoff einmal neu, und erzeugt nun ein WLAN, was FinalStage heißt. In dieses WLAN müsst ihr euch nun, ohne dass Zugangsdaten notwendig sind, einwählen
  15. Das Sonoff lädt nun die eigentliche Tasmota-Firmware herunter. Das dauert ein paar Sekunden bis hin zu einer Minute, und schaltet das WLAN dann ab. Sobald das FinalStage-WLAN nicht mehr existiert, könnt ihr euch in euer normales WLAN einwählen. Das Script beendet sich nun.
  16. Startet das Sonoff einmal neu, indem ihr es kurz vom Strom trennt. Nach dem Neustart erzeugt es wieder ein eigenes WLAN namens sonoff-xxxx. Wählt euch in dieses WLAN ein.
  17. Öffnet im Browser den Webserver, der nun auf dem Sonoff läuft, die Adresse hierzu lautet https://192.168.4.1
  18. Hier könnt ihr zuallererst lediglich die Zugangsdaten für euer “normales” WLAN angeben. Einfach die SSID im Freitextfeld eingeben, und den Key dadrunter. Das zweite Felderpaar ist für ein Backup-WLAN gedacht. Speichern, und das Sonoff neustarten.
  19. Das Sonoff meldet sich nun an eurem normalen Netz an, und kriegt vom vermutlich auf eurem Router laufenden DHCP-Server eine IP zugewiesen. Hier läuft wieder ein Webserver, wo ihr die weitere Konfiguration, z.B. MQTT-Zugangsdaten, und das Firmware-Upgrade bei neueren Firmwareversionen erledigen könnt. Aber hier gibt es auch den großen “Toggle”-Knopf - wenn ihr ihn betätigt, und das Sonoff mit 230V Spannung versorgt wird, hört ihr nun das Relais klicken. Viel Spaß.

Ein abschließender Hinweis noch: Zumindest die S20-Steckdose muss mindestens mit der Original-Firmware 1.5.5 laufen, sonst klappt der initiale Firmwaredownload von eurem Computer nicht. Bei Geräten mit älterer Firmware müsst ihr einmal die eWeLink-App installieren, dort das Gerät so einrichten, wie es der Hersteller vorsieht, und dann darüber ein Firmware-Upgrade auf Firmware 1.5.5 durchführen. Danach kann die App wieder gelöscht werden. Tut ihr das nicht, meldet das Gerät bei der Zwischenfirmware einen Fehlercode 404 und schaltet die LED auf Dauerleuchten. Das FinalStage-WLAN wird nicht erzeugt, und ihr könnt maximal durch 7-sekündigen Knopfdruck das Gerät wieder in den Pairing-Mode setzen, und einen erneuten (erfolglosen) Versuch starten.