Homelab.
De hardware waar al het andere op deze site op draait.
Twee delen die als één werken. Een gesegmenteerd netwerk (een open-source firewall, meerdere VLAN's) en een zelflerend klimaat- + energiesysteem (een eigen controller, met BigQuery erachter). De andere technische projecten op deze site draaien hierbovenop. De configuratie zelf staat in privé-repo's — deze pagina is de bewust op hoofdlijnen gehouden publieke versie, met opzet licht op de details.
Meerdere 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 camera-opnames. 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. |
| Bootstrap (legacy) | Een pad dat er alleen is om te bootstrappen, zodat een verkeerde configuratie op een VLAN het netwerk nooit van zichzelf buitensluit. |
De vorm van de hardware
| Laag | Details |
|---|---|
| Firewall | Een open-source firewall/router-OS verzorgt routering, DHCP en de WAN-overdracht. De provider levert WAN op een getagd VLAN — die ene overdracht is het dragende stuk tussen het huis en het internet. |
| Switching | Een managed switching-stack: een 10Gb-aggregatielaag naar 1Gb-distributie over glasvezel. |
| Wireless | Meerdere accesspoints van één leverancier. 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 | Een gesegmenteerd camerasysteem op een aparte recorder. 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 hub, één eigen controller.
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 | Een eigen controller — seizoensbereiken, voorkoming van koude voeten, comfort-signaalmodel. Eerdere controller-versies worden als referentie bewaard, zodat afwijkend gedrag te debuggen is. |
| Heating | Meerdere vloerverwarmingszones via Z-Wave-relais, met meer in de planning. De warmtepomp wordt aangestuurd door een wandrelais in plaats van door de eigen ingebouwde thermostaat. |
| Air conditioning | Meerdere airco-units achter een cloud-API van de fabrikant. Die API is gelimiteerd, dus de controller behandelt de pollfrequentie als een vast budget. |
| Sensors | Temperatuursensoren die een thermisch model voeden. De thermische vertraging per kamer wordt gemeten en gebruikt in de vooruitblik van de controller. |
| Heating-rate ceiling | Verwarmingssnelheidsplafonds per kamer worden gemeten. De controller respecteert ze — alles wat sneller gaat, is een sensor die verkeerd rapporteert, geen comfortwinst. |
| Lighting | Tientallen flows en 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 |
|---|---|
| Dynamische prijsfeed | Een Nederlandse dynamische-prijzenfeed (de prijzen van morgen komen na 13:00 binnen). De controller plant verwarming + EV-laden tegen de prijscurve, niet tegen de klok. |
| Zon + accu | Zonneproductie en een thuisaccu. De accu wordt ingezet tegen dezelfde prijscurve die de verwarming leest. |
| EV-laden | EV-laden via de wandlader, aangestuurd door de prijsfeed. Standaard laden tijdens goedkope vensters; met de hand te overrulen wanneer nodig. |
| Load shedding | 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 strakke kloksync nodig heeft — opgevangen op de switch — plus een vendor-API. 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. |
Hub → Cloud Run → BigQuery.
Hetzelfde dataplatform achter elke interessante beslissing in huis. Elk apparaat, elke vijf minuten — een echte tijdreeks, gevalideerd bij binnenkomst en langdurig bewaard voor analyse.
| Laag | Details |
|---|---|
| Capture | De hub pollt elke 5 minuten elk apparaat — 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. |
| Analyse | BigQuery is de langetermijnopslag. Het fitten van het thermisch model, backtests van de energie-arbitrage, analyse van verlichtingspatronen — allemaal SQL op dezelfde data. |
| Loop back | Lessen uit de offline-analyse worden controller-versiestappen. De productielus blijft simpel; de analyselus blijft nieuwsgierig. |
De lessen die het netwerk met vallen en opstaan leerde.
- Segmenteer voordat je optimaliseert
- Het IoT-segment 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
- Een bootstrap-pad naar de firewall blijft bestaan. Niet voor productie — voor de dag dat een VLAN-wijziging fout is en de firewall bereikt moet worden zonder de configuratie die kapot is.
- Eén bron van waarheid per dienst
- Eén DHCP-dienst, geen drie. 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 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
- De prijscurve van de volgende dag verschijnt na 13:00. Verwarmingsvensters + EV-laadschema sturen op de komende 24 uur, niet op het huidige uur. Het huis loopt vooruit op het net.
- Cloud-API's hebben budgetten, geen richtlijnen
- Sommige cloud-API's van fabrikanten zijn gelimiteerd. De controller behandelt de limiet als een hard budget — past de pollfrequentie aan zodat die 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. Elk vreemd gedrag is terug te herleiden. Het dataplatform is de debugger.
Niet omdat ik de cloud nodig heb — maar omdat ik het wil begrijpen.
Een DGX Spark met 256 GB unified memory zit op hetzelfde VLAN als de rest van deze infrastructuur. Hij draait vLLM via llama-swap — één model tegelijk, ~8–14 minuten om een groot model te wisselen. Zware batch-inference, redeneertaken, alles wat meer context nodig heeft dan de altijd-aan inference-box aankan. Maar dat is de mechanische beschrijving. De echte reden dat hij er staat is de naad.
| Laag | Waarom |
|---|---|
| De naad van de knutselaar | Tussen een gehoste GUI en een gemeterde API zit een holle ruimte waarin je nooit echt leert hoe het model zich gedraagt. Lokaal draaien betekent dat je de cold-start voelt, het geheugenplafond, de quantisatie-afweging. Daar woont begrip — niet op een dashboard. |
| Offline als functie, niet als bug | Sommige gegevens horen niet thuis op andermans infrastructuur. Financiële modellen, gezinsbudgetten, en — bovenal — Bedtime Stories voor onze kinderen. Het soort dingen dat nooit een trainingsset of een logregel buiten dit huis mag raken. |
| De naad, bij naam genoemd | Tussen een gebruiker van AI zijn en iemand die het van binnenuit begrijpt zit een dunne ruimte. Deze cluster is de hardwarekant van die ruimte. De andere kant is de drang om dingen zelf te bouwen — dezelfde drang als achter de Agent Game en Luminary. |
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.