Ausgangssituation:
Home Assistant verlangt seit neuestem (2024.1 Update glaube ich) eine aktuelle FW der Shellys.
Aber:
Mein Shelly RGBW2 machte Probleme mit einer seltsamen Firmware 1.87 oder so ähnlich. Keine Ahnung, woher oder wie diese jemals rauf kam.
Die integrierte Updatefunktion zeigte keine(!) Updates an.
OTA Befehle funktionierten nicht, wie man sie hier im Forum im Archiv-Generator erstellen kann.
Bsp: http://192.168.178.111/ota?url=http://archive.shelly-tools.de/version/v1.14.0/SHRGBW2.zip
Andere Anleitungen wie diese hier halfen auch nicht* und sind auch nicht ganz aktuell mehr (bezogen auf die Bilder zu den Versionen).
Weitere Suche zeigte das Python Skript "esptool.py", aber das verlangt eine Python Umgebung. Irgendwie ist das alles sehr umständlich.
Lädt man also per Hand die originale Shelly Firmware (FW) herunter, steht man vor dem Problem, 5 Dateien zu haben.
Was also wie machen?
(* Ich wollte keine einzelne Tasmota oder esp Datei flashen. Ich wollte die originale FW flashen, die insgesamt aus 4 bin Dateien besteht.)
Folgend versuche ich nun für den nicht IT-Profi eine einfache Anleitung zu schreiben. Die Anleitung ist somit etwas länger, dafür ausführlicher. Und wie ich finde auch recht einfach. Es gibt eine Stelle, die etwas komplexer ist, die erkläre ich weiter unten separat.
Das komplizierteste ist eigentlich die elektrische Verbindung zum Shelly. Aber diese ist bei allen Varianten identisch.
Der eigentliche Flashvorgang hat bei mir keine 4 Minuten gedauert.
Wichtig ist zu verstehen, dass ich keine Garantie oder Haftungen für irgendwelche Handlungen übernehmen kann. Jeder ist für sich selbst verantwortlich und muss im Zweifel einen Fachmann die Arbeit überlassen.
Wir hantieren hier nur mit 3,3 V. Alle Bauteile sind in heutigen Tagen sehr Fehlerresistent und -tolerant. Es kann dennoch nicht schaden, vor den Arbeiten einmal an die Heizung oder ähnliches zu fassen, um sich elektrostatisch zu entladen. Das könnte ansonsten den shelly, den USB-Adapter oder sogar Euren PC zerschießen.
Bitte stellt sicher, dass während allen Arbeiten KEINE zusätzliche Spannungsversorgung an den Shelly angelegt wird.
[START Anleitung] Direktes Flashen der 4 FW Dateien mit esptool.exe
In der Tat erscheint mir der folgende Werdegang im Moment am einfachsten, da keine kryptischen und komplizierten Befehle vorhanden sind und alles logisch abgeleitet werden kann. Es muss keine Auswahl aus vielen Downloadmöglichkeiten getroffen werden, wie z. B. bei espeasy. Es ging mir um das Flashen der originalen Shelly-Firmware, einfach mit einem Tool ohne noch was weiteres installieren zu müssen.
Voraussetzungen /Vorarbeiten
1. Download Shelly Original Firmware (FW):
Mit dem Archivgeneratorerhält man auch den Link zur gewünschten FW, hinten dran steht das File zum Herunterladen:
Der hintere Teil ist die Adresse zur Firmware: http://archive.shelly-tools.de/version/v1.14.0/SHRGBW2.zip
Ich nehme in diesem Fall immer die letzte normale Shelly FW-Version. Hier also die 1.14.0.
Diese Adresse einfach im Browser eingeben und die Datei wird herunter geladen.
Per Doppelklick öffne ich die ZIP-Datei. Die enthaltenen 5 Dateien kopiert man z. B. in einen neuen leeren Ordner auf dem Desktop.
2. Download esptool.exe
Um zu vermeiden eine Pythonumgebung sich installieren zu müssen, was wieder für viele in etlichen Fragen endet (welche Version, was , wie, wo,...) gibt es glücklicherweise eine offizielle Stelle zum Download der esptools EXE für Windows:
https://github.com/espressif/esptool/releases
Hier langsam runterscrollen und die oberste Version sich ansehen, in diesem Bsp. ist es die 4.7.0:
Hier nehmen wir die WIN64 version und laden diese herunter. Natürlich wird irgendwann die Versionsnummer eine höhere sein - dann diese einfach nutzen.
ZIP-File doppelklicken. Wir kopieren NUR die esptool.exe in den gleichen Ordner, in dem wir die Firmware abgelegt haben:
In meinem Beispiel war es der Ordner ESP auf dem Desktop:
pasted-from-clipboard.png
Jetzt haben wir alle Dateien. Weiter geht es mit zusätzlichen Vorbereitungen.
3. Einen USB2TTL Konverter
Ohne kann es nicht funktionieren. Dieser ist preiswert und kann immer mal in diesem Hobby benötigt werden.
Z. B den hier: DSD TECH USB zu TTL Seriell Adapter Konverter mit FTDI FT232 (kein Affiliate-Link)
Es gibt auch welche für 6 oder 8 €, der genannte ist aber schön stabil und funktioniert auf jeden Fall.
3.1 Für ein einfacheres Arbeiten empfehle ich ein gutes USB3 Verlängerungskabel:
Z. B.: 2 Stück 2M USB Verlängerung Kabel AINOPE USB 3.0 Verlängerungskabel A Stecker auf A Buchse (kein Affiliate-Link)
4. Krokodilklemmen, wenn man den folgend beschriebenen Weg gehen möchte
Ich sagte ja, dass das Anschließen das komplizierteste ist...
10 Stück Krokodilklemmen mit Kabel (kein Affiliate-Link)
5. Etwas schmalen Draht ( ~0.8 mm )
Den habe ich nicht aufgeführt. Irgendwas kleines, was in die kleine Steckbuchse im Shelly passt. Blumendraht, ein Stück von einem Widerstand,...
-- Vorbereitungsende --
Wie geschrieben - das muss bei allen Varianten erfolgen. Wie man nun den Shelly an den PC bekommt, kann jeder selber entscheiden. Meine Skizzierung ist nur ein Vorschlag.
Anschluss des USB zu TTL Adapters:
1. Zu aller erst achten wir darauf, den kleinen Adapter auf 3,3 V einzustellen! Das ist sehr wichtig! Keine weiteren Spannungen an den Shelly anlegen. Achtet darauf KEINE 5 Volt zu verwenden!
Die Spannungsversorgung kommt via PC über den kleinen USB-Adapter auf euren Shelly.
pasted-from-clipboard.png
2. Der Adapter benötigt auch einen Jumper von RTS zu CTS. Diese kleinen Jumper liegen dem Adapter dabei (war bei mir zumindest so).
3. Nun verbinden wir den Shelly mit dem Adapter:
Shelly USB-Adapter
GPIO0 <-> Gnd/Masse/Minus
GND <-> Gnd/Masse/Minus
RXD <-> TXD (!)
TXD <-> RXD (!)
3.3V <-> VCC
Zur Erinnerung: Durch den Jumper auf 3.3V wird bei VCC nur 3.3 V ausgegeben. Nochmal: das ist wichtig!!!
Der Anschluss der Kabel ist kniffelig, da die kleine Steckerbuchse sehr winzig ist. Normale Jumper-Stecker passen da nicht rein, wie sie es überall zu kaufen gibt.
Ich habe mich für eine Draht und Krokodilklemmen-Verbindung entschieden. Nicht schön, aber einfach und schnell.
Hinweis: Man kann die Krokodilüberzieher recht weit nach oben schieben und somit einen Kurzschluss zum Nachbarpin vermeiden.
Die Krokoklemmen sind am Jumperkabel angeschlossen, dazu die Kunststoffkappe abziehen (die kleine Kunststoffnase mit einem kleinen Schraubendreher hochbiegen und dann abziehen - kann danach wieder aufgesteckt werden).
GPIO0 und GND sind an der schwarzen Klemme gemeinsam verbunden.
Flashvorgang und Befehle
Ihr habt die 6 Dateien nach der Vorbereitung in einem Ordner, z. B. auf dem Desktop unter ESP.
1. Öffnet eine CMD (Eingabeaufforderung)
WIN+R drücken, dann cmd eingeben und Enter
2. Wechselt in den Ordner (Befehl cd ), indem ihr alles abgelegt habt.
Wenn euer Loginname z. B. "Tom" ist, dann ist der Pfadwechsel wie im folgenden Bsp. durchzuführen:
cd c:\users\tom\desktop\esp
(hier mit der Annahme, das der Ordner auf dem Desktop mit dem Namen esp liegt)
Da wir nun im Ordner sind, können wir die Firmwaredateien und das esptool.exe direkt ohne Pfadangaben aufrufen.
3. Wir müssen den COM-port des USB zu TTL Adapter herausfinden.
Dazu gehen wir in den Gerätemanager:
WIN+R und dann devmgmt.msc und Enter
Es öffnet sich ein Fenster, wir gehen zu den Anschlüssen ganz oben links.
Um ganz sicher zu sein, welchen Port der Adapter hat, ziehen wir den USB Adapter zuerst einmal am besten ab, falls er bereits am PC eingesteckt ist, und klappen den "Anschlüsse (COM & LPT)" Bereich auf.
In meinem Fall ist ein anderes USB-Gerät bereits eingesteckt - das ist NICHT der USB zu TTL Adapter!
pasted-from-clipboard.png
Nun den Adapter einstecken - spätestens jetzt versteht man, warum ein USB-Verlängerungskabel sehr hilfreich ist
Der Adapter wird jetzt angezeigt:
In meinem Fall ist es COM8. Bei euch ist es vermutlich eine andere Zahl. Dieses merken!
Nun sind 4 Dateien auf den Shelly RGBW2 zu flashen.
WICHTIG: Die nächsten Befehle passen wahrscheinlich nur auf den RGBW2 mit der FW Version 1.14.0!!
Im Speziellen geht es um die Zahlen, wie z.B "0x0000 oder 0x8000", die unterschiedlich sein können.
Ich erkläre im Anschluss, wie ich zu diesen Zahlen gekommen bin, um nicht diese Schritte zu sehr auseinander zu reißen.
Flashbefehle
Datei 1 "rboot.bin"
esptool.exe --port COM8 write_flash 0x0000 rboot.bin
(bitte passt euren COM Port an)
Ausgabe:
esptool.py v4.7.0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Flash params set to 0xff30
Compressed 2320 bytes to 1693...
Wrote 2320 bytes (1693 compressed) at 0x00000000 in 0.2 seconds (effective 116.7 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Alles anzeigen
Der Shelly muss rebootet werden. Einfach den USB Stecker aus- und wieder einstecken.
Datei 2 "rgbw2.bin"
esptool.exe --port COM8 write_flash 0x8000 rgbw2.bin
(bitte passt euren COM Port an)
Ausgabe:
esptool.py v4.7.0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Compressed 592256 bytes to 408077...
Wrote 592256 bytes (408077 compressed) at 0x00008000 in 35.9 seconds (effective 131.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Alles anzeigen
Der Shelly muss wieder rebootet werden. Einfach den USB Stecker aus- und wieder einstecken.
Datei 3: "fs.bin"
esptool.exe --port COM8 write_flash 0xBB000 fs.bin
(bitte passt euren COM Port an)
esptool.py v4.7.0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Compressed 262144 bytes to 71528...
Wrote 262144 bytes (71528 compressed) at 0x000bb000 in 6.3 seconds (effective 331.3 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Alles anzeigen
Der Shelly muss rebootet werden. Einfach den USB Stecker aus- und wieder einstecken.
Datei 4: "esp_init_data_default_v08.bin"
esptool.exe --port COM8 write_flash 0x1FC000 esp_init_data_default_v08.bin
(bitte passt euren COM Port an)
Ausgabe:
esptool.py v4.7.0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Compressed 128 bytes to 75...
Wrote 128 bytes (75 compressed) at 0x001fc000 in 0.0 seconds (effective 64.0 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
```
Alles anzeigen
Wieder ist ein Reboot notwendig.
Damit ist der Shelly fertig geflashed. Ihr könnt alle Kabel abziehen und normal Anschließen.
Der Shelly ist wie im Auslieferungszustand. Alle Daten sind zurückgesetzt!
Wie entstehen diese Zahlen wie "0x1FC000" im Flashbefehl?
Diese Hexzahlen, so nennt man diese, stehen in der manifest.json Datei, die sich auch bei euch im Ordner befindet.
Hier ist es aber noch eine Dezimalzahl.
Schauen wir uns den Bereich, einen Auszug, in der JSON z. B. für die letzte FW-Datei an:
"sys_params": {
"addr": 2080768,
"cs_sha1": "ff105e66b313201f5b40a2e02b7f00db24022088",
"cs_sha256": "b2218087cf938ce665b26ac049f7d146677c70fe2909205a4d0e6a58aef0e4b3",
"size": 128,
"src": "esp_init_data_default_v08.bin",
"type": "sys_params3"
}
Die "src" zeigt den Dateinamen. die "addr" die Startadresse in Dezimal für den Flashbefehl
Zum "Umwandeln" nutze ich den Windows-Taschenrechner : WIN einmal drücken, dann rechner eingeben und Enter.
Im Taschenrechner schaltet ihr mit dem Hamburger-Menu, die 3 Striche, auf den Programmierer-Modus um.
pasted-from-clipboard.png
Achtet darauf, dass Dezimal angewählt ist (siehe Pfeil folgendes Bild) und gebt die Zahl aus der "addr" ein. In diesem Beispiel: 2080768.
Nun ist der Hexwert 1FC000 einfach abzulesen, es muss nichts "berechnet" werden.
pasted-from-clipboard.png
Im eigentlichen Befehl schreibt man noch zur Kenntlichmachung, das es eine Hexzahl ist, ein "0x" davor.
Aus 1FC000 wird also "0x1FC000".
Leider kann der esptool.exe Befehl nicht mit Dezimalzahlen umgehen, zumindest hat es bei mir nicht funktioniert.
Das habe ich nun für alle 4 Dateien gemacht, so sind diese Startadressen entstanden.
Das war es.