Sensordaten per MQTT ohne Programmierung? Tasmota!

Demokratisierung von Technologie heißt, diese verfügbar machen, ohne dass Programmierung als Einstiegshürde im Weg steht. Mir wurde in diesem Zusammenhang Tasmota empfohlen. Daher habe ich mich der Frage gewidmet: Kommt es tatsächlich ganz ohne Programmierung aus?

Voraussetzungen

Als Steuerungs-Hardware benötigst du einen ESP32 oder ESP8266:

  • ESP32 €11,99 bei Amazon [B07Z83MF5W]
  • oder ESP8266 €8,49 bei Amazon [B08BTYHJM1]

Als Sensor-Hardware funktionieren verschiedenste Hardware-Module:
In diesem Post wird ein I2C Luftdrucksensor verwendet, mit dem du Wetterveränderungen vorhersagen oder Höhe über NN messen kannst usw.

3x BMP180 Barometer für €5,99 bei Amazon [B07FRW7YTK] (für 1x ist der Stückpreis mM zu hoch).

Was auch funktioniert (bei gleicher Verkabelung wie in diesem Blogpost) ist z.B. der Laser-Abstandssensor (bis 1m +-3%, bis 2m +-10%) VL53L0X, mit dem du Abstände in Millimeter messen kannst. Zähle z.B. wie oft deine Katze die Katzenklappe benutzt oder wie oft du selbst den Kühlschrank öffnest und wie lange er offensteht, etc.

1x VL53L0X für €7,49 bei Amazon [B086V37JJ7]

die abgebildeten Preise sind tagesaktuell am 02. Februar 2022

Als Amazon-Partner verdiene ich an qualifizierten Verkäufen, wenn du die Links verwendest und die Produkte kaufst. Das kostet nicht mehr als wenn du sie einfach so kaufst und hilft mir mehr Zeit für coole Tutorials aufzubringen. Wenn du das nicht möchtest, sind daneben jeweils die Artikelnummern gelistet.

ACHTUNG: Bei den verlinkten Sensoren müssen die Stiftleisten noch selbst angelötet werden. Fertig vorgelötete Elektronik gibt es auch, ist aber aufgrund des höheren Platzbedarfs beim Versand in der Regel übermäßig teuer.

Software-Voraussetzungen gibt es neben einem Browser keine :)

Installation

Um auf deinem ESP32- oder ESP8266-Board Tasmota zu installieren, schließe das Board an und rufe einfach in deinem Browser https://tasmota.github.io/install/ auf. Auf der Seite kannst du dann im Dropdown-Menü "Tasmota (German)" auswählen und "Connect" klicken. Dein Browser fragt dann nach der Berechtigung auf das USB-Gerät zuzugreifen. Wähle das Gerät aus (meistens heißt es etwas mit USB to UART oder Serial Bridge) und bestätige den Dialog. Hat das geklappt, siehst du jetzt ein Modalfenster namens "Device Dashboard". Klicke auf "Install ...", in der nächsten Ansicht, aktiviere das Häkchen bei "Erase Device" und klicke auf "Next" und in der finalen Ansicht bestätige noch einmal mit "Install".

Jetzt hast du 1-3 Minuten Zeit einen Kaffee zu trinken, deinen Goldfisch Gassi zu führen oder diesen Blogpost mit deinen Freunden zu teilen.

Die Installation in Bildern:

Erste Verbindung

Nach dem Installieren von Tasmota startet dein Gerät automatisch im Konfigurationsmodus. Wenn du jetzt mit deinem Computer (ich präferiere mein Telefon) nach WLANs scannst, findest du eins, das tasmota_XXXXXXX heißt wobei XXXXXX die letzten Stellen der Hardware-ID von deinem ESP sind. Wenn du dich damit verbindest, geht oft automatisch eine Webseite zur Konfiguration auf. Falls nicht, öffne mit deinem Browser die Seite http://192.168.4.1. Dort kannst du die SSID und das Passwort für dein WLAN eingeben. Der ESP startet dann neu und ist ab jetzt mit deinem WLAN verbunden. Vorher meldet er in der Regel seine neue IP-Adresse zurück. Z.B. 10.0.0.36

