Skip to content

Home Assistant Configuration & Documentation for my Smart House. Be sure to ⭐ it. Updated FREQUENTLY!

License

Notifications You must be signed in to change notification settings

theglus/Home-Assistant-Config

Repository files navigation

Home-Assistant-Config

Welcome to theglus's Home Assistant setup. I hope you find value in the projects and documentation I've been working on. I'll be continuting to update my documentaion in the coming weeks so stay tuned.

Table of Contents

🔩 Hardware

Home Assistant Server

My Home Assistant setup is pretty basic but it gets the job done without any hiccups.

Raspberry Pi 4 Model B 4GB Raspbee II [SanDisk Extreme 64GB MicroSD]https://a.co/d/6piTlaW) Argon Neo Case
Raspberry Pi 4 Model B 4GB Raspbee II SanDisk Extreme 64GB MicroSD Argon Neo Pi case

I opted to go the Zigbee route primarily because I really like the Aqara platform. I landed on the Raspbee II over the Conbee as it just seemed like a more elegant solution. It's a little bit of a pain to initially setup, but after that it's smooth sailing.

Network

Living in a 950 sqft Loft apartment, I don't have to worry about signal strength. My setup consists of a Google WiFi puck in the Living Room. This is my primary router: one end connects to my in-wall ethernet port and the other end to a TP-Link 8-port network switch.

Google Wifi TP-Link Switch MoCa Network Adapter
Google Wifi TP-Link Switch MoCa Network Adapter

But you can't have a mesh network with just one puck, so in order to eliminate the potential for any deadzones, I've placed another puck upstairs in the Loft.

I routinely stream games via Moonlight from my desktop computer (in the Office) to the TV (in the Living Room). Initially, I did this over WiFi, but had very little success. Fortunately, there is a coax outlet right under my desk, so using ethernet-over-coax, I am able to hardwire to the network switch in the Living Room.

💾 Software

Architecture

My Home Assistant Architecture

Integrations

See details

Custom Components

See details
  • HACS: Allows for the installation and management of the various custom components.
  • BrowserMod: Supports various customizations within Home Assistant.
  • Coway IoCare: Adds support for Coway Airmega to HA.
  • Drivvo Integration: Utilized to pull in Vespa milage + fuel economy from Drivvo.
  • Dyson Local/Cloud: Add support for Dyson air purifiers to HA.
  • Frigidaire: Adds support for Frigidaire portable AC to HA. This is what originally got me interested in Home Assistant. Ironically I wasn't able to get it working until a year in.
  • Google Home: Creates HA sensors for alarms + timers that have been set on various Google Home devices.
  • LG ThinQ Sensors: Supports integrating my LG washer + dryer into HA.
  • PowerCalc: Virtual power sensors for estimated tracking of energy consumption.
  • TrueNAS: Adds the ability to monitor and control my TrueNAS Scale NAS directly in HA.
  • Xiaomi Cloud Map Extractor: Harnesses lidar in RoboRock S4 to create a live map of my home.

Lovelace Resources

See details

Voice Assistant

I'm currently utilizing Nabu Casa to leverage Google Assistant via the aforementioned Google Home devices to enable voice controls. I mainly use voice commands to trigger the lights, music, and theater system. I would like to setup voice commands for Winston and Kirby in the near future.

🕹 Devices

Audio & Video

Home Theater

I recently built out my home theater system centered around my Denon S960H + NVIDIA SHIELD TV Pro and managed by Home Assistant using denonavr, androidtv, and media_player. The system is primarly controlled using the NVIDIA SHIELD Toblerone as it can accomplish almost everything I need via CEC. The main gaps currently in the system are the following Denon buttons Setup, Options, Info, Back, ECO, Input and the following Sony Bravia buttons Settings, Home. I'm working to create a series of custom:button-cards and media_player-popup-cards to control my Home Theater with the ultimate goal of eliminating the need for all remotes but the Tobelerone.

