Sonoff mit Tasmota flashen wenn Firmware 1.6ff installiert ist

Tasmota aufspielen wenn der Sonoff OTA nicht zulässt


In einem früheren Post hatte ich das Flashen der Sonoff-Schalter mit der Tasmota-Software beschrieben die keinen Server in China zum Schalten benötigt.


Angespornt von diesem Erfolg habe ich weitere Schalter bestellt und musste feststellen dass es auf diesen nicht mehr funktionierte da die neuere Firmware die Itead aufgespielt hat keine fremden Server mehr zulässt. Also musste ich die Schalter auf die herkömmliche Art flashen.


', '

 


Tasmota aufspielen wenn der Sonoff OTA nicht zulässt


In einem früheren Post hatte ich das einfache Flashen der Sonoff-Schalter via WLAN mit der Tasmota-Software beschrieben die keinen Server in China zum Schalten benötigt.


Sonoff AllesVoll


Angespornt von diesem Erfolg habe ich weitere Schalter bestellt und musste feststellen dass es auf diesen nicht mehr funktionierte da die neuere Firmware die Itead aufgespielt hat keine fremden Server mehr zulässt. Also musste ich die Schalter auf die herkömmliche Art, also mit angestecktem Kabel flashen. 


Lötblockade


Das erste Problem war schon einmal dass in einigen der Platinen die Kontakte für das Flashen mit Lötzinn zugelaufen waren. Ob das Absicht ist um Änderungen der Firmware schwieriger zu machen oder einfach ein Produktionsfehler weiß ich nicht, aber es erschwert den Zugang zum Schalter natürlich schon um Einiges. Statt Experimente mit dem Flashen via Kabel zu machen musste ich mich also erst einmal hinsetzen und die Kontakte entlöten.


Glücklicherweise kamen nur wenige Tage später weitere Schalter die ich bei einem anderen Händler bestellt hatte, bei diesen waren die Kontakte frei und ich konnte eine Steckerleiste anlöten. Die Fleißarbeit mit den anderen Schaltern verschiebe ich so lange bis ich die anderen Schalter verbraucht habe.


Code-Probleme


Die meisten Anleitungen erwarten auf einen Editor namens "Atom" in den ein Modul "PlatformIO" installiert werden muss. Dazu installiert man den Editor, wählt dann "Settings" und im Punkt "Install" / "Install Packages" sucht man nach "platformio-ide". Bei der Installation wurde ich darauf hingewiesen dass mir auch das Paket "CLang" fehlte, dieses musste ich herunterladen und installieren


Das lief beides soweit problemlos.


Das Tasmota-Projekt kann man von der Quellcode-Seite herunterladen, die Anleitung nach der ich vorgegangen war verwendete Version 5.12.0 obwohl es bereits eine V5.13.1 gab. Ich habe erst einmal V5.12.0 verwendet um mit der Anleitung konform zu bleiben. Evtl. ist das der Grund für die Fehler auf die ich später gestossen bin.


Das Modul das die Umsetzung von USB auf Seriell macht war bei mir standardmäßig auf 5V Ausgangsspannung eingestellt. Die Schalter vertragen aber maximal 3.3V, dazu musste ich beim Modul eine Lötbrücke ändern. Beachtet das bei eurem Modul oder kauft gleich eines das die richtige Spannung ausgibt. Ich hatte den Sonoff mal zum Testen kurz an 5V gehängt und er wurde sofort ziemlich heiß - das hält er bestimmt nicht lange durch.


Das Tasmota-Projekt lässt sich auch ohne Probleme mit der Atom/PlatformIO-Kombination öffnen. Allerdings fanden sich die genannten Einträge zur Spracheinstellung usw. nicht dort wo die Anleitung sie erwartete. Also stellte ich ein was ich fand und hoffte das Beste, übersetzte den Code und startete das Flashen.


