Tech-Ecke / Programmieren / ESP-Modul mit Tasmota betreiben

ESP-Modul mit Tasmota betreiben


Tasmota ist eine Open-Source-Firmware für ESP-Module. Sie wurde von Theo Arends entwickelt wurde, um ESP basierte IoT-Geräte aus fernöstlicher Produktion von deren Cloud-Zwang zu befreien und deren Funktionalität zu erweitern. Mittels Arduino-IDE kann man eigentlich seine ESP-Module perfekt nach den vorhandenen Bedürfnisse anpassen und benötigt daher nicht unbedingt eine besondere Firmware. Möchte man jedoch seine Module via Wifi konfigurierbar machen, um z.B. die IP-Adresse des Routers zu ändern, IO-Ports tauschen, Parameter ändern... etc. so ist Tasmota durchaus eine sehr gute Wahl. Infos zum Programer gibt es hier (ESP-01) und hier (ESP-12x). Man kann aber auch direkt ein Entwicklerboard wie den WEMOS D1-Mini benutzen.

Diese Seite beinhaltet:


  Firmware aufspielen mit Tasmotizer

UUnter Windows gelingt das Aufspielen der Tasmota-Firmware am einfachsten mit dem Tasmotizer von Jacek Ziółkowski. Tasmotizer kommt ohne Installation aus und besteht nur aus einer einzigen Exe-Datei. Nach dem Start benötigt das Tool nur zwei Eingaben: Den Port an dem das ESP-Modul bzw. der Programer hängt und die Firmware Datei (.bin). 

Neben der Standard-Firmware "tasmota.bin" gibt es auch noch zahlreiche Derivate für spezielle Einsatzzwecke, für einfache Vorhaben, um beispielsweise eine Wifi-Temperatursensor oder Wifi-Relais zu basteln reicht jedoch die Standardversion aus. Tasmotizer kann auf GitHub und die Firmware-Datei auf ota.tasmota.com heruntergeladen werden. Wer gerne eine deutschsprachige Tasmotaoberfläche hat sollte nach der "tasmota-DE.bin" Ausschau halten:

Tasmotizer  (oder direkt Download-Seite)

Tasmota Firmware

Über den Button "Tasmotize!" wird die Firmware auf den Chip aufgespielt und das war es dann auch schon...
Wer direkt beim Aufspielen gleich seine WLAN-Zugangsdaten mit übertragen möchte, kann vorher noch den den Button "Send config" bemühen und die Angaben entsprechend tätigen.


Öffnen der Tasmota-Oberfläche

Hat man seine WLAN-Zugangsdaten nicht angegeben, so startet der ESP zunächst im Access-Point-Modus. Er spannt also ein eigenes Netzwerk auf (Namen "tasmota_xxxxxx_xxxx"), mit dem man sich dann per PC oder Handy anmelden kann, um zunächst die WLAN-Zugangsdaten anzugeben. An dieser Stelle verweise ich mal auf einen Beitrag zum Stromzähler-Lesekopf, welcher ebenfalls Tasmota als Firmware nutzt. Stromzähler-Lesekopf.
Ist das WLAN eingerichtet und man hat eine IP-Adresse vom Router erhalten, so kann zukünftig die Tasmota-Oberfläche mit dieser IP aufrufen.



  Einfacher Sensor (Zähler) einrichten

Hier mal ein einfaches Beispiel wie man in Tasmota einen Zählersensor realisiert, welcher beispielsweise die Gasmenge per Reedkontakt abgreift und per MQTT bereitstellt. Dazu habe ich jetzt mal einen ESP-01S vorgesehen, welcher den IO-0 -Pin zum Zählen nutzen soll. Ich gehen davon aus, dass das Grundprinzip klar ist. Auf dem letzten Zählerrädchen sitz ein Magnet (in der Regel bei Ziffer 6), welches bei 10 Liter Gasentnahme eine Volle Umdrehung weiterdreht. Jede Reedkontakt-Erregung entspricht also 10 Liter Gas, 100 Erregungen entsprechen also 1 qm Gas.

  1. Im Tasmota Hauptmenü auf [Configuration] klicken
  2. [Configuration Module]
  3. "Module Type" auf "Generic (0)" stellen
  4. Einstellung mit [Save] bestätigen

Das Modul startet nun neu. Das direkte setzen des IO-Ports hat bei mir nicht geklappt, deshalb nach dem Neustart wieder auf [Configuration]  und [Configuration Module], dann... 

  1. "GPIO0" auf "Counter" stellen
  2. Einstellung mit [Save] bestätigen (Modul startet neu)
  3. im Hauptmenü auf [Console] klicken
  4. im Eingabefeld CounterDebounce 5000 eingeben und mit Eingabetaste bestätigen

"CounterDebounce 5000" dient zum Entprellen des Eingabeschalters. Da hier ein Reedkontakt als Schalter dient und dieser beim vorbeischwingen vom Magnet dazu neigt mehrfach zu schalten ist die Zeit mit 5000 Millisekunden bewusst sehr hoch gewählt. Eventuell könnte man diese auch deutlich reduzieren, da aber das Zählrad mit dem Magnet (letztes Rädchen) bei mir nur sehr langsam dreht passt das. Bei bedarf die 5 Sekunden einfach reduzieren.