Denon 960H Polk S35 Polk S10 Polk S50 NVIDIA SHIELD TV Pro Sony TV
Denon Polk S35 Polk S10 Polk S50 NVIDIA SHIELD TV Pro Sony

I have a Levovo Smart Tab M8 that is docked in my living room that I use to access my Lovelace Dashboards including my Home Theater controls in Home Assistant.

Multi Room Audio + Displays

I have a series of Google Home and Nest Mini's scattered throughout the apartment for the purpose of multi-room audio. The audio quality is subpar, but it gets the job done for now. I'm planning on updating to several pairs of Google Nest Audio smart speakers.

Google Nest Mini Google Nest Audio Google Nest Hub Lenovo Smart Clock Lenovo M8 Smart Tablet
Google Home Mini Google Nest Audio Google Nest Hub Lenovo Smart Clock Lenovo M8 Smart Tablet

The Google Nest Hub lives in the loft and is used as a control panel, picture frame, and alarm clock. The Lenovo Smart Clock lives in the downstairs bedroom (referred to in HA as Office) for use as an alarm clock and simplified control panel.

Appliances

Dyson Pure Cool Purifying Fan TP04 Frigidaire Cool Connect Portable AC FGPC1244T1 Airmega 400S Air Purifier Roborock S4 Robot Vacuum LG Smart Washer WM3900HBA LG Smart Dryer DLEX3900B
Dyson TP04 Frigidaire Airmega 400S Air Purifier Roborock LG Smart Washer LG Smart Dryer

Climate

My climate situation is pretty simple, just a fan and portable AC. The Dyson air purifying fan (Kirby) lives in the loft and is WiFi enabled. Shortly after purchase I realized it lacked the ability to integrate with Google Assistant, this became a huge driver in me exploring Home Assistant. I was pleasantly surprised to learn it contains a temperature, humidity, aqi, and dust sesnor. I successfully integrated Kirby with Home Assistant and am utilizing the tempurature and humidity sensors in my Lovelace dashboard. The Climate Kirby automation was created to allow me to stop using the Dyson app for various scheduling functionality.

My apartment has casement windows so my AC options were fairly limited. The Frigidaire Cool Connect Portable AC (Ice Bear) was an easy decision due to it's high BTUs, small footprint, and WiFi conductivity. Unfortunately the smart functionality is incredibly limited and the Frigidaire app very slow to load, making less than ideal for controlling the unit. Thanks to bm1549 I was able to use the Fridigaire custom component to integrate Ice Bear with Home Assistant. This was a HUGE development as it means I can control the AC via Google Assistant as well.

Vacuum

The first floor of my apartment is serviced by a Roborock S4 named Winston. The Roborock S4 intrigued me due to it's lidar, smart mapping, and friendliness with Home Assistant. A lot of people report that you have to do a crazy hack switching the region in Mainland China, but I didn't have to do that, you can read more about my process/HA vacuum implimentation in the wiki under WINSTON my Roborock S4.

Lighting

I'm pretty deep into the Hue ecosystem sans my Sengled lightstrip. As a result I have my lights paired directly to the Hue app using the Hue bridge. The main reason I did this instead of utilizing my Raspbee II was so I can ensure my lights remain functional regardless of if Home Assistant is operational. This allows me a lot more flexibility to work with Home Assistant without adversely effecting the other people in my household.

Hue Starter Kit BR30 White Ambiance Hue Color Sengled Light Strip
Hue Starter Kit BR30 White Ambiance Hue Color Sengled Light Strip

The only light outside the Hue ecosystem is my Sengled LED strip. I needed 6 feet of LEDs just for my stairs not to mention the other areas of the apartment, it would have been $79 for 6.5' of Hue lights where Sengled was ~$60 for 16.5'. The LED strip is hooked up directly to the Raspbee II.

Switches + Outlets

I have a series of smart plugs which I use to control various appliances. I recently migrated from Kasa HS103 outlets to Sengled plugs in order the strengthen my Zigbee network. Additionally, the Sengled plugs have engergy monitoring capabilities.

