Home Assistant Scripting vs Automation Rules: Which Wins?
Home Assistant is the Swiss Army knife of home automation. Whether you’re a DIY enthusiast or a seasoned smart‑home architect, you’ll quickly learn that the real power lies in how you script and automate your devices. But what’s the difference between a “script” and an “automation rule”? Which one should you pick for your next project? Let’s dive into the nitty‑gritty, with a side of humor and plenty of code snippets to keep things lively.
1. The Big Picture: Scripts vs Automations
Think of scripts as a recipe you can run on demand. You grab your kitchen tools, follow the steps, and voilà – dinner (or in this case, a lighting scene) is ready.
Automations, on the other hand, are like a well‑tuned orchestra. When the conductor (your trigger) cues the musicians (actions), the symphony unfolds automatically, without you lifting a finger.
In Home Assistant terms:
- Script: A reusable block of actions that you call manually or from other scripts/automations.
- Automation: A trigger‑condition‑action (TCA) construct that fires automatically when conditions are met.
2. Anatomy of a Script
Scripts live in scripts.yaml
(or via the UI). They’re pure actions, no triggers or conditions.
turn_on_lights:
alias: Turn on living room lights
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness_pct: 75
- delay: '00:01:00'
- service: light.turn_off
target:
entity_id: light.living_room
Notice the sequence of services. You can also nest scripts:
night_mode:
alias: Night mode
sequence:
- service: script.turn_on_lights
data:
entity_id: script.turn_on_lights
Scripts are great for:
- Reusable action blocks (e.g., “goodnight” routine).
- Complex sequences that might be overkill for a single automation.
- Running actions from other automations or dashboards.
3. Anatomy of an Automation
Automations live in automations.yaml
. They’re built around the classic TCA pattern.
- alias: "Wake up routine"
trigger:
platform: time
at: "07:00:00"
condition:
- condition: state
entity_id: input_boolean.awake_mode
state: "on"
action:
- service: script.turn_on
target:
entity_id: script.good_morning
Key components:
- Trigger: What sets the automation off (time, state change, device event).
- Condition: Optional gatekeeper that must be true for the action to run.
- Action: The actual commands executed when triggered.
Automations shine when you need:
- Reactive behavior (e.g., motion detection).
- Scheduled tasks.
- Conditional logic that depends on the current state of your house.
4. When to Use Which?
Below is a quick reference table that will help you decide.
Scenario | Script? | Automation? |
---|---|---|
Turn on lights at sunset, but only if you’re home | No | Yes |
Run a “goodnight” routine when you press a button | Yes | No (unless you wrap it in an automation that triggers on the button press) |
Execute a multi‑step cleaning routine (vacuum, mop, etc.) | Yes (script) | No (unless you need to trigger it automatically, then combine with an automation) |
In practice, you’ll often combine both: an automation triggers a script.
5. Advanced Patterns & Tips
5.1 Nested Scripts for Modularity
Breaking complex actions into smaller scripts keeps your YAML tidy and makes debugging a breeze.
# scripts.yaml
morning_routine:
alias: Morning routine
sequence:
- service: script.wake_up_sunrise
- service: script.open_blinds
- service: media_player.turn_on
target:
entity_id: media_player.spotify
5.2 Using Input Helpers for Dynamic Parameters
Let users tweak automation behavior from the UI.
# configuration.yaml
input_number:
wake_up_time:
name: Wake up time
min: 5
max: 10
step: 1
# automation
- alias: "Wake up routine (dynamic)"
trigger:
platform: time
at: "{{ states('input_number.wake_up_time') ~ ':00' }}"
action:
- service: script.morning_routine
5.3 Conditional Logic Inside Scripts
You can sprinkle choose
blocks inside scripts to add decision trees.
script:
check_weather_and_light:
sequence:
- choose:
- conditions:
- condition: state
entity_id: weather.home
attribute: temperature
above: 20
sequence:
- service: light.turn_on
target:
entity_id: light.living_room
default:
- service: light.turn_off
target:
entity_id: light.living_room
6. Performance & Maintenance Considerations
- Memory Footprint: Scripts are lightweight; automations consume a bit more RAM because Home Assistant keeps them in memory to evaluate triggers.
- Debugging: Scripts are easier to step through because they have no triggers; automations can be hard to trace if multiple conditions are involved.
- Version Control: Keep scripts in a separate file or folder; automations often live in
automations.yaml
, but you can split them into directories for cleaner commits. - Reusability: Scripts are the go-to for reusable logic; automations are usually one‑off triggers.
7. Real‑World Example: A Smart Night Routine
Let’s walk through a scenario where both scripts and automations collaborate to create a seamless night routine.
- Automation: Detects motion in the hallway after sunset and triggers a script.
- Script: Turns on hallway lights, starts the coffee maker (if you’re a night owl), and locks the front door.
# automation.yaml
- alias: "Night hallway motion"
trigger:
platform: state
entity_id: binary_sensor.hallway_motion
to: "on"
condition:
- condition: sun
after: sunset
action:
- service: script.turn_on
target:
entity_id: script.night_hallway_actions
# scripts.yaml
night_hallway_actions:
alias: Night hallway actions
sequence:
- service: light.turn_on
target:
entity_id: light.hallway
data:
brightness_pct: 30
- service: media_player.turn_on
target:
entity_id: media_player.coffee_maker
- service: lock.lock
target:
entity_id: lock.front_door
That’s it! One automation, one script, and a cozy, secure hallway.
8. Common Pitfalls & How to Avoid Them
- Trigger
Leave a Reply