[Anleitung] Einfaches Flashen der Orig-FW, z. B. des RGBW2, wenn OTA und anderes nicht mehr geht (Windows)

  • 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 Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    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:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    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:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    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.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    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:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    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.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    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!

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Nun den Adapter einstecken - spätestens jetzt versteht man, warum ein USB-Verlängerungskabel sehr hilfreich ist :)

    Der Adapter wird jetzt angezeigt:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    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:

    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:

    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)


    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:

    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:

    Code
    "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.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.


    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.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.



    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.

    2 Mal editiert, zuletzt von michsa (21. Januar 2024 um 12:15)

  • michsa 21. Januar 2024 um 12:11

    Hat den Titel des Themas von „[Anleitung] Einfachstes Flashen der Orig-FW, z. B. des RGBW2, wenn OTA und anderes nicht mehr geht (Windows)“ zu „[Anleitung] Einfaches Flashen der Orig-FW, z. B. des RGBW2, wenn OTA und anderes nicht mehr geht (Windows)“ geändert.
  • Hallo!

    Danke für deine Anleitung. Sie hat mir einen guten Ausgangspunkt gegeben.

    Leider hat es bei mir aufgrund von Problemen beim flashen der fs.bin nicht funktioniert. Ich habe jedoch eine für meine rgbw2 funktionierende Variante gefunden:

    Code
    esptool.py -p /dev/ttyUSB0 --baud 576000 write_flash -fm dio --flash_size 2MB --flash_freq 40m 0x8000 rgbw2.bin 0x1FC000 esp_init_data_default_v08.bin 0x0 rboot.bin
    # powercycle
    esptool.py -p /dev/ttyUSB0 --baud 115200 --no-stub write_flash -fm dio --flash_size 2MB --no-compress --flash_freq 40m 0xBB000 fs.bin
    # powercycle (maybe even 2 times)

    Warum auch immer, ist es erforderlich, die fs.bin zuletzt zu flashen und vor allem im --no-stub modus.

    Wenn man sich daran hält, dann erwacht der shelly wieder im Werkszustand.

    Getestet mit 3 Shellys RGBW2 (vorher tasmota oder selbst per Arduino IDE programmiert). Ich habe die Firmware-Version 20230913-113156/v1.14.0-gcb84623 zum Flashen verwendet.

    4 Mal editiert, zuletzt von johnny1 (16. März 2024 um 21:51) aus folgendem Grund: War fehlerhaft, nun funktioniert es.

  • Gibt es eine Ergänzung dieser Anleitung für Shellies der Generation 2 und 3? Hier gibt es ja eine ‚manifest.json‘, in der die Komponenten der Firmware aufgelistet sind. Leider gelingt damit die Bestimmung der Startadressen der einzelnen Blöcke nicht mehr so einfach, wie bei Generation 1.

    Hier ein Beispiel der 'manifest.json':

    {
    "name": "Plus2PM",
    "platform": "esp32",
    "version": "1.3.0-beta1-dev89654",
    "build_id": "20240329-092128/g4b99053",
    "build_timestamp": "2024-03-29T09:21:28Z",
    "parts": {
     "boot": {
      "type": "boot",
      "src": "bootloader.bin",
      "addr": 4096,
      "size": 27440,
      "cs_sha1": "ffa9236c6587881ec9bb656e5b9ac59f56997e15",
      "cs_sha256": "7d33cf45705a0d86d6eb1256f1a611e5ff9868b3eca3564fffd18e8228fa0232",
      "encrypt": true,
      "min_version": "1.0.0"
     },
     "pt": {
      "type": "pt",
      "src": "partition-table.bin",
      "addr": 32768,
      "size": 4096,
      "cs_sha1": "a8ee7fd30729b2d50a3f062070e17dc3f414145b",
      "cs_sha256": "bc91205f649b82825c365d9f3646a8e5c308d5d0755e48a31e56ef6c8899784b",
      "encrypt": true
     },
     "otadata": {
      "type": "otadata",
      "src": "otadata.bin",
      "size": 8192,
      "cs_sha1": "471af83fac6e5bd49355879b3acbed10bab6f423",
      "cs_sha256": "dd76e54da59f6824fb93d2b92b36d10932b06801d167b25c08ebc27e78391b6c",
      "encrypt": true,
      "ptn": "otadata"
     },
     "nvs": {
      "type": "nvs",
      "size": 16384,
      "fill": 255,
      "ptn": "nvs"
     },
     "app": {
      "type": "app",
      "src": "Plus2PM.bin",
      "size": 1567632,
      "cs_sha1": "ae8bbc4a53a40054ff04fd4c256153bc2e3d6df9",
      "cs_sha256": "fc93805aa761d669b3405993d9b0e6ddf5f1a23c6c453a5d551223f740289308",
      "encrypt": true,
      "ptn": "app_0"
     },
     "fs": {
      "type": "fs",
      "src": "fs.img",
      "size": 458752,
      "cs_sha1": "d192676072bf3c1621789db8321b66efd7065f3d",
      "cs_sha256": "da338e0fda58bf747ea11dad6a27c5130efa34ce94b401d88ecb914b525dfa6e",
      "encrypt": true,
      "ptn": "fs_0",
      "fs_size": 458752
     }
    }
    }

    „Habt Geduld. Alle Dinge sind schwierig, bevor sie einfach werden!“ (aus Frankreich)

    „Nothing in life is to be feared, it is only to be understood.“ (Marie Curie, 1867-1934)

    „Comment is free, but facts are sacred“ (C.P. Scott, britischer Verleger)

  • Leider gelingt damit die Bestimmung der Startadressen der einzelnen Blöcke nicht mehr so einfach, wie bei Generation 1.

    Das ist kein Wunder, denn die gen2 und 3 haben ja jetzt nen ESP32 oder Derivat drin.

    Die haben eine ganz andere Flashaufteilung.

    z.B. benutzen sie eine Partitionstabelle in der dann steht, was wo hin geschrieben werden muss.

    Vermutlich muss man also in

    "src": "partition-table.bin",

    reinschaun.

  • Dieses Thema enthält einen weiteren Beitrag, der nur für registrierte Benutzer sichtbar ist.