[HBW] booter für HM Wired (OTA updates)

Begonnen von loetmeister, 01 August 2026, 14:29:39

Vorheriges Thema - Nächstes Thema

loetmeister

Hallo,

maxx3105 hat sich die Mühe gemacht einen boot loader für HM Wired (Homebrew) zu entwickeln. https://forum.fhem.de/index.php?msg=1367134
Ein großes Danke!  8)
Sein Repo, mit allen Details / Dokumentation: https://github.com/maxx3105/HBW-Booter


Ich habe ein paar Tests gemacht, und mir einen Fork auf github erstellt. Erst mal hat es auf anhieb funktioniert, da aber ein weiteres Gerät mit am Bus hing, tauchten ein paar Probleme auf.
So reagierte der booter auf auf alle broadcasts. Auch habe ich das initiale timeout reduziert, da ein device reset (message 0x21 0x21) ebefalls über ein Watchdog reset arbeitet. Eventuell könnte man das ändern... jetzt dauert ein restart ~4 Sekunden länger, was auch kein Problem ist.
Meine Änderungen. Kann ein pull request erstellen, falls das ok ist...
https://github.com/maxx3105/HBW-Booter/compare/main...loetmeister:HBW-Booter:main#diff-2a3c7d892139b12b843b5534701749e1369e69be4fe47408b86c737246b8d577R416
Ich teste noch was weiter, wie es sich mit FHEM und mehr Geräten am Bus verträgt...


Im flash_tool.py ist bei mir auch was krumm... hatte in Zeile 125 das 'print' einfach rausgenommen, dann lief es durch.  ::)
Flashe .\HBW-CC-WW-SPktS.ino.hex: 19354 Bytes, 0x0000..0x4B99
z z u  (Booter-Einstieg) ...
  -> Booter aktiv (StartupReason)
p  (Blockgroesse) ...
Traceback (most recent call last):
  File "C:\EigenerKram\elektronik\projekte\HBWired\booter\flash_tool.py", line 125, in <module>
    if d[1][:1] == b'p': print(f"  -> Booter meldet Blockgroesse {d[1][1]}")
                                                                  ~~~~^^^
IndexError: index out of range


PS: Änderungen an HBWired schaue ich mir noch an... den booter start habe ich über "resetSystem" gemacht. (der code ist ja schon vorhanden)
         switch(frameData[0]){
            case 'u':                                                              // Update (Bootloader starten)
               pendingActions.resetSystem = true;  // don't reset immediately, send ACK first
               // der HBW-Booter erkennt WDRF und bleibt im Update-Modus
               break;
         }

Gruß,
Thomas