Inside My Home Assistant Setup

Contents
Home Assistant is one of those projects that starts small, maybe one smart bulb and a curious afternoon, and gradually becomes the connective tissue of your entire house. This is a look at what’s running in mine: what works, what was fun to build, and what actually gets used every day.
The short version: a Raspberry Pi 4 running Home Assistant OS, about 1,900 entities, 20 rooms, 66 automations, and 53 devices communicating over WiFi, Ethernet, and a PoE Zigbee coordinator.
The Foundation
Everything runs on a Raspberry Pi 4 using Home Assistant OS, the fully managed version that handles updates, backups, and add-ons cleanly without needing to manage a Linux server underneath it. External access runs through a Cloudflare Tunnel: no open ports on the router, no exposed IP address, no port forwarding. The tunnel connects outbound from the Pi to Cloudflare’s edge, which proxies external traffic back in, so the result is a publicly accessible URL with no attack surface on the home network side. SSL is handled by a Let’s Encrypt certificate that renews itself automatically via an HA automation. No manual cert renewals, no open firewall rules.
Zigbee runs through an SLZB-06 network coordinator, a standalone networked device running a Texas Instruments CC2652 chip. It handles 53 Zigbee devices across the house, all local, no cloud required.
The system currently manages:
- 1,897 entities across 30 domains
- 66 automations
- 20 defined areas covering every room in the house
- 884 sensors (most of these are device telemetry, but a good chunk are custom)
Design Philosophy
The goal is simple: Safe, Reliable, and Easy to Use. Not impressive to demo, not packed with features for their own sake, but a system that the whole family can operate without thinking about it, that doesn’t fail in ways that are hard to recover from, and that doesn’t introduce risk into the home. Every decision below traces back to one of those three.
Everything runs local, with no cloud and no exceptions. Nothing in this system phones home to work: no Samsung account, no Shelly Cloud, no Alexa in the middle. If the internet goes down, every light, sensor, and automation keeps running exactly as it did before. It’s a reliability choice as much as a privacy one. Cloud-dependent devices break when the manufacturer changes their API, sunsets an app, or simply goes under, so local-first means the system stays under your control indefinitely.
That also means open source for anything with an IP address. If a device runs on WiFi or ethernet, it runs open firmware where possible: Shelly modules run ESPHome, ESP32 boards run ESPHome. Open firmware is what makes the local-first principle stick. You’re not dependent on the manufacturer to keep their app or cloud running, and you’re not locked out if they decide to start charging for features that used to be free.
Battery-powered devices go the other way: Zigbee, not WiFi. WiFi is power-hungry; Zigbee is not. Sensors, buttons, and remotes that run on batteries are all Zigbee, sleeping between transmissions and lasting one to two years on a single battery. No battery device in this house is trying to maintain a WiFi connection.
Hardware is matched to the installation type. Safety and fit matter here at least as much as preference:
- Sonoff S31 for wall outlet plugs. UL listed, fits a standard outlet, controls whatever is plugged in.
- Shelly Plus 1 for inside the gang box, wired in-line. Also UL listed, fits behind an existing wall switch without replacing the switch plate.
The SLZB-06 Zigbee coordinator sits on the network as a standalone device rather than a USB dongle plugged directly into the Pi, and that abstraction matters: if the Pi fails and needs to be replaced, the Zigbee network keeps running. Swap the Pi, point the new install at the SLZB-06, and the 53 Zigbee devices never know anything happened.
Automations here are event-driven in both directions. A common beginner mistake is automating the “on” condition and using a timer for the “off.” Here, automations respond to events in both directions: a door closing, motion clearing, a sensor changing state, a person leaving a zone. The system reacts to what actually happened, not to what a countdown assumed would happen.
The hardware itself is modular by design. The Pi runs from an SSD rather than an SD card, which is faster, more reliable, and swappable in minutes if it fails. Long-term sensor history is stored in a SQL database rather than HA’s default SQLite recorder, keeping historical data intact across reinstalls.
A Sonoff S31 plug acts as an external hardware watchdog for the Pi. If the Pi stops responding, it cuts and restores power, a hard reset that no amount of software can prevent.
If the right sensor doesn’t exist, the fallback is to build it. A meaningful number of the devices and sensors in this system are custom-built or modified: ESP32 boards wired to non-standard sensors, commercial devices reflashed with open firmware, purpose-built enclosures for specific spots in the house.
Finally, the floorplan is the primary dashboard. Rather than a grid of cards, the main control interface is an interactive floorplan of the house. Lights, sensors, and switches are mapped to their physical locations, so you tap a room to control it and glance at the map to see what’s on.
Motion-Activated Lighting
Nearly every secondary space in the house has motion-activated lighting. Rooms with motion lighting include the Basement, Butler Pantry, Laundry Room, Furnace Room, Front and Rear Hallways, Front Bathroom, Garage, Living Room, and Family Room.
Several of these use luminosity thresholds, so they only activate at night or when ambient light is already low. No lights snapping on in a sun-drenched hallway at noon.
Shelly Relays Running ESPHome
Most of the light switching throughout the house is handled by Shelly Plus 1 modules, small single-relay boards that wire in behind an existing wall switch. The original switch stays on the wall and still works physically; the Shelly sits behind it and also makes it controllable from HA.
These aren’t running Shelly’s stock firmware. They’re all flashed with ESPHome: fully local, zero-cloud, no Shelly account required.
| Area | Circuits |
|---|---|
| Basement | Northeast, Northwest, Southeast, Southwest (4 zones) + Lab |
| Living Room | Ceiling lamp, floor lamp, main lights, Christmas tree, Christmas window |
| Family Room | Ceiling light, floor lamp |
| Garage | Main ceiling, shop ceiling |
| Office | Wall light, sofa lamp |
| Hallways | Front, rear, upper |
| Laundry Room | Ceiling light, washing machine outlet |
| Butler Pantry | Ceiling light |
| Furnace Room | Ceiling light |
| Front Bathroom | Lights |
| Kid’s Room | Beacon light |
ESPHome can also detect a fast double-press of a physical wall switch as a separate event. In the hallways, basement, office, and laundry room, a quick double-tap triggers a different action than a single flip, typically toggling a group, triggering a scene, or firing an automation. The wall switch becomes a two-function controller without any hardware changes.
The Office: A Room That Pays Attention
The office has more automation logic than any other room, built around one idea: the room should know whether I’m working and respond accordingly.
Four independently controllable LED strips point at the walls (East Warm, East White, West Warm, West White) for reflected lighting, tuned for different modes throughout the day.
Seat detection comes from a pressure sensor under the chair, feeding into a binary helper that tracks whether the seat is occupied. Sitting still at a desk doesn’t generate much motion, so without the seat sensor, the lights would time out mid-work. The sensor is a custom mod: a battery-powered Zigbee door sensor with its Hall-effect chip desoldered and a car-seat airbag pressure pad wired in its place. See the Zigbee Chair Occupancy Sensor project for the full teardown.
That same seat sensor also drives billable time tracking. Sitting down starts a blinking LED prompt to pick which of several ongoing projects the time should count against, using a small set of Zigbee buttons (a six-sided smart cube was tried first for project selection, but plain buttons turned out easier to use). Once a project is picked, an hours sensor tracks time against it and rolls into a daily-resetting meter. Getting up doesn’t need a button press: the same seat sensor, combined with a short delay and the room’s motion sensor, recognizes when you’ve actually left and stops the clock automatically until you sit back down.
A house-wide Guest Mode toggle shifts certain behaviors when company is over, and auto-expires at 2am so it’s never accidentally left on overnight.
MagiQuest wands have also been repurposed as home automation controllers. The wands are infrared: when flicked or swished, they emit an IR signal containing the wand’s unique serial number. Custom-built ESP32 devices with IR receivers decode the serial and fire the corresponding automation, and each wand is individually identified. Waving a wand controls holiday lighting, the Christmas tree, color effects, or any scene, and it actually looks like magic.
Digital Curfew
The dashboard gives parents direct control over the router’s digital curfew. The family’s OpenWRT router blocks internet access for specific devices on a schedule, controlled entirely from HA. Four independent groups cover kids’ devices, the Roku, a teen’s PC, and the family room TV.
The HA side is template switches that call a CGI script on the router via REST. Status is polled every 60 seconds and displayed as toggle tiles on a parent-only dashboard panel. See the Digital Curfew project for full implementation details.
Presence and Arrival Automation
The house knows when people come and go. When a family member arrives home, a notification fires. When a specific person arrives, the garage door opens automatically via a RATGDO-based ESPHome controller, which also drives an outdoor keypad for PIN/tag entry (see the Wiegand Keypad Garage Door project for the full build). These use HA’s built-in zone system with phone GPS tracking.
The family room uses an Everything Presence One mmWave sensor (ESP32-based) rather than a simple PIR sensor. mmWave detects stationary occupancy, someone sitting still reading or watching TV, not just movement.
Water and Appliance Monitoring
Water leak sensors cover the furnace room (AC condensation drain) and under the kitchen dishwasher.
A refrigerator door sensor monitors the left door, and if it’s left ajar, the whole house flashes its lights. Hard to miss, which avoids an accidental great thaw by morning.
A freezer temperature sensor fires a notification before food is at risk.
For the toilet tank, an automation watches for the tank to stop refilling within the expected window, catching a stuck flapper or running toilet, and a counter tallies flushes. The sensor is the same custom mod as the office chair: a battery-powered Zigbee door sensor with its Hall-effect chip desoldered and a float switch wired in its place, mounted on the tank’s overflow tube with a 3D-printed clip. No wall power, just a small Zigbee device inside the tank lid. See the Zigbee Toilet Flush Sensor project for the full write-up.
Holiday Automation
A water level sensor in the Christmas tree stand monitors the reservoir and sends a notification when it needs refilling. A separate sensor tracks the pet water bowl. Both are modified Zigbee leak detectors with extended probes, mounted in custom 3D printed holders.
The tree lights run on an automation with scheduled power, plus a wand trigger for manual control during the season.
Robot Vacuum
The DreameBot L10s Ultra is integrated with Home Assistant. HA monitors state, task status, charging status, auto-empty status, self-wash base status, and cleaning count, which is useful for automations that shouldn’t run while the vacuum is active.
Infrastructure and Self-Monitoring
An automation for Zigbee device offline alerts periodically checks for devices that have gone offline or stopped reporting, useful for catching dead batteries without having to notice manually.
A sensor for unavailable entity count tracks how many entities are currently unavailable; spikes are an early signal that something went wrong.
Watchman, an add-on, scans automations and scripts for references to entities or services that no longer exist, catching dangling references before they silently break automations.
Two more automations fire HA startup and shutdown notifications when HA starts and stops. Simple, but useful for knowing when the system rebooted unexpectedly.
Cat Treats
Yes. There is an automation called Cat Treats Feed. It’s exactly what it sounds like. Several Zigbee buttons throughout the home and timed automations provide tasty distractions.
What Makes It Work
None of this is magic. It’s a lot of small decisions made consistently. Every room has an area assigned. Every device has a name that describes what it actually is. Automations are named for what they do, not what triggered them. The result is a system that’s navigable six months later, when you’ve forgotten why you built something.
The stack:
- Hardware: Raspberry Pi 4, SLZB-06 Zigbee coordinator, Shelly Plus 1 (ESPHome firmware), Sonoff S31, Tuya Zigbee sensors/buttons, Everything Presence One mmWave sensor, ESPHome ESP32 devices
- Software: Home Assistant OS 2026.3.2, ZHA integration, Zigbee2MQTT, ESPHome, Watchman
- Protocols: Zigbee (primary), WiFi (Shelly/Sonoff/ESPHome), REST (router integration)