Hue Smart Plug Sengled Energy Monitoring Plugs Kasa 3-plug Surge Lutron Aurora
Hue Smart Plug Sengled Energy Monitoring Plugs Kasa Surge Lutron Aurora

My old school analog marquee is controlled by the Hue plug which I opted for due to it's ability to be integrated with my other lights via the Hue ecosystem. Lastly, sometimes it's just quicker and quieter to turn on the lights with a switch, being a renter replacing my wall switches isn't appealing. Luckily I discovered Lutron Aurora dimmers which not only gives me a physical button but also a dimmer which I can map to one or many lights. I'm hoping to figure out a way to map secondary actions (double click, triple click, etc.), but the feasiblity is TBD.

Custom Icons

Inspired by matt8707, I created several custom icons which can be found in www/custom_icons.js. I leveraged material design principles and Guide to a Vector Drawing Program when designing and building the icons. I will be working on pulling in additional icons from various icon_templates over the next several weeks.

🎛 Lovelace Dashboards

Quick Access Controls

The Quick Access Controls are a logical grouping of Lovelace buttons + cards using many of the above listed custom components. The inspiration for Quick Access came from stumbling upon Crixle's Light Control Card via r/homeassistant. I was fascinated by the idea of reducing the number of clicks required to control my smart home. This led me to overhaul my Lovelace setup with the goal of making all essential controls availible in 3-clicks or less.

quick_access_controls.webm
Code
## Toggle Nav
entities:
  - type: "custom:paper-buttons-row"
    buttons:
## General Button
      - entity: input_select.lighttoggle
        name: false
        icon: "mdi:home-assistant"
        state_styles:
          General:
          template: nav_button
        template: nav_styles
        tap_action:
          action: call-service
          service: input_select.select_option
          service_data:
            entity_id: input_select.lighttoggle
            option: General
## Entryway Button
      - entity: input_select.lighttoggle
        name: false
        icon: "mdi:coat-rack"
        state_styles:
          Entrway:
          template: nav_button
        template: nav_styles
        tap_action:
          action: call-service
          service: input_select.select_option
          service_data:
            entity_id: input_select.lighttoggle
            option: Entryway
## Expanded
- type: "custom:state-switch"
  entity: input_select.lighttoggle
  default: Entryway
  transition: none
  states:
## General Controls
  General:
    type: "custom:mod-card"
    style: |
      ha-card { 
        background: rgba(0,0,0,.3); 
        padding: 10px; 
        border-radius: 35px; 
        margin-top: none; 
        }
    card:
      type: grid
      columns: 3
      cards:

    ## <--- Buttons --->
  
## Entryway Controls
  General:
    type: "custom:mod-card"
    style: |
      ha-card { 
        background: rgba(0,0,0,.3); 
        padding: 10px; 
        border-radius: 35px; 
        margin-top: none; 
        }
    card:
      type: grid
      columns: 3
      cards:

    ## <--- Buttons --->

Room Controls

Room Controls

Icons

Code
## General Controls
General:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Weather button
      - type: "custom:button-card"
        custom_fields:
          s2: |
            [[[
              return states['sensor.aqi'].state + ' AQI'
            ]]]
        entity: weather.loft
        label: |
          [[[
            return states['weather.climacell_nowcast'].attributes.temperature + '°F '
          ]]]
        name: |
          [[[
            return "Next hour " + states['weather.climacell_hourly'].attributes.forecast[1].temperature + '°F'
          ]]]
        template:
          - weather_layout
          - weather
          - icon_weather
        triggers_update:
          - sun.sun
## Entryway button
      - type: "custom:decluttering-card"
        template: declutter_room_button
        variables:
          - room: Entryway
          - light: light.group_hallway
          - sensor: binary_sensor.front_door
          - message_on: Door is open
          - message_off: Door is closed
          - icon_state: mdi:door-open
          - icon_default: custom:room-hallway
