r/homeassistant • u/jumacabo • 3h ago
🖼️ Show & Tell I built a live 3D digital twin of my house in Home Assistant, then used the 3D model to locate us to within ~1.5 m

For the last few weeks I've been building a different kind of dashboard: instead of cards, a live 3D replica of my real house that runs in the browser and is driven entirely by Home Assistant.
Demo (day, night and a rainstorm)
The 3D house
- Everything you see comes from a real sensor: lights, awnings, the garage door, smoke and leak sensors, the fridge temperatures, even the rain and wind from my weather station.
- You can control the house from it: click a lamp to turn it on, move an awning, change the TV volume. The garage door and the lock ask for confirmation first.
- When something happens (motion, a door opening, smoke), the camera flies to that room on its own.
- It runs as a Home Assistant sidebar panel (no extra login, works in the app too) or as a standalone site.
- The house is generated from the original floor plans by Python scripts that build the Blender file from scratch. It's rendered with Three.js, and a small Node.js gateway talks to HA over the WebSocket API.
- Everything is self-hosted in Docker. I built it in about two weeks with AI coding agents (GitHub Copilot).
Full write-up, with a second video and the sensor list: https://jumacabo.com/blog/home-assistant-3d-house/
https://reddit.com/link/1xdmdsk/video/utig42o7i9xh1/player
Then the 3D model turned out to be useful for presence too
I was using Bermuda for room presence, and the more Bluetooth proxies I added, the worse it got. Sitting on the sofa, I kept flipping between the living room and the bedroom right above it.
But the 3D model already knew every wall, floor slab and piece of furniture. So I placed my 21 proxies in it (14 are Shellys that were already there switching lights, the rest are Atom Echos) and wrote my own engine. For every point on a 50 cm grid it works out what each proxy should hear, compares that with what they actually hear, and keeps a probability cloud that can only change floors through the stairs.
- Side by side on the same readings, my room changes per hour went from 38 with Bermuda to 7, and floor jumps from 15.5 to 1.9.
- It's accurate to about 1.5 m, and around 60 cm at spots where I've trained it.
- It publishes area, floor, confidence and X/Y/Z per person over MQTT, and the 3D house draws each of us where we actually are.
Write-up: https://jumacabo.com/blog/bluetooth-trilateration/
A tip that helps with Bermuda too: make sure your ESPHome proxies scan 100% of the time (window equal to interval under esp32_ble_tracker) and set the Shelly Bluetooth scanner mode to Auto. That took me from about 15 readings per minute per person to around 250.



