Das Firmwareupdate erzeugt kein Werksreset!
FHEM hat eine fwUpdate Funktion eingebaut, wie man die verwendet will ich hier kurz schildern. Bei meiner Installation waren über die Jahre doch ca. 8 Geräte auf altem Stand.
Versionsprüfung
Zunächst mal muss man wissen, dass es neue Firmware gibt. Im Wiki ist dafür die Einrichtung eines HTTPMOD Devices beschrieben. So sieht dann das Ergebnis aus:Wie man sieht, wird damit täglich nach neuer Firmware geschaut und die angelernten Geräte überprüft.
Da hier ziemlich selten Updates erfolgen habe ich das Zeit Interval auf 518400 (6 Tage) hochgesetzt und über das Attribute alignTime einen Zeitpunkt in der Nacht gesetzt. Damit wird der Server bei eq3 nicht so sehr oft abgefragt.
Über reread kann der Vorgang manuell gestartet werden, Die Gerätenamen sind direkt klickbar um die Geräte dann zu bearbeiten. Zuvor kann man die roten Versionsnummern klicken und die neue Firmware herunterladen. Für das Update müssen die Dateien auf dem FHEM Server lokal vorliegen.
Vorbereitung der Firmware Dateien
Die Firmwaredateien werden gepackt geliefert, sicher gibt es viele Wege, ich gehe so vor:Mit WinScp werden die Dateien nach /home/pi übertragen.
Mit Putty verbinden und im Terminal eingeben:
tar -xvzf /home/pi/<Dateiname>.tar.gz
sudo cp *.eq3 /opt/fhem/FHEM/firmware/
Man kann natürlich auch direkt ins firmware Verzeichnis entpacken:
sudo tar -xvzf /home/pi/<Dateiname>.tar.gz -C /opt/fhem/FHEM/firmware/
Der user fhem muss nur lesen können, dies sollte mit den vorhandenen Berechtigungen funktionieren.
Vorbereitung in FHEM
Sollte man mehrere IOs haben sind weitere Vorbereitungen notwendig. Hat man nur ein FHEM mit einem IO der fwUpdate beherrscht, kann man direkt loslegen.Ich habe zusätzlich zu meinem produktiven System mit einem HMLAN und einem RPI Modul noch ein Test System mit einem RPI Modul.
Um zu vermeiden, dass das Testsystem stört habe ich den IO mit set <> close geschlossen und mit dem attr <> dummy 1 komplett aus dem Rennen genommen.
Der HMLAN kann kein fwUpdate, ich bin mir nicht sicher ob das alle wissen. Deshalb müssen wir dafür sorgen, dass nur ein IO das Update durchführt.
Ich habe eine VCCU im Einsatz, deswegen habe ich bei den Geräten wo ich ein Update durchführen will einfach den preferred IO gesetzt:
attr <> IOGrp VCCU:HMUART1
Update durchführen
Unbedingt die RSSI Werte kontrollieren, die sollten wenigsten so bei Mitte 60 liegen. Bei schlechteren Werten muss der IO temporär näher an das Gerät gebracht werden.In der Weboberfläche können wir jetzt das Update starten, den Dateinamen kann man zur Sicherheit mit kompletten Pfad angeben. Dazu einfach in WinScp mit der rechten Maustaste auf die Datei und dann Dateiname/Kopieren mit Pfad den kompletten Namen kopieren und in der Box einfügen:
set <> fwUpdate </Pfad/Dateiname>
Die LED (falls sichtbar) am Gerät sollte jetzt wild anfangen mit blinken, der Vorgang dauert etwas.
Als Quittung wird ein Reading fwUpdate done erzeugt.
Allerdings steht in den Readings und dem Attribute nach wie vor die alte Firmware. Den neuen Eintrag (und damit die Erfolgsquittung) erhält man nur mit einer Anlernmessage:
set HMUART1 hmPairSerial <Serial des gerade aktualisierten Gerätes>
set <> getConfig
Alternativ, oder falls das nicht funktioniert, kann man die Configtaste drücken.Zum Abschluss wird mit hmInfo configCheck alles nochmal kontrolliert.
Vor dem nächsten Update in kurzer Folge schauen ob der IO sich im overload befindet.
Fehler
Es sind unterschiedliche Fehler möglich:In den Readings wird eine Fehlernachricht angezeigt, Update ist nicht gestartet. Da stimmt wahrscheinlich irgendeine Grundlage nicht.
Das Gerät landet im Bootloader / Bootloop
Da hat was mit der Firmware nicht gestimmt oder der Vorgang wurde vor dem Ziel abgebrochen. Nicht ganz so schlimm, allerdings braucht man jetzt mit Sicherheit ein paar Versuche. fwUpdate versetzt das Gerät als erstes in den Bootloader, kontrolliert und startet dann den Datentransfer. Man muss es schaffen, dass das Gerät sich mit dem Bootloader meldet wenn fwUpdate es erwartet. Andernfalls bricht er mit einem Fehler ab.
Ich hatte Erfolg mit dieser Reihenfolge:
Gerät ausschalten.
fwUpdate starten und danach sofort das Gerät mit Strom versorgen/Bootloader starten.
Bei overload vom IO einfach warten bis der overload vorbei ist.