## Office button
      - type: "custom:decluttering-card"
        template: declutter_room_button
        variables:
          - room: Office
          - light: light.overhead
          - sensor: sensor.major_laser_printer
          - message_on: Printer on
          - message_off: Printer off
          - icon_state: mdi:printer
          - icon_default: custom:room-office
## Living Room button
      - type: "custom:decluttering-card"
        template: declutter_temp_button
        variables:
          - light: light.group_living_room
          - hvac: switch.switchbot
          - sensor_temp: sensor.temperature_living_room
          - message_on: Heat is on
          - message_off: Heat is off
          - icon_state: mdi:radiator
          - icon_default: custom:room-living
          - room: Living Room
## Kitchen button
      - type: "custom:decluttering-card"
        template: declutter_temp_button
        variables:
          - light: light.group_kitchen
          - hvac: fan.kitchen
          - sensor_temp: sensor.kitchen_temperature
          - message_on: Dyson is on
          - message_off: Dyson is off
          - icon_state: custom:room-kitchen
          - icon_default: custom:room-kitchen
          - room: Kitchen
## Loft button
      - type: "custom:decluttering-card"
        template: declutter_temp_button
        variables:
          - light: light.loft
          - hvac: fan.kirby
          - sensor_temp: sensor.kirby_temperature
          - message_on: Dyson is on
          - message_off: Dyson is off
          - icon_state: custom:room-loft
          - icon_default: custom:room-loft
          - room: Loft

Hallway Controls

Hallway Controls

Icons

Code
## Entrway Controls
Entryway:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Hallway Marquee
      - type: "custom:button-card"
        entity: light.hallway_marquee
        template:
          - icon_marquee
## Hallway Runner
      - type: "custom:button-card"
        entity: light.hallway_runner
        name: Runner
        template: 
          - icon_led
## Potter Lamp
      - type: "custom:button-card"
        entity: light.potter_lamp
        name: Lamp
        template:
          - light_color
          - icon_lamp
## Stair Light
      - type: "custom:button-card"
        entity: light.stair
        name: Lamp
        template:
          - light
          - icon_spot
## Front Door Sensor
      - type: "custom:button-card"
        entity: binary_sensor.front_door
        template: 
          - icon_door
## Hallway Smart Clock
      - type: custom:button-card
        entity: media_player.smart_clock
        name: Smart Clock
        template:
          - icon_smart_clock

Laundry Controls

Laundry Controls

Icons

Code
## Guest Bathroom Controls
Laundry:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Washer
      - type: "custom:button-card"
        entity: sensor.washer
        name: Washer
        template:
          - icon_washer
## Dryer
      - type: "custom:button-card"
        entity: sensor.dryer
        name: Dryer
        template:
          - icon_dryer

Office Controls

Office Controls

Icons

Code
## Office Controls
Office:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Office Overhead Lights
      - type: "custom:button-card"
        entity: light.overhead
        name: Ceiling
        template:
          - light
          - icon_recessed
## Printer
      - type: "custom:button-card"
        entity: switch.major_laser_printer
        name: Major Laser
        template: 
          - icon_printer
## Air Circulator
      - type: "custom:button-card"
        entity: switch.kettle
        name: Air Circulator
        template:
          - icon_circulator
## Office Google Home Mini
      - type: custom:button-card
        entity: media_player.office_speaker
        name: Home Mini
        template:
          - icon_nest_mini

Living Room Controls

Living Room Controls

Icons

Code
## Living Room Controls
Living Room:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Track Light
      - type: "custom:button-card"
        entity: light.track
        name: Track
        template:
          - light_color
          - icon_spot
## Garden Light
      - type: "custom:button-card"
        entity: light.garden
        name: Garden
        template: 
          - icon_garden
## Yumi Lamp
      - type: "custom:button-card"
        entity: light.yumi_lamp
        name: Lamp
        template:
          - light_color
          - icon_lamp
## Heater
      - type: "custom:button-card"
        entity: switch.switchbot
        template:
          - icon_heater
