Freie intelligente Steckdosen mit Tasmota

in diy, linux

Mit Tasmota lassen sich viele IoT-Produkte wie intelligente Steckdosen des OEM-Herstellers Tuya einfach vom Cloudzwang befreien. Welche Steckdosen sich dafür am besten eignen und wie das Ganze vonstattengeht, klärt der Artikel.

Nachdem ich beim letzten Amazon Prime Day zufällig über verschiedene intelligente Steckdosen gestolpert bin, habe ich recht schnell mit dem Gedanken gespielt, mir selbst ein solches IoT-Gerät zuzulegen. Das Problem: fast alle Gerätschaften besitzen für mich unnötige Features wie Sprachsteuerung via Amazon Alexa und/ oder kommen von unbekannten Herstellern, welche anschließend Daten wie meinen Standort oder die Ein- und Ausschaltzyklen sammeln und an z. B. chinesische Server übertragen - unschön. Das dies keine reine Fantasie ist, sondern bereits vorgefallen ist, zeigte der Talk auf dem 35C3 von Michael Steigerwald.

Die Open-Source-Lösung Tasmota schafft hierbei Abhilfe. Durch Überschreiben der Firmware können anschließend viele verschiedene Geräte ohne Cloudzwang verwendet werden. Die Liste der unterstützten Hardware ist dabei ziemlich groß. Von genannten Steckdosen bis hin zu LED-Lampen oder sogar manchen Ventilatoren kann den Geräten neues - quelloffenes - Leben eingehaucht werden.

Voraussetzungen

Für eine Tasmota-powered Steckdose benötigt man ein vom Projekt unterstütztes Gerät. Im allgemeinen benötigt ein solches IoT-Gerät einen ESP8266 bzw. ESP8285 um geflasht werden zu können. Wer nicht die Katze im Sack kaufen möchte, sieht sich am besten die Liste der unterstützten Hardware an und sucht sich ein passendes Produkt aus.

Um das Flashen möglichst einfach zu gestalten, lohnt es sich beim Kauf etwas genauer hinzusehen. Sofern das Produkt vom tuya-convert-Skript unterstützt wird, ist der Prozess deutlich einfacher. Das Skript wurde von der Zeitschrift c't in Kooperation mit dem Unternehmen VTRUST (dahinter steckt übrigens Michael Steigerwald) entwickelt und ermöglicht es Steckdosen vom OEM-Hersteller Tuya sehr einfach mit Tasmota zu flashen. Geräte die vom Skript nicht unterstützt werden sind deutlich aufwändiger, da so mit Lötkolben direkt am Chip hantiert werden muss. Das ist vor allem dann ein Problem, wenn der Zugang zur Hardware durch Verkleben des Gehäuses erschwert wird.

Wer es noch einfacher will, der kauft direkt ein bereits vom Hersteller mit Tasmota geflashtes Produkt. Die Auswahl ist hierbei natürlich deutlich kleiner, dafür hat man weniger Arbeit, das Gerät funktioniert sicher und die Garantie verliert man so auch nicht. Ich habe mir beispielsweise den DeLock 11826 auf Amazon gekauft - mit 17€ aber teurer als manch andere Produkte.

Aufgrund eines guten Angebots (danke an Felix für den Hinweis) habe ich zusätzlich beim Media Markt 3x eine CORN TECHNOLOGY SD-WL-02 (hergestellt von Tuya) für insgesamt 9€ erworben. Die Steckdosen werden standardmäßig auch mit dem Cloud-Firmware-Sorglos-Paket von Tuya ausgeliefert, weshalb ich mich gleich als Exorzist probiert habe.

Der Flashprozess

Bevor es gleich ans Flashen geht, sollte erwähnt werden, dass es sich empfiehlt das Gerät nicht über die vom Hersteller beworbene App einzurichten. Erstens werden so natürlich bereits Daten gesammelt & übertragen, zweitens könnte sich das Produkt aber auch automatisch updaten, was die Verwendung von Tasmota verhindern könnte.

Für den Flashvorgang mit tuya-convert benötigt man:

  • eine Linux-Installation (ob VM oder nativ ist egal)
  • einen WLAN-Adapter, welcher von Linux unterstützt wird
  • ein zweites WLAN-fähiges Gerät (egal welches OS und welche Plattform - am einfachsten ist hier ein Smartphone)

Ich verwende hierfür eine Arch-Linux-Installation auf meinem Laptop mit integriertem WLAN-Adapter und zusätzlich ein Smartphone. Nachdem ich ungern meine Installation mit Abhängigkeiten vollstopfe, verwende ich das Skript unter Docker.

Sofern noch nicht geschehen, installiere ich Docker inkl. docker-compose schnell nach. Für Ubuntu, Debian und Co. folgt man einfach der Anleitung von Docker selbst.

# Installiere Docker und docker-compose
sudo pacman -S docker docker-compose
# Docker daemon starten
sudo systemctl start docker.service

Anschließend kann das Skript-Repo von GitHub heruntergeladen und der Container vorbereitet werden. sudo für Docker-Befehle kann man sich hier natürlich sparen, wenn der ausführende Benutzer teil der Docker-Gruppe ist.

# Repo herunterladen
git clone https://github.com/ct-Open-Source/tuya-convert
cd tuya-convert/
# Container bauen
sudo docker build -t tuya:latest .

