Neben der Hardware ist die richtige Software für Euer Projekt natürlich genauso wichtig. Eine praktische und universell einsetzbare Firmware für den Wald-und-Wiesen-Mikrocontroller ESP8266 ist die Tasmota Firmware. Damit lassen sich diverse Projekte realisieren ohne, dass Ihr selber programmieren müsst. Außerdem muss man das Rad ja auch nicht jedes mal „neu erfinden“. 🙂
Bevor Ihr diese mit Eurem Mikrocontroller nutzen könnt muss sie natürlich erst auf diesen überspielt werden. Wie das geht und was Ihr dabei beachten müsst ist im folgendem Artikel beschrieben.
Sicherheitshinweise
Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/
Affiliatelinks/Werbelinks
Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂
Voraussetzungen
Hilfreiche Artikel:
Bevor ihr mit diesem Artikel startet solltet Ihr die Arduino-IDE installiert und konfiguriert haben. Informationen dazu findet Ihr in dem folgenden Artikel.
Programme installieren – ein Beispiel
ArduinoIDE – Tipps und Tricks
Benötigtes Material:
In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.
Benötigtes Werkzeug:
In der folgenden Liste findet Ihr alle Werkzeuge die Ihr zur Umsetzung dieses Artikels benötigt.
Die aktuelle Tasmota-Version aus dem GitHub kopieren
Bevor Ihr mit der Konfiguration und dem programmieren der Tasmota-Firmware beginnen könnt müsst Ihr diese zunächst aus dem GitHub herunterladen.
Die Dateien zu der Firmware findet Ihr unter: https://github.com/arendst/Sonoff-Tasmota
Wie Ihr Dateien aus einem GitHub herunterladen könnt ist im Artikel GitHub – Wie kopiere ich Dateien aus einem GitHub auf meinen Computer beschrieben.
Nach dem herunterladen der komprimierten Firmware-Dateien müsst Ihr diese noch entpacken. Tips dazu findet Ihr im Artikel WinRar? WinZip? WinWas? – Liebling ich habe die Dateien geschrumpft
Die Tasmota-Firmware konfigurieren
Viele Einstellungen der Tasmota-Firmware lassen sich auch während des laufenden Betriebes einstellen. Trotzdem finde ich es einfacher diese Einstellungen durch eine korrekt konfigurierte Firmware direkt einzuspielen.
Außerdem ist das bei einigen verwendeten Sensoren auch unbedingt notwendig, da nicht alle Softwarekomponenten für jeden Sensor oder Aktor standardmäßig mitkompiliert(„zur Firmware hinzugefügt“) werden.
Die verschiedenen Optionen der Tasmota-Firmware
In der nun geöffneten „user_config.h“ sind allerhand Einstellungsmöglichkeiten vorhanden. Meistens benötigt man nur einen Bruchteil davon. Der Vollständigkeit halber sind hier aber alle Optionen aufgelistet und kurz beschrieben.
Damit Ihr nicht alle Optionen einzelnd durchgehen müsst, habe ich die Optionen die ihr unbedingt bearbeiten müsst Grün hinterlegt. Dahinter verbergene sich zum Beispiel Passwörter oder URL’s die Ihr unbedingt indiviudell konfigurieren oder zumindest überprüfen solltetn. Überpüft diese Optionen also bevor Ihr die Firmware auf Euer Tasmota-Device übertragt.
In der „MQTT“-Sektion lassen sich die grundlegenden Parameter zur Verbindung mit dem MQTT-Server einstellen. – – „MQTT_USE“ aktiviert den MQTT-Clienten.
– „MQTT_HOST“ legt die Adresse eures MQTT-Servers fest.
– Unter „MQTT_FINGERPRINTX“ könnt Ihr den Fingerprint zur Verschlüsselung Eurer MQTT-Verbindung festlegen. – – – „MQTT_PORT“ stellt den Port eures MQTT-Servers ein.
– In „MQTT_USER“ und „MQTT_PASS“ könnt Ihr jeweils Benutzername und Passwort für Euren MQTT-Server festlegen.
– Mit „MQTT_BUTTON_RETAIN“, „MQTT_POWER_RETAIN“ und „MQTT_SWITCH_RETAIN“ könnt Ihr das Retain-Flag für die jeweiligen MQTT-Nachrichten aktivieren. Dies bewirkt, dass die jeweiligen MQTT-Nachrichten auch an MQTT-Clienten gesendet werden die zum Zeitpunkt des sendens der MQTT-Nachricht noch nicht online waren.
– Mit „MQTT_STATUS_OFF“ könnt Ihr den String einstellen der in Befehlen genutzt wird um etwas auszuschalten.
– Mit „MQTT_STATUS_ON“ könnt Ihr den String einstellen der in Befehlen genutzt wird um etwas einzuschalten.
– Mit „MQTT_CMND_TOGGLE“ könnt Ihr den String einstellen der in Befehlen genutzt wird um etwas umzuschalten.
– Mit „MQTT_CMND_HOLD“ könnt Ihr den String einstellen der gesendet werden soll, wenn ein Taster für länger als in KEY_HOLD_TIME angegeben gedrückt wird.
In dieser Sektionen können verschiedene Details zu den genutzten MQTT-Topics festegelegt werden.
Mit „MQTT_FULLOPIC“ legt Ihr die Struktur der genutzten Topics fest. Standardmäßig besteht dieses immer aus dem „prefix“ und dem jewieligen „topic“.
Unter „SUB_PREFIX“, „PUB_PREFIX“ und „PUB_PREFIX2“ werden dann die Prefixe festgelegt.
Dabei nutzt Euer Tasmota-Device das unter „SUB_PREFIX“ angegebene Prefix als Abonement – also um Werte und Befehle zu empfangen.
Das unter „PUB_PREFIX“ angegebene Pefix wird genutzt um Werte zu veröffentlichen.
Dabei werden Telemetrie-Daten über das in „PUB_PREFIX2“ festgelegte Prefix versendet.
Unter „MQTT_TOPIC“, „MQTT_GRTOPIC“, „MQTT_BUTTON_TOPIC“, „MQTT_SWITCH_TOPIC“ werden dann die Topics festgelegt.
Dabei steht „MQTT_TOPIC“ für das individuelle Topic des Tasmota-Devices. Dabei wird auch immer ein Teil der MAC-Adresse Eures Tasmota-Devices mit angehängt.
„MQTT_GRTOPIC“ steht für ein Topic in der Ihr mehrere Tasmota-Devices in einer Gruppe zusammenfassen könnt.
Mit „MQTT_BUTTON_TOPIC“ und „MQTT_SWITCH_TOPIC“ könnt Ihr spezielle Topics für die eventuell angeschlossenen Taster und Schalter einstellen.
Mit „MQTT_CLIENT_ID“ könnt Ihr noch den Namen bzw. die ID des MQTT-Clienten festlegen.
All diese Werte könnt Ihr normalerweise so belassen.
Mit diesen und den Optionen im nächsten Abschnitt könnt Ihr die Kriterien für die Sommer-/Winter-Zeitumstellung festlegen. Dabei legen die Parameter die mit „TIME_DST…“ starten fest unter welchen Bedingungen von Standardzeit(Winterzeit) auf Sommerzeit umgestellt wird. Die Parameter die mit „TIME_STD_…“ beginnen sind dagegen für den umgekehrten Fall, also die Umstellung von Sommer- auf Winterzeit ausschlaggebend. Die Parameter sind ansonsten für beide Bereiche identisch: „…HEMISPHERE“ legt fest auf welchem Teil der Erdkugel Ihr euch befindet. Diese Option wird eigentlich nicht für die Zeitumstellung sondern eher für die Berechnung des korrekten Sonnen- Auf- und Untergangs-Zeitpunkts benötigt.
Nun geht es an die Parameter für die Zeitumstellung. Da die Zeitumstellung (zumindest in Deutschland) von Winter- auf Sommerzeit immer am letzten Sonntag im März um 02:00 Uhr stattfindet müsst Ihr den Paramater „TIME_DST_WEEK“ auf „Last“, den Parameter „TIME_DST_DAY“ auf „Sun“(=Sunday), den Parameter „TIME_DST_MONTH“ auf „Mar“ (=March) und den Parameter „TIME_DST_HOUR“ auf zwei stellen. Mit dem Parameter „TIME_DST_OFFSET“ gebt Ihr dann noch an welche Zeitverschiebung in diesem Fall eintritt. Dabei müsst Ihr auch die Abweichung durch die Zeitzone mit anegeben. In Fall Deutschlands, dass die Zeitzone UTC+1 hat also +60 Minuten hat, gilt hier für die Sommerzeit +120 Minuten.
Die Zeitumstellung von Sommer- auf Winterzeit (wieder in Deutschland) findet immer am letzten Sonntag im Oktober um 03:00 Uhr statt.
Deshalb müsst Ihr den Paramater „TIME_STD_WEEK“ auf „Last“, den Parameter „TIME_STD_DAY“ auf „Sun“(=Sunday), den Parameter „TIME_STD_MONTH“ auf „Oct“ (=October) und den Parameter „TIME_STD_HOUR“ auf drei stellen. Mit dem Parameter „TIME_STD_OFFSET“ gebt Ihr dann noch an welche Zeitverschiebung in diesem Fall eintritt. Dabei müsst Ihr auch die Abweichung durch die Zeitzone mit anegeben. In Fall Deutschlands, dass die Zeitzone UTC+1 hat also +60 Minuten hat, gilt hier für die Standardzeit(=Winterzeit) somit +60 Minuten.
Mit den Optionen „LATITUDE“ und „LONGITUDE“ könnt Ihr die Position des Tasmota-Devices festlegen. Dies ist notwendig um die korrekte Sonnen-Auf- und Untergangs-Zeit zu berechnen. Solltet Ihr diese Funktion nutzen wollen ist es wichtig hier die korrekten Daten anzugeben. Wie Ihr die Position eines beliebigen Ortes herausfinden könnt ist im Artikel Breiten- und Längengrad einer beliebigen Position mit GoogleMaps ermitteln beschrieben. Achtet dabei darauf, dass Ihr die Position (wie abgebildet) im Dezimalsystem angebt. Wie dies geht ist ebenfalls in dem genannten Artikel beschrieben.
„APP_TIMEZONE“ definiert die Zeitzone.
„APP_LEDSTATE“ definiert die Funktion der (in vielen Sonoff-Devices) integrierten LED’s
„APP_PULSETIME“ definiert die Pulsdauer in Form von vielfachen von 0,1 Sekunden. Ein Wert von 5 entspricht hier also 0,5 Sekunden bzw. 500 Millisekunden. Ein Wert von 0 deaktiviert diese Funktion.
„APP_POWERON_STATE“ definiert den Zustand der konfigurierten Relays nach dem Einschalten. Hierbei sind folgende Einstellungen verfügbar: POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON
„APP_BLINKTIME“ definiert die Impulslänge eines „blinkenden“ Relais
„APP_SLEEP“ definiert eine Zeitdauer zwischen 1 und 250 Millisekunden in denen der ESP8266 in den Schlafmodus versetzt wird. Auf diesem Weg lässt sich etwas Energie sparen. Natürlich reagiert der ESP8266 im worst case so erst 250 Millisekunden später.
„KEY_DEBOUNCE_TIME“ definiert die Entprellzeit eines angeschlossenen Tasters. Ein Wert von 50 gibt also an, dass nach einem erkannten Tastendruck der betreffende Taster für 50 Millisekunden ignoriert wird.
„KEY_HOLD_TIME“ definiert die Zeitdauer die ein Taster gedrückt werden muss bis dies als dauerhaft gedrückter Taster erkannt wird. Dabei wird der angegeben Wert wieder mit 0,1 Sekunden multipliziert. Ein Wert von 40 entspricht hier also einer Zeitdauer von 4 Sekunden. Erst nach 4 Sekunden wird also das „Taster ist gedrückt“-Event ausgelöst.
„SWITCH_DEBOUNCE_TIME“ definiert die Entprellzeit eines angeschlossenen Schalters. Ein Wert von 50 gibt also an, dass nach einem erkannten Schalter-positionswechsels der betreffende Schalter für 50 Millisekunden ignoriert wird.
„SWITCH_MODE“ definiert das Verhalten des konfigurierten Relais in Bezug auf einen angeschlossenen Schalter. Dabei sind folgende Optionen möglich:
TOGGLE; FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE
„WS2812_LEDS“ definiert die Anzahl der angeschlossenen WS2812 LED’s.
„TEMP_CONVERSION“ aktiviert (=1) oder deaktiviert (=0) die konvertierung der Temperatur in die Einheit Fahrenheit.
„TEMP_RESOLUTION“ definiert mit welcher Auflösung die Temperatur angezeigt wird. Dabei kann man zwischen keiner und bis zu drei Stellen hinterm Komma wählen. ACHTUNG: Die jeweilige Auflösung muss natürlich auch vom angeschlossenen Sensor geliefert werden. Sonst ist dieser vermeintlich exaktere Wert eher geraten als exakt.
„HUMIDITY_RESOLUTION“ definiert mit welcher Auflösung die Luftfeuchtigkeit angezeigt wird. Dabei kann man zwischen keiner und bis zu drei Stellen hinterm Komma wählen. ACHTUNG: Die jeweilige Auflösung muss natürlich auch vom angeschlossenen Sensor geliefert werden. Sonst ist dieser vermeintlich exaktere Wert eher geraten als exakt.
„PRESSURE_RESOLUTION“ definiert mit welcher Auflösung der Luftdruck angezeigt wird. Dabei kann man zwischen keiner und bis zu drei Stellen hinterm Komma wählen. ACHTUNG: Die jeweilige Auflösung muss natürlich auch vom angeschlossenen Sensor geliefert werden. Sonst ist dieser vermeintlich exaktere Wert eher geraten als exakt.
„ENERGY_RESOLUTION“ definiert mit welcher Auflösung der Energieverbrauch angezeigt wird. Dabei kann man zwischen keiner und bis zu fünf Stellen hinterm Komma wählen. ACHTUNG: Die jeweilige Auflösung muss natürlich auch vom angeschlossenen Sensor geliefert werden. Sonst ist dieser vermeintlich exaktere Wert eher geraten als exakt.
Mit diesen Optionen lässt sich das verhalten in dem Fall, dass für das Tasmota-Device noch keine gültigen WLAN-Zugangsdaten hinterlegt sind, festlegen. Ist „USE_WPS“ aktiviert(also die beiden // vor dem entsprechendem Eintrag entfernt) habt Ihr die Möglichkeit Euer Tasmota-Device mittels der WPS-Funktion mit Eurem Router zu verbinden. Ist „USE_SMARTCONFIG“ aktiviert könnt Ihr die Zugangsdaten mit der Android App ESP8266 Smart Config konfigurieren.
Die Option „USE_RF_FLASH“ ermöglicht, sofern aktiviert auf einer SONOFF 433Mhz RF Bridge die programmierung des angeschlossenen Co-Prozessors über die Weboberfläche der Tasmota-Firmware. Näheres dazu könnt Ihr auch im Artikel Tasmota – Sonoff RF Bridge RF-Chip(EFM8BB1) mit Portisch Firmware flashen finden.
Starten des Programmiervorgangs
Nachdem Ihr die Firmware nach Euren Wünschen angepasst bzw. konfiguriert habt geht es nun daran diese auf den ESP8266 Eures Tasmota-Devices zu übertragen. In diesem Beispiel wird ein normales ESP8266-Adaperboard der WEMOS D1-Mini mit der Tasmota-Firmware programmiert.
Viel Spaß mit dem Projekt
Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂
P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂
in der aktuellen tasmota Firmwareversion von github gibt es den Ordner sonoff so wie oben beschrieben nicht mehr. Das Kompilieren funktioniert nicht. Was mache ich falsch?
Schöne Grüße
Fabian
Hi Fabian,
du hast recht die Ordnerstruktur hat sich etwas geändert.
Probiere es doch mal mit dem Ordner „Tasmota“ unter: https://github.com/arendst/Tasmota/tree/development/tasmota
Wenn du die Datei „Tasmota.ino“ öffnest solltest du die Firmware kompilieren können. 🙂
Beste Grüße
(auch) Fabian 😀