/home-assistant-config

๐Ÿ  Fully documented Home Assistant configuration for a smart-looking place. ๐Ÿ˜Ž Be sure to โญ๏ธ my repo and copy ideas!

Primary LanguagePythonApache License 2.0Apache-2.0

๐Ÿ 
Home Assistant configuration for a smart-looking place!
by Renรฉ-Marc Simard ๐Ÿ˜ƒ

Price Home Assistant version Commits since last release GitHub Release Code Climate maintainability CodeFactor rating Build Status License Community Forum Tweet

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! ๐Ÿ˜ƒ

Dashboard animation

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.

Security group (Dark theme) Weather group Climate Control group Battery Levels group (Dark theme) Atmospheric Safety group Actions group Ceiling group Public Transit group

Sensor /misc/groups.yaml.

Table of contents ๐Ÿ“‘

  1. TL;DR
  2. Overview
    Goals | Agile development
  3. Key features
    Climate control | Weather report | Lighting control | Presence and basic security | Modes and scenes | General information | Additional human interfaces
  4. Setup
    Supporting hardware choices | Configuration | Systems and bridges | Physical devices | Software | Usage
  5. License
  6. Thanks

TL;DR ๐Ÿƒ

This is a fully documented working configuration for Home Assistant, with screenshots, hints and comments. Browse the code to have a look! ๐Ÿ‘€

๐Ÿ”

Overview ๐ŸŒ…

Goals โšฝ

  • 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.
Wiretap meme

๐Ÿ˜จ No thanks!

๐Ÿ”

Agile development ๐Ÿ––

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.

Agile. You keep using that word. I do not think it means what you think it means.

Well, without the sprints. And a team. And the retrospectives. And theโ€ฆ

๐Ÿ”

Key features โœ…

Climate control ๐ŸŒก

  • 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.
Climate Control group Humidity notification

Climate control.

๐Ÿ”

Weather report โ›…

  • 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/.
Today's Weather group Weekly Forecast group

Today's weather and weekly forecast.

๐Ÿ”

Lighting control ๐Ÿ’ก

  • 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/.
Lounge group Bedroom group

Lighting controls.

๐Ÿ”

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.
  • 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.
Presence group Security Status group

Presence and basic security.

๐Ÿ”

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.
Actions group

Modes and scenes.

๐Ÿ”

General information ๐Ÿ›Ž

  • 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.
System group Public Transit group

General information.

๐Ÿ”

Additional human interfaces ๐Ÿ“ฒ

  • 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.

๐Ÿ”

Setup ๐Ÿ”ฉ

Home Assistant technology diagram

Technology diagram (PNG, SVG). Made with Draw.io (XML source file).

๐Ÿ”

Supporting technical choices ๐Ÿงฑ

  • 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โ€ฆ)

๐Ÿ”

Configuration โš™

  • 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.

๐Ÿ”

Systems and bridges ๐ŸŒ‰

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

๐Ÿ”

Physical devices ๐Ÿ”จ

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

๐Ÿ”

Human interfaces ๐Ÿ•น๏ธ

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

๐Ÿ”

Switches and other devices ๐Ÿ”Œ

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

๐Ÿ”

Software ๐Ÿ’ป

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).

๐Ÿ”

Home Assistant add-ons โž•

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.

๐Ÿ”

Community integrations ๐Ÿ˜๏ธ

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.

๐Ÿ”

Lovelace widgets ๐Ÿ’–

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.

๐Ÿ”

Usage ๐Ÿ“˜

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! ๐Ÿ˜‰

๐Ÿ”

License ๐Ÿ“ƒ

๐Ÿ”

Thanks ๐Ÿ’•

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! ๐Ÿป๐Ÿ˜ƒ

๐Ÿ”

Don't forget to โญ๏ธ or ๐Ÿ”ฑ this repo! ๐Ÿ˜ƒ