🏠
Home Assistant configuration for a smart-looking place!
by René-Marc Simard 😃
Configuration for Home Assistant running on a Raspberry Pi for a one bedroom apartment, offering convenience automations over lights and climate while providing multiple intuitive user controls.
Be sure to ⭐️ or 🔱 my repo if you find it useful! 😃
Wall-mounted interface using /appdaemon/dashboards/
.
Note: Images are from States UI days and still need to be updated in the documentation. This configuration now uses Lovelace UI and AppDaemon exclusively.
Sensor /misc/groups.yaml
.
- TL;DR
- Overview
Goals | Agile development - Key features
Climate control | Weather report | Lighting control | Presence and basic security | Modes and scenes | General information | Additional human interfaces - Setup
Supporting hardware choices | Configuration | Systems and bridges | Physical devices | Software | Usage - License
- Thanks
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, Rhasspy 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.
Tasks are hopefully defined in the issue queue and their development progress is managed using a lightweight Kanban board.
- Temperature monitoring averaged and rounded to compensate for sensor calibration issues.
- Humidity monitoring also averaged and rounded.
- Low/High humidity status and alerts in case something is wrong with the humidifier.
- Mold conditions status and alert in case someone transformed the place into a steam room.
- Radon levels status and alert to monitor the indoor concentration of this cancer-causing radioactive gas.
- Easy to read status and forecasts using Dark Sky data and only showcasing parameters that actually matter, shown in obvious ways.
- Outdoor air 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.
- See
/misc/weather.yaml
and/appdaemon/dashboards/
.
- Control for all pluggable lights, smart ones at
/lights/
and basic ones using/switches/
. - 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.
- See
/lights/
and/automations/
.
- 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.
- Outdoor camera preview to see who is at the door.
- 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.
- 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.
- COVID-19 cases tracking to estimate how prevalent this darn Coronavirus is locally and elsewhere on Earth.
- Network status monitoring for latency, upspeed, downspeed, monthly consumption, WiFi status…
- Printer consumables monitoring to estimate how many pages can be printed properly.
- 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
/automations/notifications/
. - GitHub repository monitoring to track community health metrics for related repos.
- Aeotec Minimote to quickly control global scenes and modes.
- Flic buttons on a 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.
- Raspberry Pi 3B+ for it's compatibility, low-power, good-enough performance, and affordable price.
- SSD via Sabrent USB adapter to increase IO performance while reducing chances of disk corruption versus microSD cards.
- Ubiquiti UniFi networking gear because forking over some dough for reliable, rock-solid prosumer equipment 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 Python Virtual Env and 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.yaml
file.
Device |
Description |
Connection |
---|---|---|
Aeotec Z-Stick Gen5 | Z-Wave USB dongle. | USB |
Airthings Wave radon detector bridge | to interface with this Bluetooth radon detector by using airthingswave-mqtt from Herb Peyerl (@hpeyerl). Runs on a Raspberry Pi Zero W managed through balenaCloud. | WiFi |
Blink Sync Module | for battery-operated, cloud-enabled cameras. | WiFi |
CEC MQTT bridge | to provide basic switching control and state sensing to a connected television. Runs on a Raspberry Pi Zero W managed through balenaCloud. | WiFi |
Flic smart button bridge | to connect with these Bluetooth Low Energy buttons. Runs on a Raspberry Pi Zero W managed through balenaCloud. | WiFi |
Milight iBox2 WiFi bridge | for kitchen RF LED strip controllers, using LimitlessLED integration. | WiFi |
NooElec NESDR SMArt | RTL-SDR (software-defined radio) USB dongle for reading AcuRite sensors. | USB |
Raspberry Pi 3 Model B+ | running Home Assistant. | Local |
LED lights 💡 (see /lights/
)
Device |
Description |
Connection |
---|---|---|
24V 3014 Warm White Cool White LED Strip | (x4) encased in custom-cut and assembled light-diffusing aluminum profiles, connected to Milight RF controllers below. | Hardwire |
Adalight | DIY 100-dots TV backlighting controlled by Lightpack+Prismatik on HTPC. | LAN |
DIY LED nightstand | via TP-Link a smart plug. | WiFi |
Fairy lights | (x4) via TP-Link smart plugs. | WiFi |
LIFX Mini Color | (x3) A19 RGBWW light bulbs. | WiFi |
LIFX+ | (x2) A19 RGBWW light bulbs with infrared. | WiFi |
LIFX Z | (x5) light strips (non-HomeKit versions) as bed underglow and ceiling wash lights. | WiFi |
Milight CCT LED RF Controller | (x4) for white-adjustable undercabinet kitchen lights, connected to appropriate UL-listed power supplies. | 2.4Ghz |
Nanoleaf Aurora | light panels kit. Pretty! | WiFi |
Sensors 📡 (see /sensors/
)
Device |
Usage |
Connection |
---|---|---|
AcuRite 06044M Wireless Sensor | for cheap temperature and humidity monitoring inside a cigar humidor. | 433Mhz |
Aeotec Door / Window Sensor Gen5 | for front door. | Z-Wave |
Aeotec MultiSensor 6 | (x3) for temperature/humidity/presence detection. | Z-Wave |
Airthings Wave radon detector | to keep an eye on this cancer-causing radioactive gas. | Bluetooth Low Energy |
Blink XT2 | to keep a record of any movement outside. | WiFi / 900MHz |
Dome Leak Sensor | (x2) in case the dishwasher breaks a seal, a shower curtain has not been closed properly …or a toilet has overflowed. 🤢 | Z-Wave |
Ecolink Firefighter | to warn those outside that the fire alarm has been triggered. | Z-Wave |
Device |
Description |
Connection |
---|---|---|
Acer Iconia One 10" tablet | with its 1280x800 IPS screen wallmounted as a kiosk. See /appdaemon/dashboards/ . |
WiFi |
Aeotec Minimote | with its 4 double-state remote control buttons. | Z-Wave |
Flic Smart Buttons | (x2) for simple, triple-state, stick-anywhere, battery-powered physical buttons. 🔘 | Bluetooth Low Energy |
Device |
Usage |
Connection |
---|---|---|
Daikin 19 Series mini split heat pump | to cool, warm, and dehumidify the apartment. Connected via the optional WiFi adapter or Broadlink RM Mini 3 (upcoming). | IR / WiFi |
Rowenta VU2660U2 Turbo Silence Extreme oscillating fan | to create a gentle, silent breeze in the bedroom. Connected via Broadlink RM Mini 3 (upcoming). | IR |
TP-Link HS105 Smart Plugs | (x4) to toggle power to dumb devices. | WiFi |
App |
Usage |
---|---|
Docker | on local machine (for development). True, Home Assistant is Docker-based too… 😉 |
Fully Kiosk Browser PLUS | on wallmounted tablet for display and simple interaction. |
Home Assistant | on a Raspberry Pi 3 Model B+ (production setup). |
LANnouncer | on wallmounted tablet for simple audio and text-to-speech messaging. Quite unreliable however. |
Python Virtual Environment | on local machine (for quick development). |
Add-on |
Usage |
---|---|
AppDaemon | for HADashboard tablet UI. |
Check Home Assistant configuration | to validate current configuration before upgrading. |
DuckDNS | to facilitate secure remote access. |
Log Viewer | to stream the log file to a browser window. |
MQTT Server & Web client | for standard IoT messaging using Mosquitto, plus a HiveMQ web interface. |
NGINX Home Assistant SSL proxy | to route secured web traffic from the outside world to Home Assistant using NGINX. |
RTL_433 to MQTT Bridge | to receive and decode AcuRite devices radio signals. |
Samba share | to access configuration files easily with Samba. |
SSH & Web Terminal | for secure command-line access. |
Integration |
Usage |
---|---|
Browser Mod | to add pop-up support to ui-lovelace.yaml . |
Display platform | for integration with the Fully Kiosk Browser. |
Doomsday Clock | to track how close humanity is to a man-made global catastrophe. |
HACS (Home Assistant Commnunity Store) | to ease maintenance and pretty-up ui-lovelace.yaml . |
Lightpack | to control TV bias lights. |
Raspberry Pi Power Supply Checker | to warn in case of insufficient power delivery. |
UniFi Gateway | for extra network stats. |
Variable | for persisnent storage of non-boolean values. |
Widget |
Usage |
---|---|
auto-entities | to filter entities. |
bar-card | for battery statuses. |
button card | for intuitive mode toggles. |
card-mod | to apply CSS to cards. |
card-tools | as a requirement to other widgets. |
custom-header | to optimize screen real-estate. |
dummy-entity-row | to use entities' titles without showing their values. |
favicon-counter | to display a browser tab indicator for notifications. |
fold-entity-row | to hide less important details unless requested. |
github-entity-row | to display health status of related GitHub repos. |
layout-card | to give structure to views, including pretty headers and footers. |
mini-graph-card | to display simple interactive line charts for temperature, humidity, radon levels… |
restriction-card | to prevent accidental changes to critical entities. |
secondaryinfo-entity-row | to display supplemental information from other sensors and attributes. |
slider-entity-row | to quikly control light brightness. |
swipe-card | to display slideshows of satellite weather maps. |
vertical-stack-in-card | to assemble multiple sub-cards into a prettier, unified card. |
In an empty directory, type:
git clone --recurse-submodules git@github.com: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.
Kudos to:
- 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! 🍻😃