Home Assistant Automation Hacks: Data‑Driven Config Tips
When I first dropped into the Home Assistant universe, my smart‑home dreams felt like a sci‑fi plot: “What if I could make the lights turn on exactly when my cat purrs?” The reality was a maze of YAML, a handful of sensors, and the ever‑present temptation to copy paste snippets from forums. Fast forward to today—after a few hundred hours of tinkering, I’ve discovered that data‑driven automation is the secret sauce for turning your HA setup into a self‑aware, responsive ecosystem. In this post I’ll walk you through the journey that turned my kitchen into a culinary assistant, my bedroom into a sleep coach, and my entire house into a living data playground.
Why Go Data‑Driven?
Traditional Home Assistant automations look like this:
automation:
- alias: "Turn on lights when motion detected"
trigger:
platform: state
entity_id: binary_sensor.motion_living_room
to: "on"
action:
service: light.turn_on
target:
entity_id: light.living_room
It works. It’s simple. But it’s also static—every time motion is detected, the lights always turn on to 100 %. What if you want the light intensity to match the ambient daylight? Or what about turning on a fan only when the temperature exceeds a personalized threshold?
Enter data‑driven automation. By feeding real‑time data into your automations, you can:
- Make decisions based on sensor values, not just states.
- Apply user‑defined thresholds that adapt over time.
- Reduce unnecessary device chatter and save energy.
The Building Blocks
Let’s break down the core components that enable data‑driven logic in Home Assistant.
1. Sensors & Binary Sensors
Everything starts with data. Home Assistant can pull in values from:
temperature
,humidity
,pressure
weather.forecast_daily
,sun.sun
- Custom sensors via RESTful, MQTT, or Python scripts.
2. Input Numbers & Input Text
These are user‑configurable variables that you can expose on the UI. Think of them as “smart knobs” for your automations.
3. Template Sensors
Use Jinja2 templates to compute new values from existing ones. For example, a comfort_index
sensor that blends temperature and humidity.
4. Condition Types
Home Assistant offers numeric_state
, template
, and state_not_changed
conditions that let you compare real‑time values.
5. for
& delay
These allow you to introduce timing logic—perfect for “only turn on the fan if it’s hot for 5 minutes.”
Practical Example: Smart Kitchen Assistant
My kitchen automation needed to:
- Turn on the stove light when the oven reaches 180 °C.
- Send a notification if the fridge door stays open for more than 2 minutes.
- Adjust the kitchen fan speed based on both temperature and humidity.
Here’s how I wired it up.
Step 1: Define Input Numbers
I created two input numbers on the UI to let me tweak thresholds without touching YAML.
input_number:
oven_light_temp:
name: Oven Light Temperature
initial: 180
min: 100
max: 250
step: 5
fridge_door_timeout:
name: Fridge Door Timeout (minutes)
initial: 2
min: 1
max: 10
step: 0.5
Step 2: Create Template Sensors
The kitchen_comfort_index
blends temperature and humidity.
template:
- sensor:
- name: Kitchen Comfort Index
unit_of_measurement: "CI"
state_class: measurement
device_class: temperature
value_template: "{{ (states('sensor.kitchen_temperature') float) + 0.5 * (states('sensor.kitchen_humidity') float) }}"
Step 3: Automations
Automation #1 – Oven Light.
automation:
- alias: "Oven Light Trigger"
trigger:
platform: numeric_state
entity_id: sensor.oven_temperature
above: "{{ states('input_number.oven_light_temp') int }}"
action:
service: light.turn_on
target:
entity_id: light.kitchen_stove
Automation #2 – Fridge Door Alert.
- alias: "Fridge Door Open Notification"
trigger:
platform: state
entity_id: binary_sensor.fridge_door
to: "on"
condition:
- condition: template
value_template: "{{ now() + timedelta(minutes=states('input_number.fridge_door_timeout') float) > states.binary_sensor.fridge_door.last_changed }}"
action:
service: notify.mobile_app
data:
message: "Fridge door left open for more than {{ states('input_number.fridge_door_timeout') }} minutes!"
Automation #3 – Fan Speed.
- alias: "Smart Kitchen Fan"
trigger:
platform: state
entity_id: sensor.kitchen_comfort_index
above: 30
condition:
- condition: numeric_state
entity_id: sensor.kitchen_temperature
above: 25
action:
service: fan.set_speed
target:
entity_id: fan.kitchen_vent
data:
speed: "high"
With these three automations, my kitchen behaves like a responsive chef’s assistant—lights glow when the oven heats up, I get alerts if my fridge door stays open too long, and the fan kicks in when it’s both hot and humid.
Advanced Tip: Use the choose
Action for Complex Logic
The choose
action lets you branch inside a single automation, reducing duplication.
- alias: "Dynamic Lighting"
trigger:
platform: state
entity_id: sensor.time_of_day
action:
choose:
- conditions:
- condition: time
after: "18:00"
before: "23:00"
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 70
- conditions:
- condition: time
after: "23:00"
before: "06:00"
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 30
default:
- service: light.turn_off
target:
entity_id: light.living_room
This snippet turns on the living room lights to 70 % in the evening, dims them at night, and turns them off during the day—all from one automation.
Performance & Maintenance Hacks
- Use
trigger_for_update
: Keeps automations responsive without polling. - Leverage
template sensor
for heavy calculations to avoid bloating automations. - Keep YAML DRY: Use
!include
to split configurations. - Regularly audit logs: Detect stuck automations or sensor drift.
- Backup via snapshots: Store your config in Git for version control.
Conclusion
Data‑driven Home Assistant automations transform a set of isolated devices into an intelligent, context‑aware home. By exposing thresholds through input numbers, computing composite metrics with template sensors, and using
Leave a Reply