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”. 🙂
Voordat je het kunt gebruiken met je microcontroller, moet het er natuurlijk eerst naar worden overgezet. Hoe je dit doet en waar je rekening mee moet houden, wordt beschreven in het volgende artikel.
Veiligheidsinstructies
Ik weet dat de volgende opmerkingen altijd een beetje vervelend zijn en onnodig lijken. Helaas hebben veel mensen die "beter" wisten door onvoorzichtigheid ogen, vingers of andere dingen verloren of zichzelf verwond. Gegevensverlies is in vergelijking bijna te verwaarlozen, maar zelfs dit kan erg vervelend zijn. Neem daarom vijf minuten de tijd om de veiligheidsinstructies te lezen. Omdat zelfs het coolste project geen blessure of andere problemen waard is.
https://www.nerdiy.de/sicherheitshinweise/
Affiliate links / reclame links
De hier vermelde links naar online winkels zijn zogenaamde affiliate-links. Als u op zo'n affiliate-link klikt en via deze link een aankoop doet, ontvangt Nerdiy.de een commissie van de betreffende onlineshop of aanbieder. De prijs verandert voor jou niet. Als u via deze links uw aankopen doet, steunt u Nerdiy.de om in de toekomst andere nuttige projecten aan te kunnen bieden. 🙂
Eisen
Handige artikelen:
Voordat u aan dit artikel begint, moet u de Arduino IDE hebben geïnstalleerd en geconfigureerd. Informatie hierover vind je in het volgende artikel.
Programma's installeren - een voorbeeld
ArduinoIDE - Tips en trucs
Benodigd materiaal:
In de volgende lijst vindt u alle onderdelen die u nodig heeft om dit artikel te implementeren.
Vereist gereedschap:
In de volgende lijst vind je alle tools die je nodig hebt om dit artikel te implementeren.
Kopieer de huidige Tasmota-versie van GitHub
Voordat je kunt beginnen met het configureren en programmeren van de Tasmota firmware, moet je deze eerst downloaden van GitHub.
De bestanden voor de firmware zijn te vinden op: https://github.com/arendst/Sonoff-Tasmota
Hoe je bestanden van een GitHub download wordt beschreven in het artikel GitHub - Hoe kopieer ik bestanden van een GitHub naar mijn computer? beschreven.
Nadat je de gecomprimeerde firmwarebestanden hebt gedownload, moet je ze nog uitpakken. U vindt tips over hoe u dit moet doen in het artikel WinRar? WinZip? WinWat? - Schat ik heb de bestanden verkleind
Configureer de Tasmota-firmware
Veel instellingen van de Tasmota-firmware kunnen ook tijdens het gebruik worden aangepast. Toch vind ik het gemakkelijker om deze instellingen direct te importeren via een correct geconfigureerde firmware.
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.




De verschillende Tasmota-firmware-opties
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.
Zodat je niet alle opties afzonderlijk hoeft te doorlopen, heb ik de opties die je absoluut moet bewerken groen gemarkeerd. Hierachter staan bijvoorbeeld wachtwoorden of URL's die je individueel moet configureren of op zijn minst moet controleren. Controleer deze opties dus voordat je de firmware naar je Tasmota apparaat overzet.








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 dit gedeelte kunnen verschillende details over de gebruikte MQTT-onderwerpen worden gedefinieerd.
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.
Normaal gesproken kun je al deze waarden laten zoals ze zijn.





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.
De tijdwisseling van zomer- naar wintertijd (wederom in Duitsland) vindt altijd plaats op de laatste zondag van oktober om 03:00 uur.
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 Breedtegraad en lengtegraad van een positie bepalen met GoogleMaps beschreven. Zorg ervoor dat u de positie (zoals weergegeven) in het decimale systeem opgeeft. Hoe je dit doet staat ook beschreven in het genoemde artikel.
“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:
SCHAKELAAR; VOLGEN, VOLGEN_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 configureren.





















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) met Portic Firmware knipperen vinden.


Start het programmeerproces
Nadat u de firmware naar wens hebt aangepast of geconfigureerd, is het nu tijd om deze over te zetten naar de ESP8266 van uw Tasmota apparaat. In dit voorbeeld wordt een normaal ESP8266 adapterboard van de WEMOS D1-Mini geprogrammeerd met de Tasmota firmware.






Veel plezier met het project
Ik hoop dat alles werkte zoals beschreven. Zo niet, of als je vragen of suggesties hebt, laat het me weten in de commentaren. Ik zal dit dan zo nodig aan het artikel toevoegen.
Ideeën voor nieuwe projecten zijn altijd welkom. 🙂
PS Veel van deze projecten - vooral de hardwareprojecten - kosten veel tijd en geld. Natuurlijk doe ik dit omdat ik het leuk vind, maar als je het cool vindt dat ik de informatie met je deel, dan zou ik blij zijn met een kleine donatie aan het koffiefonds. 🙂
In de huidige tasmota-firmwareversie van github bestaat de sonoff-map zoals hierboven beschreven niet meer. Compileren lukt niet. Wat doe ik verkeerd?
Met vriendelijke groeten
Fabian
Hallo Fabian,
je hebt gelijk de mappenstructuur is een beetje veranderd.
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. 🙂
Hartelijke groeten
(ook) Fabian 😀