sphings-dev.de

Marstek Firmware Archiv: Vom Ordner zum geprüften Archiv

Am Anfang waren es Dateien, die von Hand ins Firmware-Archiv hochgeladen wurden, jeweils mit einer metadata.json. Heute liegen dort 50 Firmware-Dateien für sieben Gerätecodes, und das meiste davon passiert ohne Handarbeit. Stand ist der 29.09.2026.

Einreichen per Issue

Der Firmware-Checker reicht eine Firmware als Issue mit dem Label firmware-submission ein. Daraufhin startet ein Workflow, der die Datei lädt, nach firmwares/<Gerät>/<Typ>/<Version>/ ablegt, die chinesischen Release Notes ins Deutsche und Englische übersetzt (mit einem Cache für die Übersetzungen) und die metadata.json schreibt. Anschließend werden Changelogs – global, je Gerät und je Modul, jeweils auf Englisch und Deutsch – und die README neu erzeugt. Die Skripte sind reines Node.js ohne npm-Abhängigkeiten.

Prüfen, bevor archiviert wird

Nach dem Download vergleicht der Archiver die Datei mit den Werten aus der Marstek-API, die im Issue stehen: Größe und Prüfsumme, und zwar CRC-16/MODBUS über die gesamte Datei. Stimmt etwas nicht, wird das Issue nicht archiviert, sondern als Fehler markiert. Fehlen die API-Werte, etwa bei älteren Einreichungen, wird die Prüfung übersprungen. Das Ergebnis steht als apiCrc, apiSize und verified in den Metadaten.

Für Fälle, in denen die API der Datei durchgehend einen nicht passenden CRC meldet, gibt es --ignore-verify. So archivierte Einträge behalten verified: false. Beim Einbau der Prüfung fiel außerdem auf, dass die Micro-Inverter-Firmware im Einreichungswerkzeug als „MPPT“ geführt wurde, obwohl der passende Modul-Slot der API micro ist. Der Typ wird jetzt aus der Antwort der API abgeleitet, der Bestand wurde migriert und erneut gegen die API-Werte verifiziert.

Ein zweites Archiv als Quelle

Mit rweijnen/marstek-firmware-archive gibt es ein Archiv von Remko Weijnen. 16 Versionen, die dort lagen und hier fehlten, wurden einmalig übernommen (HME-3, Venus E Gen 1/2 und Saturn/B2500 komplett, bei HME-4 und Venus E 3.0 ergänzt) und in der README als „↗ ref“ markiert. Inzwischen läuft täglich um 04:37 UTC ein Abgleich, der Fehlendes übernimmt – nicht direkt auf main, sondern als Pull Request auf einen rollenden Branch upstream-sync, damit Fremdinhalte vor dem Merge gesichtet werden. Ohne Neues passiert nichts. Dateinamen folgen beim Import dem eigenen Schema <Version>_<Typ>_<Gerät>_<Original>, und Gerätenamen aus der Fremdquelle werden maskiert.

Was dazukam

  • Das WLAN-Modul FC41D als eigener Firmware-Typ (.rbl), dazu eine Basisversion von 2024 für die Venus D.
  • Selbstbeschreibende Dateinamen und korrekte Versionssortierung; das Venus-E-3.0-Präfix mit einem Tippfehler (VNSEE3-0_) wurde entfernt.
  • Anonymisierte Gerätenamen in den metadata.json.
  • README zuerst auf Englisch, die deutsche Fassung als README.de.md; Changelogs zweisprachig.
  • Beta-Versionen mit Punkt (149.2 statt 1492), überall gleich; mehrteilige Release Notes gestapelt in der Spalte „Changes“. Einige chinesische Release Notes wurden von Hand korrigiert.
  • Eine index.json, die alle flashbaren Images kompakt auflistet (Typ, Version, Datei, Größe, SHA-256, Datum, Notizen in Englisch und Deutsch) und für Werkzeuge gedacht ist.

Aktueller Stand

Aufgeführt sind: Venus E 3.0 mit 15 Versionen, Venus A und Venus D mit je 11, Venus E Gen 1/2 mit 5, die Smart Meter mit 4 und 3 sowie Saturn/B2500 mit einer. Zuletzt kamen Control v151 für Venus D und E 3.0 (29.09.), Micro v116 für die Venus E 3.0 (24.09.) und deren FC41D-Firmware (23.09.) hinzu. Das Archiv ist die Quelle für die Auswahl „Aus Archiv wählen“ in Marstek BLE Control und der BLE Bridge.

Tags

Zu den Projekten

Unterstützen

Diese Tools entstehen in meiner Freizeit und bleiben kostenlos, offen und cloud-frei. Wenn dir eins davon einen Nachmittag gespart hat, freue ich mich über einen Kaffee oder ein Stück Pizza.

Kaffee oder Pizza

Weitere Beiträge