Thema configurator

  • Momenteel werken we aan deze website en het vullen van content.
Home Assistant en Matter Server draaien op een UGREEN NAS

Home Assistant en Matter Server draaien op een UGREEN NAS

Ik zag dat IKEA nieuwe slimme huisproducten had gelanceerd voor een betaalbare prijs en besloot ze tijdens de feestdagen eens uit te proberen. Deze nieuwere IKEA-apparaten gebruiken Matter over Thread – de "nieuwe" en "universele" standaard voor slimme huizen die interoperabiliteit tussen ecosystemen belooft.

De visie was simpel: al mijn apparaten bedienen vanuit één interface, met lokale controle (geen afhankelijkheid van de cloud) en de flexibiliteit om indien nodig van ecosysteem te wisselen. Matter maakt dit mogelijk door apparaten tegelijkertijd via meerdere controllers te laten beheren.

Waarom Home Assistant in plaats van Apple Home?​

Hoewel Apple Home goed functioneert binnen het Apple-ecosysteem, heb ik ervoor gekozen om Home Assistant uit te proberen om verschillende redenen:
  1. Open source en uitbreidbaar – Duizenden integraties, aangepaste automatiseringen, maximale hackbaarheid en HACS .
  2. Geen vendor lock-in – Werkt met vrijwel elk smart home-protocol (Matter, Zigbee, Z-Wave, wifi, enz.) en bijna elk apparaat dat op afstand bediend kan worden.
  3. Geavanceerde automatisering – Veel krachtiger dan de beperkte automatiseringsmogelijkheden van Apple.
  4. Lokale controle – Alles draait op mijn eigen hardware, geen cloud nodig. Ik heb al een NAS met een aantal services die lokaal in Docker draaien.
  5. Matter biedt ondersteuning voor meerdere beheerders – Apparaten kunnen tegelijkertijd worden bediend door Apple Home én Home Assistant, waardoor de overgang naar verwachting soepel zal verlopen.

Home Assistant draaien op een NAS​

In plaats van speciale hardware aan te schaffen (zoals Home Assistant Green of een Raspberry Pi), heb ik ervoor gekozen om Home Assistant op mijn bestaande UGREEN DXP4800PLUS NAS te draaien . Deze aanpak heeft, in ieder geval voor mij, een aantal voordelen:

  • Kostenbesparing – Geen extra hardware nodig, alleen IKEA-lampen, schakelaars en sensoren.
  • Betrouwbaarheid – NAS-systemen zijn ontworpen om 24/7 te draaien.
  • Consolidatie – Eén apparaat om te onderhouden in plaats van meerdere.

Docker versus VM​

Om Home Assistant op een NAS te draaien, heb je twee opties: Docker-containers of een volledige virtuele machine. Ik heb voor Docker gekozen omdat:
  • Lager resourcegebruik – Containers delen de hostkernel
  • Onderhoudbaarheid – Ik heb een privé Git-repository met al mijn Docker Compose-bestanden en configuratie.
  • Vereenvoudigde netwerkconfiguratie – Directe toegang tot het hostnetwerk voor mDNS /multicast (geen netwerkbrugconfiguratie op de NAS nodig)
Het grootste nadeel van Docker is dat sommige Home Assistant-add-ons niet werken (ze vereisen Home Assistant OS). Je kunt de meeste services echter als aparte containers uitvoeren, en dat is wat we met de Matter-server gaan doen.

Het hergebruiken van Apple's Thread Border Router​

En nu wordt het interessant. Thread-apparaten hebben een Thread Border Router nodig om met uw IP-netwerk te communiceren. U kunt er een aanschaffen, bijvoorbeeld:
Maar als je al Apple-apparaten hebt, zoals een HomePod Mini of Apple TV 4K , functioneren die al als Thread Border Routers! Het idee was simpel: laat de border router van Apple het Thread mesh-netwerk beheren, terwijl Home Assistant de apparaten bestuurt via Matter multi-admin.

Dit zou moeten werken omdat:
  1. Matter ondersteunt multi-admin (apparaat kan zich bij meerdere controllers aansluiten).
  2. Thread Border Routers adverteren routes via IPv6 Router Advertisements.
  3. Elk apparaat in het netwerk moet Thread-apparaten via de grensrouter kunnen bereiken.
"Zou moeten" is hier het sleutelwoord :D

De configuratie: Docker Compose​

