Smart home devices from Amazon, Google, and Tuya constantly send data to the cloud. Every time you ask Alexa a question, your voice is recorded and analyzed. Camera feeds are processed on remote servers. This guide shows you how to build a 100% local smart home where no data ever leaves your network.
Download Home Assistant OS (free) and flash to a microSD card for Raspberry Pi. Or install via Docker on any Linux server. First boot takes 20 minutes. Access via http://homeassistant.local:8123
Install the Zigbee2MQTT add-on from Home Assistant Community Store (HACS). Plug in a Zigbee USB stick (Conbee II, Sonoff ZBDongle-E, or Slaesh's CC2652RB). Pair devices by putting them in pairing mode — they connect directly to your stick, not to a cloud bridge.
In your router (or firewall like OPNsense/pfSense), create a VLAN for IoT devices. Set firewall rules to block all traffic from IoT VLAN to WAN (internet), except for Home Assistant updates if needed. This forces all devices to communicate only locally.
For WiFi bulbs, switches, or sensors that don't have Zigbee, flash ESPHome firmware. This replaces the proprietary firmware with open source code that sends data only to your Home Assistant instance.
Rhasspy or Willow run completely offline. Set up with a USB microphone and speakers. Train your own wake word. All voice processing happens on your local hardware. No recordings sent to Amazon or Google.
Use RTSP (Real-Time Streaming Protocol) cameras from Reolink, Amcrest, or Hikvision (with custom firmware). Configure them to stream to Frigate (local NVR with AI object detection) or MotionEye. Block camera internet access at the router level. View feeds only through Home Assistant dashboard.