SmartHomeNG als Dienst update


Einrechten des Dienstes

Um SmartHomeNG auf einer älteren Version als Debian 12 (bookworm) als Dienst zu betreiben muss eine Startup-Datei für systemd erstellt werden. Für Debiam 12 oder neuer, bitte der Beschreibung im folgenden Abschnitt (Nutzung eines virtuellen Environments) folgen.

Warnung

Bevor man als Neuling SmartHomeNG als Dienst einrichtet, sollte man das System verstanden haben und es sollte fehlerfrei laufen.

Zum Einrichten den Texteditor starten mit

sudo nano /etc/systemd/system/smarthome.service

und folgenden Text hineinkopieren:

[Unit]
Description=SmartHomeNG daemon
After=network.target
After=knxd.service
After=knxd.socket

[Service]
Type=forking
ExecStart=/usr/bin/python3 /usr/local/smarthome/bin/smarthome.py
WorkingDirectory=/usr/local/smarthome
User=smarthome
PIDFile=/usr/local/smarthome/var/run/smarthome.pid
Restart=on-failure
TimeoutStartSec=900
RestartForceExitStatus=5

[Install]
WantedBy=default.target

Achtung

Die Angabe RestartForceExitStatus=5 ist notwendig, damit der automatische Restart bei der Nachinstallation von Python Packages und der durch die AdminGUI ausgelöste Neustart auch für ein als Service laufendes SmartHomeNG funktionieren.


Nutzung eines virtuellen Environments neu

Bei der Installation von SmartHomeNG v1.10 (oder neuer) wird vom postinstall-Skript ein virtuelles Python Environment angelegt. Wenn dieses virtuelle Environment im Zusammenhang mit dem Dienst genutzt werden soll, muss der Python Interpreter aus diesem virtuellen Environment genutzt werden um SmartHomeNG zu betreiben. Dazu muss der folgende Text in die Datei /etc/systemd/system/smarthome.service eingefügt werden:

[Unit]
Description=SmartHomeNG daemon
After=network.target
After=knxd.service
After=knxd.socket

[Service]
Type=forking
ExecStart=/usr/local/smarthome/venvs/py_shng/bin/python3 /usr/local/smarthome/bin/smarthome.py
WorkingDirectory=/usr/local/smarthome
User=smarthome
PIDFile=/usr/local/smarthome/var/run/smarthome.pid
Restart=on-failure
TimeoutStartSec=900
RestartForceExitStatus=5

[Install]
WantedBy=default.target

Der Unterschied zur bisherigen Version liegt im Eintrag ExecStart


Starten des Dienstes

Der so vorbereitete Dienst kann über den systemctl Befehl gestartet werden.

sudo systemctl start smarthome.service

Im Log schauen, ob keine Fehlermeldung beim Starten geschrieben wurde.

tail /usr/local/smarthome/var/log/smarthome-warnings.log

Wenn alles ok ist, kann der Autostart aktiviert werden:

sudo systemctl enable smarthome.service

Bei Systemstart wird nun SmartHomeNG automatisch gestartet.

Um den Dienst wieder auszuschalten und den Neustart bei Systemstart zu verhindern nutzt man:

sudo systemctl disable smarthome.service

Um zu sehen, ob SmartHomeNG läuft, genügt ein

sudo systemctl status smarthome.service

Läuft es noch nicht und man möchte sozusagen manuell starten reicht ein:

sudo systemctl start smarthome.service

Ein Neustart von SmartHomeNG würde mit

sudo systemctl restart smarthome.service

funktionieren, ein Stop von SmartHomeNG entsprechend

sudo systemctl stop smarthome.service