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:- Open source en uitbreidbaar – Duizenden integraties, aangepaste automatiseringen, maximale hackbaarheid en HACS .
- 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.
- Geavanceerde automatisering – Veel krachtiger dan de beperkte automatiseringsmogelijkheden van Apple.
- 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.
- 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 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:
- Matter ondersteunt multi-admin (apparaat kan zich bij meerdere controllers aansluiten).
- Thread Border Routers adverteren routes via IPv6 Router Advertisements.
- Elk apparaat in het netwerk moet Thread-apparaten via de grensrouter kunnen bereiken.
De configuratie: Docker Compose
Hier is de docker-compose configuratie voor het draaien van Home Assistant en Matter Server:# 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 :- Open Apple Home → Selecteer apparaat → Schakel de koppelingsmodus in
- Open Home Assistant → Voeg een Matter-apparaat toe → Voer de koppelingscode in
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:# SSH into the NAS
ssh user@nas.local
# Check if Thread Border Routers are visible
avahi-browse -t _meshcop._udp
Uitvoer:
+ 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:avahi-browse -r _matterc._udp
Uitvoer:
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: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:# On PC
ping -6 -c 3 fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0
Uitvoer:
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:
# On NAS
sudo ping -6 -c 3 fd40:aff8:a38d:0:8f51:64dc:1b6e:f8b0
Uitvoer:
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:ip -6 route show | grep fd40
Uitvoer:
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:
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: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)
sudo sysctl -w net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=64
Controleer na het uitvoeren hiervan of de route verschijnt:
ip -6 route show | grep fd40
# Should now show: fd40:aff8:a38d::/64 via fe80::... dev eth0 proto ra
En test de connectiviteit:
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: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
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
| Rekening | Commando |
|---|---|
| Zie Thread Border Routers | avahi-browse -t _meshcop._udp |
| Apparaat in koppelingsmodus weergeven | avahi-browse -r _matterc._udp |
| Controleer de route naar het Thread-netwerk. | ip -6 route show | grep fd40 |
| Controleer de RIO-instelling | cat /proc/sys/net/ipv6/conf/eth0/accept_ra_rt_info_max_plen |
| Test de connectiviteit | ping -6 <device-ipv6> |
Belangrijkste lessen
- mDNS-detectie ≠ connectiviteit – Het feit dat je een apparaat kunt zien, betekent niet dat je het ook kunt bereiken.
- Thread gebruikt een apart IPv6-prefix – Apparaten bevinden zich niet op uw thuisnetwerk, maar op het Thread-meshnetwerk.
- Vergelijk wat wel en niet werkte – Mijn pc werkte, maar mijn NAS niet – dat wees op een lokaal configuratieprobleem.
- NAS-systemen zijn eigenzinnig – ga er niet vanuit dat standaard Linux-configuraties blijven werken; gebruik systemd-services.
- Routeradvertenties zijn belangrijk – De
accept_ra_rt_info_max_plenDe instelling is cruciaal voor threadroutering.