Die Verbindung in Bildern:

Konfiguration MQTT

Unter http://<IP> findest du das Hauptmenü für deine Tasmota-Installation. Für diesen Abschnitt musst du unter Einstellungen auf MQTT konfigurieren klicken. Im Formular kannst du dann IP und Port deines Brokers unter Host und Port eintragen. Im Feld "client" kannst du die Client-ID eintragen, die deine Tasmota-Installation haben sollen. Benutzer und Passwort sind grundsätzlich optional, wenn dein Broker allerdings Logindaten erwartet, musst du diese hier eintragen. Der Kern dieser Settings sind die Topic-Einstellungen. Tasmota verwendet das Konzept von Präfixes und gerätespezifischen Topics. Das Format sieht zum Beispiel so aus

In diesem MQTT-Topic finden sich die Telemetrie-Daten des ESP (Temperature, Zeit, Konfiguration, ...)
tele/<topic>/<funktion> payload=<parameter>

Kommandos werden unter cmnd abgesetzt. Tasmota Steckdosen können zum Beispiel so geschaltet werden.
cmnd/<topic>/Power Toggle

Rückgabewerte vom ESP (auch Sensordaten) kommen und stat zurück:
stat/<topic>/<Funktion>

Standardmäßig ist das Topic Tasmota_<6 Stellen der MAC-Adresse>. Ich empfehle dir lesbarere Topics zu verwenden wie wohnzimmer/steckdose1, küche/arbeitsplatte/led, usw. Als "Full Topic" lasse ich die Voreinstellung (%prefix%/%topic%/) immer drin, damit ich das Gerät wie im Code-Block oben über die Präfixe steuern kann.

Die MQTT-Konfiguration in Bildern:

Konfiguration Sensoren

Die angeschlossene Sensorik kannst du unter Einstellungen->Gerät konfigurieren angeben. Die angezeigten Dropdown-Menüs, die jeweils für einen Pin auf dem ESP, stehen kannst du nutzen um anzugeben, wie du deinen Sensor mit dem ESP verkabelt hast. Es gibt eine ganze Reihe unterstützter Geräte, die explizit angegeben werden können, z.B. der DHT11 Luftfeuchte- und Temperatursensor aus meinem früheren Blogpost. Außerdem kann eine Reihe I2C-Geräte angeschlossen werden. In diesem Blogpost zeige ich dir den Anschluss eines BMP180 Luftdrucksensors, der Luftdruck und Temperatur misst und per MQTT zurückgibt.

Um den Sensor auszulesen musst du die Pins, die du gleich anschließt in der Gerätekonfiguration angeben. Da der genannte Sensor über den I2C-Bus angesprochen wird, musst du die beiden I2C-Pins definieren. Üblicherweise benutzt man beim ESP32 Pin 21 als SDA und Pin 22 als SCL. Die zusätzlichen Dropdowns die auftauchen, wenn du Pins definierst sind immer dafür gedacht mehrere unabhängige Definitionen zu machen. Da über I2C aber im Prinzip über 100 Geräte auf den gleichen Pins angesprochen werden können, brauchst du hier nichts zu verändern.

Die Anschlussdefinition in Bildern:

Durch Klick auf "Speichern", werden die Pins fest eingestellt und der ESP startet neu. Bleibt noch die Verkabelung:

Verkabelung

  • Trenne den ESP vom Strom
  • Verkabele nach folgender Tabelle
  • Schließe den ESP wieder an
  • ACHTUNG: Bei meinem BMP180 liegen VIN und GND direkt nebeneinander. Wenn man versehentlich beide Kontakte berührt, tut das sehr weh und kann potentiell den ESP bzw. die Pins zerstören. Diesen Sensor also bitte nicht mehr anfassen, wenn Spannung anliegt.
BMP180 Pin ESP Pin
VIN 5V*
GND GND
SDA 21
SCL 22

* Die Sensoren, die oben verlinkt sind, sind auf den Betrieb mit 5V ausgelegt. Falls du andere bestellst, achte darauf, ob vielleicht nur 3.3V verwendet werden dürfen.
** andere Sensoren haben eventuell mehr Pins, in der Regel reicht die Verkabelung der 4 angegebenen aber

