Home Assistant: Docker Inbetriebnahme + SSL Internetzugriff

Home Assistant Home Assistant Integrationen

Neben der Installation auf einer eigenen Hardware ist die zweite empfohlene Installationsvariante für Home Assistant die Verwendung von Docker, siehe auch: HAOS vs. Home Assistant Docker Installation. Um Home-Assistant in Docker zu starten, wird natürlich ein Docker-Setup vorausgesetzt, siehe: Docker. Wer Docker bereits eingerichtet hat, kann Home-Assistant mit folgendem Befehl starten:

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
docker run -d --name="home-assistant" \
-v ha:/config \
-v /etc/localtime:/etc/localtime:ro \
--net=host \
--restart=always \
homeassistant/home-assistant:stable

Das Netzwerk für Home-Assistant muss laut dem Hersteller auf „--net=host" gestellt werden, die verwendeten Ports können aber auch definiert werden: als Beispiel bei Verwendung eines Reverse-Proxys für den Zugriff aus dem Internet, siehe:  Zugriff aus dem Internet - SSL Let's Encrypt.

Erster Start: Initiale Konfiguration

Nach dem Start des Containers ist Home-Assistant standardmäßig mit der IP-Adresse des Host und dem Port 8123 im Browser erreichbar:

 

Wer Docker auf demselben Rechner ausführt, kann auch http://localhost:8123 für den Aufruf verwenden, siehe localhost aufrufen: IP Adresse „127.0.0.1“, „::1“ | was ist localhost?

Zugriff vom Internet: SSL Let´s Encrypt

Dank Let’s Encrypt kann Home Assistant sehr einfach mit einem SSL-Zertifikat versorgt und somit sicher im Internet betrieben werden. Als Voraussetzung dafür habe ich folgendes Setup im Einsatz: Traefik in Docker | mehrere Webserver inkl. Zertifikat SSL.

Für den Betrieb mit dem Reverse-Proxy habe ich folgende Einstellungen in der Konfiguration getroffen:

configuration.yaml:

http:
  server_port: 8123
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    - ::1    
    - 172.18.0.0/16

Ich verwende für die Web-Container, die über den Let’s Encrypt-Reverse-Proxy aus dem Internet erreichbar sind, das Netzwerk „webproxy“. Entsprechend habe ich für Home Assistant folgendes docker-compose-File erstellt:

docker-compose.yml

[+]
version: "3"
services:
  hass:
    image: homeassistant/home-assistant:stable
    container_name: home-assistant 
    #Labels für ReverseProxy, siehe: https://www.libe.net/traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"      
      - "traefik.http.routers.ha.entrypoints=web"
      - "traefik.http.routers.ha.entrypoints=websecure"
      - "traefik.http.routers.ha.tls.certresolver=myresolver"      
      - "traefik.http.services.ha.loadbalancer.server.port=8123"
    restart: always
    volumes:
      - ./haconfig:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
       - "8123"
    #Für einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:8123 oder http://ServerIP:8123
    #ports:   
      #- "8123:8123" 
#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy 
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
  default:
    external:
      name: webproxy

Für einen direkten Zugriff über die IP-Adresse oder localhost - auch ohne Reverse Proxy, DNS oder öffentlicher IP - kann die auskommentierte Port-Einstellung für Testzwecke aktiviert werden, indem „#“ vor „ports:“ und „-"83:80"“ entfernt wird. Sollte der Reverse Proxy nicht eingesetzt werden, wird das Netzwerk webproxy nicht benötigt und der Bereich networks: .. kann entfernt werden. Für den Internetzugriff über den Traefik Reverse Proxymuss in den Labels die Domäne mit den zuvor erstellten DNS-Einträgen ersetzt werden (im Beispiel: ha.domain.tld). Damit die relevanten Daten der Container einfacher übertragen oder gesichert werden können verwendet das Beispiel Bind-Mounts und keine Docker Volumes für das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner und Praxis: Backup Docker Container-Daten: Volumes / Bind Mounts.

ZigBee mit ZHA

Für die Verwendung eines ZigBee-USB-Dongle, wie den ConBee II reicht es beim Einsatz von ZHA den Stick über "devices" einzubinden.

[+]
version: "3"
services:
  hass:
    image: homeassistant/home-assistant:stable
    container_name: home-assistant 
    #Labels für ReverseProxy, siehe: https://www.libe.net/traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"      
      - "traefik.http.routers.ha.entrypoints=web"
      - "traefik.http.routers.ha.entrypoints=websecure"
      - "traefik.http.routers.ha.tls.certresolver=myresolver"      
      - "traefik.http.services.ha.loadbalancer.server.port=8123"
    restart: always
    volumes:
      - ./haconfig:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
       - "8123"
    devices: 
      - /dev/ttyACM0
    #Für einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:8123 oder http://ServerIP:8123
    #ports:   
      #- "8123:8123" 
#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy 
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
  default:
    external:
      name: webproxy

Alternativ: deCONZ und Home-Assistant in einem docker-compose.yml-File

Damit der Conbee 2-Stick über deCONZ angesprochen werden kann, habe ich das docker-compose-File wie folgt angepasst:

[+]
version: "3"
services:
  hass:
    image: homeassistant/home-assistant:stable
    container_name: home-assistant 
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"      
      - "traefik.http.routers.ha.entrypoints=web"
      - "traefik.http.routers.ha.entrypoints=websecure"
      - "traefik.http.routers.ha.tls.certresolver=myresolver"      
      - "traefik.http.services.ha.loadbalancer.server.port=8123"
    restart: always
    volumes:
      - ./haconfig:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
       - "8123"
  deconz:
    image: marthoc/deconz
    container_name: deconz
    environment:
      DECONZ_DEVICE: '/dev/ttyACM0'
      DECONZ_VNC_MODE: '1'
      DECONZ_VNC_PORT: '5900'
      DECONZ_VNC_PASSWORD: 'password'
    restart: always
    volumes:
      - ./deconz:/root/.local/share/dresden-elektronik/deCONZ
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    devices: 
      - /dev/ttyACM0
    ports:
       - 83:80
       - 5983:5900
networks:
  default:
    external:
      name: webproxy

Nach ca. einem Jahr mit deCONZ bin ich auf Zigbee2MQTT umgestiegen, ein weiters Jahr später auf ZHA. Zigbee2MQTT bietet eine solide Alternative zu ZHA:

Alternativ: Zigbee2MQTT, MQTT und Home-Assistant in einem docker-compose.yml - File

Mein komplettes Setup, bestehend aus Home Assistant, MQTT und Zigbee2MQTT, einen laufenden Let's Encrypt Reverse Proxy vorausgesetzt, schaut aktuell wie folgt aus:

[+]
version: "3"
services:
  hass:
    image: homeassistant/home-assistant:stable
    container_name: home-assistant 
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"      
      - "traefik.http.routers.ha.entrypoints=web"
      - "traefik.http.routers.ha.entrypoints=websecure"
      - "traefik.http.routers.ha.tls.certresolver=myresolver"      
      - "traefik.http.services.ha.loadbalancer.server.port=8123"
    restart: always
    volumes:
      - ./haconfig:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
       - "8123"
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"      
  zigbee2mqtt:
      container_name: zigbee2mqtt
      restart: always
      image: koenkk/zigbee2mqtt
      volumes:
        - ./zigbee2mqtt-data:/app/data
        - /run/udev:/run/udev:ro
      ports:
        - 83:8080
      environment:
        - TZ=Europe/Vienna
      devices:
        - /dev/ttyACM0
networks:
  default:
    external:
      name: webproxy

weitere Docker-Services: InfluxDB und Grafana

Um für meine Heizung Langzeitwerte zu speichern und diese besser visualisieren zu können, habe ich zudem für das Speichern der Daten eine InfluxDB und für das Auswerten Grafana im Einsatz. Die Anbindung der InfluxDB hier erfolgt über die Home-Assistant-Konfig-Datei configuration.yml

...
influxdb:
  include:
    entities:
       - sensor.1...
       - sensor.2...
  host: influxdb
  port: 8086
  database: ha
  username: ha
  password: ???
  max_retries: 3

Die Version 1 verwendet für die Verbindung einen Benutzernamen und ein Passwort,  Version 2: Token, Organisation und Bucket.

Nachdem ich nicht alle Daten in Grafana auswerten möchte, habe ich mit „include“ nur bestimmte Sensoren hinterlegt. Das komplette Docker-Setup für Home-Assistant, InfluxDB und Grafana schaut bei mir aktuell so aus:

[+]
version: "3"
services:
  hass:
    image: homeassistant/home-assistant:stable
    container_name: home-assistant 
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ha.rule=Host(`ha.domain.tld`)"      
      - "traefik.http.routers.ha.entrypoints=web"
      - "traefik.http.routers.ha.entrypoints=websecure"
      - "traefik.http.routers.ha.tls.certresolver=myresolver"      
      - "traefik.http.services.ha.loadbalancer.server.port=8123"
    restart: always
    volumes:
      - ./ha:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
     devices:
        - /dev/ttyACM0
    expose:
       - "8123"
  influxdb:
      container_name: influxdb
      restart: always
      image: influxdb
      volumes:
        - ./influxdb:/var/lib/influxdb
        - ./influxdb2:/var/lib/influxdb2
      ports:
        - 8086:8086
  grafana:
      container_name: grafana
      restart: always
      image: grafana/grafana
      volumes:
        - ./grafana:/var/lib/grafana
      ports:
        - 3000:3000
networks:
  default:
    external:
      name: webproxy

siehe dazu auch: InfluxDB: Time series database - Docker und Grafana: Docker - Daten visualisieren und Alarme definieren

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Veröffentlichung: 07.03.2023 von Bernhard | Translation English |🔔


Top-Artikel in diesem Bereich


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Bitwarden in Docker betreiben - Setup Schritt für Schritt

Bitwarden ist ein webbasierter Passwort-Manager, ähnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite überlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche über verschiedene Container bereitgestellt werden können. Das relativ aufwändige Setup wurde mit "Bitwarden Unified" speziell für ein Selbs...


Inbetriebnahme Zigbee2MQTT in Docker - Schritt für Schritt

Zigbee2MQTT ist eine Open-Source Zigbee-Bridge welche sich, dank dem Netzwerkprotokoll MQTT, leicht in bestehende Smarthome-Lösungen integrieren lässt. Als Beispiel kann Zigbee2MQTT kombiniert mit MQTT - Broker  Mosquitto und Home-Assistant Daten der Zigbee-Geräte erfassen, anzeigen, aufzeichnen und diese steuern. Das hier beschriebene Setup verwendet Docker als Basis. Herstellerseite: https://www.zigbee2mqtt.io


Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details