Nun kann die docker-compose-Datei in einen neuen Ordner kopiert und folgend modifiziert werden. Da beim Flashen automatisch ein Backup der original Firmware angefertigt wird, erstellen wir zusätzlich einen Ordner für die gesicherten Firmware-Dateien.

# zurück in den Ordner wo zuvor das Skript heruntergeladen wurde
cd ../
# neuen Ordner anlegen und dahin navigieren
mkdir flash-smartplug && cd flash-smartplug
# Sample-Datei kopieren
cp ../tuya-convert/docker/docker-compose.sample.yml docker-compose.yml
# Ordner für Firmware-Backups erstellen
mkdir backups

Die docker-compose-Datei benötigt noch den Identifier des WLAN-Adapters sowie den Ordner für die Backups auf dem Host. Den Identifier erhält man am einfachsten über die Befehle ifconfig (bei Systemen mit net-tools) oder ip a s.

Die Datei sieht nun wie folgt aus:

version: '3'
services:
  tuya:
    image: tuya:latest
    privileged: true
    network_mode: "host"
    environment:
      - WLAN=wlpXXsY
      - AP=vtrust-flash
      - GATEWAY=10.42.42.1
    volumes:
      - ./backups:/usr/bin/tuya-convert/backups

Bevor der Container und das Skript im Container gestartet werden soll, empfiehlt es sich aktive WLAN-Verbindungen zu trennen, damit das Skript problemlos auf den Adapter zugreifen kann.

# Container im Hintergrund starten
sudo docker-compose up -d
# Skript starten
sudo docker-compose exec tuya start

Anschließend das Smartphone mit dem vom Skript erstellten Access Point vtrust-flash verbinden und danach das IoT-Gerät in den Hotspot-Modus bringen. Dafür drücken wir einige Sekunden lang die Taste am Gehäuse - die LED sollte nun blinken. Nun muss man nur noch den Anweisungen im Skript folgen und zum Flashen die mitgelieferte Tasmota-Firmware auswählen.

Sofern der Vorgang erfolgreich war, erscheint ein neuer Access-Point mit einer SSID der Syntax tasmota-xxxx mit welchem wir uns verbinden. Über die URL http://192.168.4.1/ kann nun das Gerät im gewünschten 2,4 GHz WLAN (nur 2,4 GHz, da die ESPs 5 GHz nicht unterstützen) eingebucht werden, indem die Zugangsdaten für den Access Point definiert werden.

Nach dem Reboot befindet sich - sofern alles geklappt hat - das Gerät im bestimmten WLAN-Netzwerk  und kann über das Webinterface zur Steuerung und Konfiguration mithilfe der IPv4-Adresse aufgerufen werden. Am einfachsten erhält man die IPv4-Adresse über die Liste der verfügbaren Hosts im Webinterface des Routers. Ansonsten einfach mithilfe eines Mass-Pings auf alle in Frage kommenden privaten IPv4-Adressen mögliche Hosts überprüfen. Ich mache das immer ganz gerne mit dem Open-Source-Tool Angry-IP-Scanner, Apps wie Fing und Co. funktionieren aber natürlich genauso.

Optional kann die Firmware gleich noch auf die aktuellste Version gebracht werden. 

Zwingend muss nun noch die GPIO-Pin-Belegung angepasst werden, da ansonsten Relais und Funktionen z. B. zum Messen des Stromverbrauchs (sofern das Gerät dies unterstützt) nicht verwendet werden können.

Die Templates für die Pin-Belegungen erhält man auf der jeweiligen Produktseite. Am einfachsten lassen sich Templates im Webinterface unter Configuration > Configure Other mittels copy-paste eintragen. Zum Aktivieren des Templates müssen wir die Checkbox Activate setzen. Wer so wie ich MQTT nicht benötigt kann hier gleich noch MQTT deaktivieren.

Den JSON-String fügt man einfach in die Zeile unter "Template" ein.

Auch lässt sich ein Passwort für das Webinterface setzen, damit nicht jeder im Netzwerk auf das Webinterface der Steckdosen zugreifen kann. Nachdem die Webserver aber kein HTTPS können, ist der Nutzen eines Passworts eher gering, da unverschlüsselte HTTP-Kommunikation sehr einfach mitgeschnitten werden kann. Bestenfalls werden die Steckdosen in ein separates Netzwerk verbannt. Diese Netzkwerksegmentierung lässt sich, je nach Router, beispielsweise durch eine Art Gäste-WLAN für IoT-Geräte ermöglichen.

Wer es besonders sicher mag, der kann einen Blick ins Tasmota-Wiki werfen und so weitere Infos zur Sicherheit von Tasmota finden. Beispielsweise können MQTT-Nutzer optionale TLS-Unterstützung für MQTT der Firmware hinzufügen, auch wenn das Image hierfür manuell gebuildet werden muss.


Nun kann das IoT-Gerät sorgenfreier im eigenen Heimnetzwerk betrieben werden. Steuern lässt sich das Produkt weiterhin am einfachsten über das Webinterface. Alternativ nutzt man MQTT oder notfalls die serielle Schnittstelle. Sofern es irgendwo Probleme gab, lohnt es sich einen Blick ins FAQ des Projekts zu werfen.