Wenn du den ESP jetzt wieder anschaltest, sollte er sich automatisch

  • Mit deinem WiFi verbinden
  • Mit deinem MQTT-Broker verbinden
  • Die Sensoren erkennen
  • Im Webinterface die Sensorwerte anzeigen

Sensoren per MQTT auslesen

Die Tasmota-Firmware schickt standardmäßig alle 300 Sekunden (5 Minuten) Telemetriedaten per MQTT an tele/<topic>/SENSOR. Diesen Zeitabstand kannst du unter Einstellungen->Logging Konfigurieren->Telemetrieperiode auf Werte bis minimal 10 (Sekunden) konfigurieren. Alternativ kannst du für häufigere Messungen mit dem MQTT-Befehl cmnd/<topic>/status und payload 10 eine Anfrage an den Sensor stellen. Die Antwort kommt dann auf stat/<topic>/Status10 zurück. Die Payloads von Tasmota werden im JSON-Format zur Verfügung gestellt und sehen ungefähr so aus:

{
  "StatusSNS": {
    "Time": "2022-01-01T12:00:00",
    "BMP180": {
      "Temperature": 25.6,
      "Pressure": 1028.3
    },
    "ESP32": {
      "Temperature": 67.8
    },
    "PressureUnit": "hPa",
    "TempUnit": "C"
  }
}

Fazit

Ich finde das Arbeiten mit Tasmota extrem angenehm, weil nur ein Browser benötigt wird und alles über Webinterfaces konfiguriert werden kann. Das gefällt mir auch deshalb so gut, weil ich mit meinen Projekten immer versuche, die Einstiegshürde so niedrig wie möglich zu halten. Tasmota kommt tatsächlich ganz ohne Programmierung aus. Neben der vorgestellten Einrichtung kann Tasmota auch noch viel mehr. Es gibt beispielweise die Möglichkeit über sogenannte Rules (Regeln) auf bestimmte Werte zu reagieren und eigene MQTT Nachrichten zu versenden. Diese Rules sind dabei zwar mit einigen Sonderzeichen versehen, aber längst nicht so kompliziert zu erlernen wie eine ganze Programmiersprache.

Insgesamt kann ich die Nutzung von Tasmota durchaus empfehlen, weil es wirklich viel Programmierarbeit abnimmt. Das einzige Manko für mich (und vielleicht hab ich es nur übersehen) ist die fehlende Konfigurationsmöglichkeit für die Payload-Daten. Wenn ich nicht das Standard-JSON als Nachricht senden möchte, muss ich mir immer eigene Regeln schreiben. Alles andere hat mir sehr gut gefallen und fühlt sich sehr gut durchdacht an.

Wenn dir ein weiterer Blogpost über Tasmota-Regeln gefallen würde oder du irgendwelche Fragen bzw. Anmerkungen hast, schreib mir gerne auf Twitter oder unter info@ per mail. Um mich weiter bei meiner kostenlosen Arbeit zu unterstützen, erzähle allen deinen Freunden von diesem Blog und teile den Link zu diesem Post. Alternativ kannst du mir auch gerne unter dem Link im Menü einen Kaffee ausgeben.

Ergänzung - Tasmota-Hardware

Vielen Dank für die wahnsinnig schnellen Rückmeldungen. Ich habe es oben nicht extra erwähnt und wurde darauf aufmerksam gemacht: Eine riesige Stärke von Tasmota ist, dass es Open Source ist und inzwischen von vielen IoT-Hardware-Herstellern verwendet wird. So kannst du zum Beispiel fertig vorinstallierte Steckdosen, Lichtschalter, Glühbirnen (LEDs zugegeben) und vieles mehr kaufen, die alle mit Tasmota geflasht sind und nur noch wie im Part Erste Verbindung konfiguriert werden müssen. Wenn du dich inspirieren lassen möchtest, was es alles gibt, verwende gerne meinen Affiliate-Link zu dieser Amazon-Suche.