UploadingBei der Übertragung gab es dann noch einige Verwirrung weil die meisten Tutorials sagten die Kabel an RX und TX müssten vertauscht werden, an meiner Kombination von Sonoff und FTDI ist das aber nicht der Fall. Ggf. ausprobieren, wenn nichts überträgt die Kabel RX und TX vertauschen. Man erkennt den Upload daran dass die LEDs am FTDI-Modul hektisch blinken und in Atom eine Fortschrittsleiste erscheint.


Das Flashen klappte... oder auch nicht. Auf einem Sonoff hatte ich ein spanisches Interface, das andere deutsch. Auf der Webseite des Schalters stand nur etwas von "pimatic", das war aber leider alles was der kleine Webserver des Schalters produzierte.


Ein erneutes Laden half auch nichts oder funktionierte gar nicht. 


Dann fand ich Ländereinstellungen in der Datei "platform.ini", aber wenn ich dort "SONOFF_DE" aktivierte erhielt ich einen Compilerfehler, der Compiler konnte verschiedene Modul nicht öffnen. Nach längerer Suche entschied ich mich dazu auf die Arduino-Oberfläche umzusteigen da ich diese besser kenne. Hier erhielt ich aber immer eine Fehlermeldung dass das include "PubSubClient.h" nicht gefunden werden konnte. Dieses war zwar installiert, aber wurde partout nicht gefunden egal wie ich meine Libraries und Umgebungen hin- und herschob.


Also ging ich nach Konsultation einiger Tutorials wieder zurück zu Atom und PlatformIO. Das Projekt liess sich immer noch nicht übersetzen, es fehlte an der Klasse "Ticker". Diese fand ich auch unter https://platformio.org/lib/show/1586/Ticker und lernte dass man in PlatformIO eine Kommandozeile namens "Terminal" öffnen kann in der man das Kommando "pio lib install "Ticker"" eingibt. Das machte ich und wurde von einer Meldung belohnt dass die Klasse installiert worden wäre. 