Hinweis zum Beispiel: Den Eingang GPIO0 zu nutzen kann unter Umständen Probleme bereiten - siehe hier.



  MQTT einrichten

Wie MQTT eingerichtet wird habe ich ebenfalls bereits beim Stromzähler-Lesekopf beschrieben. Hier sollte man lediglich einen passenden Topic-Name für den Gaszähler wählen.
Standardmäßig funkt Tasmota alle 300 Sekunden per MQTT zum Broker, möchte man diesen Wert verändern, so kann man dies mit dem Befehl "TelePeriod" in der Konsole oder auch im Browser erledigen. Ist ebenfalls hier gezeigt.



 
Tasmota Befehle

Neben Hier möchte ich mal ein paar, für mich nützliche Befehle auflisten und aufzeigen wie man diese an Tasmota sendet


  Konsole

Die Konsole erreicht man über den Button [Console] im Main-Menu der Tasmota-Oberfläche, zumindest bis Version 13. Ab Version 14 versteckt sie sich der [Console] Button hinter dem [Tools] Button. Im Eingabefeld wird der Befehl und der zu übertragende Wert, getrennt durch ein Leerzeichen eingegeben und mit der Eingabetaste bestätigt.

 <Befehl> <Wert>

Beispiel: TelePeriod 10  - setzt den Sendeintervall von MQTT-Daten auf 10 Sekunden

Siehe auch weiter oben unter "Einfacher Zähler-Sensor einrichten".



  HTTP Request

Alle Konsolenbefehle können auch per HTTP-Request, von einem Rechner/Handy/Table an das Tasmota-Gerät gesendet werden. Dies geht aus einem Programm heraus, oder aber auch über die Adressleiste eines Browsers. Hierzu wird die IP-Adresse des Tasmota-Geräts benötigt. Der Syntax sieht wie folgt aus:

 <IP>/cm?cmnd=<Befehl>%20<Wert>   - "%20" ist anstelle des Leerzeichen in einer URL zu verwenden

Beispiel: http://192.168.1.100/cm?cmnd=TelePeriod %2010

Über HTTP-Request können auch Script-Variablen abgefragt und gesetzt werden. Beispiel:

 http://192.168.1.100/cm?cmnd=script?vari - zeigt den Inhalt der Script-Variable "vari"
 http://192.168.1.100/cm?cmnd=script%20>vari%209 - übergibt die Zahl 9 der Script-Variable "vari"

Hier wie angekündigt einige nützlich Konsolenbefehle:

Befehl Werte Beschreibung
TelePeriod 10-3600 Sendeintervall MQTT Message in Sekunden (default 300)
MqttHost Adresse (IP) MQTT Broker ändern/definieren
Topic String MQTT Topics ändern/definieren
SensorRetain ON/OFF o. 1/0 MQTT Retain Message
Sensor53 c1 Zahl  Wert des Sensor Counter1 ändern z.B. "0" für Rücksetzen
CounterDebounce 0-32000 Sensor-Pause - z.B. Schalter Entprellen
     



 
MQTT

Eine weitere Möglichkeit ist, ein Befehl per MQTT an das Tosmota-Gerät zu senden. Der sendende MQTT-Client benötigt einen speziell zusammengesetzten Topic und sendet an diesen dann den Wert als Nachricht.  Der Syntax hierzu lautet:

Topic: <tasmota-full-topic>/cmnd/<client_name>/<command>
Nachricht: <Wert>

Der Tasmota-Full-Topic und der Client-Name sind in den Einstellungen zum MQTT (Configure MQTT) zu finden.

In meinem Beispiel besteht der Full-Topic lediglich aus dem Topic "MeinTopic". Der Client-Name ist "EindeutigerName" und heißt so, weil er es innerhalb des MQTT-Netzwerks auch sein muss.
Wenn wir wie in den beiden vorhergehenden Beispielen gezeigt den TelePeriod-Wert ändern wollen, dann würde der Topic wie folgt aussehen:

MeinTopic/cmnd/EindeutigerName/TelePeriod

Der Einzustellende Wert wird dann als Nachricht gesendet. Das soll jetzt hier mal die 20 sein. Im TE_MQTT Client würde das so aussehen:

Der Empfang des Befehls wird in der Konsole vom Tasmota-Gerät protokolliert und kann da nachgesehen werden.



  Nützliche Befehle

Hier wie eingangs erwähnt einige nützlich Konsolenbefehle:

Befehl Werte Beschreibung
TelePeriod 10-3600 Sendeintervall MQTT Message in Sekunden (default 300)
MqttHost Adresse (IP) MQTT Broker ändern/definieren
Topic String MQTT Topics ändern/definieren
SensorRetain ON/OFF o. 1/0 MQTT Retain Message
Sensor53 c1 Zahl  Wert des Sensor Counter1 ändern z.B. "0" für Rücksetzen
CounterDebounce 0-32000 Sensor-Pause - z.B. Schalter Entprellen
     

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[letzte Aktualisierung 26.04.2024]