Home Assistant configuration for a smart-looking place!
by René-Marc Simard
Configuration for Home Assistant running Hass.io on a Raspberry Pi for a one bedroom apartment, offering convenience automations over lights and climate while providing multiple intuitive user controls.
Table of contents
Goals | Agile development
- Key features
Climate control | Weather report | Lighting control | Presence and basic security | Modes and scenes | General information | Additional human interfaces
Supporting hardware choices | Configuration | Systems and bridges | Physical devices | Software | Usage
This is a fully documented working configuration for Home Assistant, with screenshots, hints and comments. Browse the code to have a look!
- Inconspicuous: I love tech alright, but like any good butlers it should stay out of sight yet stay summonable. Think Fiji villa, not server room.
- Modular: Both code and devices should be easily replaceable.
- Internet independent: As much local processing as possible for the essential features.
- Accessible through multiple ways: Computers, tablet (kiosk), voice, smart phones, wireless buttons, remotes.
- Intuitive user interfaces: One look at a group of sensors/switches should be sufficient for anyone to understand the current states and how to operate an interface.
- Redundant controls: Multiple interfaces should be able to control devices without interference. State changes from manual interventions or dedicated manufacturer apps should be tracked whenever possible.
- No information overload: Provide just enough insights to get an idea of what's going on. And no need for data that's best consumed on more interactive devices (like stock prices, Steam community status…)
- Not everything should be networked: Bathroom fan, pantry and laundry room lights have their independent motion sensors and that's a good thing. Same independence goes for the smoke detector: I sure don't want to require extensive skin grafts because I forgot an extra space in a YAML file.
- No Alexa/Cortana/Google Voice: I don't want to have advertising agencies, online stores, or other AI-feeding Big Brother tech-monsters listening in to everything we say and do just for the dubious convenience of toggling lights by voice command. Privacy-centered, offline voice-control solutions like Mycroft and Snips look far more appealing.
This configuration is built with an Agile-like methodology, lead by following main user stories:
- As a resident I want a reliable home automation platform to handle lights and climate that can easily be controlled and overridden in many intuitive ways.
- As an apartment dweller I want to have a discrete, non-permanent installation that takes as little space as possible.
- As a developer I want to use an open-source platform that is feature-rich, accessible, flexible and actively maintained.
- As a consumer I want to pick and choose which devices I wish to acquire without necessarily being locked into a closed ecosystem.
- As a couple we want to be able to operate lights and climate-control appliances as well as get quick overview of weather forecasts and public transit schedules through simple to use interfaces.
- Temperature monitoring, averaged and rounded to compensate for sensor calibration issues.
- Humidity monitoring, also averaged and rounded.
- Toggle dehumidifier when needed, based on humidity averaged from multiple sensors, and only during the afternoon so not to bother anyone.
- Turn dehumidifier off when windows/doors are opened, instantly for windows and after a few minutes for doors.
- Low/High humidity status and alerts, in case something is wrong with the dehumidifier or the humidifier.
- Mold conditions status and alert, in case dehumidifier is full/overwhelmed or someone transformed the place into a steam room.
Weather report ⛅
- Easy to read status and forecasts using Dark Sky data and only showcasing parameters that actually matter, shown in obvious ways.
- Outdoor quality monitoring with numeric levels and human-friendly categorization for ozone, carbon monoxide, nitrogen dioxide, sulphur dioxide, 2.5μm particulate matter and UV light, averaged from multiple surrounding public local stations.
- Weather radar and satellite maps for local rain and snow from Environment Canada and regional air masses from the U.S. National Oceanic and Atmospheric Administration.
- Control for all pluggable lights, smart ones at
/lights/and basic ones using
- Nanoleaf Aurora control:
- Manual theme selection.
- Automatically rotate through device-based themes based on time of day (unless manually selected above).
- LIFX Z bed underglow lights and ceiling wash lights control:
- Manual theme selection.
- Automatically rotate through cloud-based themes based on time of day (unless manually selected above).
- Automatically correlated colour temperature (CCT), for f.lux-like white temperature shift to gradually remove blue light based on a custom colour and brightness curve, not simply based on the sun …otherwise Canadian winters would be quite yellow!
- Motion-based nightlights, where strategic lights fade in, dimmed very low, when movement is detected at night, say when someone wakes up to go the bathroom …again.
Presence and basic security
- Cellphone device sensing, to check who is currently home or away.
- Tamper monitoring, in case a perimeter device has been played with.
- Water leak monitoring, to be able to react quickly when a pipe breaks.
- Opened door alert, to know if someone left an exteral door open.
- Opened door indicators where a chime is played and a few lights change colour briefly and subtly when the front door opens/closes, say to indicate an oblivious showering partner that their better half has left or just came in.
Modes and scenes
- Mode based where unless a blocking mode is set, devices will turn on. Think of a river or a horse: tame it to keep it under control, but release the restraints and they will do their thing:
- Quiet mode where noise makers know to stop or not to start.
- Nap time mode that fades out lights in and near the bedroom and enables quiet mode.
- Night mode fades out all lights outside of bedroom, enabling quiet mode too.
- Low-power mode where each room knows which device should be on or off to achieve a more economical and calm state.
- Smart rooms that know which devices should be on or off based on the modes above. No need for heavy centralized control, let local managers handle their teams!
- Good morning action that releases all blocking modes, allowing all lights to turn on gradually, and noise-making devices are allowed to run if needed.
- Smart global scenes based on
/scripts/instead of scenes, to allow for sequences and conditions:
- Movie scene turns on ambiance lighting and dims smart lights when playing a movie, then returns to standard automations when pausing/stopping.
- Daylight/Gaming/Romantic global scenes fade in and out different lights, select effects and change light colours to set a perfect mood.
- Local bus schedules with the next 3 departures. See
/gtfs/for optimization hints.
- Doomsday Clock in case egocentric psychopaths keep on playing Russian roulette with humanity's future.
- Network status monitoring for latency, upspeed, downspeed, and monthly consumption.
- Home Assistant status monitoring for geek cred with average load, RAM use, disk use, uptime, and update availability.
- Daily audio greeting to start the day on a informed, uplifting note. See
Additional human interfaces
- Aeotec Minimote to quickly control global scenes and modes.
- Flic buttons on nightstand and in the kitchen for triggering modes and controlling localized lights, depending on current states and click types.
- HADashboard for wall-mounted tablet, featuring indoor sensors reports, transit schedules, weather forecast and radar/sattelite maps, wrapped in an obvious navigation scheme for much UX goodness. Have a look at
/appdaemon/dashboards/, you'll like!
- Home Assistant Companion iPhone app for full UI access in the palm of my hand. Muahahaha!
- HomeKit for using some key sensors and devices with iPhones.
Supporting hardware choices 🧱
- Ubiquiti router and access point because forking over some dough for reliable, rock-solid prosumer networking gear makes everything run smoothly. And because hearing one less complaint (dropped WiFi signal) from the girlfriend is priceless.
- Uninterruptible power supply to ride over transient power failures.
- WiFi for its cheapness, omnipresence and non requirement of vendor-specific hubs.
- Z-Wave for reliability and guaranteed interoperability between vendors (unlike Zigbee…)
- Dedicated, firewalled VLAN (Virtual LAN) to segregate all IoT devices from other equipment …because I cannot trust that my vacuum cleaner won't go on a killing spree. Ever seen Runaway (1984) with Tom Selleck? Eek!
- Local static IPs for all devices to minimize random drops.
- Local development on a local virtual machine using Docker, then pulled with GIT on a Raspberry Pi.
- Plentiful documentation, for my later self and to help out others.
- Shareable code with all identifiers kept in a non-committed, secrets file.
Systems and bridges
- Aeotec Z-Stick Gen5 Z-Wave USB dongle.
- Milight iBox2 WiFi Bridge for kitchen RF LED strip controllers, using LimitlessLED integration.
- NooElec NESDR SMArt RTL-SDR (software-defined radio) USB dongle for reading AcuRite sensors.
- Raspberry Pi 3 Model B+ running Hass.io.
- Raspberry Pi Zero W (x3), each managed through resin.io to run as simple, dedicated plug-in bridges for the following services:
- Airthings Wave radon detector bridge running airthingswave-mqtt by Herb Peyerl (@hpeyerl) in order to interface with this Bluetooth radon detector.
- CEC MQTT bridge by Michaël Arnauts (@michaelarnauts) to provide basic switching control and state sensing to a connected television.
- Flic smart button bridge to connect with these Bluetooth Low Energy buttons.
- 24V 3014 Warm White Cool White LED Strip encased in custom cut and assembled light-diffusing aluminum profiles (x4), connected to Milight RF controllers below.
- Adalight [Ethernet] DIY 100-dots TV backlighting controlled by Lightpack+Prismatik on HTPC.
- DIY LED nightstand [WiFi] via TP-Link outlet.
- Fairy lights [WiFi] via TP-Link outlets (x3).
- LIFX+ [Z-Wave] A19 RGBWW light bulbs (x2).
- LIFX Z [Z-Wave] light strip without HomeKit as bed underglow (x2) and ceiling wash lights (x3).
- Milight CCT LED RF Controller [2.4Ghz] for white-adjustable undercabinet kitchen lights (x4), connected to appropriate UL-listed power supplies.
- Nanoleaf Aurora [Z-Wave] light panels kit. Pretty!
- AcuRite 06044M Wireless Sensor [433Mhz] for cheap temperature and humidity monitoring inside a cigar humidor.
- Aeotec Door / Window Sensor Gen5 [Z-Wave] for front door.
- Aeotec MultiSensor 6 [Z-Wave] (x3) for temperature/humidity/presence detection.
- Airthings Wave radon detector [Bluetooth Low Energy] to keep an eye on this cancer-causing radioactive gas.
- Dome Leak Sensor [Z-Wave] (x2) in case the dishwasher breaks a seal, a shower curtain has not been closed properly …or a toilet has overflowed.
- Ecolink Firefighter [Z-Wave] to warn those outside that the fire alarm has been triggered.
- Acer Iconia One 10" tablet [WiFi] with its 1280x800 IPS screen wallmounted as a kiosk. See
- Aeotec Minimote [Z-Wave] remote control.
- Flic [Bluetooth Low Energy] buttons (x2).
Switches and other devices
- Frigidaire dehumidifier via TP-Link WiFi outlet.
- Oscillating fan via TP-Link WiFi outlet.
- TP-Link Smart Plug Mini outlets [WiFi] to control dumb devices (x6).
- Docker on local machine (for development). True, Hass.io is Docker-based too…
- Fully Kiosk Browser on wallmounted tablet for display and input.
- Hass.io on Raspberry Pi 3 Model B+ (production setup).
- LANnouncer on wallmounted tablet for simple audio and text-to-speech messaging.
- AppDaemon for HADashboard tablet UI.
- Mosquitto MQTT broker for standard IoT messaging.
- RTL_433 to MQTT Bridge to receive and decode AcuRite radio signals.
- Samba share for configuration file sharing.
- SSH server for command-line access.
Community components and widgets
- Custom UI elements to improve the display of sensors and jazz up the interface a bit.
- Display platform for integration with the Fully Kiosk Browser.
- Doomsday Clock component to track how close humanity is to a man-made global catastrophe.
- Horizontal line state card to visually separate long lists of sensors.
- Lightpack component to control TV bias lights.
- Raspberry Pi power sensor to warn in case of insufficient power supply.
- Text-only state card for wordy sensor states.
- Variable component for non-boolean values.
In an empty directory, type:
git clone --recurse-submodules firstname.lastname@example.org:renemarc/home-assistant-config.git . echo "secrets.yaml filter=secret merge=keepMine" > .gitattributes cp secrets-dummy.yaml secrets.yaml cp appdaemon/secrets-dummy.yaml appdaemon/secrets.yaml
Actual secrets and auto-generated sensitive files are obviously kept off this repo!
- Code and configuration is licensed under the Apache 2.0 License.
- Documentation is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License.
- The dedicated core team that builds and manages Home Assistant. They work fast and humbly.
- The horde of volunteer developers of all components and add-ons.
- The vibrant community, always willing to help and share code samples.
- The BRUH Automation YouTube channel, Ben's videos got me hooked on using Home Assistant.
Thank you for all your dedication, helpfulness and valuable insights. Cheers!
Don't forget to