Moin Freunde der Heimautomation!
Ich hänge meinen Beitrag mal hier an, weil es thematisch ganz gut passt.
Ich nutze auf meiner Homebridge das Plugin homebridge-fritz-platform.
Gestern wurde bei mir zu Hause der Stromzähler ausgetauscht. Also waren alle Geräte für ein paar Minuten komplett aus.
Nach dem alles wieder hochgefahren war stellte ich fest, dass die Homebridge beim Starvorgang hängengeblieben ist. Der Grund war, dass der Raspi so schnell die Arbeit aufgenommen hatte, dass die FRITZ!Box noch nicht ansprechbar war, was wiederum dazu führte dass das Plugin hängen blieb und den Start der ganzen Homebridge verhinderte.
Also musste eine Lösung her. Ziel war es, den Start von Homebridge so lange zu verzögern, bis die FRITZ!Box erreichbar ist.
Eine generelle zeitliche Startverzögerung wäre zielführend, aber nicht elegant genug weil sie auch jeden Neustart der Homebridge um die gewählte Zeit verzögert. Ein
würde auch nichts bringen, da die Abhängigkeit ja außerhalb des raspi besteht.
Also hab ich mich im Internet auf die Suche gemacht und bin auf folgendes gestoßen:
Wenn man in der Datei /usr/lib/systemd/system/homebridge.service den Befehl
Unter
an die vorhandenen Befehle anfügt (Leerzeichen nicht vergessen, IP Adresse auf die eigenen Gegebenheiten anpassen), wird der Startbefehl für die Homebridge erst dann ausgelöst, wenn die FRITZ!Box auf ein „Ping“ reagiert hat.
Damit hätte ich mich zufrieden geben können. Da ich meine Homebridge aber über das apt repository installiert habe und darüber auch die Updates einspiele, hätte meine Änderung nur bis zum nächsten Update der Homebridge bestand.
Glücklicherweise bietet Linux einen sehr eleganten Weg das zu umgehen.
Man legt unter /etc/systemd/system ein neues Verzeichnis an nach dem Schema <Name des Service>.service.d
In meinem Fall also /etc/systemd/system/homebridge.service.d/
In diesem Verzeichnis erstellt man eine neue Datei mit der Endung .conf (der Name selbst ist frei wählbar)
Dort hinein schreibt man nun alles was man an Konfiguration für den Service zusätzlich braucht, und zwar nach dem gleichen Prinzip wie die Service Dateien selbst aufgebaut sind.
In meiner Datei stehen nur zwei Zeilen:
Danach abspeichern und mit
sudo systemctl daemon-reload
sudo systemctl restart homebridge oder sudo hb-service restart homebridge
alles aktivieren. Beim Start der Homebridge wird ab sofort alles aus der homebridge.service Datei abgearbeitet und zusätzlich alles aus der selbst erstellten .conf Datei. Diese Ergänzungen bleiben auch bei einem „apt update“ erhalten. Um alles rückgängig zu machen reicht es, die .conf Datei zu löschen und die Hombridge startet wieder mit den Einstellungen aus der homebridge.service Datei.
Im Ergebnis wartet der Homebridge Service nach einem Stromausfall nun brav ab bis der Router wieder erreichbar ist, und wenn ich die Homebride im laufenden Betrieb neu starten muss hab ich nur die Verzögerung von „einem einzigen Ping“ (Wassily ).