Why build it
Van life means unreliable power and patchy 4G. A system that depends on the cloud is dark exactly when you need it. So the whole stack runs on the edge: voice recognition, the language model, and text-to-speech all live on one low-power module in the van.
The stack
Local agent
A Gemma LLM via Ollama runs an agent loop with tools, fed by on-device ASR and answered through on-device TTS. No transcript ever leaves the van.
Victron telemetry
SmartShunt, SmartSolar, and an Orion DC-DC charger read out over BLE: live state-of-charge, solar yield, and load, parsed from the raw instant-readout frames.
Lights & devices
12V spotlights on a Shelly dimmer, driven through a clean device contract so new hardware drops in behind the same interface.
Location & camera
GPS from the 4G router puts the van on a map; a webcam feed streams over the local network for a quick look outside.
4G & messages
Live signal, connection type, and a running tally of data used against the monthly allowance, with the router's SMS inbox surfaced right in the dashboard.
Built for testing
Every layer has a test seam: device drivers run against a contract suite, the agent against a stub model, Victron parsing against golden BLE dumps, and the web API against an in-memory bus. The laptop runs the full suite green with no van attached, because the hardware adapters stay thin on purpose.
Python FastAPI PipeWire BLE Ollama Jetson Orin Nano
See it running
The demo is the real dashboard UI on simulated telemetry. Toggle the lights, watch the batteries tick.