Home Automation

Drawings of robots

I started tinkering with DIY home automation stuff sometime in 2020, during the first months of the pandemic. It was however less related to being confined at home than to the excitement of having moved to a house for the very first time at the beginning of March — which, only a few weeks later, proved to be a great timing to upgrade from an apartment!

The purpose of this section is to share my views on home automation, the details of my setup, and useful information on the devices I am using.

What I mean by "Home Automation"

The term "Home Automation" obviously implies that things should happen automatically around the house when it is convenient, thanks to so-called "smart home" devices. The most basic example of this is having lights turn on and off by themselves depending on external factors, such as the movement of the sun or the opening of a door.

However, the term itself is imperfect to describe everything I have implemented, as some of the ways I have upgraded my house so far using connected devices cannot exactly be described as automations, nor are they necessarily making my house any "smarter".

First example of a dumb non-automation I used "smart" devices to implement: I added battery-powered switches at convenient places to be able to... turn lights on and off. That's it. This is obviously not automating anything, and is certainly not making my home any smarter, as light switches have been around for over a century. The only difference, here, is that the process of installing these extra switches did not require touching anything related to the house's electrical system. In fact, the installation process literally involved nothing more than double-sided tape (which is now my favorite invention after zip ties).

Other things I have done that might not count as automations — but would probably count as "smarting up the house" — include being alerted when a door that should remain closed has been open for too long (although one could argue that I effectively automated the door's monitoring), and being able to voice-control lights (again, one could still argue this is an automation, as it effectively removes the need to get up and flick the switch).

How I Do It

Local Control is Key

I avoid devices that need to be connected to the internet to function and are controlled by remote servers, commonly referred to as "the cloud". The first reason to this is I simply find that idea preposterous: how does it make sense that a lightbulb should communicate with a data center located hundreds or thousands kilometers away, most probably in a different country (I live in Canada, so the servers are probably in the United States somewhere), to know when it should turn on or off? A lot of these devices are also famously insecure, and relying on the cloud for something as simple and essential as controlling the lighting of your house can prove really inconvenient in case of a downtime, whether it be the internet service provider's or the servers'.

The main exceptions to this rule in my house are Google Home / Google Nest smart speakers and some Chromecast devices. My smart speakers are however unable to control the other devices directly as they have to transfer requests to the local controller.

The fact that I own Google smart speakers is kind of a contradiction in my otherwise mostly degoogled life and my general care for privacy concerns. I would certainly be interested in trying out a FOSS alternative someday.

Preference for Plug-In or Battery-Powered Devices

I use smart bulbs and smart plugs, but no wired smart switch or outlet that has to be installed in place of a normal switch or outlet. I just find it more convenient this way, as I do not need to touch the house's electrical system and can move or change anything at will. I do however use a smart thermostat that had to be wired in-wall to control my heating, as there is no other option.

I find that smart bulbs offer more possibilities than smart switches, such as the possibility to change their colour or brightness at will. Smart switches can however be more budget-friendly when multiple bulbs are hooked to the same switch. In such cases, if the design of the available "normal" switch makes it possible, I like to use a motorized light switch. These are battery-powered smart switches that you stick on top of your actual light switches so they can mechanically toggle them when commanded to.

There are also some scenarios where I use a battery-powered button that can then be used to trigger an event that toggles a smart bulb or a smart plug, putting it on top on an always-on dumb switch if needed (a smart bulb cannot normally be controlled by a circuit switch as it must receive power even when it is off).

Communication Protocols

Several of my devices (mostly switches and sensors) are battery-powered, and therefore cannot be WiFi-controlled, as that would drain the battery in a day. There are mostly three communication protocols on the market for battery-powered smart home devices: Z-Wave, Zigbee, and Bluetooth Low Energy (also known as BLE). Until now, I have mostly been using Z-Wave devices, just because that happened to be what was available the first time I wanted to buy a battery-powered device (specifically a door sensor). I have started also using Zigbee devices recently (as of November 2022), as Z-Wave devices seem to be getting even more expensive and rare than they used to be. I have also been using some BLE devices, but I usually find the connection to these devices to be less reliable.

I do not use these protocols only for battery-powered devices though, as I also own smart plugs and light bulbs that use Z-Wave or Zigbee. This contributes to making my mesh networks more reliable, as plugged devices can act as repeaters for other nodes on the network. Furthermore, it seems difficult to find LAN-controlled WiFi home automation devices nowadays, so going with Z-Wave or Zigbee is often the safest option to make sure a device does not communicate with the outside world.

The only WiFi-controlled devices I use for home automation (aside from my smart speakers and Chromecast devices) are ones that I am able to control locally and that continue to work even if I prevent them from accessing the internet via my router's firewall.

My Setup

All my devices and automations are coordinated by a Raspberry Pi running Home Assistant. The Raspberry Pi is connected to my home network by an Ethernet cable, and is only accessible to the outside world through HTTPS. I also enabled two-factor authentication for maximum security.

The Raspberry Pi uses a Zooz Z-Wave Plus controller for communicating with Z-Wave devices using the Z-Wave JS integration for Home Assistant, and a SONOFF Zigbee 3.0 USB Dongle Plus for communicating with Zigbee devices using the Zigbee Home Automation (ZHA) integration for Home Assistant.

Home Assistant is mostly an event-driven automation system, not unlike IFTTT, except it is free software and has to be locally hosted. It allows me to set automation rules such as "Turn this light on when that door is opened". It supports a whole range of devices and services natively. It also has a backup system that allows me to save all my configurations in order to be able to restore them easily in case something bad happens.

Home Assistant can be accessed through a web interface and through the official mobile application. Both options feature the same customizable dashboard to keep an eye on all your devices and be able to control them at will.

Home Assistant Mobile Dashboard

What I Have Implemented So Far

Monitoring Doors

For cat-related reasons (specifically because of this a**hole), our bedroom doors have to remain closed at all times (except, you know, when someone needs to briefly open one of them to go in or out of a room). To make sure that nobody accidentally leaves their door open, I added sensors to them, and set up a rule in Home Assistant to broadcast a message to the smart speakers when a bedroom door stays open for more than 30 seconds. We also receive text message alerts, just to be safe.

Added Extra Light Switches at Convenient Locations

This is not exactly a "smart home automation", but I added battery-powered switches at convenient locations (for instance, on the wall behind my bed) by simply sticking them to the walls. These switches are used to toggle smart plugs or smart bulbs in order to be able to turn lights on and off without having to reach the actual circuit switch. In some cases, I also covered the circuit switch with a battery-powered switch to toggle the same smart plug or smart bulb, while making sure that the circuit switch always stays on.

Toggling a Light and Changing its Colour When the Sun Sets or Rises

There is a light at the end of the ground floor's hall. When the sun sets, it turns on and its colour switches to a non-aggressive light green tone. When the sun rises, it becomes a regular light before turning off, and can then be turned back on at will on the press of a button on the wall.

Automating Rooms' Lighting

I have some lights that turn on automatically when someone opens the door to the room, and turn off after a set period of time.

Being able to Voice-Control The Room's Lighting

"OK Google, Let There Be Light!" (Yes, that command works.)

Starting and Stopping Bathroom Fan Automatically

We usually leave the bathroom door open when nobody is in it (that's a necessity since we have 3 cats and one of the litter boxes is in the bathroom). That makes it pretty easy to detect if someone is in the bathroom, as it is correlated to the door being closed. I use this fact as a way to automate the bathroom fan: it turns on by itself whenever someone stays in the bathroom for more than 2 minutes without having started it, and it turns off by itself after 20 minutes of the door being opened.

Getting a reminder to move the laundry load to the dryer

We have a top load washing machine, and we usually leave its lid open when not in use. It was therefore really easy to add a door sensor to the lid to detect when the washer is started, and then receive a notification 1 hour later to remind us to move the clothes to the dryer. It will remind us again 2 hours later if we still haven't opened the lid.

Heat Control and Temperature Monitoring

Most of our house is heated by an electric furnace located in the basement. I replaced the regular thermostat with a smart one that allows Home Assistant to see the temperature measured by the thermostat, and control the target temperature. I configured automations to turn down the heat at night, as well as on weekdays when there is nobody home (presence detection is done by monitoring people's mobile devices on the network). I also use smart thermometers to monitor the temperature in specific parts of the house.

Universal Remote Control

I added a tab in Home Assistant that allows me to use my phone to control all the devices related to the living room's TV. An IR blaster in the living room serves as a gateway for devices that are usually controlled by an IR remote.

Screenshot of my remote control interface in Home Assistant

Devices I Use

Some of the devices listed below have a link to a page where I provide a review and more information about the device.

Controller

  • Raspberry Pi 4 Model B (4GB RAM)
  • Zooz Z-Wave Plus S2 USB Stick ZST10
  • SONOFF Zigbee 3.0 USB Dongle Plus

Wall Switches

Door Sensors

Smart Bulbs

Smart Plugs

  • Leviton DZPA1-2BW Indoor 15 Amp Plug-in Outlet
  • Minoston Z-Wave Smart Plug

Smart Speakers / Media Controllers

  • Google Home (2017)
  • Google Home Mini (2018)
  • Google Nest Mini (2020)
  • Chromecast (3rd generation)
  • Chromecast with Google TV

Climate Control and Monitoring

IR Blaster