Additionele applicaties via docker-compose

Nadat Home Assistant via docker (compose) is opgestart, wil je hoogstwaarschijnlijk een aantal applicaties beschikbaar hebben zoals

  • MQTT-broker
  • Node-RED
  • Zigbee2MQTT

Deze applicaties kunnen toegevoegd worden als service in het docker-compose.yaml bestand dat gebruikt is voor Home Assistant.

Het docker-compose.yaml bestand voor Home Assistant ziet er alsvolgt uit:

version: "3.7"
services:

  ##################
  # Home Assistant #
  ##################
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    volumes:
      - haconfig:/config:rw
      - /etc/localtime:/etc/localtime:ro
    network_mode: host
    environment:
      - TZ=Europe/Amsterdam
    privileged: true
    restart: unless-stopped

volumes:
  haconfig:
    name: homeassistant

Mosquitto

met een extra service voor de Mosquitto MQTT-Broker wordt dat:

version: "3.7"
services:

  ##################
  # Home Assistant #
  ##################
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    volumes:
      - haconfig:/config:rw
      - /etc/localtime:/etc/localtime:ro
    network_mode: host
    environment:
      - TZ=Europe/Amsterdam
    privileged: true
    restart: unless-stopped

  #############
  # mosquitto #
  #############
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    volumes:
      - /opt/mosquitto/config:/mosquitto/config:rw
      - mosquitto-data:/mosquitto/data:rw
      - mosquitto-log:/mosquitto/log:rw
    network_mode: host
    restart: unless-stopped

volumes:
  haconfig:
    name: homeassistant
  mosquitto-data:
    name: mqtt-data
  mosquitto-log:
    name: mqtt-log

Let goed op het inspringen en gebruik daar spaties voor! De ‘host’ als netwerk-type zorgt ervoor dat Mosquitto op het IP adres van Home Assistant, en dus dat van de RPi, bereikbaar is.

Voordat de MQTT broker gestart gaat worden dient de configuratie van mosquitto aangepast te worden. Met een ssh-connectie naar de RPi, geef de volgende commando’s:

sudo mkdir -p /opt/mosquitto/config [enter]

cd /opt/mosquitto/config [enter]

sudo touch mosquitto.conf [enter] 

sudo chmod 666 mosquitto.conf [enter]

sudo cat << EOF > mosquitto.conf [enter]
> persistence true [enter]
> persistence_location /mosquitto/data [enter]
> log_dest file /mosquitto/log/mosquitto.log [enter]
> EOF [enter]

cd $HOME [enter]

De applicatie kan toegevoegd worden aan Home Assistant door de docker-compose opnieuw in te lezen en mosquitto te starten met:

docker compose up -d [enter]

Nu kan de MQTT integratie in Home Assistant toegevoegd worden en mosquitto ‘draait’ op de RPi, oftewel op de localhost:

Submit en de MQTT Broker is succesvol toegevoegd.

Node-RED

Op dezelfde manier kan nu Node-RED toegevoegd worden aan de docker-compose.yaml file. Deze ziet er dan in z’n geheel zo uit:

version: "3.7"
services:

  ##################
  # Home Assistant #
  ##################
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    volumes:
      - haconfig:/config:rw
      - /etc/localtime:/etc/localtime:ro
    network_mode: host
    environment:
      - TZ=Europe/Amsterdam
    privileged: true
    restart: unless-stopped

  #############
  # mosquitto #
  #############
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    volumes:
      - /opt/mosquitto/config:/mosquitto/config:rw
      - mosquitto-data:/mosquitto/data:rw
      - mosquitto-log:/mosquitto/log:rw
    network_mode: host
    restart: unless-stopped

  ############
  # node-RED #
  ############
  node-red:
    image: nodered/node-red:latest
    container_name: node-red
    environment:
      - TZ=Europe/Amsterdam
    volumes:
      - node-red-data:/data
    network_mode: host
    restart: unless-stopped
    depends_on:
      - homeassistant
      - mosquitto

volumes:
  haconfig:
    name: homeassistant
  mosquitto-data:
    name: mqtt-data
  mosquitto-log:
    name: mqtt-log
 node-red-data:
    name: node-red

