Files
homelab-infra/docs/runbooks/smart-home-bootstrap.md
T

5.5 KiB

Smart-Home Bootstrap

Ziel: Den Stack smart-home/ auf Kallilabcore initial startklar machen, ohne Secrets oder UI-State ins Git zu schreiben.

1. Fachrepo auf dem Host bereitstellen

cd /mnt/user/services
git clone https://git.kaleschke.info/Micha/smart-home-kalli.git smart-home-kalli
cd smart-home-kalli
git checkout main

Der Home-Assistant-Container mountet daraus einzelne YAML-Dateien read-only nach /config.

2. Home-Assistant-Appdata vorbereiten

mkdir -p /mnt/user/appdata/homeassistant
cp /mnt/user/services/smart-home-kalli/secrets-template/secrets.yaml.example \
  /mnt/user/appdata/homeassistant/secrets.yaml
cp /mnt/user/services/smart-home-kalli/secrets-template/trusted_proxies.yaml.example \
  /mnt/user/appdata/homeassistant/trusted_proxies.yaml

Danach trusted_proxies.yaml auf das echte Traefik-/frontend_net-Subnetz anpassen:

docker network inspect frontend_net

3. Mosquitto vorbereiten

mkdir -p /mnt/user/appdata/mosquitto/config \
  /mnt/user/appdata/mosquitto/data \
  /mnt/user/appdata/mosquitto/log

docker run --rm -it \
  -v /mnt/user/appdata/mosquitto/config:/mosquitto/external_config \
  eclipse-mosquitto:2.0.22 \
  mosquitto_passwd -c /mosquitto/external_config/passwordfile homeassistant

cat > /mnt/user/appdata/mosquitto/config/aclfile <<'EOF'
user homeassistant
topic readwrite #
EOF

Das initiale Passwort anschliessend in /mnt/user/appdata/homeassistant/secrets.yaml eintragen. LAN-Port 1883 bleibt in Phase 1 geschlossen.

4. Stack deployen

Komodo-Stack:

  • Repo: homelab-infra
  • Pfad: smart-home/docker-compose.yml
  • Branch: nach Review master
  • Status 2026-06-13: Stack smart-home existiert in Komodo, Gitea-Webhook ist aktiv, deployed_hash == latest_hash.

Nach dem Start pruefen:

docker ps --filter name=homeassistant
docker ps --filter name=smarthome-mosquitto
docker logs --tail=100 homeassistant
docker logs --tail=100 smarthome-mosquitto

5. Smoke-Test

  • https://home.kaleschke.info zeigt die Home-Assistant-Oberflaeche.
  • Nach Owner-Onboarding: keine Authelia-ForwardAuth mehr vor HA; HA nutzt native Auth plus http.ip_ban_enabled.
  • trusted_proxies.yaml deckt das frontend_net ab; damit wertet HA die echte Client-IP aus X-Forwarded-For aus.
  • Keine Trusted-Proxy-Fehler im HA-Log.
  • MQTT-Broker-Smoke: homeassistant-User aus secrets.yaml kann gegen smarthome-mosquitto:1883 publish/subscriben.
  • HA-MQTT-Integration ist verbunden: Config-Entry smarthome-mosquitto ist loaded, Mosquitto sieht einen HA-Client mit User homeassistant.
  • HA-native Backup-Erstellung funktioniert; Beispielartefakt: /mnt/user/appdata/homeassistant/backups/Custom_backup_2026.6.1_2026-06-13_08.25_38034438.tar.
  • Backup-Artefakt ist lesbar (backup.json, homeassistant.tar.gz).
  • Agent-API-Tokens liegen als Host-Secrets unter /mnt/user/appdata/secrets/ha_token_codex und /mnt/user/appdata/secrets/ha_token_claude; Werte nie ausgeben oder in Git schreiben. Die Tokens sind nur mit erhaltenem HA-Auth-State in .storage brauchbar und bei Verdacht in HA zu widerrufen.

6. Fachrepo-Update

Das Fachrepo /mnt/user/services/smart-home-kalli ist kein eigener Komodo-Stack. Aenderungen wirken erst nach diesem Host-Ablauf:

cd /mnt/user/services/smart-home-kalli
git pull --ff-only origin main
docker compose -f /mnt/user/services/stacks/smart-home/smart-home/docker-compose.yml \
  up -d --force-recreate homeassistant

Der Force-Recreate ist Pflicht, weil configuration.yaml, automations.yaml, scripts.yaml und scenes.yaml als Einzeldateien in den Container gemountet werden. Nach einem git pull kann Docker sonst noch den alten Datei-Inode sehen (Stale file handle).

7. UI-Editor-Politik

automations.yaml, scripts.yaml und scenes.yaml sind read-only aus Git gemountet. Der Home-Assistant-UI-Editor fuer diese Dateien ist deshalb nicht der primaere Schreibweg. Automationen und Scripts werden in Git gepflegt; UI-State und Integrations-State bleiben in .storage und werden per Borg gesichert.

8. Abnahmebedingung

Vor produktiven Energie-Automationen muss ein Restore-Test fuer /mnt/user/appdata/homeassistant, /mnt/user/appdata/mosquitto und den Clone /mnt/user/services/smart-home-kalli dokumentiert sein.

Wichtig: Ein erfolgreich erzeugtes HA-Backup ist nur die Voraussetzung. Das Gate ist erst geschlossen, wenn eine Restore-Probe in einem isolierten Testpfad dokumentiert ist.

Status 2026-06-13: Gate geschlossen. Die isolierte Restore-Probe war erfolgreich:

  • Report: /mnt/user/backups/restore-reports/homeassistant-2026-06-13.md
  • Test: HA-native Backup + Mosquitto-Appdata + Fachrepo-Clone
  • Ergebnis: HA HTTP/API/check_config gruen, MQTT Publish/Subscribe und retained Topic nach Broker-Restart gruen

Status 2026-06-13: HA-MQTT-Integration ist produktiv verbunden.

Verifikation:

TOKEN=$(cat /mnt/user/appdata/secrets/ha_token_codex)
curl -ksS -H "Authorization: Bearer $TOKEN" \
  https://home.kaleschke.info/api/config/config_entries/entry
docker logs --tail=120 smarthome-mosquitto
docker exec homeassistant python -m homeassistant --script check_config --config /config

Erwartung: Ein MQTT-Config-Entry smarthome-mosquitto mit Status loaded, ein Mosquitto-Client mit User homeassistant, und check_config ohne Fehler.

Naechster Schritt nach Foundation + MQTT: Tibber per HA-UI-Config-Flow verbinden. Danach SolarEdge bewusst entscheiden: Cloud-Integration fuer den schnellen Energy-Dashboard-Einstieg oder lokales Modbus-TCP nach Inverter-Pruefung.