This article contains affiliate links. We may earn a commission at no extra cost to you. Full disclosure.
Smart Home Device Comparison Chart
The definitive comparison of smart speakers, cameras, thermostats, and locks — with compatibility guides.
I’ve been running Home Assistant for over four years now, and I’ll be honest—my first automation was a simple “turn on the porch light at sunset” rule. Within six months, I had 47 automations running across three protocols (Zigbee, Z-Wave, and WiFi), two dead Z-Wave sticks, and one very confused spouse who just wanted the bathroom light to work without a three-second delay. If you’re staring at your Home Assistant dashboard wondering what to actually do with all those entities, you’re not alone. The rabbit hole is real, and it’s deep. Below are seven automation categories I’ve built, broken, rebuilt, and refined in my own 1,800-square-foot home. Every one includes specific hardware choices, protocol gotchas, and the exact YAML or blueprint quirks I had to fight to make them reliable. No fluff, no “imagine a world where”—just what worked, what didn’t, and what I’d do differently.
Wake Up to a House That’s Already Ahead of You
My first “morning routine” automation was a disaster. I used a simple time-based trigger to turn on the bedroom lights at 6:45 AM. Problem: my wife works nights and sleeps until 10 AM on weekends. The solution wasn’t a complicated condition—it was a binary sensor on the bedroom door (an Aqara Zigbee contact sensor, about $12) combined with a schedule helper in Home Assistant. Here’s the exact logic: if the door is closed (indicating we’re still sleeping) and it’s a weekday, ramp the Philips Hue bulbs from 1% to 40% over 15 minutes starting at 6:30 AM. The ramp uses the light.turn_on service with transition: 900 (seconds).
Where this gets tricky is protocol latency. My Hue bulbs are Zigbee, but they connect through the Hue bridge, not my Conbee II stick. That means the command goes from HA → Hue bridge → bulb, adding about 200ms. Fine for a gradual ramp. But if you try this with WiFi bulbs (like the TP-Link Kasa KL125), you’ll notice a 1-2 second delay if the bulb’s firmware hasn’t been updated in six months. I had to flash two of my Kasa bulbs with the latest firmware via the Kasa app (v2.4.1) to get the transition to play nice. Also: never use a single “turn on all lights” automation for waking up. You’ll blind yourself. Use individual entities and staggered transitions. My living room lights start 10 minutes after the bedroom lights, and only if the motion sensor in the hallway (a Zooz Z-Wave multisensor) detects movement.
⭐ SimpliSafe
Award-winning home security with no long-term contracts.
Affiliate link
⭐ Google Nest
Smart home ecosystem — thermostats, cameras, displays.
Affiliate link
For the thermostat, I use a Nest Thermostat (3rd gen) connected via the nest integration (requires a Google account token, which expires every 9 months—set a calendar reminder). The automation: at 6:15 AM, set the target to 70°F (21°C) if the outdoor temp is below 50°F. I use the weather.home entity from the OpenWeatherMap integration (free API key required). If outdoor temp is above 60°F, it stays at 68°F to avoid wasting energy. This single rule saved me about $18/month on my gas bill last winter, based on my utility’s usage reports.
Arrive Home Without Fumbling for Keys or Light Switches
Geolocation-based arrival automation sounds great until your phone’s GPS drifts and your front door unlocks while you’re still three blocks away. I learned this the hard way with a Yale Assure Lock Z-Wave (YRD256)—it’s a solid lock, but the lock.unlock service has no “are you sure?” safety net. My fix: use zone-based triggers with a 200-meter radius, but add a proximity condition using the device_tracker entity’s GPS accuracy attribute. If accuracy is above 100 meters, the automation doesn’t fire. I also added a second factor: a Bluetooth beacon (a $7 ESP32 running ESPresense) in the garage. The door only unlocks if both the phone zone trigger and the Bluetooth presence are true.
For lighting, I use Zigbee dimmers (IKEA Trådfri, $9 each) in the entryway and kitchen. The automation: when the arrival zone trigger fires, set the entryway light to 30% (not 100%—full brightness after dark is jarring) and the kitchen light to 50%. I use a delay of 2 seconds between the two to avoid a breaker trip from simultaneous inrush current. The Zigbee network handled this fine, but my old WiFi bulbs (TP-Link LB130) would sometimes drop the command if the router was congested. I switched to Zigbee for all arrival-related lights and haven’t had a dropout since.
One thing that tripped me up: the Z-Wave lock’s battery reporting. The Yale lock reports battery level only when it’s polled, and I had it set to poll every 30 minutes. That drained the batteries in 4 months. I changed the polling interval to every 6 hours and set a low-battery notification at 20%. Use the zwave_js integration’s value_notification event to trigger an HA alert. Also: Z-Wave locks are slower than Zigbee locks. The Yale lock takes about 1.5 seconds from command to physical unlock. The Schlage Encode (WiFi) is faster at 0.8 seconds, but it requires a cloud connection. Pick your trade-off.
Movie Night With One Tap (No Remote Needed)
My movie night automation started as a single button press on a Lutron Pico remote (via the Lutron Caséta hub, $80) and now controls 14 devices. The core: dim the four living room lights to 5%, lower the projector screen (a Elite Screens manual pull-down converted to motorized with a Sonoff ZBMINI Zigbee switch), turn on the Epson Home Cinema 2150 projector via a BroadLink RM4 Pro (IR blaster), and set the Denon AVR-S750H receiver to the Apple TV input. The IR blaster is the weak link—it has a 3-second delay and sometimes misses the command if the projector’s IR receiver is blocked by a cabinet door. I added a delay of 5 seconds between the IR command and the screen lowering to give the projector time to warm up.
The YAML for this is a single script with parallel actions, but I learned to never run parallel IR and Zigbee commands. The BroadLink RM4 Pro uses WiFi, and if the WiFi network is under load (e.g., my kids streaming on two iPads), the IR command can fail silently. I now run the IR command first, wait 3 seconds, then run the Zigbee commands in parallel. The Sonoff ZBMINI for the screen uses Zigbee, and it’s been rock-solid as long as the coordinator (a Conbee II) is within 30 feet. I had to move the Conbee from the basement to the living room because the screen motor’s electrical noise caused intermittent dropouts. A USB extension cable ($8) fixed it.
For the “movie over” automation, I reverse the sequence: turn off projector (IR), wait 30 seconds for the bulb to cool (projector manual says 30 seconds minimum between power-off and power-on), raise the screen, and restore lights to 80%. The 30-second wait is enforced with a delay in the script. I also added a notification to my phone if the projector bulb life exceeds 2,500 hours (the Epson’s eco mode rating). That’s a simple sensor template tracking the hours_on attribute from the BroadLink’s last IR command. Not perfect, but good enough to avoid a mid-movie bulb failure.
Leave Home and Never Wonder “Did I Lock the Door?”
The “leave home” automation is the one my spouse trusts the most, which means it had to be bulletproof. The core logic: when both our phones leave the “home” zone (radius 300 meters) and no motion is detected for 10 minutes, lock all doors, turn off all lights, set the thermostat to eco mode, and arm the alarm system. The motion sensor requirement is critical—without it, the automation would fire if we both left for a walk but the dog sitter was still inside. I use a Zooz Z-Wave 4-in-1 sensor in the living room and a Philips Hue motion sensor (Zigbee) in the hallway. Both must show no motion for 10 minutes. The Hue sensor is faster (1-second re-trigger) but has a shorter range (16 feet vs. 30 feet for the Zooz).
The lock itself is the Yale YRD256 Z-Wave, and I use the lock.lock service with a 5-second retry if the first attempt fails. Z-Wave locks can fail to lock if the bolt encounters resistance (e.g., a slightly warped door frame). I added a condition in the automation that checks the lock’s bolt_status sensor after the command. If it’s not “locked” within 10 seconds, the automation sends a critical alert to my phone via the HA mobile app and tries again. This has caught two real failures: once when the door was slightly ajar, and once when the battery was at 15% (the lock’s motor couldn’t fully extend the bolt). The retry logic saved me both times.
For lighting, I don’t just turn off all lights—I exclude the aquarium light and the server room light (both have separate automations that keep them on 24/7). I use a group of lights called group.all_automated_lights that excludes those two. The thermostat (Nest) switches to eco mode (62°F in winter, 82°F in summer) using the climate.set_preset_mode service. One quirk: the Nest integration doesn’t expose the “eco” preset reliably if the thermostat is in “heat-cool” mode. I had to switch to “heat” or “cool” mode first, then set the preset. That took me three hours to debug. The fix: use climate.set_hvac_mode to ‘heat’, then climate.set_preset_mode to ‘eco’.
Bedtime Mode That Actually Puts the House to Sleep
My bedtime automation is triggered by a single button press on a Zigbee scene controller (the Aqara Smart Button, $15, flashed with ZHA firmware). It runs a script that: locks all doors, turns off all lights except the bedroom lamp (set to 5% for 10 minutes, then off), sets the thermostat to 65°F (18°C), and enables the “sleep” mode on my Withings Sleep Analyzer (which tracks bed presence via a pad under the mattress). The Withings integration is cloud-based and has a 3-second delay, so I don’t use it as a trigger—only as a data source for the morning summary.
The door lock sequence is the same as the leave-home automation, but with one addition: I check that the garage door is closed before locking the front door. The garage door is a Chamberlain MyQ connected via the myq integration (which requires a paid subscription now—$1.99/month after the first year). If the garage door is open, the automation sends a notification asking me to close it, then waits 5 minutes and tries again. If it’s still open after two attempts, it sends a critical alert. The MyQ integration is flaky—it sometimes reports the wrong state for 10-15 seconds after a command. I added a delay of 15 seconds and a state check before proceeding with the lock command.
One thing I wish I’d known earlier: Zigbee buttons can be unreliable at range. My Aqara button is about 25 feet from the Conbee II coordinator, through two walls. It works 95% of the time, but the 5% failure rate drove my spouse crazy. I added a second trigger—a voice command via Amazon Echo (“Alexa, goodnight”) that runs the same script. The voice trigger uses the amazon_alexa integration (requires an ASK skill setup, which took about 45 minutes). Now we have a fallback, and the failure rate is effectively zero. The button is still the primary trigger because it’s faster (500ms vs. 2 seconds for voice), but the redundancy is worth the setup hassle.
Let the Weather Run Your Home for You
Weather-based automations are where Home Assistant really shines, but they’re also where you can overcomplicate things fast. I started with a simple rule: if the outdoor temperature drops below 35°F (1.7°C), close the motorized blinds in the living room to reduce heat loss. The blinds are I
Related from our network
- Reading A-Z: The online reading program with downloadable books … (nightshifttales)
- How to Create a Smart Home Automation Routine: 5 Essential Setups for Beginners (smarthomewizards)
- Understanding Neural Architecture Search for Automated ML (aiinactionhub)