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.
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.
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...
"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 |