Tasmota mit Raspi flashen – ohne USB-to-TTL-Adapter

Wer das eigene Heim automatisiert, um Energie zu sparen, landet früher oder später bei Funksteckdosen. Wir haben eine WLAN-Dose für 10 Euro von Obi mit einer alternativen Firmware versehen – mit dem Raspberry Pi gelang das sogar ohne USB-Adapter.

In Pocket speichern vorlesen Druckansicht 8 Kommentare lesen
Lesezeit: 7 Min.
Von
  • Peter König
  • Peter König
Inhaltsverzeichnis

Der Wifi Stecker Schuko kostet bei Obi gerade mal 10 Euro und hat mit dem ESP8266 einen alten Bekannten an Board – das schreit geradezu danach, ihn mit der quelloffenen Tasmota-Firmware zu versehen, statt die smarte Dose Daten in die Cloud pusten zu lassen. Wie der Firmware-Wechsel mit Hilfe eines USB-to-TTL-Adapters gelingt, hat der Kollege Andrijan Möcker von c't bereits in deren Ausgabe 11/18 ab Seite 152 beschrieben – diesen Artikel gibt es jetzt kostenlos für alle in voller Länge online zu lesen.

Natürlich klappt das bechriebene Verfahren auch mit einem Raspberry Pi statt eines normalen Linux-Laptops oder -Desktops – der Einplatinencomputer ist eben auch ein Linux-Rechner. Doch wer den Raspi einsetzt, kann sich sogar noch den Adapter sparen. Die folgende Anleitung geht davon aus, dass Sie einen Raspberry Pi 3 mit aktuellem Raspian benutzen.

Starten Sie Ihren Raspi 3. Falls noch nicht geschehen, bringen Sie über die Kommandozeile das Python-Paketverwaltungsprogramm pip auf den neuesten Stand:

python3 -m pip install --upgrade pip

Anschließend installiert man über pip das esptool:

sudo pip install esptool 

Damit man über die GPIO-Pins eine serielle Verbindung zum Flashen aufbauen kann, braucht es noch etwas Vorbereitung, denn standardmäßig ist der serielle Port so konfiguriert, dass man sich darüber auf dem Raspi über die Konsole einloggen kann. Dazu dient der Dienst getty. Den muss man für den geplanten Einsatz stoppen und dann dauerhaft deaktivieren, mit den zwei Zeilen:

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service

Wer sich für den Hintergrund interessiert, findet hier interessanten (englischen) Lesestoff.

Doch die Konsolen-Login-Verbindung steckt noch in der Datei /boot/cmdline.txt und muss dort herausoperiert werden. Dazu legt man im ersten Schritt eine Sicherheitskopie der Datei mit dem Namen cmdline.bak an:

sudo cp /boot/cmdline.txt /boot/cmdline.bak 

Dann öffnet man die Datei über

sudo nano /boot/cmdline.txt 

im Editor nano und löscht dann die Passage

console=serial0,115200 

Mit Strg+O speichert man die Datei (den vorgeschlagenen Dateinamen mit Enter bestätigen), Strg+X beendet den Editor nano.

Das reicht aber immer noch nicht, denn standardmäßig ist die serielle Schnittstelle über die GPIO-Pins, auf die wir ja unsere Kabel stecken wollen, auch noch deaktiviert. Das ändert man über:

sudo nano /boot/config.txt

In die geöffnete Datei fügt man am Ende die Zeile ein:

enable_uart=1

Dann wird die Datei gespeichert und der Editor geschlossen, wie oben beschrieben. Die Änderungen werden erst bei einem Neustart wirksam, fahren Sie also den Raspi herunter und trennen ihn vom Netzteil. Dann geht es ans Verdrahten.

Mehr Infos

ACHTUNG – GEFAHR!

Alle beschriebenen Arbeiten an der WLAN-Steckdose dürfen natürlich nur durchgeführt werden, solange der Stecker nicht in der Steckdose steckt! Der ESP8266 im Inneren des Steckergehäuses wird für die beschriebenen Arbeiten über den VCC-Anschluss mittels eines Kabels zum Raspi mit der nötigen Spannung versorgt. Außerdem besitzt das interne Netzteil keinen Sicherheitstransformator. Bei einer Überspannung besteht die Gefahr, dass diese in den Niederspannungskreis durchschlägt. Nach außen geführte Kontakte für einen gegebenenfalls hinzugefügten Sensor müssen daher vor Berührung geschützt werden.

