Home / 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, 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ürfnissen anpassen und benötigt daher nicht unbedingt eine besondere Firmware. Möchte man jedoch seine Module via WLAN konfigurierbar machen, um z. B. die IP-Adresse des Routers zu ändern, IO-Ports zu tauschen, Parameter zu ändern etc., so ist Tasmota durchaus eine sehr gute Wahl. Infos zum Programmer 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

Unter 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 Programmer 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 einen WLAN-Temperatursensor oder ein WLAN-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 Tasmota-Oberflä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 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.

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.
Ist das WLAN eingerichtet und man hat eine IP-Adresse vom Router erhalten, so kann man 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 IO0-Pin zum Zählen nutzen soll. Ich gehe davon aus, dass das Grundprinzip klar ist. Auf dem letzten Zählerrädchen sitzt ein Magnet (in der Regel bei Ziffer 6), welches bei 10 Litern Gasentnahme eine volle Umdrehung weiterdreht. Jede Reedkontakt-Erregung entspricht also 10 Litern Gas, 100 Erregungen entsprechen also 1 m³ 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 GPIO0 als Eingang zu nutzen kann unter Umständen Probleme bereiten - siehe hier.




  MQTT einrichten

Wie MQTT eingerichtet wird habe ich bereits beim Stromzähler-Lesekopf beschrieben. Man sollte hier 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

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 sich der [Console]-Button hinter dem [Tools]-Button. Im Eingabefeld werden 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, 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, einen Befehl per MQTT an das Tasmota-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 des Tasmota-Geräts 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 !
[erstellt 26.04.2024]