Allerdings ergab die Übersetzung noch die gleiche Meldung, zusätzlich wurde noch gesagt dass die Parameter im Konstruktor nicht stimmen und eine Funktion attach_ms fehlt.  Diese fand ich im Modul "Ticker-esp32" (https://platformio.org/lib/show/1938/Ticker-esp32) dessen Installation mit "pio lib install "Ticker-esp32"" erfolgt.


Die Compilermeldung blieb allerdings gleich. Allerdings konnte ich dieser entnehmen dass die Library "Ticker" in das Verzeichnis C:\\Users\\Carsten\\.platformio\\lib installiert worden war, die esp32-Version landete unter D:\\Develop\\Sonoff\\Sonoff-Tasmota-5.12.0\\.piolibdeps\\Ticker-esp32_ID1938\\. Könnte es ein Problem des Suchpfades sein? Also schnell das Verzeichnis unter C:\\ gelöscht und siehe da, die Übersetzung lief ohne Fehler durch.


Um die Übertragung zu starten muss man den Knopf gedrückt halten während man den Sonoff mit Strom versorgt, eine unhandliche Fingerübung. Dann lief die Übertragung aber durch.


BeimHochladenLeider meldet sich der Schalter zwar an der Fritzbox an, zeigt aber auf der zugewiesenen Webseite keine Daten an.


Verbinde ich mich aber mit dem Terminalserver "termite" (https://www.compuphase.com/software_termite.htm) mit dem via USB angeschlossenen Gerät sehe ich wie es mit dem MQTT-Broker kommunizieren will  (Die Anzeige funktioniert auch mit dem "Serial Monitor" von PlatformIO wie ich später herausfand). Das Übertragen der Firmware hat also funktioniert, aber der Webserver läuft nicht so wie ich mir das vorstelle. Ohne die Konfigurationsseite müsste ich jeden Schalter im Editor konfigurieren und bei jeder Änderung die Firmware neu übertragen. Das würde ich gerne vermeiden.


Das scheint mit dem Admin/User-Modus der Firmware zu tun zu haben, aber laut meiner Konfiguration sollte das Gerät im Admin-Modus laufen und den Webserver betreiben.


Als ich in der user_config.h den Wert 


#define MQTT_USE


auf 0 änderte sagte eine Zeile in Termite: 00:00:05 HTP: Web-Server aktiv bei sonoff-0731 mit IP-Adresse 192.168.178.26. 


Allerdings erschien unter dieser IP immer noch keine Webseite. Ich vermutete dass das Übersetzen der Codes nicht 100% funktioniert hat, der Schalter sucht nämlich immer noch den MQTT-Broker domus1:1883 obwohl ich ihn auf meine Umgebung angepasst habe. Also mal alles unter D:\\Develop\\Sonoff\\Sonoff-Tasmota-5.12.0\\.pioenvs\\sonoff-DE gelöscht und neu übersetzt. Auch das half aber nichts 


Erst nach längerer Suche fand ich die Ursache: die Einstellungen werden im Schalter intern gespeichert und nur überschrieben wenn sich der Define 


#define CFG_HOLDER 0x20161210 


ändert


Damit erscheint immer noch zwar keine Webseite, aber die neuen Parameter werden verwendet und der Schalter setzt sich theoretisch mit meinem MQTT-Broker in Verbindung. Ich habe allerdings wieder mal vergessen wo in Home Assistant ich die Logs dazu finde - unter dem MQTT-Modul sehe ich jedenfalls nichts vom Schalter.


Immerhin lässt sich der Schalter aber über die REST-Schnittstelle schalten. Diesen konnte ich aber nicht zufriedenstellend in Home Assistant einbinden. Hier stellt sich vermutlich wieder einmal die unhandliche Syntax der Parameter von Home Assistant quer.
Aber selbst wenn es funktionieren würde müsste ich dann aber für alle Schalter feste IPs vergeben, das wollte ich eigentlich vermeiden. Die Firmware die bei der Übertragung von Sonota via WLAN verwendet wird 


Als nächstes versuche ich es vermutlich einmal mit der Firmware V5.13.1 und/oder mit der älteren Version V5.9.1 die bei SonOTA verwendet wird.


Nachtrag und Lösung


Tatsächlich scheint die Version 5.12.0 ein Problem gehabt zu haben. Nachdem ich die 5.13.1 heruntergeladen habe konnte ich die Firmware beinahe problemlos übertragen.


Es gab nur drei Dinge die ich relativ schnell in den Griff bekommen habe.



    • der Pfad in dem PlatformIO die Daten erzeugen will existiert nicht und wird auch nicht angelegt. Ich musste im Verzeichnis ".pioenvs" manuell ein Verzeichnis "sonoff-DE" anlegen

    • die COM-Schnittstelle wird nicht automatisch erkannt sondern ist in der platform.ini festgeschrieben. Dort stand COM5, ich musste es manuell auf mein COM26 umstellen

    • genauso wurde die Baud-Rate nicht korrekt erkannt, bzw. in der platform.ini stand 512000 statt der 115200 die mein Modul kann. Das führte zu merkwürdigen Fehlermeldungen der Form
      "warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08"
      und
      "warning: espcomm_sync failed"
      Leider fand ich das erst nach längerer Suche heraus, denn in 5.12.0 waren diese Parameter nicht gesetzt und wurden automatisch korrekt bestimmt.


Mit dieser Information konnte ich jedoch die aktuellste Version der Firmware in den Schalter laden und per Web-Interface konfigurieren so wie ich das erwarte. Auch in Home Assistant werden die Schalter korrekt erkannt und ich kann damit beginnen sie zum Schalten meiner Lampen zu verwenden.


Nachtrag 2:


Als ich am folgenden Tag weitere Schalter flashen wollte hagelte es plötzlich wieder Compilerfehler. Nachdem ich aber alles im Verzeichnis ".\\pioenvs\\sonoff-DE" gelöscht habe funktionierte es wieder. Keine Ahnung was da schief gelaufen war.