Nagenoeg gelijk aan de andere services met als uitzondering de ‘depends_on:‘ regels die aangeven dat homeassistant en mosquitto eerst actief moeten zijn voordat Node-RED gestart wordt.

Laden van Node-RED met:

docker compose up -d [enter]

Node-RED draait op TCP port 1880 en kan daarom benaderd worden met een browser op: http://raspberrypi.local:1880

Om vanuit Node-RED de Home Assistant nodes te kunnen bereiken is het nodig om de ‘Home Assistant websocket‘ palette te installeren in Node-RED (rechtsboven hamburger-menu -> Manage palette). Hiermee komen dan de Home Assistant nodes beschikbaar maar moet nog wel de Home Assistant server ingesteld worden.

Home Assistant maakt gebruik van een token dat via de websocket in Node-RED gebruikt wordt om daarmee de Home Assistant API te kunnen benaderen. Die dient dus aangemaakt te worden in Home Assistant onder gebruikers-instellingen. In de zij-balk, via je gebruikersnaam en dan onderaan kiezen voor het aanmaken van een ‘Toegangtoken met lange levensduur’. Geef het een naam en kopieer het token want die heb je zo nodig om te koppelen.

Zet een Home Assistant node op de flow en dubbelklik deze om te openen. Hier kan dan de Home Assistant server ingesteld worden op http://localhost:8123 en het token wat zojuist aangemaakt is.

Op dezelfde manier kan een koppeling gemaakt worden vanuit Node-RED naar de Mosquitto MQTT broker. De draait ook op dezelfde RPi, dus de servernaam in de mqtt-nodes wordt dan: localhost (poort 1883).

Simpele flow om de server in te stellen

Zigbee2MQTT

Voor Zigbee devices dient een Zigbee-gateway aanwezig te zijn in de orm van een zigbee switch/gateway of een USB-dongle van bijvoorbeeld Home Assistant, de SkyConnect

Om de USB poort via docker-compose door te sturen van de RPi naar Zigbee2MQTT wordt er een device toegevoegd aan de docker-compose.yaml file:

devices:
  - /dev/ttyACM0:/dev/ttyACM0

Ervan uitgaan de dat de USB-dongle op die poort is aangesloten op de RPi.

De totale docker-compose.yaml zier er dan zo uit:

version: "3.7"
services:

  ##################
  # Home Assistant #
  ##################
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    volumes:
      - haconfig:/config:rw
      - /etc/localtime:/etc/localtime:ro
    network_mode: host
    environment:
      - TZ=Europe/Amsterdam
    privileged: true
    restart: unless-stopped

  #############
  # mosquitto #
  #############
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    volumes:
      - /opt/mosquitto/config:/mosquitto/config:rw
      - mosquitto-data:/mosquitto/data:rw
      - mosquitto-log:/mosquitto/log:rw
    network_mode: host
    restart: unless-stopped

  ############
  # node-RED #
  ############
  node-red:
    image: nodered/node-red:latest
    container_name: node-red
    environment:
      - TZ=Europe/Amsterdam
    volumes:
      - node-red-data:/data
    network_mode: host
    restart: unless-stopped
    depends_on:
      - homeassistant
      - mosquitto

  #################
  ## Zigbee2MQTT ##
  #################
  zigbee2mqtt:
    image: koenkk/zigbee2mqtt
    container_name: zigbee2mqtt
    environment:
      - TZ=Europe/Amsterdam
    volumes:
      - z2m-data:/app/data
      - /run/udev:/run/udev:ro
    network_mode: host
    devices:
      - /dev/ttyACM0:/dev/ttyACM0
    restart: unless-stopped
    depends_on:
     - mosquitto

volumes:
  haconfig:
    name: homeassistant
  mosquitto-data:
    name: mqtt-data
  mosquitto-log:
    name: mqtt-log
 node-red-data:
    name: node-red
 z2m-data:
    name: z2m-data

Hierbij de voorwaarde dat mosquitto reeds gestart is (depends_on:)

Opstarten wederom met

docker compose up -d [enter]

Zigbee2MQTT draait op TCP poort 8080 dus de user interface kan bereikt worden via http://raspberrypi.local:8080

Via SETTINGS kan Home Assistant ingesteld worden:

Hiermee worden de Zigbee devices doorgevoerd naar Home Assistant.