[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.
Zitat von: maxx3105 am 28 Juli 2026, 13:15:15So ich habe die https://github.com/maxx3105/HBWired und die https://github.com/maxx3105/HBW-Booter nun auf den aktuellen Stand gebracht. Damit müssten die Änderungen nun leicht ersichtlich sein, die ich für den (Open)CCU betrieb gemacht habe.
Ein großes Danke dafür!  8)


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

loetmeister

Hallo,

habe das flash_tool.py Skript um einen optionalen Adressparameter erweitert, um beliebige Geräte am Bus zu adressieren. Auch die Aufhebung des sleep Modus nach Erfolg und Abbruch ergänzt, sonst würde alles eingefroren bleiben.
In meinem Test setup sieht es soweit gut aus, am "echten" bus mit vielen anderen Geräten steht der Test noch aus. :)
flash_tool.py COM9 C:\projekte\HBWired\HBW-xyz\build\arduino.avr.nano\HBW-xyz.ino.hex 0x42001234
Benutze Geraeteadresse: 0x42001234
...

Einfacher als das flash_tool.py wäre es wenn man in FHEM, am HM485_LAN device eine Upload Option hätte. So wie man dort den discovery modus starten kann. (set hm485 discovery start)
HM485 device (mit HM485d für USB Dongle)
TYPE       HM485_LAN
InterfaceType HMW-SOFT-GW


Änderung in der HBWired lib habe ich erst mal in meinem dev branch gemacht.
enabled 'u' (update) command to test booter
https://github.com/loetmeister/HBWired/commit/d95d7ceff4b7202f32ef78f4119ba24470d1e9d6
Der Weg über den watchdog ist einerseits schön, da man relativ Plattform- / MCU unabhängig ist - andererseits ist das "update" Kommando nicht das einzige was den watchdog reset auslöst / auslösen könnte.
@maxx3105, was sprach gegen de Sprung zur BOOTSTART Adresse?

Gruß