openHAB: Wie du erfolgreich von 3.4.1 auf 4.1.2 aktualisierst

Im Mai 2024 habe ich mein SmartHome-System openHAB auf die aktuelle Version 4.1.2 aktualisiert. Damit habe ich ein Major Release übersprungen. Die Neuerungen von openHAB 4.0 habe ich  bereits hier beschrieben. Die Neuerungen sind in diesem diesem Blogbeitrag dokumentiert. 

Installationsvoraussetzungen prüfen

In den letzten Versionen sind mehr Infrastrukturänderungen auf Java- und Betriebssystembasis enthalten. Es sind also mehr Vorarbeiten und Prüfungen notwendig!

Im ersten Fall muss das zugehörige Pi-OS wie folgt kontrolliert werden:

cat /etc/os-release

In meinem Fall ist Raspbian GNU/Linux 10 (buster) nicht mehr direkt unterstützt und es müssen manuelle Schritte durchgeführt werden.

Die Prüfung der Java-Version kann wie folgt durchgeführt werden:

java -version

Auf meine openjdk version “11.0.16” 2022-07-19 muss manuell auf Version 17 aktualisiert werden.

Mit diesem Befehl prüft man die Architektur des Gesamtsystems:

uname -m

Für meine Architektur armv7l – 32 Bit gibt es auch keine aktuellen Updates mehr. Auch hier muss ich manuelle Tätigkeiten einplanen.

Da ich bei Buster bleiben möchte, eine alte OpenJDK-Version und eine 32-Bit-Architektur habe, war der Standard-Update-Pfad für mich nicht geeignet. In diesem Video wird ein ähnliches Szenario wie bei mir beschrieben:

Aufgaben vor dem Update

Ich hatte noch individuelle Anpassungen und Bindings. Diese müssen zuerst überprüft werden, z.B. wurde mein Fix für das HTTP-Binding von SmartHome/J bereits in den Release-Zweig aufgenommen.

Es ist auch möglich, die Formate für das UoM vor dem Update zu überprüfen und alle Integer-Items entsprechend anzupassen. Hier sind die Breaking Changes dazu.

Außerdem wird empfohlen, vor dem Update die SmartHome/J-Addons zu deinstallieren und nach dem erfolgreichen Update von openHAB wieder zu installieren.

Nun kann das System mit folgendem Befehl heruntergefahren werden:

sudo systemctl stop openhab.service

Java 17 Installation mit Buster

Java 17 benötigt mindestens Debian 11 (Bullseye). Daher ist eine einfache Installation mit “apt-get” nicht möglich. Außerdem muss ich auf meinem System eine 32-Bit-Version von Java verwenden.

Ein entsprechendes OpenJDK kann wie folgt bezogen werden:

https://www.azul.com/downloads/#downloads-table-zulu
Java Version: Java 17 (LTS)
Architecture: ARM 32-bit HF
https://cdn.azul.com/zulu-embedded/bin/zulu17.48.15-ca-hl-jdk17.0.10-linux_aarch32hf.tar.gz

Bestehende Java-Versionen werden entfernt:

sudo apt remove openjdk-11-jre-headless
sudo apt remove java*

Die Installation von Azul Java 17 kann wie folgt durchgeführt werden:

sudo mkdir /opt/java
cd /opt/java
sudo wget https://cdn.azul.com/zulu-embedded/bin/zulu17.48.15-ca-hl-jdk17.0.10-linux_aarch32hf.tar.gz
sudo tar -xzvf zulu17.48.15-ca-hl-jdk17.0.10-linux_aarch32hf.tar.gz
sudo update-alternatives --install /usr/bin/java java /opt/java/zulu17.48.15-ca-hl-jdk17.0.10-linux_aarch32hf/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /opt/java/zulu17.48.15-ca-hl-jdk17.0.10-linux_aarch32hf/bin/javac 1
sudo update-alternatives --config java

Das Ergebnis kann wie folgt überprüft werden:

sudo java -version
openjdk version "17.0.10" 2024-01-16 LTS
OpenJDK Runtime Environment Zulu17.48+15-CA (build 17.0.10+7-LTS)
OpenJDK Server VM Zulu17.48+15-CA (build 17.0.10+7-LTS, mixed mode)

Update 3.4.1 auf 4.0 / 4.1

Ich habe nun mein System ohne größere Probleme von 3.4.1 auf 4.1.2 wie folgt umgestellt. Im ersten Schritt habe ich ein Backup mit der integrierten Backup-Funktion erstellt:

sudo $OPENHAB_RUNTIME/bin/backup
/var/lib/openhab/backups/

Danach habe ich die Dateien manuell gesichert und ein komplettes Backup als Image erstellt.

Nun habe ich dann das eigentliche Update durchgeführt (vor dem Update musste ich noch das aktuelle Repository – dies wird hier beschrieben):

sudo apt-get update sudo apt-get upgrade

Anschließend wurde der Cache geleert und das System neu gestartet:

sudo systemctl stop openhab.service
sudo openhab-cli clean-cache
sudo shutdown -r now

Der Updatevorgang hat direkt auf die Version 4.1.2 aktualisiert und die Version 4.0 übersprungen. Die Version kann im Webinterface überprüft werden: ÜBER – HILFE. Nun können auch die zuvor deinstallierten SmartHomeJ-Addons wieder installiert werden.

Breaking Changes kontrollieren

Während der Installation werden die “Breaking Changes” des Updates visuell dargestellt. In meinem Fall musste ich die Release Notes von openHAB 4.0 und 4.1 entsprechend durcharbeiten und das System manuell überprüfen.

Folgende Anpassungen waren nach der Aktualisierung erforderlich:

Weitere Anpassungen in meinen Bindings waren nicht notwendig (Details sind aber immer in den entsprechenden Release Notes beschrieben).

Testen, Testen, Testen!

Nach jedem openHAB-Update führe ich in unserem SmartHome umfangreiche manuelle Tests durch. Zuerst kontrolliere ich das Log auf ERROR und WARN Meldungen. Danach werden alle Anwendungsfälle des Systems manuell getestet und gegebenenfalls Anpassungen vorgenommen.

Fazit

Das Update auf die aktuelle Version war diesmal in meiner Systemumgebung etwas aufwändiger. Der etwas ältere Raspberry Pi (32 Bit), damit die ältere Betriebssystemversion und die nicht mehr direkt verfügbare Java-Version haben etwas Aufwand verursacht. Ein Hardwarewechsel auf eine 64-Bit-Plattform und damit auf ein neues Pi-OS steht bei mir nun an.

Jetzt können die neuen Funktionen getestet und eingebaut werden. Für mich ist das ChatGPT-Binding und das PPT SMGW Binding interessant. Hierzu werde ich aber noch eigene Artikel schreiben.

Wie sind eure Updates auf openHAB 4.1 gelaufen? Gibt es Anpassungen, auf die ihr gewartet habt? Welche Optimierungen nehmt ihr in eurem SmartHome mit neuen Versionen vor?

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.