Overview
One of the biggest aspects of self hosting is Home Automation. My first foray into this space was Wink with Zigbee lightbulbs, then SmartThings. Both provided the automation I was looking for but all processing required a local hub which would then send all commands out to the cloud, and then back to the hub. It wasn’t great, and often resulted in delayed processing and any issues with internet rendered the whole system useless.
Then I discovered Home Assistant. (which, going forward will be referred to as HASS)
HASS ran on a Raspberry PI, supported multiple protocols; Zigbee and ZWAVE depending on the hardware, and WIFI devices. It also performed every action completely locally except for WIFI in some cases, but we’ll get into that later. It’s amazing, and one of the finest open source projects I’ve ever seen. Now, I’m going to try and avoid flying into the side of the mountain here and try to stick to the “what I use” mentality here, but expect the occasional loss of cabin pressure. If you think I love Proxmox, HASS has a restraining order against me. ;)
HARDWARE
Base Hardware
While HASS ran on a Pi (and many still do) I encountered a lot of issues with the Pi solution. Pi3 runs on SD Cards, and those aren’t meant for many long term writes and would fail or cause odd issues with HASS. I then tried a Pi4, but a flaw in the USB port would require a hub in order for the radio dongles to work. Hard pass. I went to a VM, and never looked back.
HASS can be run as containers, but for 99.9% of everyone else I recommend HASSOS. This deployment method wraps every part of the OS into an appliance, making configuration/setup much easier. HASS provides an OVA appliance for VMWARE. Here’s a link going over all methods. HASS even has their own hardware for purchase if desired. For us Proxmox users, TTECK has a script for easy deployment on KVM. Simply pass through the radio dongles needed to the VM.
Coordinators
Going forward, I’ll refer to the add on radios as coordinators, not dongles. Zigbee and ZWAVE are different radios and can be discrete hardware. You can buy one that does both, but I recommend against it. Keep them separate, and ensure that any radio attached via USB has at least a three foot USB extender. The USB ports emit RF that interfere and will disrupt the network of the coordinator. Matter/Thread are very new, I won’t be talking about them this time. There will be a hardware/software section on each radio.
Zigbee Hardware
The first USB coordinator I used was the Conbee2. I used it for about five years, and then the Conbee3 came out. I started doing some research and found a LAN coordinator, the UZG-01. This allows me to have the radio relay the commands over my LAN instead of directly connected over USB. As Lloyd Christmas once said.. “I like it a lot.”
Add to fact it has a nifty Vader helmet as an icon.
/Chef’s kiss.
Note: The UZG is more expensive than a USB only coordinator, I’ve heard good things about the Sonoff devices.
Zigbee Software
The integration for the Zigbee radio I started off with was called “Deconz.” This comes from Conbee and after about a year in it broke for me and never worked right again. Then I tried the HASS integration, “ZHA” which was MUCH better. When I bought the UZG I migrated to Zigbee2MQTT however. I very much prefer it to the other two, and the UZG can handle it easily. It’s a little more complex to setup initially, but it has broader compatibility with devices and just handles the network better. I’d love to get more into it, but the pilot has illuminated the “fasten seat belts” sign so that will have to be for another post.
ZWAVE Hardware
I use the USB Aotec Smart Home Z Stick Gen 5. I’ve had it since inception and it’s been a rock ever since. Not much else to say here, it’s just worked. I haven’t been able to find a turnkey solution for a LAN version like the UZG just yet.
ZWAVE Software
I can’t remember the first integration I used for ZWAVE, just that I hated it and was deprecated in favor of ZWAVE-JS. Broad compatibility, ease of use, I love this integration. You can use MQTT if you want, but I have it turned off and go directly USB for this one.
IOT DEVICES
Ok, I am going to break this up into three, Zigbee, ZWAVE, and WIFI.
There are devices that tend to be for a certain technology, I use devices from all three. This list is not comprehensive in any way, and I may be missing some. It’s a rough guide.
Zigbee: Tends to be lightbulbs, power plugs, sensors. Items like plugs/light bulbs are “mains powered” and function as relay points in the mesh. Battery powered devices do not relay to save power. You can pair a mains device in the mesh to extend the range of battery powered devices. It should be noted though, not every mains device is always a relay. Zigbee2MQTT has an exhaustive list of devices.
Lights: The current model of bulb I use is Cree. I like to have every light be controllable individually and group them together. I don’t have any color changing lights. Some like to use a wall switch to manage dumb lights. Works as a relay.
Power Plugs: Third Reality. I use these all over, they report power usage as well. Do not use them on loads like refrigerators or UPS(i?) though. I use mine to control some dumb lights like lamps, compute servers, fans, night lights, etc. Works as a relay.
Moisture Sensors: Third Reality again. They emit both a noise and notification via HASS. Battery powered.
Switch Actuator: Third Reality Smart switch Gen3. This is a nifty solution, very similar to a “switchbot” which fits over a physical switch and actuates the level on command, but using Zigbee. My use case here was dumb lights on my garage. Battery powered.
I have about 44 devices in my Zigbee mesh, with only a few battery devices. Zigbee2MQTT has a map you can pull up.
Here you can see the concept of a battery powered device being relayed via a mains device. The garage switch could not reach the network on its own but it can via plugs in the garage, which have stronger radios.
ZWAVE: Tends to be push button switches, wall switches, locks, motion detectors. contact sensors. The mains/battery concept is the same here.
Push Button Wall Switches: This can be a little confusing, so I’ll provide some context. Most of my lights are smart lights, and there’s only by default two ways to manage them. Turn off the physical switch and screw up the mesh, or use the HASS app every time. The other option is this solution, a ZWAVE toggle switch that can be tied to any entity in the system. I have one next to every physical switch. It’s a major win for the SAF. (Spousal Approval Factor) Made by Zooz. I use them to perform a complex series of automations in Node Red as well. They can handle multiple scenes and inputs. We’ll get into that in the software section. They’re great.
Locks: Just a Schlage lock. Nothing to see here. I can lock/unlock remotely and have a history of when it fires off.
Motion Sensors: These are Ecolink devices, and they’re ok. I have them for when the kids were younger and after a certain time at night they would trigger some lights to come on so we’d know someone was out of bed.
Contact Sensors: Ecolink again. Basically, if I open a door the magnet separates from the base it fires off a state change to HASS that I can use in automations. If I open my basement door, all the lights turn on, for example. You can also set an automation for the “closed” state as well
Smoke Alarm: First Alert device. Really i Just have this on HASS for battery monitoring. *chirp*
Thermostat: Lots of options here. back in 2016 I went with a 2gig CT100. Still going strong, I can set temps remotely and include it in automations.
That about wraps it up for ZWAVE. I have far fewer devices than Zigbee, and the majority are battery powered. I bought a Aotec range extender to give the devices further away some help.
WIFI: Tends to be lights, misc IOT.
There’s nothing special here, Just calling it out as another mechanism for IOT devices. I prefer to have everything local, but sometimes you can’t avoid a WIFI device. Some examples:
ESPHOME: These tiny circuit boards have WIFI built in. I soldered on some temperature sensors and scatter them around the house and garage. While WIFI, they are all completely local in this case. The use case is legion.
Broadlink: These RF/Infrared blasters are GREAT. I use them to automate the un-automateable. My projector? Done. My Minisplits? DONE. They are pretty flexible as well. For my projector It can be totally local. I train the blaster for some Infrared command using the remote and I can call it in HASS. They also have optional temperature humidity sensors in them as well.
My minisplits are another story. The way they do commands is that even if you change the degree by one, it sends the whole state. EVERY TIME. So even if I don’t change the vane direction or speed, or mode it still sends it. This makes it impractical for HASS. So I use the IOT service for that part and it works great.
Open Garage: One of my favorite devices. My Chamberlin/Sears garage doors are super dopey so there’s no way to automate it natively. These guys can connect directly to the opener and act as a relay to open/close the door. If it’s Secure+, you can also buy a push button to wire in the middle to make it work. It even has an ultrasonic sensor so you know if the door is open/closed or if the vehicle is present. A bit expensive, but worth every penny.
Honorable Mention: ratgo
Integrations/Add-Ons
This is where the hardware meets the software. There are integrations, which allow devices like Ring, Open Garage, etc to be imported into HASS along with entities for use in automations. Add-Ons allow extensibility to HASS itself.
Integrations:
A note. The majority of the time the native integrations work great. Sometimes though, they’re lacking. In those instances I use HACS (Home Assistant Community Store) I’ll call it out when it’s time.
Broadlink: Explained above
Enphase Solar (HACS) : Adds all inverters, batteries, etc
Proxmox: (HACS) The native integration is missing some entities for proper automations. The HACS version allows importing of all VMs with actions for start, shudown, reboot, etc
MQTT: Prerequisite for Zigbee2MQTT, which is an Add-On
ZWAVE: The integration that handles all ZWAVE devices. Supports the Z-Wave JS add-on.
Open Garage: Explained above.
Pirate Weather (HACS): You can register for a free API key and get local weather in HASS
Ring: Ring doorbell, I use this for notifications and displaying the image in a media card.
Sony Songpal: My receiver supports HASS! Or vice/versa same effect. Extremely useful for some automations I’ll get into later.
Synology: Useful for monitoring disk space, health, etc.
I also used to view my cameras through Surveillance Center with this integration but have since separated these out by creating YAML entities via RSTP instead, that way the feed is not affected if the Synology goes down.
Example:
Add-Ons
Node-Red:
I’m going to start off with my favorite integration. Back when I first got into HASS almost 10(!) years ago it was very different, and automations were difficult. Node-Red was the solution at the time for the rest of us. Since then, native automations have come a long way, but I’m sticking with NR. It allows for a graphical way to create automation flows. It really shows how all the disparate technologies can be brought together, seamlessly. Here’s an example of my automation called “Movie Time.”
Hit Boolean or Push button wall switch
Trigger “Movie Time” Boolean
Turn On Receiver, set input (WIFI)
Turn On Projector (WIFI/Infrared)
Turn off all lights in 10% increments until off (Zibgee)
Turn off Dehumidifier (Zigbee plug), Night Light, (Zigbee plug)
Null Logic for Contact Switch so lights wont come on if door opened (ZWAVE)
Turn on light on top of stairs for safety (Zigbee)
This would be difficult to setup, even today natively. Here’s what this looks like in NR.
When I use the Pushbutton switch here’s what that looks like:
To someone who can program and knows NR perfectly, I’m sure this is clunky. For me, it’s magic. I love NR.
I also use NR to manage notifications to the mobile app.
Uh oh, the oxygen masks just dropped, losing cabin pressure again. Time to pull up and move on.
ESPHome: This add-on allows the easy onboarding/management of ESP devices.
Grafana: I have a disparate influx database on Proxmox that that HASS feeds into, and then Grafana can pull those details and make them pretty. I use this mainly for long term temperature and solar data.
Mosquitto broker: pre-requisite for Zigbee2MQTT.
Zigbee2MQTT: Used to onboard and manage Zigbee Devices.
Z-WAVE JS UI: Used to onboard ZWAVE devices and and manage the network.
Studio Code Server: Used to manage the filesystem from HASS itself. Essential for easily modifying the configuration.yaml when needed.
Update: 1/14/25
I’ve removed this add on from my HA instance. It has a terrible issue that causes the entire server to max out on CPU when you use it and the only way to get it to settle down is to stop/start it after every use. I went back to the File Editor add-on instead.
Ok, I think that wraps this one up! The flight crew has notified me we we’re beginning our descent, and my keyboard needs to be stowed. Next, we’ll close out with what I use for VMs/containers on Proxmox.
Until next time.