## Living Room Air Circulator
      - type: "custom:button-card"
        entity: switch.air_circulator
        name: Air Circulator
        template:
          - icon_circulator
## Ice Bear
      - type: "custom:button-card"
        entity: climate.ice_bear
        name: Air Conditioner
        double_tap_action:
          action: more-info                  
        template:
          - icon_ac
        variables:
          circle_input: >
            [[[
              return entity === undefined ?
                null :
                entity.attributes.temperature;
            ]]]
## Shield
      - type: "custom:button-card"
        entity: media_player.shield_tv
        tap_action:
          action: toggle
        template:
          - icon_tv

Kitchen Controls

Kitchen Controls

Icons

Code
## Kitchen Controls
Kitchen:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
## Kitchen Track
      - type: "custom:button-card"
        entity: light.kitchen
        name: Track
        template:
          - light_color
          - icon_spot
## Nanoleaf Dino Panesl
      - type: "custom:button-card"
        entity: light.nanoleaf
        template: 
          - icon_dinopanel
## Kitchen Google Home Mini
      - type: custom:button-card
        entity: media_player.living_room_speaker
        name: Home Mini
        template:
          - icon_nest_mini
## Kitchen Dyson
      - type: "custom:button-card"
        entity: fan.kitchen
        name: Dyson
        template:
          - icon_dyson

Loft Controls

Loft Controls

Icons

Code
## Loft Controls
Loft:
  type: "custom:mod-card"
  style: |
    ha-card { 
      background: rgba(0,0,0,.3); 
      padding: 10px; 
      border-radius: 35px; 
      margin-top: none; 
      }
  card:
    type: grid
    columns: 3
    cards:
      ## Bedside Lights
      - type: "custom:button-card"
        entity: light.bedside
        name: Bedside
        template: 
          - icon_bedside
## His Light
      - type: "custom:button-card"
        entity: light.jeffreys_lamp
        name: Jeffrey's
        template: 
          - icon_bed
## Her Light
      - type: "custom:button-card"
        entity: light.tiffanys_lamp
        name: Tiffany's
        template: 
          - icon_bed
## Bed Track
      - type: "custom:button-card"
        entity: light.loft_bed_light
        name: Ceiling
        template:
          - light
          - icon_spot
## Desk Lights
      - type: "custom:button-card"
        entity: light.loft_desk_lamp
        name: Desk
        template:
          - light
          - icon_lamp
## Dyson
      - type: "custom:button-card"
        entity: fan.kirby
        name: Dyson
        template:
          - icon_dyson
## Loft Nest Hub
      - type: custom:button-card
        entity: media_player.loft_nest_hub
        name: Nest Hub
        template:
          - icon_nest_hub    

🤖 Automations

🌡 Climate

Before Home Assistant, I had several schedules setup for my two air purifiers in the Dyson App. I was able to easily replace those with two automations in HA, eliminating my need to use the proprietary Dyston App. My air circulators which are hooked up to Kasa smart plugs, utilitze two of my favorite automations. One turns on the downstairs fan when the tempurature in the Loft is ≥72° and off when ≤71°, the other turns the office fan on/off based on the state of the lights in the room.

Automations

🎚 Dimmer

Lutton Aurora dimmers have been a game changer in my home automations setup. They are natively supported by Philips Hue and as a renter, they are the perfect solution as to mount onto the existing light switch. Not all my lights are in the Hue ecosystem, so I've created automations to allow the dimmers to control my Sengled LED light strip and various Kasa smart plugs.

Automations

📬 Notifications

I currently have notifications set to be delivered via one of two channels Telegram or the Smartphone Group. Telegram is used to notify about server boot up to aid with troubleshooting while the Smartphone Group leverages the companion app to surface in-app notifications.

