feat: add smart home runtime foundation
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# Smart Home Runtime Stack
|
||||
|
||||
Runtime-Zustand fuer Home Assistant auf Kallilabcore. Dieser Ordner gehoert zu
|
||||
`homelab-infra`, weil Komodo den Stack deployt und Renovate die Images pflegt.
|
||||
|
||||
## Dienste
|
||||
|
||||
- `homeassistant`: Home Assistant Container, erreichbar ueber Traefik unter
|
||||
`https://home.kaleschke.info`
|
||||
- `smarthome-mosquitto`: interner MQTT-Broker fuer Home Assistant, spaeter
|
||||
Zigbee2MQTT und ESPHome
|
||||
|
||||
## Abhaengigkeiten
|
||||
|
||||
- `frontend_net` existiert bereits und wird von Traefik genutzt.
|
||||
- `smarthome_net` wird durch diesen Stack angelegt und ist `internal: true`.
|
||||
- Das Fachrepo `smart-home-kalli` muss auf dem Unraid-Host unter
|
||||
`/mnt/user/services/smart-home-kalli` liegen. Nur ausgewählte YAML-Dateien
|
||||
werden read-only nach `/config` gemountet; `.storage` bleibt in
|
||||
`/mnt/user/appdata/homeassistant`.
|
||||
- Vor dem ersten Start muessen diese Dateien hostseitig angelegt werden:
|
||||
- `/mnt/user/appdata/homeassistant/secrets.yaml`
|
||||
- `/mnt/user/appdata/homeassistant/trusted_proxies.yaml`
|
||||
- `/mnt/user/appdata/mosquitto/config/passwordfile`
|
||||
- `/mnt/user/appdata/mosquitto/config/aclfile`
|
||||
|
||||
Das detaillierte Host-Bootstrap-Runbook liegt unter
|
||||
`docs/runbooks/smart-home-bootstrap.md`.
|
||||
|
||||
## MQTT Bootstrap
|
||||
|
||||
Beispiel fuer den initialen Home-Assistant-MQTT-User auf dem Unraid-Host:
|
||||
|
||||
```sh
|
||||
mkdir -p /mnt/user/appdata/mosquitto/config
|
||||
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
|
||||
```
|
||||
|
||||
LAN-Port `1883` bleibt in Phase 1 geschlossen. Eine Portfreigabe fuer externe
|
||||
MQTT-Clients wird erst in der ESPHome-Phase mit ACLs und per-Device-Usern
|
||||
ergaenzt.
|
||||
|
||||
## Ecowitt
|
||||
|
||||
Ecowitt wird nicht in Phase 1 exponiert. Wegen des globalen Traefik
|
||||
HTTP-zu-HTTPS-Redirects bleibt die Ingress-Entscheidung offen:
|
||||
|
||||
1. Traefik-HTTP-Ausnahme nur fuer den Ecowitt-Webhook, falls der globale
|
||||
EntryPoint-Redirect gezielt abloesbar ist.
|
||||
2. Dokumentierter LAN-only Host-Port `8123` als Fallback, wenn Option 1 den
|
||||
bestehenden Traefik-Standard zu stark verbiegt.
|
||||
@@ -0,0 +1,56 @@
|
||||
services:
|
||||
homeassistant:
|
||||
image: ghcr.io/home-assistant/home-assistant:2026.6.1@sha256:59aa8824955c9db491b75d2eebe42bd68494f80c2ec69ec0d66d9dae37d37514
|
||||
container_name: homeassistant
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: Europe/Berlin
|
||||
volumes:
|
||||
- /mnt/user/appdata/homeassistant:/config
|
||||
- /mnt/user/services/smart-home-kalli/home-assistant/configuration.yaml:/config/configuration.yaml:ro
|
||||
- /mnt/user/services/smart-home-kalli/home-assistant/automations.yaml:/config/automations.yaml:ro
|
||||
- /mnt/user/services/smart-home-kalli/home-assistant/scripts.yaml:/config/scripts.yaml:ro
|
||||
- /mnt/user/services/smart-home-kalli/home-assistant/scenes.yaml:/config/scenes.yaml:ro
|
||||
- /mnt/user/services/smart-home-kalli/home-assistant/packages:/config/packages:ro
|
||||
networks:
|
||||
- frontend_net
|
||||
- smarthome_net
|
||||
expose:
|
||||
- "8123"
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
depends_on:
|
||||
- mosquitto
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=frontend_net
|
||||
- traefik.http.routers.homeassistant.rule=Host(`home.kaleschke.info`)
|
||||
- traefik.http.routers.homeassistant.entrypoints=websecure
|
||||
- traefik.http.routers.homeassistant.tls=true
|
||||
- traefik.http.routers.homeassistant.tls.certresolver=le
|
||||
- traefik.http.services.homeassistant.loadbalancer.server.port=8123
|
||||
|
||||
mosquitto:
|
||||
image: eclipse-mosquitto:2.0.22@sha256:914f529386804c8278a4e581526b9be5e1604df44b30daabc70aa97dcefe5268
|
||||
container_name: smarthome-mosquitto
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
|
||||
- /mnt/user/appdata/mosquitto/config:/mosquitto/external_config
|
||||
- /mnt/user/appdata/mosquitto/data:/mosquitto/data
|
||||
- /mnt/user/appdata/mosquitto/log:/mosquitto/log
|
||||
networks:
|
||||
- smarthome_net
|
||||
expose:
|
||||
- "1883"
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
|
||||
networks:
|
||||
frontend_net:
|
||||
external: true
|
||||
|
||||
smarthome_net:
|
||||
name: smarthome_net
|
||||
driver: bridge
|
||||
internal: true
|
||||
@@ -0,0 +1,15 @@
|
||||
per_listener_settings true
|
||||
|
||||
listener 1883 0.0.0.0
|
||||
allow_anonymous false
|
||||
password_file /mosquitto/external_config/passwordfile
|
||||
acl_file /mosquitto/external_config/aclfile
|
||||
|
||||
persistence true
|
||||
persistence_location /mosquitto/data/
|
||||
|
||||
log_dest stdout
|
||||
log_type error
|
||||
log_type warning
|
||||
log_type notice
|
||||
connection_messages true
|
||||
Reference in New Issue
Block a user