Die Steckdose wird aufgeschraubt, die Hauptplatine vorsichtig aus ihren Plastikhaken herausgelöst und deren Zuleitung mit Gefühl so verbogen, dass man an die senkrecht darin steckende ESP8266-Platine herankommt. An deren komfortabel große Lötpads lötet man die blanken Enden von fünf Jumper-Kabeln mit Steckbuchsen (female) am anderen Ende an, und zwar an RXD, TXD, VCC, GND sowie an GPIO0.

Die anderen Enden steckt man mit den Buchsen auf die richtigen Pins der GPIO-Leiste des ausgeschalteten Raspi, wie im Bild für einen Raspi 3 gezeigt. Die Beschriftung oben in der Zeichnung bezeichnet die eben aufgeführten Anschlüsse auf dem ESP8266 in der Dose.

Von links nach rechts in der Grafik: Das schwarze Kabel vom ESP kommt an Masse beim Raspi, gelb an TXD, grün an RXD des Raspi (RXD der einen Platine kommt an TXD der anderen und umgekehrt). GPIO0 aus der Dose verbindet man mit der Raspi-Masse, um in den Flash-Modus zu schalten. Schließlich wird VCC aus der Dose mit dem 3,3-Volt-Ausgang des Raspi gespeist (rotes Kabel). Dann erst startet man den Raspi neu.

Bis hierhin folgt die Anleitung weitgehend jener aus dem Tasmota-Wiki für die Sonoff Pow. Doch der entscheidende Unterschied zwischen jener WLAN-Steckdose und unserem Obi-Modell ist, dass die Sonoff einen Taster zum aktivieren des Flash-Modus bietet, der ESP in der Baumarkt-Dose aber über die Verbinung von GPIO0 mit Masse in diesen Zustand geschaltet wird.

Ist der Raspi gestartet, kann man jetzt die alte Firmware löschen:

sudo esptool.py --port /dev/ttyS0 erase_flash 

Die neue Firmware sonoff-DE.bin lädt man in der aktuellen Version von Github herunter, sie landet normalerweise im Verzeichnis /home/pi/Downloads.

Um sie aufzuspielen, muss man den ESP vorher nochmal erneut in den Flash-Modus versetzen. Theoretisch müsste es dazu reichen, das VCC-Kabel vom 3.3V-Pin des Raspi abzuziehen und erneut zu verbinden. In der Praxis führte das bei unseren Versuchen allerdings stets zu einem ungeplanten Reboot des Raspi, nach dem alle Flash-Versuche fehlschlugen.

Funktioniert hat hingegen folgendes, zugegeben etwas umständliches Verfahren:

  1. Nach dem Löschen der alten Firmware fährt man den Raspi herunter und trennt ihn vom Stromnetz.
  2. Man zieht die Verbindung zwischen GPIO0 auf dem ESP und der Raspi-Masse heraus, lässt die anderen Kabel aber eingesteckt.
  3. Der Raspi wird wieder ans Stromnetz angeschlossen und bootet in der Folge.
  4. Kaum hochgefahren, fährt man ihn wieder herunter und trennt ihn wieder vom Stromnetz.
  5. Das Verbindungskabel zwischen GPIO0 auf dem ESP und der Raspi-Masse wird wieder eingesteckt, der Raspi wird wieder ans Stromnetz angeschlossen und fährt hoch.

Jetzt ist alles bereit! Die Tasmota-Firmware gelangt schließlich mit folgender Zeile auf die Dose:

sudo esptool.py --port /dev/ttyS0 write_flash -fm dout 0x0 /home/pi/sonoff-DE.bin

Zugegeben: Das war kniffeliger als gedacht, denn offenbar braucht der ESP in der Dose zwischen Löschen und Neubespielen mit Firmware mal einen Start ohne GPIO0-Anschluss. Deshalb der Tipp: Wer also ohnehin einen USB-to-TTL-Adapter rumliegen hat, kommt mit der Anleitung zum oben verlinkten c't-Artikel deutlich schneller ans Ziel. Wenn Sie allerdings extra einen solchen Adapter kaufen müssten oder jemanden mit Ihren Hacker-Talenten beeindrucken wollen, sieht die Variante mit ein paar auf die Raspi-Pin-Leiste gesteckten Kabeln auf jeden Fall cooler aus – gerade wenn dann auch das ganze Voodoo rund um Neustarts und abgezogene und wieder aufgesteckte Kabel dazukommt ... Viel Spaß!

  • Den vollständigen Artikel zu smarten Steckdosen mit neuer Firmware lesen Sie in der Make-Sonderausgabe 2018 zum Thema "Energie" ab Seite 80.

(pek)