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.
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 |
---|---|---|---|
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.
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 |
---|---|---|
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.
See details
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.
See details
- Bar Card
- Button Card
- Card Mod
- Declutter Card
- Home Assistant Swipe Navigation
- Home Assistant Swipe Navigation
- Hue Icon
- Hui Element
- Layout Card
- Light Popup Card
- Lovelace Xiaomi Vacuum Map card
- Media Player Popup Card
- Mini Graph Card
- RGB Light Card
- Paper Button Rows
- Sidebar Card
- Simple Thermostat
- Slider Entity Row
- Stack in Card
- State Switch
- Switch Popup Card
- Thermostat Popup Card
- Vertical Stack in Card
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.
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 |
---|---|---|---|---|---|
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.
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 |
---|---|---|---|---|
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.
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 |
---|---|---|---|---|---|
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.
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.
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 |
---|---|---|---|
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.
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 |
---|---|---|---|
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.
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.
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 --->
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
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
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
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
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
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
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
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
- Climate Kirby: Trigger Kirby: Daytime @ 8 am + Kirby: Nighttime @ 9 pm.
- Climate Loft: Turn on fan when Loft is ≥72° and off when ≤71°.
- Climate Office Off: Turn fan OFF based off of Overhead light group.
- Climate Office On: Turn fan ON based off of Overhead light group.
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
- Dimmer Hallway: Trigger runner light with Lutron Aurora switch.
- Dimmer Office: Trigger office lights with Lutron Aurora switch.
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.
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.
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.
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.
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.
If you like my Lovelace setup be sure to checkout those who influenced me:
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.
The Room Controls buttons leverage code from eximo84's Weather and Light buttons.
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.