Hier is de docker-compose configuratie voor het draaien van Home Assistant en Matter Server:
YAML:
# docker-compose.yaml
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      TZ: Europe/Warsaw
 
  matter-server:
    container_name: matter-server
    image: ghcr.io/home-assistant-libs/python-matter-server:stable
    restart: unless-stopped
    security_opt:
      - apparmor:unconfined
    volumes:
      - ./matter-data:/data
      - /run/dbus:/run/dbus:ro
    network_mode: host
    command: --storage-path /data --primary-interface eth0

Belangrijkste punten:
  • network_mode: hostis essentieel – Matter vereist mDNS/multicast, wat niet goed werkt met Docker's bridge-netwerk.
  • --primary-interface eth0Vertelt de Matter-server welke netwerkinterface te gebruiken (ervan uitgaande dat je ook je ethernetkabel op de eerste aansluiting hebt aangesloten).
  • --storage-path /dataZorgt ervoor dat apparaatkoppelingen behouden blijven na herstart van de container.

Het probleem: de inbedrijfstelling mislukt.​

Nadat ik alles had ingesteld, probeerde ik mijn apparaat te delen van Apple Home naar Home Assistant. Het proces :

  1. Open Apple Home → Selecteer apparaat → Schakel de koppelingsmodus in
  2. Open Home Assistant → Voeg een Matter-apparaat toe → Voer de koppelingscode in
Maar de inbedrijfstelling bleef mislukken met deze fouten in de Matter Server-logboeken:

Code:
CHIP_ERROR [chip.native.CTL] Discovery timed out
CHIP_ERROR [chip.native.SC] PASESession timed out while waiting for a response from the peer. Expected message type was 33

e Matter-apparaten op wifi werkten prima, alleen de Thread-apparaten faalden. Er was iets mis met de netwerkverbinding tussen mijn NAS en de Thread-apparaten.

Foutopsporing: Het onderzoek​

Stap 1: Controleer of mDNS-detectie werkt.​

Allereerst controleerde ik of de NAS de Thread Border Routers en Matter-apparaten überhaupt kon zien:
Python:
# SSH into the NAS
ssh user@nas.local
 
# Check if Thread Border Routers are visible
avahi-browse -t _meshcop._udp

Uitvoer:
Code:
+   eth0 IPv4 Apple TV 4K                        _meshcop._udp        local
+   eth0 IPv6 Apple TV 4K                        _meshcop._udp        local

Prima, de NAS kan de Apple Border Routers via mDNS zien.

Stap 2: Controleer het apparaat in de inbedrijfstellingsmodus.​

Terwijl het apparaat in de koppelingsmodus stond, controleerde ik of het advertenties uitzond:
Code:
avahi-browse -r _matterc._udp

Uitvoer:
Code:
hostname = [264DA88A7891BAE6.local]
address = [fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0]
port = [5540]
txt = ["VP=4476+36873"]

Het apparaat was zichtbaar en adverteerde zijn IPv6-adres. Maar let op het adres: fd40:aff8:a38d:...– Dit is een ander IPv6-voorvoegsel dan dat van mijn thuisnetwerk!

Stap 3: De netwerktopologie begrijpen​

Dit onthulde de architectuur:
Code:
Home Network (fd9c:3a44:26e2:453f::/64)
    │
    ├── NAS (fd9c:3a44:26e2:453f:...)
    ├── PC  (fd9c:3a44:26e2:453f:...)
    └── Apple Border Router
            │
            └── Thread Mesh Network (fd40:aff8:a38d::/64)
                    │
                    └── IKEA DEVICE (fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0)

Thread-apparaten bevinden zich op een apart IPv6-subnet . De grensrouter moet routes naar dit subnet adverteren, zodat andere apparaten het kunnen bereiken.

Stap 4: Test de connectiviteit tussen pc en NAS​

En hier wordt het interessant. Vanaf mijn pc:
Code:
# On PC
ping -6 -c 3 fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0

Uitvoer:
Code:
64 bytes from fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0: icmp_seq=1 ttl=63 time=25.6 ms
64 bytes from fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0: icmp_seq=2 ttl=63 time=25.2 ms
64 bytes from fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0: icmp_seq=3 ttl=63 time=30.2 ms

Het werkt! Mijn pc kan het Thread-apparaat bereiken.

Maar vanuit de NAS:
Code:
# On NAS
sudo ping -6 -c 3 fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0

Uitvoer:
Code:
3 packets transmitted, 0 received, 100% packet loss

De NAS kan het Thread-apparaat niet bereiken! Zelfde netwerk, zelfde apparaat, verschillende resultaten.

Stap 5: IPv6-routes vergelijken​

Op mijn pc:
Code:
ip -6 route show | grep fd40