Automations
  • Notify AQI: Notify Smartphones when AQI is >75.
  • Notify Dryer: Notify smartphones when dryer is complete.
  • Notify Heat Wave: Notify smartphones when tomorrows high is >75 °F.
  • Notify Printer: Notify Smartphones when Major Laser Printer is ready.
  • Notify Washer: Notify smartphones when washer is complete.
  • Peak Usage Alerts: Notify Smartphones when AC, Washer, or Dryer is on during peak usage.
  • Server Boot Up: Notify via Telegram when server has booted up.
  • Server Reboot: Telegram notification that alerts of server reboot, restart, or shutdown.

🚪 Presence

I decided to take a unique approach to presence automations and forgo the use of motion sensors, in favor of manual triggers before leaving the apartment. I have an Aqara Mini Switch next to the door, which triggers automations based on the number of button clicks and status of the front door sensor.

Automations
  • Leave Home: Notify smartphones of door status + turn off lights accordingly.
  • Leave Vacuum: Notify smartphones of door status + turn off lights + vacuum.

🔌 Shutoff

Vampire drain is a problem, especially when your power company charges different rates depending on the time of day. There are a lot of devices thats only need to be powered briefly to do their job. My printer + paper shredder are setup to turn-off after a set period of time, limiting their idle power usage to minutes instead of hours or days.

Automations
  • Charge Toothbrushes: Start charging toothbrushes at 12 am and stop at 4 am.
  • Printer Shutoff: Shutoff plug to printer 15-minutes after device has been switched on.
  • Shutdown Shredder: Shutoff plug to paper shredder 2-minutes after device has been switched on.

🧹 Vacuum

Winston my trusty robot vacuum is scheduled to clean the most trafficed areas of my apartment (hallway + kitchen) Monday - Friday, the remaining rooms (office + living room + bathroom) are cleaned on Tuesdays and Thursdays. Creating these automations allowed me to stop using the Mi Home App.

Automations
  • Select Vacuum Speed: Adds vacuum.set_fan_speed service calls to Vacuum Speed Helper.
  • Vacuum Clean: Notify Smartphones when Winston starts cleaning.
  • Vacuum Docked: Notify Smartphones when Winston has returned to dock.
  • Vacuum Done: Notify Smartphones when Winston has completed cleaning.
  • Vacuum Schedule: Clean hallway + kitchen @ 10:30 pm M - F & clean bathroom + office + living room @ 10:30 pm T and TH.

🎰 Various

The remaining automations are super useful, but don't fit into any specific category. This includes alerts for water leaks, scheduled volume controls for Google Home devices, and an on air light to indicate when a video call is in progress.

Automations
  • Alert Leak: Alert when water is detected under the sink or dishwasher.
  • Mood Television: Television scene + Denon Nighttime quick select.
  • Mood Theater: Theater scene + Denon Theater quick select.
  • Office Available: Turn Potter light magenta when webcam turns off.
  • Office Busy: Turn Potter light red when webcam turns on.
  • Set Theme: Set theme at Home Assistant start.
  • Volume Home: Turn down volume of Google Home device at 10 pm.

📢 Shoutouts and Inspirition

If you like my Lovelace setup be sure to checkout those who influenced me:

crixle

I was racking my brain as to how I could reducing the number of clicks required to control my smart home. A Reddit post with crixle's Light Control Card inspired me to create my Quick Access Controls.

eximo84

The Room Controls buttons leverage code from eximo84's Weather and Light buttons.

matt8707

The original inspiration for overauling my Lovelace dashboard was kicked-off when I stumbled upon A different take on designing a Lovelace UI.

My approach to button templates was heavily influence by Matt's button_card_templates.yaml. His approach to custom icons also inspired me to learn how to create SVGs in Inkspace and SVGator. Matt's work gave me the push to move towards a 100% yaml approach to my Lovelace dashboard and greatly increased my all around technical knowledge.

👋

Thanks for reading, please star if your are interested in the project.

About

Home Assistant Configuration & Documentation for my Smart House. Be sure to ⭐ it. Updated FREQUENTLY!

Topics

Resources

License

Stars

Watchers

Forks