Homematic Wired - Homebrew
Home > Elektronik > Homematic > HBW-Booter  
 

HBW-Booter - Firmware-Update für eigene HM Wired-Geräte über den Bus

Bootloader für ATmega328P/328PB, ATmega32A, ATmega644P/644PA und ATmega1284P, mit dem sich HomeMatic-Wired-Eigenbau-Geräte (HBWired) über den RS485-Bus flashen lassen — ohne ISP. Der Booter wird einmalig per ISP eingespielt; danach läuft jedes weitere Firmware-Update über die Leitung. Alle Details: maxx3105:HBW-Booter.

Die Angepasste Version im HBW repository hat zudem:

 

topFHEM Einbindung

Um direkt aus FEHM heraus ein Firmwa Update zu starten gibt es HM485_fwUpdate.pm aus HM485_fwUpdate. Dieses Perl Modul muss in die bestehende Installation von HM485 eingebunden werden. Dazu müssen die folgenden Ergänzungen in FHEM/10_HM485.pm vorgenommen werden:

34a35
> use lib::HM485::HM485_fwUpdate;
448a450,458
> # HM485_fwUpdate
> foreach my $d (values %{$modules{HM485}{defptr}}) {
> next unless $d->{fwu} && $d->{IODev} && $d->{IODev} == $ioHash;
> HM485::Util::Log3($ioHash, 5, 'HM485_fwUpdate RX: msgCmd='.$msgCmd.' msgData='.$msgData);
> HM485_fwu_OnResp($d, $msgData, $msgCmd, $msgId); # $msgCmd NEU: fuer die NACK-Erkennung, $msgId = Antwort-Zuordnung
> return $ioHash->{NAME};
> }
> # HM485_fwUpdate
>
575a586,588
> # HM485_fwUpdate
> 'fwUpdate' => 'textField',
> # HM485_fwUpdate
621a635,638
> # HM485_fwUpdate
> } elsif ($cmd eq 'fwUpdate') {
> return HM485_fwu_Start($hash, $value);
> # HM485_fwUpdate

Um diese Änderungen nicht beim nächsten FHEM udate zu verlieren, kann die Datei 10_HM485.pm vom Update ausgeschlossen werden. Dazu dem Device global das folgende Attribut geben, bzw. ergänzen:

exclude_from_update 10_HM485.pm

 

top HBW Firmware-Update über den Bus

Das zuvor beschriebene FHEM update ergänzt die Device set list um "fwUpdate": set <device> config fwUpdate getConfig raw reset. Im FEHM Web kann somit einfach "fwUpdate" ausgewählt werden, der lokale Pfad zur HEX Datei angegeben (z.B. /home/pi/hbwfirmware/firmware_dev.hex) und das Update mit "set" gestartet werden. Der Verlauf und Ergebnis des Updates lässt sich dann im Reading fwUpdateState ablesen.

Daneben gibt es auch noch die Möglichkeit ein Python Script flash_tool.py zu nutzen. Dies nutzt die lokale serielle Schnittstelle (bzw. USB->Seriell Wandler) an dem der HM Bus angeschlossen ist.
Der Aufruf des Scripts, mit einer bestimmten Device Adresse lautet:

"C:\Program Files\Python314\python.exe" flash_tool.py COM9 HBW-CC-WW-SPktS.ino.UART.hex 0x42000077

Wenn keine Device Adresse im Aufruf angegeben wird, wird die Standardadresse 0x42FFFFFF genommen. Diese Adresse wird verwendet wenn noch keine eigene Adresse im EEPROM gespeichert wurde. Es sollte also immer nur ein neues Gerät verbunden sein, bis eine eindeutige Adresse vergeben wurde.

In jedem Fall ist beim Firmware Update zu beachten: Die hex Datei muss zum Gerät passen. Typ, MCU, o.ä. wird nicht validiert!

Weitere Details: github.com/maxx3105/HBW-Booter: Ab jetzt: über den Bus flashen — kein ISP mehr

 

top Code

     
Quellcode auf GitHub. Angepasste Version für die hier beschriebenen Geräte.