Homelab.
De hardware waar al het andere op deze site op draait.
Twee delen die als één werken. Een gesegmenteerd netwerk (OPNsense + UniFi, zes VLAN's) en een zelflerend klimaat- + energiesysteem (Homey Pro v18, 152 apparaten, BigQuery erachter). De andere technische projecten op deze site draaien hierbovenop. De documentatie staat in twee privé-repo's — deze pagina is de publieke versie.
Zes VLAN's, met opzet gesegmenteerd.
Het netwerk bestaat zodat de rest van het systeem kan bestaan. Elke dienst die lokaal draait — klimaat, audio, beveiliging, automatiseringen — zit op een VLAN dat past bij zijn vertrouwensniveau. Een apparaat dat zich misdraagt wordt ingedamd door zijn eigen segment, niet door het geduld van de firewall.
| VLAN | Doel |
|---|---|
| Management | De netwerkinfrastructuur zelf — firewall, switches, controllers. |
| Secure | Apparaten met hoog vertrouwen, waaronder de beveiligingsrecorder. Strakke egress. |
| Trusted | Persoonlijke laptops, telefoons, werkstations. |
| IoT | Smarthome-apparaten die nooit met iets mogen praten zonder dat ze daar een reden voor hebben. |
| Guest | Iedereen die op bezoek is. Geen lateraal verkeer. |
| Management LAN (legacy) | Een pad dat er alleen is om te bootstrappen, zodat een verkeerde configuratie op een VLAN het netwerk nooit van zichzelf buitensluit. |
De hardware erachter
| Laag | Details |
|---|---|
| Firewall | OPNsense met ISC DHCPv4. KPN levert WAN als PPPoE over VLAN 6 — die ene configuratie is het dragende stuk tussen het huis en het internet. |
| Switching | UniFi Aggregation (10Gb-uplink van KPN) → PoE Pro-switch (10Gb naar Aggregation) → USW24 voor distributie (1Gb glasvezel). |
| Wireless | Zeven UniFi-accesspoints. Twee SSID's worden uitgezonden — één gekoppeld aan het Trusted VLAN, één aan het IoT VLAN — zodat een slimme lamp nooit op hetzelfde broadcast-domein belandt als een laptop. |
| Cameras | Zeven UniFi Protect-camera's + één UNVR. De opnames blijven op het Secure VLAN; egress wordt aan de netwerkgrens door de firewall tegengehouden. |
| Inter-VLAN services | mDNS-reflectie, UDP-broadcast-relay en IGMP Proxy per VLAN geconfigureerd. Nodig om AirPlay en multi-merk multiroom-detectie over de segmenten heen te laten werken. |
Eén Homey Pro, één v18-controller, 152 apparaten.
De klimaatkant is een zelflerende thermostaat met echte terugkoppellussen, geen thermostaat met een app. Verlichting en aanwezigheid draaien op dezelfde hub via dezelfde scriptinglaag.
| Laag | Details |
|---|---|
| Controller | Eigen Homey Pro v18 — seizoensbereiken, voorkoming van koude voeten, comfort-signaalmodel. De vorige controllers (v14 → v17) worden als referentie bewaard, zodat afwijkend gedrag te debuggen is. |
| Heating | Vijf actieve vloerverwarmingszones (1e verdieping) via Fibaro Smart Implant. Drie zones op de begane grond staan nog op de planning. De warmtepomp wordt aangestuurd door een Fibaro Q2-wandrelais in plaats van door de eigen thermostaat van de warmtepomp. |
| Air conditioning | Zes Daikin-units. De Daikin cloud-API is gelimiteerd tot 200 calls/dag per account, waar de controller zich aan houdt — de pollfrequentie is het budget. |
| Sensors | 25+ temperatuursensoren die een thermisch model voeden. De thermische vertraging per kamer is gemeten (35–55 min in totaal) en wordt gebruikt in de vooruitblik van de controller. |
| Heating-rate ceiling | Maximaal gemeten 1.58°C/uur (Bijkeuken). De controller respecteert plafonds per kamer — alles wat sneller gaat, is een sensor die verkeerd rapporteert, geen comfortwinst. |
| Lighting | 30 flows + 24 HomeyScript-scripts. Per kamer bewust van aanwezigheid, scène en beweging. 'Adaptief' in de zin dat de regels zich aanpassen aan het tijdstip en de modus van het huis, niet in de zin dat een LLM de temperatuur kiest. |
Het huis loopt vooruit op het net.
Dynamische Nederlandse energieprijzen veranderen elk uur en de curve van morgen komt na 13:00 binnen. De controller plant verwarming, EV-laden en accu-inzet voor de komende 24 uur — niet voor de huidige prijs.
| Systeem | Rol |
|---|---|
| Tibber | Dynamische energieprijzen (de prijzen van morgen komen na 13:00 binnen). De controller plant verwarming + EV-laden tegen de prijscurve, niet tegen de klok. |
| Enphase | Zonneproductie + thuisaccu. Het verversen van het JWT-token wordt door de integratie afgehandeld; de accu wordt ingezet tegen dezelfde prijscurve die de verwarming leest. |
| Zaptec | EV-laden via de wandlader, aangestuurd door de Tibber-prijzen. Standaard laden tijdens goedkope vensters; met de hand te overrulen wanneer nodig. |
| Load shedding | energie_loadshed.js — zodra de netbelasting de contractlimiet nadert, schakelt de controller de laagst geprioriteerde verbruikers af (eerst die je mag uitstellen) in plaats van de hoofdzekering te laten springen. |
| EVs | De laadstatus van de voertuigen rapporteert naar hetzelfde dataplatform; het laden synchroniseert tegen dezelfde prijs- + belastingscurve. |
Multi-merk audio — op één structuur.
Multi-merk audio op een gesegmenteerd netwerk is vooral een multicast-probleem. mDNS-reflectie, IGMP Querier en STP-prioriteit zijn de weinig glamoureuze primitieven die multiroom over VLAN's heen "gewoon laten werken".
| Merk | Details |
|---|---|
| Primary multiroom stack | Een gekoppelde set die PTP-sync nodig heeft — EEE uitgeschakeld op de switchpoort om de klok stabiel te houden — plus een vendor-API op een vaste poort. Doet multiroom en Apple AirPlay door alle kamers heen. |
| Second multiroom brand | Geconfigureerd met STP-prioriteit + IGMP Querier zodat multicast-detectie het gesegmenteerde VLAN-netwerk overleeft. |
| WiFi-only pair | Bewust op hetzelfde VLAN als de controller gehouden, op 5GHz, zodat de automatische koppeling van de fabrikant überhaupt werkt. |
Homey Pro → Cloud Run → BigQuery.
Hetzelfde dataplatform achter elke interessante beslissing in huis. 152 apparaten × bemonstering elke 5 minuten = een echte tijdreeks, gevalideerd bij binnenkomst en langdurig bewaard voor analyse.
| Laag | Details |
|---|---|
| Capture | Homey Pro pollt elke 5 minuten 152 apparaten — sensoren, schakelaars, klimaatunits, EV-laders, alles. |
| Validate + ingest | Een Cloud Run-worker valideert de payload, gooit misvormde rijen weg en voegt ze toe aan BigQuery (home_data.measurements). |
| Analyse | BigQuery is de langetermijnopslag. Het fitten van het thermisch model, backtests van de energie-arbitrage, analyse van verlichtingspatronen — allemaal SQL op dezelfde tabel. |
| Loop back | Lessen uit de offline-analyse worden controller-versiestappen (v17 → v18). De productielus blijft simpel; de analyselus blijft nieuwsgierig. |
De lessen die het netwerk met vallen en opstaan leerde.
- Segmenteer voordat je optimaliseert
- Zes VLAN's. Het IoT VLAN bestaat zodat een slim apparaat met twijfelachtige firmware fysiek niet naar een werkstation kan overspringen. Elk ander 'smarthome'-probleem is makkelijker zodra dat klopt.
- Houd een bootstrap-pad open
- Het management-LAN op het untagged native subnet blijft bestaan. Niet voor productie — voor de dag dat een VLAN-wijziging fout is en de firewall bereikt moet worden zonder de VLAN-configuratie die kapot is.
- OPNsense, één eigenaar
- ISC DHCPv4 staat aan; Kea en Dnsmasq staan uit. Eén DHCP-dienst, één bron van waarheid. Configuraties die 'grotendeels' werken omdat meerdere diensten elkaar grotendeels afstemmen, zijn hoe netwerken in stilte verrotten.
- Inter-VLAN-diensten zijn expliciet, niet impliciet
- mDNS-reflectie, UDP-broadcast-relay, IGMP Proxy. Elk per VLAN opgeschreven, want elk audiomerk heeft net een andere variant nodig en er één vergeten breekt de multiroom op een subtiele manier.
- Klimaat is een controller, geen chatbot
- De v18-thermostaat is een deterministisch model met seizoensbereiken en voorkoming van koude voeten. Geen LLM kiest het setpoint. AI woont in de offline-analyselaag die uitlegt waarom een zone zich vreemd gedroeg — niet in de productielus.
- Energie-arbitrage gebruikt de prijzen van morgen
- Tibber publiceert de prijscurve van de volgende dag na 13:00. Verwarmingsvensters + EV-laadschema sturen op de komende 24 uur, niet op het huidige uur. Het huis loopt vooruit op het net.
- Daikins ratelimiet is het pollbudget
- 200 calls/dag per Daikin-account. De controller behandelt dat als een hard budget, geen richtlijn — past de pollfrequentie per unit aan zodat de limiet nooit wordt geraakt en de API responsief blijft.
- Logs zijn de waarheid op de grond
- Elke meting, elke beslissing van de controller, elke apparaatstatus landt in BigQuery via de sensor_uploader-pipeline. Elk vreemd gedrag is terug te herleiden. Het dataplatform is de debugger.
De helft is vakwerk om het vakwerk — een echt netwerk thuis draaien is een voorrecht en een hobby. De andere helft is operationeel: als Luminary een verse checkout nodig heeft om vanaf te deployen, of Shop Life een privé-WhatsApp-webhook nodig heeft om te laten landen, of Bedtime Stories een plek nodig heeft om te renderen die niet per verbruik wordt afgerekend — dan is de homelab de vloer waar al het andere op staat. Alleen daarom al de moeite van het opschrijven waard.