Add homeassistant skill in unpacked format
- Add complete homeassistant skill source to skills/ directory - Includes all scripts, references, and automation templates - Matches format of other skills in repository
This commit is contained in:
379
skills/homeassistant/references/common_patterns.md
Normal file
379
skills/homeassistant/references/common_patterns.md
Normal file
@@ -0,0 +1,379 @@
|
||||
# Common Home Assistant Automation Patterns
|
||||
|
||||
## Motion-Activated Lighting
|
||||
|
||||
Turn on lights when motion detected, turn off after no motion:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Motion Light - Hallway"
|
||||
id: motion_light_hallway
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: binary_sensor.hallway_motion
|
||||
to: "on"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: sun.sun
|
||||
state: "below_horizon"
|
||||
action:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
entity_id: light.hallway
|
||||
- wait_for_trigger:
|
||||
- trigger: state
|
||||
entity_id: binary_sensor.hallway_motion
|
||||
to: "off"
|
||||
for:
|
||||
minutes: 5
|
||||
- action: light.turn_off
|
||||
target:
|
||||
entity_id: light.hallway
|
||||
```
|
||||
|
||||
## Time-Based Automation
|
||||
|
||||
Execute actions at specific times:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Morning Routine"
|
||||
id: morning_routine
|
||||
trigger:
|
||||
- trigger: time
|
||||
at: "07:00:00"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.workday
|
||||
state: "on"
|
||||
action:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
entity_id: light.bedroom
|
||||
data:
|
||||
brightness: 50
|
||||
- action: cover.open_cover
|
||||
target:
|
||||
entity_id: cover.bedroom_blinds
|
||||
- action: climate.set_temperature
|
||||
target:
|
||||
entity_id: climate.bedroom
|
||||
data:
|
||||
temperature: 21
|
||||
```
|
||||
|
||||
## Sunset/Sunrise Automation
|
||||
|
||||
React to sun position:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Lights at Sunset"
|
||||
id: lights_at_sunset
|
||||
trigger:
|
||||
- trigger: sun
|
||||
event: sunset
|
||||
offset: "-00:30:00" # 30 min before sunset
|
||||
action:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
area_id: living_room
|
||||
data:
|
||||
brightness: 180
|
||||
```
|
||||
|
||||
## Presence Detection
|
||||
|
||||
React to people arriving/leaving:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Welcome Home"
|
||||
id: welcome_home
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: person.john
|
||||
from: "not_home"
|
||||
to: "home"
|
||||
action:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
area_id: entrance
|
||||
- action: climate.set_temperature
|
||||
target:
|
||||
entity_id: climate.living_room
|
||||
data:
|
||||
temperature: 22
|
||||
- action: notify.mobile_app
|
||||
data:
|
||||
message: "Welcome home, John!"
|
||||
```
|
||||
|
||||
## Temperature-Based Climate Control
|
||||
|
||||
Adjust heating/cooling based on temperature:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Auto Climate Control"
|
||||
id: auto_climate_control
|
||||
trigger:
|
||||
- trigger: numeric_state
|
||||
entity_id: sensor.living_room_temperature
|
||||
below: 19
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: person.john
|
||||
state: "home"
|
||||
action:
|
||||
- action: climate.set_hvac_mode
|
||||
target:
|
||||
entity_id: climate.living_room
|
||||
data:
|
||||
hvac_mode: heat
|
||||
- action: climate.set_temperature
|
||||
target:
|
||||
entity_id: climate.living_room
|
||||
data:
|
||||
temperature: 21
|
||||
```
|
||||
|
||||
## Door/Window Alert
|
||||
|
||||
Notify when doors/windows left open:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Window Open Alert"
|
||||
id: window_open_alert
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: binary_sensor.living_room_window
|
||||
to: "on"
|
||||
for:
|
||||
minutes: 30
|
||||
condition:
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.outdoor_temperature
|
||||
below: 10
|
||||
action:
|
||||
- action: notify.notify
|
||||
data:
|
||||
message: "Living room window has been open for 30 minutes and it's {{ states('sensor.outdoor_temperature') }}°C outside"
|
||||
title: "Window Alert"
|
||||
```
|
||||
|
||||
## Low Battery Notification
|
||||
|
||||
Alert when device batteries are low:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Low Battery Alert"
|
||||
id: low_battery_alert
|
||||
trigger:
|
||||
- trigger: numeric_state
|
||||
entity_id: sensor.motion_sensor_battery
|
||||
below: 20
|
||||
action:
|
||||
- action: notify.notify
|
||||
data:
|
||||
message: "{{ trigger.to_state.attributes.friendly_name }} battery is at {{ trigger.to_state.state }}%"
|
||||
title: "Low Battery"
|
||||
```
|
||||
|
||||
## Conditional Lighting by Time
|
||||
|
||||
Different brightness based on time of day:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Motion Light with Time-Based Brightness"
|
||||
id: motion_light_time_based
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: binary_sensor.kitchen_motion
|
||||
to: "on"
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: time
|
||||
after: "22:00:00"
|
||||
before: "06:00:00"
|
||||
sequence:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
entity_id: light.kitchen
|
||||
data:
|
||||
brightness: 30
|
||||
- conditions:
|
||||
- condition: time
|
||||
after: "06:00:00"
|
||||
before: "22:00:00"
|
||||
sequence:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
entity_id: light.kitchen
|
||||
data:
|
||||
brightness: 255
|
||||
```
|
||||
|
||||
## Vacation Mode
|
||||
|
||||
Randomize lights when away:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Vacation Mode - Random Lights"
|
||||
id: vacation_mode_lights
|
||||
trigger:
|
||||
- trigger: time_pattern
|
||||
hours: "/1" # Every hour
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: input_boolean.vacation_mode
|
||||
state: "on"
|
||||
- condition: sun
|
||||
after: sunset
|
||||
before: sunrise
|
||||
action:
|
||||
- action: light.turn_on
|
||||
target:
|
||||
entity_id: "{{ ['light.living_room', 'light.bedroom', 'light.kitchen'] | random }}"
|
||||
- delay:
|
||||
minutes: "{{ range(30, 120) | random }}"
|
||||
- action: light.turn_off
|
||||
target:
|
||||
entity_id: all
|
||||
```
|
||||
|
||||
## Media Player Automation
|
||||
|
||||
Pause media when phone rings:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Pause Media on Phone Call"
|
||||
id: pause_media_phone_call
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: sensor.phone_state
|
||||
to: "ringing"
|
||||
action:
|
||||
- action: media_player.media_pause
|
||||
target:
|
||||
entity_id: all
|
||||
```
|
||||
|
||||
## Garden Watering Schedule
|
||||
|
||||
Water garden based on weather and schedule:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Garden Watering"
|
||||
id: garden_watering
|
||||
trigger:
|
||||
- trigger: time
|
||||
at: "06:00:00"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: sensor.weather_forecast
|
||||
state: "sunny"
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.outdoor_temperature
|
||||
above: 20
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.soil_moisture
|
||||
below: 30
|
||||
action:
|
||||
- action: switch.turn_on
|
||||
target:
|
||||
entity_id: switch.garden_sprinkler
|
||||
- delay:
|
||||
minutes: 30
|
||||
- action: switch.turn_off
|
||||
target:
|
||||
entity_id: switch.garden_sprinkler
|
||||
```
|
||||
|
||||
## Reminder Notifications
|
||||
|
||||
Remind to perform tasks:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Trash Day Reminder"
|
||||
id: trash_day_reminder
|
||||
trigger:
|
||||
- trigger: time
|
||||
at: "20:00:00"
|
||||
condition:
|
||||
- condition: time
|
||||
weekday:
|
||||
- sun
|
||||
action:
|
||||
- action: notify.notify
|
||||
data:
|
||||
message: "Don't forget to put out the trash tonight!"
|
||||
title: "Trash Day Tomorrow"
|
||||
```
|
||||
|
||||
## Smart Doorbell
|
||||
|
||||
Announce doorbell press and record:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Doorbell Press"
|
||||
id: doorbell_press
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: binary_sensor.doorbell
|
||||
to: "on"
|
||||
action:
|
||||
- action: media_player.play_media
|
||||
target:
|
||||
entity_id: media_player.home_speaker
|
||||
data:
|
||||
media_content_id: "local/doorbell.mp3"
|
||||
media_content_type: "music"
|
||||
- action: camera.snapshot
|
||||
target:
|
||||
entity_id: camera.front_door
|
||||
data:
|
||||
filename: "/config/www/snapshots/doorbell_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
|
||||
- action: notify.mobile_app
|
||||
data:
|
||||
message: "Someone is at the door"
|
||||
data:
|
||||
image: "/local/snapshots/doorbell_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
|
||||
```
|
||||
|
||||
## Energy Saving
|
||||
|
||||
Turn off devices when nobody home:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Energy Saving - Away Mode"
|
||||
id: energy_saving_away
|
||||
trigger:
|
||||
- trigger: state
|
||||
entity_id: group.all_persons
|
||||
to: "not_home"
|
||||
for:
|
||||
minutes: 15
|
||||
action:
|
||||
- action: light.turn_off
|
||||
target:
|
||||
entity_id: all
|
||||
- action: climate.set_hvac_mode
|
||||
target:
|
||||
entity_id: all
|
||||
data:
|
||||
hvac_mode: "off"
|
||||
- action: media_player.turn_off
|
||||
target:
|
||||
entity_id: all
|
||||
```
|
||||
Reference in New Issue
Block a user