4379 lines
141 KiB
YAML
4379 lines
141 KiB
YAML
- id: "1780125759253"
|
|
alias: "Tablet: Dim Screen at Night"
|
|
description: Drops tablet brightness to zero at night
|
|
triggers:
|
|
- at: "23:30:00"
|
|
trigger: time
|
|
actions:
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_brightness_level
|
|
data:
|
|
command: 0
|
|
- id: "1780125803824"
|
|
alias: "Tablet: Restore Screen in Morning"
|
|
description: Restores tablet brightness to normal in the morning
|
|
triggers:
|
|
- at: 07:00:00
|
|
trigger: time
|
|
actions:
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_brightness_level
|
|
data:
|
|
command: 180
|
|
- id: "1780441470361"
|
|
alias: Reload Hilo Integrations on Reboot
|
|
description: Reloads problematic integrations 2 minutes after Home Assistant starts
|
|
up.
|
|
triggers:
|
|
- trigger: homeassistant
|
|
event: start
|
|
conditions: []
|
|
actions:
|
|
- delay:
|
|
hours: 0
|
|
minutes: 3
|
|
seconds: 0
|
|
milliseconds: 0
|
|
- action: homeassistant.reload_config_entry
|
|
metadata: {}
|
|
target:
|
|
device_id:
|
|
- baad176ac2f415f3642e2d075bb6a977
|
|
data: {}
|
|
mode: single
|
|
- id: "1780509027967"
|
|
alias: Notify When Ring Console Battery Low
|
|
description: ""
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.entryway_keypad_battery
|
|
below: 25
|
|
conditions: []
|
|
actions:
|
|
- data:
|
|
message: Keypad Battery Low. Please Charge ASAP
|
|
title: Ring Console Battery
|
|
action: notify.notify
|
|
mode: single
|
|
variables:
|
|
_cafe_metadata:
|
|
version: 1
|
|
strategy: native
|
|
nodes:
|
|
trigger_1780508927611_4:
|
|
x: 15
|
|
y: -105
|
|
action_1780508992783_5:
|
|
x: 285
|
|
y: 45
|
|
graph_id: 816af3b7-3eac-47c3-8da3-8797d1774c0c
|
|
graph_version: 1
|
|
- id: "1780516946807"
|
|
alias: Notify When Front Door Sensor Battery Low
|
|
description: ""
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.front_door_battery
|
|
below: 25
|
|
conditions: []
|
|
actions:
|
|
- data:
|
|
message: Front Door Sensor Battery Low. Please Change Batteries ASAP.
|
|
title: Ring Console Battery
|
|
action: notify.notify
|
|
mode: single
|
|
variables:
|
|
_cafe_metadata:
|
|
version: 1
|
|
strategy: native
|
|
nodes:
|
|
trigger_1780508927611_4:
|
|
x: 15
|
|
y: -105
|
|
action_1780508992783_5:
|
|
x: 285
|
|
y: 45
|
|
graph_id: 816af3b7-3eac-47c3-8da3-8797d1774c0c
|
|
graph_version: 1
|
|
- id: "1780813227139"
|
|
alias: "Alert: Fridge or Freezer Power Outage"
|
|
description: Triggers an alert if the fridge or freezer smart plug power consumption
|
|
drops to 0W for too long.
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.freezer_power
|
|
for:
|
|
hours: 0
|
|
minutes: 45
|
|
seconds: 0
|
|
below: 0.2
|
|
id: freezer_down
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.fridge_power
|
|
for:
|
|
hours: 0
|
|
minutes: 20
|
|
seconds: 0
|
|
below: 0.2
|
|
id: fridge_down
|
|
conditions: []
|
|
actions:
|
|
- if:
|
|
- condition: trigger
|
|
id: freezer_down
|
|
then:
|
|
- data:
|
|
title: "\U0001F6A8 URGENT: Freezer Power Failure"
|
|
message: The Freezer smart plug has drawn 0W of power for over 40 minutes!
|
|
Check the physical appliance immediately.
|
|
action: notify.notify
|
|
else:
|
|
- if:
|
|
- condition: trigger
|
|
id: fridge_down
|
|
then:
|
|
- data:
|
|
title: "\U0001F6A8 URGENT: Fridge Power Failure"
|
|
message: The Fridge smart plug has drawn 0W of power for over 20 minutes!
|
|
Check the physical appliance immediately.
|
|
action: notify.notify
|
|
else: []
|
|
mode: single
|
|
variables:
|
|
_cafe_metadata:
|
|
version: 1
|
|
strategy: native
|
|
nodes:
|
|
trigger_1780846348490_0_0:
|
|
x: 12
|
|
y: 182
|
|
trigger_1780846348490_1_1:
|
|
x: 12
|
|
y: 22
|
|
condition_1780846348491_2_2:
|
|
x: 312
|
|
y: 92
|
|
action_1780846348491_3_3:
|
|
x: 632
|
|
y: 12
|
|
condition_1780846348491_4_4:
|
|
x: 632
|
|
y: 172
|
|
action_1780846348491_5_5:
|
|
x: 952
|
|
y: 102
|
|
graph_id: 5948b900-b45d-4c2e-ae73-c880acc3a1bf
|
|
graph_version: 1
|
|
- id: "1780989340205"
|
|
alias: "Kitchen: Coffee Maker Active Notification"
|
|
description: Sends a mobile application push notification when the coffee maker
|
|
power exceeds 1000W for 5 seconds.
|
|
triggers:
|
|
- entity_id: sensor.coffee_maker_power
|
|
above: 1000
|
|
for:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 5
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- data:
|
|
title: ☕ Coffee Time
|
|
message: Someone is Making Coffee
|
|
action: notify.notify
|
|
- action: notify.persistent_notification
|
|
metadata: {}
|
|
data:
|
|
title: ☕ Coffee Time
|
|
message: Someone is Making Coffee
|
|
- delay:
|
|
hours: 0
|
|
minutes: 4
|
|
seconds: 0
|
|
milliseconds: 0
|
|
mode: single
|
|
- id: "1781024962776"
|
|
alias: "Office: Light Control Motion"
|
|
description: Turns on office lights when the door opens, or via motion if turned
|
|
off by inactivity within the last hour. Turns off lights after 1 hour of no occupancy.
|
|
Prevents motion from re-triggering if turned off manually/Alexa. Respects a master
|
|
override toggle helper.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: binary_sensor.office_door_contact
|
|
to: "on"
|
|
id: door_opened
|
|
- trigger: state
|
|
entity_id: binary_sensor.office_occupancy
|
|
to: "on"
|
|
id: motion_detected
|
|
- trigger: state
|
|
entity_id: binary_sensor.office_occupancy
|
|
to: "off"
|
|
for:
|
|
hours: 1
|
|
minutes: 0
|
|
seconds: 0
|
|
id: turn_off_logic
|
|
- trigger: state
|
|
entity_id: input_boolean.office_keep_lights_on
|
|
to: "on"
|
|
id: keep_on_enabled
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: time
|
|
after: "10:00:00"
|
|
before: "20:00:00"
|
|
- condition: state
|
|
entity_id: light.playroom_light
|
|
state: "off"
|
|
- condition: state
|
|
entity_id: input_boolean.office_motion_override
|
|
state: "off"
|
|
- condition: or
|
|
conditions:
|
|
- condition: trigger
|
|
id: door_opened
|
|
- condition: and
|
|
conditions:
|
|
- condition: trigger
|
|
id: motion_detected
|
|
- condition: template
|
|
value_template: "{{ (now() - states.light.playroom_light.last_changed).total_seconds()
|
|
< 3600 and states.light.playroom_light.context.parent_id == none }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data: {}
|
|
- conditions:
|
|
- condition: trigger
|
|
id: turn_off_logic
|
|
- condition: state
|
|
entity_id: light.playroom_light
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: input_boolean.office_keep_lights_on
|
|
state: "off"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data: {}
|
|
- action: notify.notify
|
|
data:
|
|
message: Office Lights Turned Off due to inactivity
|
|
title: ⚡️ Office Lights
|
|
- conditions:
|
|
- condition: trigger
|
|
id: keep_on_enabled
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data: {}
|
|
mode: restart
|
|
- id: "1781034724187"
|
|
alias: "Office: Turn Off Lights on Exit"
|
|
description: Turns off office lights 2 minutes after the door closes, but only if
|
|
living room motion was detected after the door shut.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: binary_sensor.office_door_contact
|
|
to: "off"
|
|
conditions:
|
|
- condition: state
|
|
entity_id: light.playroom_light
|
|
state: "on"
|
|
- condition: template
|
|
value_template:
|
|
"{{ states.binary_sensor.basement.last_changed > states.binary_sensor.office_door_contact.last_changed
|
|
}}"
|
|
- condition: state
|
|
entity_id: input_boolean.office_keep_lights_on
|
|
state: "off"
|
|
actions:
|
|
- delay:
|
|
minutes: 2
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data: {}
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
message: Office Lights Turned Off
|
|
title: ⚡️ Office Lights
|
|
mode: single
|
|
- id: "1781102033733"
|
|
alias: Water Leak Detected
|
|
description: ""
|
|
triggers:
|
|
- type: moist
|
|
device_id: 59bc102f385d7a3524c8f21a5c53592b
|
|
entity_id: c268ff8842e905515de2274d09c5ab9e
|
|
domain: binary_sensor
|
|
metadata:
|
|
secondary: false
|
|
trigger: device
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
title: "\U0001F6A8 URGENT: Water Leak Detected"
|
|
message: Water Leak Detected in Basement. Check Water Heater for Leaks.
|
|
- action: persistent_notification.create
|
|
metadata: {}
|
|
data:
|
|
title: "\U0001F6A8 URGENT: Water Leak Detected"
|
|
message: Water Leak Detected in Basement. Check Water Heater for Leaks.
|
|
mode: single
|
|
- id: "1781112110968"
|
|
alias: "Freezer Safety: Alert if Plug Turns Off"
|
|
description: Triggers an immediate notification if the freezer smart plug is turned
|
|
off.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: switch.freezer
|
|
to: "off"
|
|
for:
|
|
minutes: 1
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: "\U0001F6A8 FREEZER PLUG TRIPPED!"
|
|
message: The freezer smart plug turned off. Check it immediately to prevent
|
|
food spoilage.
|
|
- action: notify.persistent_notification
|
|
metadata: {}
|
|
data:
|
|
title: "\U0001F6A8 FREEZER PLUG TRIPPED!"
|
|
message: The freezer smart plug turned off. Check it immediately to prevent
|
|
food spoilage.
|
|
mode: single
|
|
- id: "1781275767970"
|
|
alias: "Dishwasher: Cycle Finished Notification"
|
|
description: Alerts when the dishwasher finishes washing
|
|
triggers:
|
|
- entity_id:
|
|
- sensor.150633095332665_progress
|
|
from:
|
|
- Dry
|
|
to:
|
|
- Complete
|
|
trigger: state
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Dishwasher Done
|
|
message: The dishwasher cycle has completed successfully!
|
|
mode: single
|
|
- id: "1781275801564"
|
|
alias: "Dishwasher: Rinse Aid Low Warning"
|
|
description: Alerts when rinse aid needs a refill
|
|
triggers:
|
|
- entity_id: binary_sensor.150633095332665_rinse_aid
|
|
to: "on"
|
|
trigger: state
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Dishwasher Maintenance
|
|
message: The dishwasher is low on rinse aid. Please refill it before the next
|
|
cycle!
|
|
mode: single
|
|
- id: "1781278655292"
|
|
alias: "Dishwasher: Dishwasher Started Notification"
|
|
description: Alerts when the dishwasher starts washing
|
|
triggers:
|
|
- entity_id:
|
|
- sensor.150633095332665_status
|
|
to:
|
|
- Running
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Dishwasher Started
|
|
message: The dishwasher cycle has started!
|
|
mode: single
|
|
- id: "1781279642928"
|
|
alias: "Dishwasher: Rinse Aid Refilled Notification"
|
|
description: Alerts when rinse aid has been refilled
|
|
triggers:
|
|
- entity_id:
|
|
- binary_sensor.150633095332665_rinse_aid
|
|
to:
|
|
- "off"
|
|
trigger: state
|
|
from:
|
|
- "on"
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Dishwasher Maintenance
|
|
message: The dishwasher rinse aid has been refilled!
|
|
mode: single
|
|
- id: "1781282506359"
|
|
alias: Dishwasher Cycle Tracker
|
|
description: ""
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- sensor.150633095332665_progress
|
|
to:
|
|
- Complete
|
|
conditions: []
|
|
actions:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id:
|
|
- counter.dishwasher_wash_cycles
|
|
- counter.dishwasher_total_wash_cycles
|
|
data: {}
|
|
mode: single
|
|
- id: "1781283625261"
|
|
alias: "Dishwasher: Create Persistent Filter Alert"
|
|
description: Pins a notification to the sidebar when the dishwasher hits 40 cycles.
|
|
triggers:
|
|
- entity_id:
|
|
- counter.dishwasher_wash_cycles
|
|
above: 30
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Dishwasher Filter Maintenance
|
|
message: The dishwasher has completed 30 cycles. Please clean the physical mesh
|
|
filter and press Reset on your dashboard.
|
|
notification_id: dishwasher_filter_reminder
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
title: Dishwasher Filter Maintenance
|
|
message: The dishwasher has completed 30 cycles. Please clean the physical mesh
|
|
filter and press Reset on your dashboard.
|
|
mode: single
|
|
- id: "1781283661169"
|
|
alias: "Dishwasher: Clear Persistent Filter Alert"
|
|
description: Automatically removes the sidebar notification when the counter is
|
|
reset.
|
|
triggers:
|
|
- entity_id: counter.dishwasher_wash_cycles
|
|
below: 10
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- action: persistent_notification.dismiss
|
|
data:
|
|
notification_id: dishwasher_filter_reminder
|
|
mode: single
|
|
- id: "1781285326960"
|
|
alias: "Tablet: Restore Screen in Morning v2"
|
|
description: Wakes the tablet and restores brightness/timeout
|
|
triggers:
|
|
- at: 07:00:00
|
|
trigger: time
|
|
actions:
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_on
|
|
data:
|
|
command: turn_on
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_off_timeout
|
|
data:
|
|
command: 120000
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_brightness_level
|
|
data:
|
|
command: 180
|
|
- id: "1781320273276"
|
|
alias: "Tablet: Fix Greyed Out Brightness"
|
|
description: Disables auto-brightness and restores manual slider control
|
|
triggers:
|
|
- at: 07:00:00
|
|
trigger: time
|
|
actions:
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_auto_screen_brightness
|
|
data:
|
|
command: turn_off
|
|
- action: notify.mobile_app_sm_t387w
|
|
data:
|
|
message: command_screen_brightness_level
|
|
data:
|
|
command: 180
|
|
- id: "1781392657515"
|
|
alias: "Washing Machine: Cycle Status"
|
|
description: Triggers notifications when the washing machine starts and finishes
|
|
its cycle based on power consumption with debouncing.
|
|
triggers:
|
|
- entity_id: sensor.washer_power
|
|
above: 10
|
|
id: washer_started
|
|
trigger: numeric_state
|
|
- entity_id: sensor.washer_power
|
|
below: 3
|
|
for:
|
|
hours: 0
|
|
minutes: 4
|
|
seconds: 0
|
|
id: washer_finished
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: washer_started
|
|
- condition: state
|
|
entity_id: input_boolean.washer_running
|
|
state: "off"
|
|
sequence:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.washer_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Washer Started
|
|
message: The washing machine has started its cycle.
|
|
- conditions:
|
|
- condition: trigger
|
|
id: washer_finished
|
|
- condition: state
|
|
entity_id: input_boolean.washer_running
|
|
state: "on"
|
|
sequence:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.washer_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Washer Finished
|
|
message: The washing machine has completed its cycle. Time to empty it!
|
|
- id: "1781402128095"
|
|
alias: Daily Morning Climate Report
|
|
description: Triggers the weather and comfort report script every morning at 7:00
|
|
AM
|
|
triggers:
|
|
- at: 07:00:00
|
|
trigger: time
|
|
conditions: []
|
|
actions:
|
|
- action: script.weather_and_comfort_report
|
|
mode: single
|
|
- id: "1781403940897"
|
|
alias: "Microwave: Cycle Status"
|
|
description: Triggers notifications when the microwave starts and finishes based
|
|
on power consumption.
|
|
triggers:
|
|
- entity_id:
|
|
- sensor.microwave_power
|
|
above: 100
|
|
id: microwave_started
|
|
trigger: numeric_state
|
|
- entity_id: sensor.microwave_power
|
|
below: 3
|
|
for:
|
|
hours: 0
|
|
minutes: 1
|
|
seconds: 0
|
|
id: microwave_finished
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: microwave_started
|
|
- condition: state
|
|
entity_id: input_boolean.microwave_running
|
|
state: "off"
|
|
sequence:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.microwave_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Microwave Started
|
|
message: The microwave is running.
|
|
- conditions:
|
|
- condition: trigger
|
|
id: microwave_finished
|
|
- condition: state
|
|
entity_id: input_boolean.microwave_running
|
|
state: "on"
|
|
sequence:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.microwave_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Microwave Finished
|
|
message: The microwave has finished!
|
|
- id: "1781404011664"
|
|
alias: "Ninja Toaster Oven: Cycle Status"
|
|
description: Triggers notifications when the Ninja toaster oven starts and finishes
|
|
cooking, with a buffer for element heat cycling.
|
|
triggers:
|
|
- entity_id: sensor.ninja_power
|
|
above: 10
|
|
id: ninja_started
|
|
trigger: numeric_state
|
|
- entity_id: sensor.ninja_power
|
|
below: 3
|
|
for:
|
|
hours: 0
|
|
minutes: 3
|
|
seconds: 0
|
|
id: ninja_finished
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: ninja_started
|
|
- condition: state
|
|
entity_id: input_boolean.ninja_running
|
|
state: "off"
|
|
sequence:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.ninja_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Ninja Ovens Started
|
|
message: The Ninja toaster oven is heating up.
|
|
- conditions:
|
|
- condition: trigger
|
|
id: ninja_finished
|
|
- condition: state
|
|
entity_id: input_boolean.ninja_running
|
|
state: "on"
|
|
sequence:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.ninja_running
|
|
- action: notify.notify
|
|
data:
|
|
title: Ninja Oven Finished
|
|
message: The Ninja toaster oven has finished cooking!
|
|
- id: "1781445544080"
|
|
alias: "Kitchen: Coffee Maker Cycle Status"
|
|
description: "Triggers on the high-wattage grinder spike. Dynamically waits for
|
|
the cycle to finish: it requires a minimum of 1 minute to pass AND the power to
|
|
drop back to the TV baseline."
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id: sensor.coffee_maker_power
|
|
above: 800
|
|
id: coffee_started
|
|
- trigger: numeric_state
|
|
entity_id: sensor.coffee_maker_power
|
|
below: 15
|
|
for:
|
|
hours: 0
|
|
minutes: 1
|
|
seconds: 0
|
|
id: coffee_finished
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: coffee_started
|
|
- condition: state
|
|
entity_id: input_boolean.coffee_maker_running
|
|
state: "off"
|
|
sequence:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.coffee_maker_running
|
|
- action: notify.notify
|
|
data:
|
|
title: ☕ Coffee Time
|
|
message: Someone is making coffee.
|
|
- conditions:
|
|
- condition: trigger
|
|
id: coffee_finished
|
|
- condition: state
|
|
entity_id: input_boolean.coffee_maker_running
|
|
state: "on"
|
|
sequence:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.coffee_maker_running
|
|
- action: notify.notify
|
|
data:
|
|
title: ☕ Coffee Ready
|
|
message: Your coffee is ready to enjoy!
|
|
mode: single
|
|
- id: "1781793117883"
|
|
alias: Basement Temperature Change
|
|
description: ""
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id: sensor.basement_temperature
|
|
above: 15
|
|
- trigger: numeric_state
|
|
entity_id: sensor.basement_temperature
|
|
below: 10
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
title: Basement Temperature Change
|
|
message: "{% set t = states('sensor.basement_temperature') | float(0) %}{%
|
|
if t >= 15 %}Basement temperature changed: crossed above 15°C (current: {{
|
|
t }}°C){% elif t <= 10 %}Basement temperature changed: crossed below 10°C
|
|
(current: {{ t }}°C){% else %}Basement temperature changed (current: {{ t
|
|
}}°C){% endif %}"
|
|
mode: single
|
|
- id: "1782161891986"
|
|
alias: "Notification: Pool Sensor Low Battery"
|
|
description: Alert when the pool temperature sensor battery drops below 15%
|
|
triggers:
|
|
- entity_id:
|
|
- sensor.pool_battery
|
|
below: 15
|
|
trigger: numeric_state
|
|
conditions: []
|
|
actions:
|
|
- data:
|
|
title: Pool Sensor Battery Low
|
|
message: The pool temperature sensor battery is currently at {{ states('sensor.pool_battery')
|
|
}}%. Please change it soon.
|
|
action: notify.persistent_notification
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
title: Pool Sensor Battery Low
|
|
message: The pool temperature sensor battery is currently at {{ states('sensor.pool_battery')
|
|
}}%. Please change it soon.
|
|
mode: single
|
|
- &id001
|
|
id: commute_morning_traffic_alert_map
|
|
alias: "Commute: Morning Traffic Alert with Map"
|
|
description: Checks commute times at 7:15 AM and attaches a map if traffic is bad.
|
|
triggers:
|
|
- at: 07:15:00
|
|
trigger: time
|
|
conditions:
|
|
- condition: or
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ states('sensor.google_travel_time_work') | float(0) >
|
|
35 }}"
|
|
actions:
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.camera_commute_map
|
|
data:
|
|
filename: /config/www/commute_snapshot.jpg
|
|
- action: notify.notify
|
|
data:
|
|
title: "\U0001F6A8 Commute Delay Alert!"
|
|
message: "Traffic to Work is heavier than usual this morning. \n- Google Maps:
|
|
{{ states('sensor.google_travel_time_work') }} mins."
|
|
data:
|
|
image: /local/commute_snapshot.jpg
|
|
enabled: false
|
|
- action: notify.persistent_notification
|
|
data:
|
|
title: "\U0001F6A8 Commute Delay Alert!"
|
|
message: "Traffic to Work is heavier than usual this morning. \n- Google Maps:
|
|
{{ states('sensor.google_travel_time_work') }} mins. \n"
|
|
mode: single
|
|
- *id001
|
|
- *id001
|
|
- id: "1782999027626"
|
|
alias: "Commute: Morning Traffic Alert"
|
|
description: Pushes an interactive, live traffic map to my phone before the commute.
|
|
triggers:
|
|
- at: 07:15:00
|
|
trigger: time
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Morning Commute Traffic
|
|
message: Swipe down to view live traffic along your route.
|
|
data:
|
|
push:
|
|
category: map
|
|
action_data:
|
|
latitude: "45.474668"
|
|
longitude: "-73.737158"
|
|
shows_traffic: true
|
|
shows_scale: true
|
|
- id: "1783000087983"
|
|
alias: Morning Commute Alert
|
|
description: Notify when commute is longer than 35 minutes.
|
|
triggers:
|
|
- trigger: time
|
|
at: 07:15:00
|
|
conditions:
|
|
- condition: time
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
- condition: or
|
|
conditions:
|
|
- condition: numeric_state
|
|
entity_id: sensor.google_travel_time_work
|
|
above: 35
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: "\U0001F697 Morning Commute"
|
|
message: "Google: {{ states('sensor.google_travel_time_work') }} min\n\n{% set
|
|
g = states('sensor.google_travel_time_work') | float(0) %} {% if g > 50 %}
|
|
\U0001F6A8 Major traffic delays. {% elif g > 40 %} ⚠️ Heavy traffic. {% else
|
|
%} \U0001F7E1 Moderate traffic. {% endif %}"
|
|
mode: single
|
|
- id: "1783162325964"
|
|
alias: Motion Shed - AI Description
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: input_boolean.blink_shed_camera_motion
|
|
to: "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: camera.record
|
|
target:
|
|
entity_id:
|
|
- camera.blink_backyard_shed
|
|
data:
|
|
duration: 10
|
|
lookback: 0
|
|
filename: /media/blinkshed.mp4
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data: {}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data:
|
|
filename: /config/www/flush_cache.jpg
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 3
|
|
milliseconds: 0
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data: {}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- variables:
|
|
snapshot_filename: blink_shed_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_shed_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink Backyard Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a little
|
|
humorous. Focus on any people, objects, animals or activities. Text needs
|
|
to be max 240 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Backyard Shed
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard Shed
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783452320698"
|
|
alias: Nest Test Motion
|
|
description: Takes a snapshot when the Blink camera detects motion, analyzes it
|
|
with AI, and sends a mobile and persistent notification.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- binary_sensor.backyard
|
|
to:
|
|
- "on"
|
|
conditions: []
|
|
actions:
|
|
- delay: 00:00:02
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id:
|
|
- camera.front
|
|
- camera.backyard_shed
|
|
data:
|
|
filename: /media/nest_Living2.jpg
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.backyard_tree
|
|
data:
|
|
filename: /config/www/blinkTree.jpg
|
|
- delay: 00:00:02
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
response_variable: ai_profile
|
|
data:
|
|
task_name: Blink InShed Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief. Focus on any people,
|
|
objects, or activities. Text needs to be max 225 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/blinkTree.jpg
|
|
media_content_type: image/jpeg
|
|
- action: notify.notify
|
|
data:
|
|
title: Motion Detected - Backyard Tree
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard Tree
|
|
notification_id: backyard_tree_motion
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783540959739"
|
|
alias: Motion Front Door - AI Description
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id:
|
|
- input_boolean.blink_front_camera_motion
|
|
to:
|
|
- "on"
|
|
enabled: true
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_front
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- variables:
|
|
snapshot_filename: blink_Front_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_front_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Nest Front Camera Analysis
|
|
entity_id: ai_task.google_ai_task
|
|
instructions: Describe what you see in this image in brief, but make it a little
|
|
humorous. Focus on any people, objects, animals or activities. Text needs
|
|
to be max 240 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: notify.persistent_notification
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
data:
|
|
notification_id: nest_front_motion
|
|
enabled: false
|
|
- action: persistent_notification.create
|
|
metadata: {}
|
|
data:
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}} "
|
|
title: Motion Detected - Front Door
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783615071224"
|
|
alias: "TEST: AI Camera Motion Detection OLLAMA"
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.front
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.front
|
|
- variables:
|
|
snapshot_filename: blink_Front_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_front_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 4
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Nest Front Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_2
|
|
instructions: Describe what you see in this image in brief. Focus on any people,
|
|
objects, animals or activities. Text needs to be max 240 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: notify.persistent_notification
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
data:
|
|
notification_id: nest_front_motion
|
|
enabled: false
|
|
- action: persistent_notification.create
|
|
metadata: {}
|
|
data:
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}} "
|
|
title: Motion Detected - Front Door
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783628026617"
|
|
alias: "Garage Door: Open Notification"
|
|
description: ""
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- binary_sensor.garage_door_contact
|
|
to:
|
|
- "on"
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
message: "Garage Door is Opened "
|
|
title: Garage Door
|
|
mode: single
|
|
- id: "1783628088925"
|
|
alias: "Garage Door: Closed Notification"
|
|
description: ""
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- binary_sensor.garage_door_contact
|
|
to:
|
|
- "off"
|
|
from:
|
|
- "on"
|
|
conditions: []
|
|
actions:
|
|
- action: notify.notify
|
|
metadata: {}
|
|
data:
|
|
message: Garage Door Closed
|
|
title: Garage Door
|
|
mode: single
|
|
- id: "1783643893067"
|
|
alias: Blink Shed Camera Motion Triggered
|
|
description: Triggers local actions when the front Blink camera senses motion
|
|
triggers:
|
|
- entity_id: input_boolean.blink_shed_camera_motion
|
|
to: "on"
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- data:
|
|
title: Shed Door Alert
|
|
message: Motion detected on the Shed Blink camera!
|
|
action: notify.persistent_notification
|
|
mode: single
|
|
- id: "1783647055563"
|
|
alias: Motion Backyard - AI Description
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- input_boolean.blink_backyard_camera_motion
|
|
to:
|
|
- "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- variables:
|
|
snapshot_filename: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink Backyard Camera Analysis
|
|
entity_id: ai_task.google_ai_task
|
|
instructions: Describe what you see in this image in brief, but make it a little
|
|
humorous. Focus on any people, objects, animals or activities. Text needs
|
|
to be max 240 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Backyard
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783649304797"
|
|
alias: Motion Inside Shed - AI Description
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- input_boolean.blink_inside_shed_camera_motion
|
|
to:
|
|
- "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- variables:
|
|
snapshot_filename: blink_Inshed_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_Inshed_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink InShed Camera Analysis
|
|
entity_id: ai_task.google_ai_task
|
|
instructions: Describe what you see in this image in brief, but make it a little
|
|
humorous. Focus on any people, objects, animals or activities. Text needs
|
|
to be max 240 characters.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Backyard Inside Shed
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1783736251030"
|
|
alias: "Office: Teams Webhook Busy Light"
|
|
description: Triggers light based on Windows 11 Teams log file status changes
|
|
triggers:
|
|
- webhook_id: office_teams_meeting_status_webhook_secret_99
|
|
allowed_methods:
|
|
- POST
|
|
local_only: false
|
|
trigger: webhook
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.json.status in ['busy', 'do not disturb']
|
|
}}"
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 0
|
|
- 0
|
|
action: light.turn_on
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.json.status in ['available', 'offline', 'away']
|
|
}}"
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 20
|
|
rgb_color:
|
|
- 255
|
|
- 255
|
|
- 255
|
|
action: light.turn_on
|
|
mode: single
|
|
- id: "1783737753660"
|
|
alias: "Office: Manual Meeting Status Busy Light - Working Hours"
|
|
description: "Work hours: Toggle controls Red/Green (Motion ignored). After hours
|
|
OR Away Mode: Pure motion night light (Toggle ignored)."
|
|
triggers:
|
|
- id: status_changed
|
|
entity_id: input_boolean.in_a_meeting
|
|
trigger: state
|
|
- id: motion_detected
|
|
entity_id: binary_sensor.night_light_occupancy
|
|
trigger: state
|
|
to: "on"
|
|
- id: motion_cleared
|
|
entity_id: binary_sensor.night_light_occupancy
|
|
trigger: state
|
|
to: "off"
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: status_changed
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: input_boolean.away_mode
|
|
state: "off"
|
|
- condition: time
|
|
after: 08:00:00
|
|
before: "18:00:00"
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 0
|
|
- 0
|
|
action: light.turn_on
|
|
- conditions:
|
|
- condition: trigger
|
|
id: status_changed
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "off"
|
|
- condition: state
|
|
entity_id: input_boolean.away_mode
|
|
state: "off"
|
|
- condition: time
|
|
after: 08:00:00
|
|
before: "18:00:00"
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 20
|
|
rgb_color:
|
|
- 5
|
|
- 245
|
|
- 45
|
|
action: light.turn_on
|
|
- conditions:
|
|
- condition: trigger
|
|
id: motion_detected
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.away_mode
|
|
state: "on"
|
|
- condition: not
|
|
conditions:
|
|
- condition: time
|
|
after: 08:00:00
|
|
before: "18:00:00"
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 30
|
|
rgb_color:
|
|
- 255
|
|
- 255
|
|
- 255
|
|
action: light.turn_on
|
|
- conditions:
|
|
- condition: trigger
|
|
id: motion_cleared
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.away_mode
|
|
state: "on"
|
|
- condition: not
|
|
conditions:
|
|
- condition: time
|
|
after: 08:00:00
|
|
before: "18:00:00"
|
|
weekday:
|
|
- mon
|
|
- tue
|
|
- wed
|
|
- thu
|
|
- fri
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
action: light.turn_off
|
|
mode: restart
|
|
- id: "1783738120074"
|
|
alias: "Office: Webhook Toggle Meeting Status"
|
|
description: Toggles the meeting status boolean when the secret webhook URL is opened
|
|
triggers:
|
|
- webhook_id: toggle_my_meeting_status_secret_abc123
|
|
allowed_methods:
|
|
- POST
|
|
- GET
|
|
local_only: false
|
|
trigger: webhook
|
|
conditions: []
|
|
actions:
|
|
- target:
|
|
entity_id: input_boolean.in_a_meeting
|
|
action: input_boolean.toggle
|
|
mode: single
|
|
- id: "1783806626578"
|
|
alias: "Office: TEST Meeting Status Lights"
|
|
description: "DEDICATED TESTING: Forces Red/Green colors anytime the switch is toggled.
|
|
Disable production automation before using."
|
|
triggers:
|
|
- entity_id: input_boolean.in_a_meeting
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "on"
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 0
|
|
- 0
|
|
action: light.turn_on
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "off"
|
|
sequence:
|
|
- target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 20
|
|
rgb_color:
|
|
- 5
|
|
- 245
|
|
- 45
|
|
action: light.turn_on
|
|
mode: single
|
|
- id: "1783824363227"
|
|
alias: Downstairs Bathroom Light Control
|
|
description: Turn on bathroom switch when occupied, turn off after 30 minutes of
|
|
no occupancy.
|
|
triggers:
|
|
- entity_id: binary_sensor.downstairs_bathroom_occupancy
|
|
to: "on"
|
|
id: motion_detected
|
|
trigger: state
|
|
- entity_id: binary_sensor.downstairs_bathroom_occupancy
|
|
to: "off"
|
|
for:
|
|
hours: 0
|
|
minutes: 30
|
|
seconds: 0
|
|
id: motion_clear
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: motion_detected
|
|
sequence:
|
|
- target:
|
|
entity_id: switch.downstairs_bathroom_switch
|
|
action: switch.turn_on
|
|
- conditions:
|
|
- condition: trigger
|
|
id: motion_clear
|
|
sequence:
|
|
- target:
|
|
entity_id: switch.downstairs_bathroom_switch
|
|
action: switch.turn_off
|
|
mode: restart
|
|
- id: "1783896963375"
|
|
alias: "Office: Smart Button Toggles Meeting Status - IKEA BILRESA"
|
|
description: Toggles the meeting input boolean when the smart button is pressed
|
|
triggers:
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.office_button_button_1
|
|
conditions: []
|
|
actions:
|
|
- target:
|
|
entity_id: input_boolean.in_a_meeting
|
|
action: input_boolean.toggle
|
|
mode: single
|
|
- id: "1783901121760"
|
|
alias: Ikea BILRESA scroll wheel - Bedroom Switch
|
|
description: ""
|
|
use_blueprint:
|
|
path: BoGu5/kea BILRESA scroll wheel (sensors for scroll, events for press).yaml
|
|
input:
|
|
remote: c7289314a586fc3739316abfeee0cdf5
|
|
click_action_ch1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data: {}
|
|
scroll_wheel_target_ch1:
|
|
- light.bedroom_lights
|
|
scroll_wheel_mode_ch1: "lights: color temp only"
|
|
- id: "1783904189553"
|
|
alias: IKEA Bilresa Scrollwheel - Bedroom Light Control V1 - Atomic
|
|
description: ""
|
|
use_blueprint:
|
|
path: stone13/ikea_bilresa_atomic_v1.yaml
|
|
input:
|
|
light_entity: light.bedroom_lights
|
|
sensor_1: sensor.bedroom_switch_current_switch_position_1
|
|
sensor_2: sensor.bedroom_switch_current_switch_position_2
|
|
sensor_4: sensor.bedroom_switch_current_switch_position_4
|
|
sensor_5: sensor.bedroom_switch_current_switch_position_5
|
|
sensor_7: sensor.bedroom_switch_current_switch_position_7
|
|
sensor_8: sensor.bedroom_switch_current_switch_position_8
|
|
event_taste_1: event.bedroom_switch_button_3
|
|
event_taste_2: event.bedroom_switch_button_6
|
|
event_taste_3: event.bedroom_switch_button_9
|
|
scroll_logic_4_5: brightness
|
|
scroll_logic_7_8: brightness
|
|
- id: "1783905541495"
|
|
alias: Ikea Bilresa Switch Bedroom Light Control
|
|
description: ""
|
|
use_blueprint:
|
|
path: jhol-byte/Ikea_bilresa_scroll_wheel.yaml
|
|
input:
|
|
remote: c7289314a586fc3739316abfeee0cdf5
|
|
click_action_ch1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data: {}
|
|
scroll_wheel_target_ch1:
|
|
- light.bedroom_lights
|
|
- id: "1783906561328"
|
|
alias: IKEA BILRESA - Light Controller for PLAYROOM TEST2
|
|
description: ""
|
|
use_blueprint:
|
|
path: SvKRO/ha-blueprint-ikea-bilresa-scrollwheel_en.yaml
|
|
input:
|
|
remote_device: 353fb9eb9f1b2a138e468b02fb9fbf06
|
|
input_click_1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
device_id: 2f8c5ab2ca0d4be31919fba6df365813
|
|
data: {}
|
|
input_light_1:
|
|
device_id: 2f8c5ab2ca0d4be31919fba6df365813
|
|
input_mode_1: brightness
|
|
input_long_1: []
|
|
input_double_1: []
|
|
input_sens_1: 15
|
|
input_transition_1: 34
|
|
input_light_2:
|
|
device_id: 2f8c5ab2ca0d4be31919fba6df365813
|
|
input_sens_2: 15
|
|
input_light_3:
|
|
entity_id: light.bedroom_lights
|
|
input_sens_3: 10
|
|
input_transition_2: 0
|
|
- id: "1783909375854"
|
|
alias: "Office: Playroom Light Toggle - IKEA BILRESA"
|
|
description: Toggles the meeting input boolean when the smart button is pressed
|
|
triggers:
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.office_button_button_2
|
|
conditions: []
|
|
actions:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
device_id: 2f8c5ab2ca0d4be31919fba6df365813
|
|
data: {}
|
|
mode: single
|
|
- id: "1783960650360"
|
|
alias: "Bedroom: Ikea Bilresa Scrollwheel - Light Control"
|
|
description: ""
|
|
use_blueprint:
|
|
path: jhol-byte/Ikea_bilresa_scroll_wheel.yaml
|
|
input:
|
|
remote: c7289314a586fc3739316abfeee0cdf5
|
|
click_action_ch1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data: {}
|
|
scroll_wheel_target_ch1:
|
|
- light.bedroom_lights
|
|
scroll_wheel_mode_ext_ch1: instant
|
|
long_click_action_ch1:
|
|
- action: light.turn_on
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data:
|
|
brightness_pct: 80
|
|
double_click_action_ch1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data:
|
|
brightness_pct: 25
|
|
dim_turns_lights_on: true
|
|
click_action_ch2:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data: {}
|
|
scroll_wheel_target_ch2:
|
|
- light.bedroom_lights
|
|
scroll_wheel_mode_ext_ch2: instant
|
|
click_action_ch3:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lights
|
|
data: {}
|
|
scroll_wheel_target_ch3:
|
|
- light.bedroom_lights
|
|
scroll_wheel_mode_ext_ch3: instant
|
|
- id: "1783962246983"
|
|
alias: "OFFICE: IKEA BILRESA E2489 Dual Button (Matter) - In Meeting and Away Mode"
|
|
description: Ikea BILRESA E2489 Dual Button controls in Meeting toggle, and enable
|
|
Away Mode
|
|
use_blueprint:
|
|
path: censay/ikea-bilresa-e2489-matter-smart-button.yaml
|
|
input:
|
|
target_device: 0c00a80e3106a9d7089f44c4781e0187
|
|
button1_event: event.office_button_button_1
|
|
button2_event: event.office_button_button_2
|
|
button1_single:
|
|
- action: input_boolean.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: input_boolean.in_a_meeting
|
|
data: {}
|
|
button2_single:
|
|
- action: input_boolean.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data: {}
|
|
button2_double:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ states('input_text.office_lamp_previous_color')
|
|
== '' }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
- action: input_text.set_value
|
|
target:
|
|
entity_id: input_text.office_lamp_previous_color
|
|
data:
|
|
value: "{{ state_attr('light.office_lamp_2', 'rgb_color') | join(',')
|
|
}}"
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
rgb_color:
|
|
- 135
|
|
- 206
|
|
- 250
|
|
default:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
rgb_color: "{{ states('input_text.office_lamp_previous_color').split(',')
|
|
| map('int') | list }}"
|
|
- action: input_text.set_value
|
|
target:
|
|
entity_id: input_text.office_lamp_previous_color
|
|
data:
|
|
value: ""
|
|
button1_long_press: []
|
|
button2_long_press: []
|
|
- id: "1783972932942"
|
|
alias: "Notification: Office Meeting Status"
|
|
description: Sends a notification when entering or leaving a meeting
|
|
triggers:
|
|
- entity_id: input_boolean.in_a_meeting
|
|
to: "on"
|
|
id: meeting_started
|
|
trigger: state
|
|
- entity_id: input_boolean.in_a_meeting
|
|
to: "off"
|
|
id: meeting_ended
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- alias: Meeting Started Notification
|
|
conditions:
|
|
- condition: trigger
|
|
id: meeting_started
|
|
sequence:
|
|
- action: notify.notify
|
|
data:
|
|
title: Meeting Active
|
|
message: "Your status is now set to: \U0001F534 DO NOT ENTER"
|
|
- alias: Meeting Ended Notification
|
|
conditions:
|
|
- condition: trigger
|
|
id: meeting_ended
|
|
sequence:
|
|
- action: notify.notify
|
|
data:
|
|
title: Meeting Ended
|
|
message: "Your status is now set to: \U0001F7E2 AVAILABLE"
|
|
- id: "1784037118280"
|
|
alias: "Blink Safeguard: Auto Reset Stuck Toggles"
|
|
description: Forces stuck Blink helper toggles to turn off after 2 minutes and logs
|
|
the event
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- input_boolean.blink_backyard_camera_motion
|
|
- input_boolean.blink_front_camera_motion
|
|
- input_boolean.blink_inside_shed_camera_motion
|
|
- input_boolean.blink_shed_camera_motion
|
|
to: "on"
|
|
for:
|
|
minutes: 2
|
|
conditions: []
|
|
actions:
|
|
- action: logbook.log
|
|
data:
|
|
name: Blink Safeguard
|
|
message: Alexa failed to clear motion. Forcing auto-reset.
|
|
entity_id: "{{ trigger.entity_id }}"
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: "{{ trigger.entity_id }}"
|
|
mode: parallel
|
|
- id: "1784070582456"
|
|
alias: "Office: Lamp and lights control with IKEA Scroll Wheel"
|
|
description: ""
|
|
use_blueprint:
|
|
path: jhol-byte/Ikea_bilresa_scroll_wheel.yaml
|
|
input:
|
|
remote: c9c7e25e54eb6ac497a6791fe9cf70fe
|
|
click_action_ch1:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
device_id: 2f8c5ab2ca0d4be31919fba6df365813
|
|
data: {}
|
|
scroll_wheel_target_ch1:
|
|
- light.playroom_light
|
|
scroll_wheel_mode_ext_ch1: instant
|
|
long_click_action_ch1:
|
|
- action: light.turn_on
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data:
|
|
brightness_step_pct: 30
|
|
double_click_action_ch1: []
|
|
click_action_ch2:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
color_temp_kelvin: 5564
|
|
scroll_wheel_target_ch2:
|
|
- light.office_lamp_2
|
|
scroll_wheel_mode_ext_ch2: instant
|
|
double_click_action_ch2: []
|
|
scroll_wheel_mode_ch2: "lights: dim"
|
|
on_hold_action_ch2:
|
|
- action: light.turn_on
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
color_temp_kelvin: 5765
|
|
triple_click_action_ch2:
|
|
- action: light.turn_on
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
color_temp_kelvin: 2348
|
|
click_action_ch3:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
data: {}
|
|
scroll_wheel_target_ch3:
|
|
- light.bedroom_lamp_2
|
|
scroll_wheel_mode_ext_ch3: instant
|
|
on_hold_action_ch1:
|
|
- action: light.turn_on
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.playroom_light
|
|
data:
|
|
brightness_pct: 30
|
|
dim_turns_lights_on: true
|
|
- id: "1784073759556"
|
|
alias: "Office: Desk Lamp Meeting Alert"
|
|
description: Flashes the desk lamp red when meeting starts, green when it ends,
|
|
then returns to original state.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
to: "on"
|
|
id: meeting_on
|
|
- trigger: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
to: "off"
|
|
id: meeting_off
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.meeting_lamp_override
|
|
state: "off"
|
|
- condition: state
|
|
entity_id: input_boolean.away_mode
|
|
state: "off"
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: meeting_on
|
|
sequence:
|
|
- action: scene.create
|
|
data:
|
|
scene_id: desk_lamp_before_alert
|
|
snapshot_entities:
|
|
- light.office_lamp_2
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
brightness_pct: 100
|
|
hs_color:
|
|
- 0
|
|
- 100
|
|
transition: 0.5
|
|
- delay:
|
|
seconds: 1.5
|
|
- action: scene.turn_on
|
|
target:
|
|
entity_id: scene.desk_lamp_before_alert
|
|
data:
|
|
transition: 1
|
|
- conditions:
|
|
- condition: trigger
|
|
id: meeting_off
|
|
sequence:
|
|
- action: scene.create
|
|
data:
|
|
scene_id: desk_lamp_before_alert
|
|
snapshot_entities:
|
|
- light.office_lamp_2
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.office_lamp_2
|
|
data:
|
|
brightness_pct: 100
|
|
hs_color:
|
|
- 120
|
|
- 100
|
|
transition: 0.5
|
|
- delay:
|
|
seconds: 1.5
|
|
- action: scene.turn_on
|
|
target:
|
|
entity_id: scene.desk_lamp_before_alert
|
|
data:
|
|
transition: 1
|
|
default: []
|
|
mode: queued
|
|
max: 2
|
|
- id: "1784153893584"
|
|
alias: "Office: Manual Meeting Status Busy Light (Night Light) - Working Hours +
|
|
Motion Detection - v2"
|
|
description: "Work hours: Automatically turns Green or Red at 8 AM depending on
|
|
status. Toggle controls Red/Green. At 6 PM, light clears and switches to motion
|
|
detection. After hours OR Away Mode: Pure motion night light. Instant transition
|
|
when Away changes. Only triggers motion if dark."
|
|
triggers:
|
|
- id: status_changed
|
|
entity_id: input_boolean.in_a_meeting
|
|
trigger: state
|
|
- id: away_changed
|
|
entity_id: input_boolean.away_mode
|
|
trigger: state
|
|
- id: motion_detected
|
|
entity_id: binary_sensor.night_light_occupancy
|
|
trigger: state
|
|
to: "on"
|
|
- id: motion_cleared
|
|
entity_id: binary_sensor.night_light_occupancy
|
|
trigger: state
|
|
to: "off"
|
|
- id: work_day_started
|
|
trigger: time
|
|
at: 08:00:00
|
|
- id: work_day_ended
|
|
trigger: time
|
|
at: "18:00:00"
|
|
- trigger: homeassistant
|
|
event: start
|
|
id: ha_started
|
|
conditions: []
|
|
actions:
|
|
- variables:
|
|
is_work_hours: "{{ 8 <= now().hour < 18 and now().isoweekday() in [1,2,3,4,5]
|
|
}}"
|
|
is_away: "{{ is_state('input_boolean.away_mode', 'on') }}"
|
|
is_dark: "{{ states('sensor.night_light_illuminance') | float(0) < 15 }}"
|
|
- choose:
|
|
- alias: "--- HA RESTART: SET INITIAL LIGHT STATE ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.id == 'ha_started' }}"
|
|
sequence:
|
|
- choose:
|
|
- alias: "Work hours, not away, in meeting: Red"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ is_work_hours and not is_away and is_state('input_boolean.in_a_meeting',
|
|
'on') }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 0
|
|
- 0
|
|
- alias: "Work hours, not away, not in meeting: Green"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ is_work_hours and not is_away and is_state('input_boolean.in_a_meeting',
|
|
'off') }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 30
|
|
rgb_color:
|
|
- 5
|
|
- 245
|
|
- 45
|
|
- alias: "After hours or away, motion on and dark: Warm light"
|
|
conditions:
|
|
- condition: template
|
|
value_template:
|
|
"{{ (not is_work_hours or is_away) and is_dark and is_state('binary_sensor.night_light_occupancy',
|
|
'on') }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 40
|
|
color_temp_kelvin: 2700
|
|
- alias: "After hours or away, no motion or not dark: Light off"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ not is_work_hours or is_away }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.night_light
|
|
- alias: "--- WORKING HOURS MODE ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ is_work_hours and not is_away and (trigger.id in ['status_changed',
|
|
'work_day_started'] or (trigger.id == 'away_changed' and not is_away))
|
|
}}"
|
|
sequence:
|
|
- choose:
|
|
- alias: "Meeting is active: Set light to solid Red (100%)"
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "on"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 0
|
|
- 0
|
|
- alias: "Meeting is inactive: Set light to solid Green (20%)"
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.in_a_meeting
|
|
state: "off"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 30
|
|
rgb_color:
|
|
- 5
|
|
- 245
|
|
- 45
|
|
- alias: "--- WORK DAY ENDED: CLEAR LIGHT ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.id == 'work_day_ended' }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.night_light
|
|
- alias: "--- AFTER HOURS / AWAY: MOTION DETECTED ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ is_dark and (not is_work_hours or is_away) and trigger.id
|
|
== 'motion_detected' }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.night_light
|
|
data:
|
|
brightness_pct: 40
|
|
color_temp_kelvin: 2700
|
|
- alias: "--- AFTER HOURS / AWAY: MOTION CLEARED ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ (not is_work_hours or is_away) and trigger.id == 'motion_cleared'
|
|
}}"
|
|
sequence:
|
|
- delay: 00:00:05
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.night_light
|
|
- alias: "--- INSTANT AWAY TRANSITION ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.id == 'away_changed' and is_away }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.night_light
|
|
- alias: "--- FALLBACK: MEETING ENDS AFTER HOURS ---"
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ not is_work_hours and trigger.id == 'status_changed'
|
|
and is_state('input_boolean.in_a_meeting', 'off') }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.night_light
|
|
mode: restart
|
|
- id: "1784246257858"
|
|
alias: Sync Alexa Volume Slider
|
|
description: Syncs the Alexa Master Volume slider with the currently selected speaker.
|
|
triggers:
|
|
- entity_id: input_number.alexa_master_volume
|
|
id: slider_changed
|
|
trigger: state
|
|
- entity_id: input_select.alexa_target_device
|
|
id: speaker_changed
|
|
trigger: state
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: slider_changed
|
|
sequence:
|
|
- action: media_player.volume_set
|
|
target:
|
|
entity_id: "{{ states('input_select.alexa_target_device') }}"
|
|
data:
|
|
volume_level: "{{ states('input_number.alexa_master_volume') | float /
|
|
100 }}"
|
|
- conditions:
|
|
- condition: trigger
|
|
id: speaker_changed
|
|
sequence:
|
|
- action: input_number.set_value
|
|
target:
|
|
entity_id: input_number.alexa_master_volume
|
|
data:
|
|
value: "{% set target = states('input_select.alexa_target_device') %} {%
|
|
if state_attr(target, 'volume_level') != none %}\n {{ (state_attr(target,
|
|
'volume_level') | float * 100) | round(0) }}\n{% else %}\n 20\n{% endif
|
|
%}"
|
|
mode: restart
|
|
- id: ai_agent_auto_1784596277269
|
|
alias: Blink All Camera Motion AI Notification Version 3
|
|
description: Sends a notification when motion is detected by any Blink camera, capturing
|
|
a snapshot and analyzing it with AI for the description.
|
|
triggers:
|
|
- entity_id: binary_sensor.blink_backyard_shed_motion
|
|
id: shed
|
|
to: "on"
|
|
trigger: state
|
|
- entity_id: binary_sensor.blink_backyard_tree_motion
|
|
id: tree
|
|
to: "on"
|
|
trigger: state
|
|
- entity_id: binary_sensor.blink_front_motion
|
|
id: front
|
|
to: "on"
|
|
trigger: state
|
|
- trigger: state
|
|
entity_id: binary_sensor.blink_garage_side_motion
|
|
to: "on"
|
|
id: garage
|
|
actions:
|
|
- action: shell_command.cleanup_blink_snapshots
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: shed
|
|
sequence:
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.backyard_shed_refresh_snapshot
|
|
- delay:
|
|
seconds: 20
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
- delay:
|
|
seconds: 3
|
|
- variables:
|
|
snapshot_filename: blink_shed_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- variables:
|
|
title: Motion Detected - Backyard Shed
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- conditions:
|
|
- condition: trigger
|
|
id: tree
|
|
sequence:
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.backyard_tree_refresh_snapshot
|
|
- delay:
|
|
seconds: 20
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
- delay:
|
|
seconds: 3
|
|
- variables:
|
|
snapshot_filename: blink_tree_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- variables:
|
|
title: Motion Detected - Backyard Tree
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- conditions:
|
|
- condition: trigger
|
|
id: front
|
|
sequence:
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.front_refresh_snapshot
|
|
- delay:
|
|
seconds: 20
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.front
|
|
- delay:
|
|
seconds: 3
|
|
- variables:
|
|
snapshot_filename: blink_Front_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_front_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- variables:
|
|
title: Motion Detected - Front Door
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- conditions:
|
|
- condition: trigger
|
|
id: garage
|
|
sequence:
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.garage_side_refresh_snapshot
|
|
- delay:
|
|
seconds: 20
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.garage_side
|
|
- delay:
|
|
seconds: 3
|
|
- variables:
|
|
snapshot_filename: blink_garage_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_garage_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- variables:
|
|
title: Motion Detected - Garage Side
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_garage_side
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_garage_side
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
default:
|
|
- delay:
|
|
seconds: 2
|
|
- delay:
|
|
seconds: 2
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
response_variable: ai_profile
|
|
data:
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a very
|
|
funny. Focus on any people, objects, animals or activities.
|
|
task_name: Blink Camera Analysis
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
title: "{{ title }}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
title: "{{ title }}"
|
|
max: 10
|
|
mode: parallel
|
|
- id: "1784597653614"
|
|
alias: New automation
|
|
description: ""
|
|
triggers: []
|
|
conditions: []
|
|
actions:
|
|
- action: webrtc.create_link
|
|
metadata: {}
|
|
data:
|
|
open_limit: 1
|
|
time_to_live: 60
|
|
entity: camera.blink_backyard_shed
|
|
mode: single
|
|
- id: "1784599010203"
|
|
alias: Motion Backyard - AI Description - Version 2
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: binary_sensor.blink_backyard_motion
|
|
to: "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ (now() - state_attr(this.entity_id, 'last_triggered')).total_seconds()
|
|
> 60 }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: shell_command.cleanup_blink_snapshots
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.backyard_refresh_snapshot
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 20
|
|
milliseconds: 0
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
enabled: true
|
|
data:
|
|
entity_id:
|
|
- camera.blink_backyard
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 3
|
|
milliseconds: 0
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- variables:
|
|
snapshot_filename: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink Backyard Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a very
|
|
funny. Focus on any people, objects, animals or activities.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Backyard
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1784601034537"
|
|
alias: Motion Front Door - AI Description - Version 3
|
|
description: Takes a snapshot when the Nest camera detects motion, a person, an
|
|
animal, or a doorbell press, analyzes it with AI, and sends a mobile and persistent
|
|
notification.
|
|
triggers:
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id:
|
|
- input_boolean.blink_front_camera_motion
|
|
to:
|
|
- "on"
|
|
enabled: true
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ (now() - state_attr(this.entity_id, 'last_triggered')).total_seconds()
|
|
> 60 }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: shell_command.cleanup_blink_snapshots
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.front_refresh_snapshot
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 20
|
|
milliseconds: 0
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.front
|
|
enabled: true
|
|
data:
|
|
entity_id:
|
|
- camera.front
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 3
|
|
milliseconds: 0
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.front
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- variables:
|
|
snapshot_filename: blink_Front_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_front_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_front
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink Front Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a very
|
|
funny. Focus on any people, objects, animals or activities.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Front Door
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1784601274723"
|
|
alias: Motion Shed - AI Description - Version 2
|
|
description: Takes a snapshot when the shed's Blink camera detects motion, analyzes
|
|
it with AI, and sends a mobile and persistent notification. Structurally mirrors
|
|
the working Front automation (same switch/camera device pairing). If the AI description
|
|
still doesn't match the physical shed, camera.backyard_shed may be mislabeled
|
|
in the HomeKit Controller integration -- check its live feed against camera.garage_side
|
|
and camera.backyard_tree to confirm which physical camera is which, then rename
|
|
if needed.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: binary_sensor.blink_backyard_shed_motion
|
|
to: "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ (now() - state_attr(this.entity_id, 'last_triggered')).total_seconds()
|
|
> 60 }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: shell_command.cleanup_blink_snapshots
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.backyard_shed_refresh_snapshot
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 30
|
|
milliseconds: 0
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
enabled: true
|
|
data:
|
|
entity_id:
|
|
- camera.blink_backyard_shed
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 5
|
|
milliseconds: 0
|
|
- action: camera.record
|
|
target:
|
|
entity_id:
|
|
- camera.blink_backyard_shed
|
|
data:
|
|
duration: 10
|
|
lookback: 0
|
|
filename: /media/blinkshed.mp4
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- variables:
|
|
snapshot_filename: blink_shed_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_backyard_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_shed
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
response_variable: ai_profile
|
|
data:
|
|
task_name: Blink Shed Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a very
|
|
funny. Focus on any people, objects, animals or activities.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Backyard Shed
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Backyard Shed
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1784601377055"
|
|
alias: Motion Garage - AI Description - Version 2
|
|
description: Takes a snapshot when garage motion is detected and analyzes it with
|
|
AI. Deliberately uses the 'backyard_tree' Blink camera (switch.backyard_tree_refresh_snapshot
|
|
/ camera.backyard_tree) as the garage-monitoring camera -- entity names don't
|
|
match the physical location, but this pairing is intentional, not a bug.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: binary_sensor.blink_backyard_tree_motion
|
|
to: "on"
|
|
enabled: true
|
|
- trigger: event
|
|
event_type: state_changed
|
|
event_data:
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.living_room_living_room_camera_motion
|
|
enabled: false
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_motion
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
entity_id: event.entryway_entryway_camera_motion
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 290f56e5a655e3af82cbf3cf9fd22406
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_person
|
|
- camera_sound
|
|
- ring
|
|
enabled: false
|
|
- trigger: event.received
|
|
target:
|
|
device_id: 679d52e0d16cf48648d11dd024b961f8
|
|
options:
|
|
event_type:
|
|
- camera_motion
|
|
- camera_sound
|
|
- camera_person
|
|
enabled: false
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ (now() - state_attr(this.entity_id, 'last_triggered')).total_seconds()
|
|
> 60 }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.event_type in ['motion',
|
|
'person', 'animal', 'chime'] }}"
|
|
enabled: false
|
|
actions:
|
|
- action: shell_command.cleanup_blink_snapshots
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.backyard_tree_refresh_snapshot
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 30
|
|
milliseconds: 0
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
enabled: true
|
|
data:
|
|
entity_id:
|
|
- camera.blink_backyard_tree
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 5
|
|
milliseconds: 0
|
|
- action: blink.trigger_camera
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data: {}
|
|
enabled: false
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 10
|
|
milliseconds: 0
|
|
enabled: false
|
|
- variables:
|
|
snapshot_filename: blink_Inshed_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
|
|
- variables:
|
|
notification_id: blink_Inshed_{{ now().strftime('%Y%m%d_%H%M%S_%f') }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /media/{{ snapshot_filename }}
|
|
- action: camera.snapshot
|
|
target:
|
|
entity_id: camera.blink_backyard_tree
|
|
data:
|
|
filename: /config/www/{{ snapshot_filename }}
|
|
- delay:
|
|
hours: 0
|
|
minutes: 0
|
|
seconds: 2
|
|
milliseconds: 0
|
|
- action: ai_task.generate_data
|
|
continue_on_error: true
|
|
data:
|
|
task_name: Blink InShed Camera Analysis
|
|
entity_id: ai_task.ollama_ai_task_video
|
|
instructions: Describe what you see in this image in brief, but make it a very
|
|
funny. Focus on any people, objects, animals or activities.
|
|
attachments:
|
|
- media_content_id: media-source://media_source/local/{{ snapshot_filename }}
|
|
media_content_type: image/jpeg
|
|
response_variable: ai_profile
|
|
- action: notify.notify
|
|
continue_on_error: true
|
|
data:
|
|
title: Motion Detected - Garage
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}"
|
|
- action: persistent_notification.create
|
|
data:
|
|
title: Motion Detected - Garage
|
|
message: "{{ ai_profile.data if ai_profile is defined and 'data' in ai_profile
|
|
else 'Motion detected, but the AI Task integration failed to return a response.'
|
|
}}
|
|
|
|
"
|
|
notification_id: "{{ notification_id }}"
|
|
mode: queued
|
|
max: 10
|
|
- id: "1785027869879"
|
|
alias: Alfred Lock - Silent Force Hardware Sync
|
|
description: Mutes living room Echo, forces Alexa to check physical lock state,
|
|
and restores volume.
|
|
triggers:
|
|
- minutes: /15
|
|
trigger: time_pattern
|
|
actions:
|
|
- action: scene.create
|
|
data:
|
|
scene_id: echo_volume_snapshot
|
|
snapshot_entities:
|
|
- media_player.living_room_1_2
|
|
- action: media_player.volume_set
|
|
target:
|
|
entity_id: media_player.living_room_1_2
|
|
data:
|
|
volume_level: 0
|
|
- action: media_player.play_media
|
|
target:
|
|
entity_id: media_player.living_room_1_2
|
|
data:
|
|
media:
|
|
media_content_id: Is the front door locked?
|
|
media_content_type: custom
|
|
metadata: {}
|
|
- delay:
|
|
seconds: 5
|
|
- action: scene.turn_on
|
|
target:
|
|
entity_id: scene.echo_volume_snapshot
|
|
mode: single
|
|
- id: "1785108022773"
|
|
alias: Alfred Lock - Auto Sync on Door Contact
|
|
description: Forces a lock state resync whenever the front door opens or closes.
|
|
triggers:
|
|
- entity_id: binary_sensor.front_door
|
|
to:
|
|
- open
|
|
- "off"
|
|
trigger: state
|
|
actions:
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: input_boolean.alfred_lock_sync_switch
|
|
- action: homeassistant.update_entity
|
|
target:
|
|
entity_id: lock.alfred_front_door
|
|
mode: single
|
|
- id: doorbell_flash_kitchen_lights
|
|
alias: "Doorbell: Flash Kitchen Lights"
|
|
description: Flashes all kitchen lights when the front doorbell rings, then restores
|
|
their original state (on or off).
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: event.front_door_front_door_chime
|
|
conditions: []
|
|
actions:
|
|
- action: scene.create
|
|
data:
|
|
scene_id: kitchen_lights_before_doorbell
|
|
snapshot_entities:
|
|
- light.kitchen_group_kitchen_group_home_kitchen_sink_light
|
|
- light.kitchen_island_switch
|
|
- light.kitchen_kitchen_home_kitchen
|
|
- light.kitchen_kitchen_home_kitchen_group
|
|
- light.kitchen_spotlight_switch
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id:
|
|
- light.kitchen_group_kitchen_group_home_kitchen_sink_light
|
|
- light.kitchen_island_switch
|
|
- light.kitchen_kitchen_home_kitchen
|
|
- light.kitchen_kitchen_home_kitchen_group
|
|
- light.kitchen_spotlight_switch
|
|
data:
|
|
flash: long
|
|
- delay:
|
|
seconds: 5
|
|
- action: scene.turn_on
|
|
target:
|
|
entity_id: scene.kitchen_lights_before_doorbell
|
|
data:
|
|
transition: 1
|
|
mode: single
|
|
- id: "1785688553432"
|
|
alias: "Basement: Switch Toggles Living Room Lights"
|
|
description: Ikea BILRESA E2489 Dual Button (Basement Switch) toggles the Dining
|
|
Room Switch light on Button 1 single press. Button 2 single press dims to 30%
|
|
and restores the previous brightness.
|
|
use_blueprint:
|
|
path: censay/ikea-bilresa-e2489-matter-smart-button.yaml
|
|
input:
|
|
target_device: 2101b0e6d9ae7b4b2e1cb727a9ed42f0
|
|
button1_event: event.basement_switch_button_1
|
|
button2_event: event.basement_switch_button_2
|
|
button1_single:
|
|
- action: light.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: light.living_room_living_room_home_living_room
|
|
data: {}
|
|
button2_single:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ states('input_text.living_room_previous_brightness')
|
|
in ['', 'unknown', 'unavailable', none] }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.living_room_living_room_home_living_room
|
|
data: {}
|
|
- action: input_text.set_value
|
|
target:
|
|
entity_id: input_text.living_room_previous_brightness
|
|
data:
|
|
value: "{{ state_attr('light.living_room_living_room_home_living_room',
|
|
'brightness') }}"
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.living_room_living_room_home_living_room
|
|
data:
|
|
brightness_pct: 30
|
|
default:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.living_room_living_room_home_living_room
|
|
data:
|
|
brightness: "{{ states('input_text.living_room_previous_brightness')
|
|
| int }}"
|
|
- action: input_text.set_value
|
|
target:
|
|
entity_id: input_text.living_room_previous_brightness
|
|
data:
|
|
value: ""
|
|
button1_long_press:
|
|
- action: switch.toggle
|
|
metadata: {}
|
|
target:
|
|
entity_id: switch.filter
|
|
data: {}
|
|
- id: "1786068561172"
|
|
alias: 3D Printer Running - Playroom Light & Basement Heat
|
|
description: When the 3D printer running helper turns on, turn on the SparkX i7
|
|
light and the local 3D printer light at bright white, turn on the bedroom lamp,
|
|
set the basement to 22 degrees C, and turn on the filter. When the helper turns
|
|
off, turn both printer lights off after 3 minutes, turn off the bedroom lamp after
|
|
10 minutes, and turn off the filter after 1 hour.
|
|
triggers:
|
|
- entity_id: input_boolean.3d_printer_running
|
|
id: printer_started
|
|
to: "on"
|
|
trigger: state
|
|
- entity_id: input_boolean.3d_printer_running
|
|
id: printer_stopped
|
|
to: "off"
|
|
trigger: state
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: printer_started
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 255
|
|
- 255
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_on
|
|
data:
|
|
brightness_pct: 100
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- action: climate.set_temperature
|
|
data:
|
|
hvac_mode: heat
|
|
temperature: 22
|
|
target:
|
|
entity_id: climate.basement
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.filter
|
|
- conditions:
|
|
- condition: trigger
|
|
id: printer_stopped
|
|
sequence:
|
|
- parallel:
|
|
- sequence:
|
|
- delay:
|
|
minutes: 3
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- delay:
|
|
minutes: 7
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- sequence:
|
|
- delay:
|
|
hours: 1
|
|
- action: switch.turn_off
|
|
target:
|
|
entity_id: switch.filter
|
|
mode: restart
|
|
- id: "1786107704090"
|
|
alias: Count OctoPrint Print Outcomes
|
|
description: Legacy alias retained for entity stability. Increments the existing
|
|
print counters for SparkX i7 completed, stopped, and error states.
|
|
triggers:
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from: printing
|
|
id: done
|
|
to: completed
|
|
trigger: state
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from:
|
|
- printing
|
|
- paused
|
|
id: failed
|
|
to:
|
|
- stopped
|
|
- error
|
|
trigger: state
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: done
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.octoprint_successful_prints
|
|
- conditions:
|
|
- condition: trigger
|
|
id: failed
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.octoprint_failed_prints
|
|
mode: single
|
|
- id: "1787462132503"
|
|
alias: 3D Print Complete Snapshot - Telegram
|
|
description: Sends a Telegram photo with a SparkX i7 camera snapshot when a print
|
|
finishes successfully. Mobile completion notifications are handled by the Creality
|
|
integration.
|
|
triggers:
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from: printing
|
|
to: completed
|
|
trigger: state
|
|
actions:
|
|
- variables:
|
|
completion_message: "{% set file = trigger.to_state.attributes.get('file',
|
|
'') %} {% set name = 'Print' if file in ['', none, 'unknown', 'unavailable']
|
|
else file.split('/')[-1].replace('.gcode', '') %} {% set seconds = trigger.to_state.attributes.get('job_time_s',
|
|
0) | int(0) %} {{ name }} finished successfully at {{ now().strftime('%I:%M
|
|
%p').lstrip('0') }}. Total time: {% if seconds >= 3600 %}{{ seconds //
|
|
3600 }}h {{ ((seconds % 3600) // 60) }}m {% else %}{{ ((seconds % 3600) //
|
|
60) }}m{% endif %}"
|
|
- variables:
|
|
sparkx_needs_light: "{{ not is_state('light.sparkx_i7_light', 'on') }}"
|
|
bedroom_needs_light: "{{ not is_state('light.bedroom_lamp_2', 'on') }}"
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ sparkx_needs_light }}"
|
|
then:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ bedroom_needs_light }}"
|
|
then:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- delay:
|
|
seconds: 3
|
|
- action: camera.snapshot
|
|
data:
|
|
filename: /config/www/sparkx_i7_complete_snapshot.jpg
|
|
target:
|
|
entity_id: camera.sparkx_i7_printer_camera
|
|
- delay:
|
|
seconds: 2
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ sparkx_needs_light }}"
|
|
then:
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ bedroom_needs_light }}"
|
|
then:
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- action: telegram_bot.send_photo
|
|
data:
|
|
caption: "{{ completion_message }}"
|
|
file: /config/www/sparkx_i7_complete_snapshot.jpg
|
|
parse_mode: plain_text
|
|
target:
|
|
entity_id: notify.franco
|
|
mode: single
|
|
- id: "1787462157568"
|
|
alias: 3D Print Early Layers Snapshot
|
|
description: Telegram-only snapshots from all 3 printer cameras. Fires at 5%, 25%,
|
|
50% and 75% print progress. Lights the SparkX i7 and bedroom lamp only if they
|
|
are currently off, then restores whatever state they were in before capturing.
|
|
triggers:
|
|
- above: 5
|
|
entity_id: sensor.sparkx_i7_print_progress
|
|
trigger: numeric_state
|
|
- above: 25
|
|
entity_id: sensor.sparkx_i7_print_progress
|
|
trigger: numeric_state
|
|
- above: 50
|
|
entity_id: sensor.sparkx_i7_print_progress
|
|
trigger: numeric_state
|
|
- above: 75
|
|
entity_id: sensor.sparkx_i7_print_progress
|
|
trigger: numeric_state
|
|
conditions:
|
|
- condition: state
|
|
entity_id: sensor.sparkx_i7_print_status
|
|
state: printing
|
|
actions:
|
|
- variables:
|
|
milestone: "{% set above = trigger.get('above', 0) | int(0) %}{% if above
|
|
>= 75 %} 75% complete{% elif above >= 50 %} 50% complete{% elif above >= 25
|
|
%} 25% complete{% elif above >= 5 %} 5% complete{% else %} Print progress
|
|
{{ above }}%{% endif %}"
|
|
tag: p{{ trigger.get('above', 0) | int(0) }}
|
|
- variables:
|
|
bedroom_needs_light: "{{ not is_state('light.bedroom_lamp_2', 'on') }}"
|
|
message: "{% set file = state_attr('sensor.sparkx_i7_print_status', 'file')
|
|
or '' %} {% set name = 'Print' if file in ['', none, 'unknown', 'unavailable']
|
|
else file.split('/')[-1].replace('.gcode', '') %} {% set pct = states('sensor.sparkx_i7_print_progress')
|
|
| int(0) %} {% set left = states('sensor.sparkx_i7_print_time_left') | int(0)
|
|
%} 3D print · {{ milestone }} · {{ name }} at {{ pct }}%{% if left > 0 %}
|
|
· {{ (left // 3600) }}h {{ ((left % 3600) // 60) }}m left{% endif %}"
|
|
sparkx_needs_light: "{{ not is_state('light.sparkx_i7_light', 'on') }}"
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ sparkx_needs_light }}"
|
|
then:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ bedroom_needs_light }}"
|
|
then:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- delay:
|
|
seconds: 3
|
|
- parallel:
|
|
- action: camera.snapshot
|
|
data:
|
|
filename: /config/www/sparkx_{{ tag }}.jpg
|
|
target:
|
|
entity_id: camera.sparkx_i7_printer_camera
|
|
- action: camera.snapshot
|
|
data:
|
|
filename: /config/www/ender5_{{ tag }}.jpg
|
|
target:
|
|
entity_id: camera.endercamera_duckdns_org
|
|
- action: camera.snapshot
|
|
data:
|
|
filename: /config/www/ender_cam2_{{ tag }}.jpg
|
|
target:
|
|
entity_id: camera.endercamera2_duckdns_org
|
|
- delay:
|
|
seconds: 2
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ sparkx_needs_light }}"
|
|
then:
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ bedroom_needs_light }}"
|
|
then:
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- action: telegram_bot.send_photo
|
|
data:
|
|
caption: SparkX i7 — {{ message }}
|
|
file: /config/www/sparkx_{{ tag }}.jpg
|
|
parse_mode: plain_text
|
|
target:
|
|
entity_id: notify.franco
|
|
- action: telegram_bot.send_photo
|
|
data:
|
|
caption: Back Camera — {{ message }}
|
|
file: /config/www/ender5_{{ tag }}.jpg
|
|
parse_mode: plain_text
|
|
target:
|
|
entity_id: notify.franco
|
|
- action: telegram_bot.send_photo
|
|
data:
|
|
caption: Bed Camera — {{ message }}
|
|
file: /config/www/ender_cam2_{{ tag }}.jpg
|
|
parse_mode: plain_text
|
|
target:
|
|
entity_id: notify.franco
|
|
max: 4
|
|
mode: parallel
|
|
- id: "1787530101996"
|
|
alias: "Alert: Thread node offline"
|
|
description: "Early warning when a Matter-over-Thread device loses its mesh attachment
|
|
behind the Google TV Streamer border router. The six Thread nodes die in waves
|
|
when the Streamer's Thread stack wedges; this pings Franco's phone within ~3
|
|
minutes of the first drop instead of hours later. Recovery procedure: cold-boot
|
|
(unplug ~30s) the TV Streamer - see decision note 2026-08-23-thread-outage-fix-cold-boot-google-tv-2."
|
|
triggers:
|
|
- entity_id:
|
|
- light.bedroom_lamp_2
|
|
- light.office_lamp_2
|
|
- sensor.bedroom_switch_battery
|
|
for:
|
|
minutes: 3
|
|
to: unavailable
|
|
trigger: state
|
|
actions:
|
|
- action: notify.mobile_app_sm_f956w
|
|
data:
|
|
message: "{{ ['light.bedroom_lamp_2', 'light.office_lamp_2', 'sensor.bedroom_switch_battery']
|
|
| select('is_state', 'unavailable') | join(', ') }} lost the mesh. Fix:
|
|
unplug/replug the TV Streamer."
|
|
title: Thread node offline
|
|
max_exceeded: silent
|
|
mode: single
|
|
- id: "1787723383610"
|
|
alias: 3D Printer Lights Control - Scroll Wheel
|
|
description: Controls the SparkX i7 light, local 3D printer light, and bedroom lamp
|
|
from the 3D printer scroll wheel. Right-scroll turns lights on; left-scroll turns
|
|
them off.
|
|
use_blueprint:
|
|
input:
|
|
click_action_ch1:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: light.sparkx_i7_light
|
|
state: "on"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
default:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
click_action_ch2:
|
|
- else:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
if:
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: light.sparkx_i7_light
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: light.3d_printer_lights_local
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: light.bedroom_lamp_2
|
|
state: "on"
|
|
then:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
click_action_ch3: []
|
|
double_click_action_ch1:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
double_click_action_ch2: []
|
|
long_click_action_ch1: []
|
|
long_click_action_ch2: []
|
|
on_hold_action_ch1: []
|
|
on_hold_action_ch2: []
|
|
remote: eb34748c324b33255fb839f867f7a5d9
|
|
scroll_wheel_mode_ch1: user defined
|
|
scroll_wheel_mode_ch2: user defined
|
|
scroll_wheel_mode_ext_ch1: instant
|
|
scroll_wheel_mode_ext_ch2: instant
|
|
scroll_wheel_mode_ext_ch3: instant
|
|
scroll_wheel_target_ch1: []
|
|
scroll_wheel_target_ch2: []
|
|
scroll_wheel_target_ch3: []
|
|
scroll_wheel_user_action_ch1:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ scroll_direction == 'right' }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ scroll_direction == 'left' }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
scroll_wheel_user_action_ch2:
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ scroll_direction == 'right' }}"
|
|
sequence:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ scroll_direction == 'left' }}"
|
|
sequence:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
path: jhol-byte/Ikea_bilresa_scroll_wheel.yaml
|
|
- id: "1787723814939"
|
|
alias: 3D Printer Lights - Toggle from Boolean
|
|
description: Turns the SparkX i7 light and local 3D printer light on or off when
|
|
input_boolean.3d_printer_lights changes.
|
|
triggers:
|
|
- entity_id: input_boolean.3d_printer_lights
|
|
trigger: state
|
|
actions:
|
|
- else:
|
|
- action: light.turn_off
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
if:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_lights
|
|
state: "on"
|
|
then:
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
mode: single
|
|
- id: "1787723854939"
|
|
alias: 3D Printer Lights - Sync Boolean
|
|
description: Keeps the SparkX and local printer lights aligned when either light
|
|
is manually turned on or off. Brightness and color-only updates are ignored.
|
|
triggers:
|
|
- entity_id: light.sparkx_i7_light
|
|
from: "off"
|
|
id: sparkx_on
|
|
to: "on"
|
|
trigger: state
|
|
- entity_id: light.sparkx_i7_light
|
|
from: "on"
|
|
id: sparkx_off
|
|
to: "off"
|
|
trigger: state
|
|
- entity_id: light.3d_printer_lights_local
|
|
from: "off"
|
|
id: local_on
|
|
to: "on"
|
|
trigger: state
|
|
- entity_id: light.3d_printer_lights_local
|
|
from: "on"
|
|
id: local_off
|
|
to: "off"
|
|
trigger: state
|
|
- event: start
|
|
id: ha_start
|
|
trigger: homeassistant
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- sparkx_on
|
|
- local_on
|
|
sequence:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id:
|
|
- light.sparkx_i7_light
|
|
- light.3d_printer_lights_local
|
|
- conditions:
|
|
- condition: trigger
|
|
id:
|
|
- sparkx_off
|
|
- local_off
|
|
sequence:
|
|
- action: light.turn_off
|
|
continue_on_error: true
|
|
target:
|
|
entity_id:
|
|
- light.sparkx_i7_light
|
|
- light.3d_printer_lights_local
|
|
- conditions:
|
|
- condition: trigger
|
|
id: ha_start
|
|
sequence:
|
|
- delay:
|
|
seconds: 15
|
|
- if:
|
|
- condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: light.sparkx_i7_light
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: light.3d_printer_lights_local
|
|
state: "on"
|
|
then:
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
target:
|
|
entity_id:
|
|
- light.sparkx_i7_light
|
|
- light.3d_printer_lights_local
|
|
mode: single
|
|
- id: "1787790202454"
|
|
alias: Z2M Error Monitor
|
|
description: Notifies when Zigbee2MQTT logs an error
|
|
triggers:
|
|
- trigger: mqtt
|
|
topic: zigbee2mqtt/bridge/logging
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.payload_json.level == 'error' }}"
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
title: Z2M Error
|
|
message: "{{ trigger.payload_json.message }}"
|
|
mode: single
|
|
- id: "1787941729593"
|
|
alias: Filter plug health alert
|
|
description: Notify (mobile push + persistent notification) when the Filter plug
|
|
goes unavailable for 2+ minutes.
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: switch.filter
|
|
to: unavailable
|
|
for:
|
|
minutes: 2
|
|
id: offline
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: offline
|
|
sequence:
|
|
- action: notify.notify
|
|
data:
|
|
title: Filter plug offline
|
|
message: Filter plug offline - unavailable for 2+ minutes. Check the plug.
|
|
- action: notify.persistent_notification
|
|
data:
|
|
title: Filter plug offline
|
|
message: Filter plug offline - unavailable for 2+ minutes. Check the plug.
|
|
mode: single
|
|
- id: "1789399923492"
|
|
alias: 3D Printer Running - Reconcile on HA Start
|
|
description: When Home Assistant starts during an active SparkX i7 print, re-apply
|
|
the print-started actions for both printer lights, the bedroom, basement heat,
|
|
and filter after devices settle.
|
|
triggers:
|
|
- event: start
|
|
trigger: homeassistant
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "on"
|
|
- condition: template
|
|
value_template: "{{ states('sensor.sparkx_i7_print_status') in ['printing',
|
|
'paused'] }}"
|
|
actions:
|
|
- delay:
|
|
seconds: 15
|
|
- action: light.turn_on
|
|
target:
|
|
entity_id: light.sparkx_i7_light
|
|
- action: light.turn_on
|
|
continue_on_error: true
|
|
data:
|
|
brightness_pct: 100
|
|
rgb_color:
|
|
- 255
|
|
- 255
|
|
- 255
|
|
target:
|
|
entity_id: light.3d_printer_lights_local
|
|
- action: light.turn_on
|
|
data:
|
|
brightness_pct: 100
|
|
target:
|
|
entity_id: light.bedroom_lamp_2
|
|
- action: climate.set_temperature
|
|
data:
|
|
hvac_mode: heat
|
|
temperature: 22
|
|
target:
|
|
entity_id: climate.basement
|
|
- action: switch.turn_on
|
|
target:
|
|
entity_id: switch.filter
|
|
mode: single
|
|
- id: "1789655883265"
|
|
alias: 3D Printer Running - Reset Stale Boolean
|
|
description: If input_boolean.3d_printer_running is commanded on while already on
|
|
(e.g. after a printer crash left it on, so no off->on transition fires the main
|
|
automation), force a quick off->on bounce so the main automation runs its print-started
|
|
actions. The >5s stale check prevents responding to its own bounce.
|
|
triggers:
|
|
- event_data:
|
|
domain: input_boolean
|
|
service: turn_on
|
|
event_type: call_service
|
|
id: cmd_on
|
|
trigger: event
|
|
conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "on"
|
|
- condition: template
|
|
value_template: "{% set sd = trigger.event.data.get('service_data', {}) %}
|
|
|
|
{% set eid = sd.get('entity_id') %}
|
|
|
|
{% set tgt = sd.get('target', {}) if sd else {} %}
|
|
|
|
{% set tid = tgt.get('entity_id') %}
|
|
|
|
{% set ns = namespace(hits=[]) %}
|
|
|
|
{% for item in [eid, tid] if item %}
|
|
|
|
{% if item is string %}{% set ns.hits = ns.hits + [item] %}{% elif item is sequence
|
|
%}{% set ns.hits = ns.hits + item %}{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
{{ 'input_boolean.3d_printer_running' in ns.hits and (now() - states['input_boolean.3d_printer_running'].last_changed).total_seconds()
|
|
> 5 }}"
|
|
actions:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
- delay:
|
|
seconds: 2
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
mode: single
|
|
- id: "1771000000001"
|
|
alias: "3D PRINTER: IKEA BILRESA E2489 Dual Button (Matter) - Cancel & Park"
|
|
description: Legacy alias retained for entity stability. Button 1 stops the active
|
|
SparkX i7 print, waits 5 seconds, then homes XY/Z as the closest available replacement
|
|
for parking.
|
|
use_blueprint:
|
|
input:
|
|
button1_event: event.3d_printer_control_button_1
|
|
button1_single:
|
|
- action: button.press
|
|
target:
|
|
entity_id: button.sparkx_i7_stop_print
|
|
data: {}
|
|
button2_event: event.3d_printer_control_button_2
|
|
target_device: c2a0b26ffccdfc1fcde0c1b4700d1d0f
|
|
path: censay/ikea-bilresa-e2489-matter-smart-button.yaml
|
|
- id: sparkx_i7_running_sync
|
|
alias: 3D Printer Running - SparkX i7 Status Sync
|
|
description: Mirrors the SparkX i7 print lifecycle into the existing 3D printer
|
|
running helper without retriggering the helper when it is already in the desired
|
|
state.
|
|
triggers:
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from:
|
|
- idle
|
|
- self-testing
|
|
- completed
|
|
- stopped
|
|
- error
|
|
- processing
|
|
- unknown
|
|
- "off"
|
|
id: print_started
|
|
to: printing
|
|
trigger: state
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from:
|
|
- printing
|
|
- paused
|
|
id: print_stopped
|
|
to:
|
|
- completed
|
|
- stopped
|
|
- error
|
|
- idle
|
|
- processing
|
|
- self-testing
|
|
- "off"
|
|
- unknown
|
|
trigger: state
|
|
- event: start
|
|
id: ha_start
|
|
trigger: homeassistant
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: print_started
|
|
sequence:
|
|
- if:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "off"
|
|
then:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
- conditions:
|
|
- condition: trigger
|
|
id: print_stopped
|
|
sequence:
|
|
- if:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "on"
|
|
then:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
- conditions:
|
|
- condition: trigger
|
|
id: ha_start
|
|
sequence:
|
|
- delay:
|
|
seconds: 20
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: sensor.sparkx_i7_print_status
|
|
state: printing
|
|
sequence:
|
|
- if:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "off"
|
|
then:
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
- conditions:
|
|
- condition: template
|
|
value_template: "{{ states('sensor.sparkx_i7_print_status') in ['completed',
|
|
'stopped', 'error', 'idle', 'processing', 'self-testing',
|
|
'off', 'unknown'] }}"
|
|
sequence:
|
|
- if:
|
|
- condition: state
|
|
entity_id: input_boolean.3d_printer_running
|
|
state: "on"
|
|
then:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id: input_boolean.3d_printer_running
|
|
mode: single
|
|
- id: "1789900000001"
|
|
alias: 3D Print - Safe to Remove
|
|
description: After a successful SparkX i7 print, wait for the bed and nozzle to
|
|
stay at or below 35 degrees for 5 minutes, then notify all existing print devices.
|
|
triggers:
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
from: printing
|
|
id: print_completed
|
|
to: completed
|
|
trigger: state
|
|
- entity_id: sensor.sparkx_i7_print_status
|
|
id: new_print
|
|
to: printing
|
|
trigger: state
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: print_completed
|
|
sequence:
|
|
- variables:
|
|
print_name: "{% set file = trigger.to_state.attributes.get('file', '')
|
|
%} {% if file in ['', none, 'unknown', 'unavailable'] %}The print
|
|
{% else %}{{ file.split('/')[-1].replace('.gcode', '') }} {% endif
|
|
%}"
|
|
- repeat:
|
|
sequence:
|
|
- continue_on_timeout: false
|
|
timeout: 02:00:00
|
|
wait_template: "{{ is_state('sensor.sparkx_i7_print_status', 'completed')
|
|
and states('sensor.sparkx_i7_bed_temperature') | float(100) <= 35
|
|
and states('sensor.sparkx_i7_nozzle_temperature') | float(300) <=
|
|
35 }}"
|
|
- delay:
|
|
minutes: 5
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ is_state('sensor.sparkx_i7_print_status', 'completed')
|
|
and states('sensor.sparkx_i7_bed_temperature') | float(100) <= 35
|
|
and states('sensor.sparkx_i7_nozzle_temperature') | float(300) <=
|
|
35 }}"
|
|
then:
|
|
- variables:
|
|
bed_temp: "{{ states('sensor.sparkx_i7_bed_temperature') | float(0)
|
|
| round(1) }}"
|
|
nozzle_temp: "{{ states('sensor.sparkx_i7_nozzle_temperature') |
|
|
float(0) | round(1) }}"
|
|
safe_message: "{{ print_name }} is cool enough to remove. Bed: {{
|
|
bed_temp }} °C, nozzle: {{ nozzle_temp }} °C."
|
|
- action: notify.send_message
|
|
data:
|
|
message: "{{ safe_message }}"
|
|
title: 3D print safe to remove
|
|
target:
|
|
entity_id: notify.sm_f956w
|
|
- action: notify.send_message
|
|
data:
|
|
message: "{{ safe_message }}"
|
|
title: 3D print safe to remove
|
|
target:
|
|
entity_id: notify.motorola_one_vision
|
|
- action: notify.send_message
|
|
data:
|
|
message: "{{ safe_message }}"
|
|
title: 3D print safe to remove
|
|
target:
|
|
entity_id: notify.francos_ipad
|
|
- action: notify.send_message
|
|
data:
|
|
message: "{{ safe_message }}"
|
|
title: 3D print safe to remove
|
|
target:
|
|
entity_id: notify.sm_t387w
|
|
- action: notify.send_message
|
|
data:
|
|
message: "{{ safe_message }}"
|
|
title: 3D print safe to remove
|
|
target:
|
|
entity_id: notify.franco
|
|
- stop: Safe-to-remove notification sent.
|
|
while:
|
|
- condition: template
|
|
value_template: "{{ is_state('sensor.sparkx_i7_print_status', 'completed')
|
|
}}"
|
|
mode: restart
|
|
- id: sparkx_i7_cfs_auto_recover
|
|
alias: SparkX i7 - CFS Info Auto Recover
|
|
description: "The ha_creality_ws integration drops its CFS sensors to unavailable
|
|
whenever the integration is reloaded, and they only come back when the printer
|
|
is asked. A state trigger only fires on the transition, so this retries the recovery
|
|
rather than relying on a single attempt: up to 3 tries spaced 2 minutes apart,
|
|
then it gives up and writes a logbook entry instead of retrying forever."
|
|
triggers:
|
|
- entity_id: sensor.sparkx_i7_cfs_box_1_temperature
|
|
id: cfs_unavailable
|
|
to: unavailable
|
|
trigger: state
|
|
- event: start
|
|
id: ha_start
|
|
trigger: homeassistant
|
|
conditions: []
|
|
actions:
|
|
- choose:
|
|
- conditions:
|
|
- condition: trigger
|
|
id: cfs_unavailable
|
|
sequence:
|
|
- delay:
|
|
minutes: 2
|
|
- conditions:
|
|
- condition: trigger
|
|
id: ha_start
|
|
sequence:
|
|
- delay:
|
|
seconds: 60
|
|
- repeat:
|
|
count: 3
|
|
sequence:
|
|
- else: []
|
|
if:
|
|
- condition: template
|
|
value_template: "{{ is_state('sensor.sparkx_i7_cfs_box_1_temperature',
|
|
'unavailable') }}"
|
|
then:
|
|
- action: ha_creality_ws.request_cfs_info
|
|
target:
|
|
device_id: 1196bfc60ac925f3874be27098978ef6
|
|
- delay:
|
|
seconds: 30
|
|
- if:
|
|
- condition: template
|
|
value_template: "{{ is_state('sensor.sparkx_i7_cfs_box_1_temperature', 'unavailable')
|
|
}}"
|
|
then:
|
|
- action: logbook.log
|
|
data:
|
|
entity_id: sensor.sparkx_i7_cfs_box_1_temperature
|
|
message: CFS info still unavailable after 3 recovery attempts; giving up until
|
|
the next state change
|
|
name: SparkX i7 CFS
|
|
mode: single
|
|
- id: "1790973987624"
|
|
alias: CFS Box 1 - Desiccant Pack Due
|
|
description: "Notify when the SparkX i7 CFS box 1 humidity stays at or above 34%
|
|
|
|
for 60 minutes, meaning the desiccant pack needs replacing. The short spikes
|
|
|
|
that happen when the box is opened to swap a filament never last that long."
|
|
triggers:
|
|
- above: 33.9
|
|
entity_id: sensor.sparkx_i7_cfs_box_1_humidity
|
|
for:
|
|
minutes: 60
|
|
trigger: numeric_state
|
|
actions:
|
|
- action: notify.notify
|
|
data:
|
|
message: CFS box 1 humidity has been {{ reading }}% or higher for 60 minutes
|
|
(threshold 34%). Time to replace the desiccant pack.
|
|
title: "CFS Box 1: replace desiccant pack"
|
|
- action: notify.persistent_notification
|
|
data:
|
|
message: CFS box 1 humidity has been {{ reading }}% or higher for 60 minutes
|
|
(threshold 34%). Time to replace the desiccant pack.
|
|
title: "CFS Box 1: replace desiccant pack"
|
|
mode: single
|
|
variables:
|
|
reading: "{{ states('sensor.sparkx_i7_cfs_box_1_humidity') | float | round(0)
|
|
| int }}"
|