Homebridge Start verzögern

Begonnen von Frank6320, 12 Februar 2025, 23:56:14

Vorheriges Thema - Nächstes Thema

Frank6320

Hallo zusammen,
ich nutze Homebridge v2 in einem Docker container.
Wir hatten heute keinen Strom weshalb fhem, homebridge und ccu3 ohne Strom waren. Nachdem der Strom wieder da war, waren die Geräte in der Bridge alle weg, weil die Bridge wohl vor dem FHEM Start gestartet war.
Meine Idee ist daher, dass FHEM erst wenn es vollständig gestartet ist den Start von der Homebridge oder dem Docker container auslöst.
Geht sowas?
In der compose gibt es die Möglichkeit mit:
depends_on
fhem:
condition: service_healthy

das sollte helfen, es zeigt aber keine Verzögerung beim homebridge start. Fhem ist noch nicht healthy in portainer aber Homebridge schon gestartet ohne Geräte zu zeigen.

passibe

Siehe in diesem Beitrag hier unten: https://forum.fhem.de/index.php?topic=139927.msg1326738#msg1326738

Schlüssel zur Lösung ist die startup.sh, die homebridge anlegt und vor dem Start ausführt.

Wenn du keine Benachrichtigung willst, dann reicht auch das hier (den (Host-)Namen des FHEM-Containers natürlich anpassen):

#!/bin/bash

#
# Docker Homebridge Custom Startup Script - homebridge/homebridge
#
# This script can be used to customise the environment and will be executed as
# the root user each time the container starts.
#
# Example installing packages:
#
# apt-get update
# apt-get install -y python3
#

until [ \
  "$(curl -s -w '%{http_code}' -o /dev/null "http://fhem:8083/fhem")" \
  -eq 401 ]
do
    sleep 120
done

Frank6320

Hallo passibe,

vielen Dank für den Tipp. Ich dachte erst es funktioniert, bei ausgeschaltetem FHEM container startet Homebridge nicht. Also so wie es dann sein soll. Werfe ich FHEM jedoch an, will Homebridge auch nicht starten.
until [ \
  "$(curl -s -w '%{http_code}' -o /dev/null "http://127.0.0.1:8083/fhem")" \
  -eq 401 ]
do
    sleep 120
done

Ich habe dein Beispiel hier genommen ohne das notify. Habe die Adressen 127.0.0.1:8083 und 192.178.168.90:8083 probiert mit gleichem Ergebnis. Lösche ich deinen Vorschlag aus der startup.sh startet Homebridge sofort.
Braucht es noch irgendwo eine Ergänzung?

viele Grüße

Frank

passibe

Erstmal: Generell wo möglich immer lieber den Hostnamen nehmen und nicht eine IP-Adresse. Wenn FHEM auch in Docker läuft einfach den Service-Namen aus dem compose file oder den (hoffentlich statisch definierten) Containernamen.

Ansonsten: Nimm einfach den Hostnamen/die IP-Adresse die in der homebridge-fhem-config hinterlegt ist, also in der JSON-config unter "server":
        {
            "name": "FHEM",
            "server": "<DAS WAS HIER STEHT NEHMEN>",
            "port": 8083,
            "filter": "siriName=.+",
            "auth": {
                "user": "ABC",
                "pass": "DEF"
            },
            "neverTimeout": false,
            "platform": "FHEM"
        },

Frank6320

Hallo passibe,
der Container heißt homeserver-fhem-1. Auch damit kein Erfolg. In der config json steht 127.0.0.1 als ip Adresse für FHEM. Damit will es nicht.
Hast du noch einen Tipp um zu verstehen, wieso der zugriff misslingt? Mir fällt spontan das allowfrom bei global ein. Aber auch hier sieht alles OK aus.
define WEBapi FHEMWEB 8089 global
attr WEBapi userattr DockerHealthCheck:0,1
attr WEBapi allowfrom 192.168.178.58|localhost|127.0.0.1|192.168.178.60|192.168.178.30
attr WEBapi csrfToken blabla
attr WEBapi csrfTokenHTTPHeader 0
attr WEBapi room System

{
    "bridge": {
        "name": "Homebridge",
        "username": "nemacadresse",
        "port": 51337,
        "pin": "zahl"
    },
    "platforms": [
        {
            "platform": "FHEM",
            "name": "FHEM",
            "server": "127.0.0.1",
            "port": "8083",
            "filter": "HomeBridge=on",
            "tempUnits": "C"
        },
        {
            "name": "Config",
            "port": 8581,
            "platform": "config",
            "theme": "orange"
        }
    ],
    "accessories": []
}

Ist in meinem Container der startup noch nicht so weit, dass solche Fragen gestellt werden können?

Frank6320

Hallo,

wenn ich in dem erfolgreich gestartetem Container eine Konsole öffne und den Befehl versuche kommt folgendes:
root@ubuntu-server:/homebridge $ "$(curl -s -w '%{http_code}' -o /dev/null "http://127.0.0.1:8083/fhem")" -eq 401 ]
bash: 200: command not found
root@ubuntu-server:/homebridge $

passibe

#6
Ah, ja, 127.0.0.1 ergibt Sinn, weil homebridge vermutlich im network-mode host läuft.

Zitat von: Frank6320 am 18 Februar 2025, 18:26:32eine Konsole öffne und den Befehl versuche kommt folgendes
Ah, sehr guter Gedanke! Das ist ja sehr gut, denn das heißt, dass die IP Adresse stimmt, denn der Request geht durch und es kommt Status Code 200 zurück.
Heißt aber, dass dein FHEM nicht passwortgesichert ist? Davon bin ich ausgegangen, deshalb die Überprüfung auf 401. Dann müsste das bei dir natürlich auf 200 prüfen und nicht auf 401.

Mir ist außerdem aufgefallen, dass die Anführungszeichen da nicht so sauber sind (hat überraschenderweise aber trotzdem funktioniert, die Änderung aber trotzdem zur Sicherheit). Bitte probier deshalb mal folgendes:

until [ \
  "$(curl -s -w '%{http_code}' -o /dev/null 'http://127.0.0.1:8083/fhem')" \
  -eq 200 ]
do
    sleep 120
done

Frank6320

Hallo passibe,

Vielen Dank für deine Hilfe.
Ich habe es so umgestellt und es scheint zu funktionieren.

Viele Grüße

Frank