Uitvoer:
Code:
fd40:aff8:a38d::/64 via fe80::143e:4077:22b:562e dev enp101s0 proto ra
fd40:aff8:a38d::/64 via fe80::49e:d415:b2e8:5904 dev enp101s0 proto ra

De pc heeft routes naar het Thread-netwerk, die via Router Advertisement zijn verkregen ( proto ra).

Op de NAS:
Code:
ip -6 route show | grep fd40

Uitvoer: (leeg)

De NAS heeft geen verbinding met het Thread-netwerk! Hij verwerkt de routeradvertenties van de Apple Border Routers niet.

Stap 6: Vind de hoofdoorzaak​

De belangrijkste instelling is accept_ra_rt_info_max_plen– Dit bepaalt of de kernel Route Information Options (RIO) van routeradvertenties accepteert:
Code:
cat /proc/sys/net/ipv6/conf/eth0/accept_ra_rt_info_max_plen

Op NAS: 0 (gehandicapt)
Vereist: 64(accepteert routes met een prefixlengte tot 64)

De oorzaak is gevonden! De NAS-kernel was geconfigureerd om IPv6-routeringsopties te negeren, waardoor deze nooit leerde hoe het Thread-netwerk te bereiken.

De oplossing​

Tijdelijke oplossing (testen)​

Code:
sudo sysctl -w net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=64

Controleer na het uitvoeren hiervan of de route verschijnt:
Code:
ip -6 route show | grep fd40
# Should now show: fd40:aff8:a38d::/64 via fe80::... dev eth0 proto ra

En test de connectiviteit:
Code:
sudo ping -6 -c 3 fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0
# Should now work!

Permanente oplossing: Systemd-service​

Maak een systemd-service aan die de instelling na het opstarten toepast:
Code:
sudo tee /etc/systemd/system/thread-routing.service << 'EOF'
[Unit]
Description=Enable IPv6 RIO for Thread Border Routers (Matter/HomeAssistant)
After=network-online.target
Wants=network-online.target
 
[Service]
Type=oneshot
ExecStart=/sbin/sysctl -w net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=64
ExecStart=/sbin/sysctl -w net.ipv6.conf.all.accept_ra_rt_info_max_plen=64
RemainAfterExit=yes
 
[Install]
WantedBy=multi-user.target
EOF
 
# Enable and start the service
sudo systemctl daemon-reload
sudo systemctl enable thread-routing.service
sudo systemctl start thread-routing.service

Controleer na herstart​

Code:
sudo reboot
 
# After reboot:
systemctl status thread-routing.service
# Should show: active (exited)
 
cat /proc/sys/net/ipv6/conf/eth0/accept_ra_rt_info_max_plen
# Should show: 64
 
ip -6 route show | grep fd40
# Should show routes to Thread network

Samenvatting​

Het is absoluut mogelijk om Home Assistant te draaien op een NAS met Matter Thread-apparaten – je kunt zelfs de Thread Border Routers van Apple hergebruiken in plaats van speciale hardware aan te schaffen. Er is echter een addertje onder het gras: NAS-systemen hebben conservatieve IPv6-instellingen die voorkomen dat ze routes naar het Thread-netwerk leren.

Snelle diagnostische commando's​

RekeningCommando
Zie Thread Border Routersavahi-browse -t _meshcop._udp
Apparaat in koppelingsmodus weergevenavahi-browse -r _matterc._udp
Controleer de route naar het Thread-netwerk.ip -6 route show | grep fd40
Controleer de RIO-instellingcat /proc/sys/net/ipv6/conf/eth0/accept_ra_rt_info_max_plen
Test de connectiviteitping -6 <device-ipv6>

Belangrijkste lessen​

  1. mDNS-detectie ≠ connectiviteit – Het feit dat je een apparaat kunt zien, betekent niet dat je het ook kunt bereiken.
  2. Thread gebruikt een apart IPv6-prefix – Apparaten bevinden zich niet op uw thuisnetwerk, maar op het Thread-meshnetwerk.
  3. Vergelijk wat wel en niet werkte – Mijn pc werkte, maar mijn NAS niet – dat wees op een lokaal configuratieprobleem.
  4. NAS-systemen zijn eigenzinnig – ga er niet vanuit dat standaard Linux-configuraties blijven werken; gebruik systemd-services.
  5. Routeradvertenties zijn belangrijk – De accept_ra_rt_info_max_plenDe instelling is cruciaal voor threadroutering.
Dankzij deze oplossing kan ik Thread-apparaten nu toewijzen aan Home Assistant en ze tegelijkertijd ook in Apple Home behouden. Het beste van twee werelden!
Terug
Naar boven