- 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: Basement Temperature Changed!
  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![Commute Map](/local/commute_snapshot.jpg)"
  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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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.''
        }}

        ![Snapshot](/local/blinkTree.jpg)'
  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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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.''
        }} ![Snapshot](/local/{{ snapshot_filename }})'
      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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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.''
        }} ![Snapshot](/local/{{ snapshot_filename }})'
      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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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_2
        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_2
        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_2
    trigger: state
    to: 'on'
  - id: motion_cleared
    entity_id: binary_sensor.night_light_occupancy_2
    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_2
        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_2
        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_2
        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_2
        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_2
        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_2
        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_2
  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_2
      sensor_2: sensor.bedroom_switch_current_switch_position_2_2
      sensor_4: sensor.bedroom_switch_current_switch_position_4_2
      sensor_5: sensor.bedroom_switch_current_switch_position_5_2
      sensor_7: sensor.bedroom_switch_current_switch_position_7_2
      sensor_8: sensor.bedroom_switch_current_switch_position_8_2
      event_taste_1: event.bedroom_switch_button_3_2
      event_taste_2: event.bedroom_switch_button_6_2
      event_taste_3: event.bedroom_switch_button_9_2
      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_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_2
      button2_event: event.office_button_button_2_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: input_boolean.away_mode
        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_2
    trigger: state
    to: 'on'
  - id: motion_cleared
    entity_id: binary_sensor.night_light_occupancy_2
    trigger: state
    to: 'off'
  - id: work_day_started
    trigger: time
    at: 08:00:00
  - id: work_day_ended
    trigger: time
    at: '18:00:00'
  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_2'') | float(0) < 15 }}'
  - choose:
    - 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_2
            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_2
            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_2
    - 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_2
        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_2
    - 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_2
    - 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_2
  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 Shed Motion Notification
  description: Sends a notification when motion is detected by the Blink Backyard
    Shed camera.
  triggers:
  - entity_id: binary_sensor.blink_backyard_shed_motion
    to: 'on'
    trigger: state
  - entity_id:
    - binary_sensor.blink_backyard_tree_motion
    to:
    - 'on'
    trigger: state
  - entity_id:
    - binary_sensor.blink_front_motion
    to:
    - 'on'
    trigger: state
  - entity_id:
    - binary_sensor.blink_backyard_tree_motion
    to:
    - 'on'
    trigger: state
  conditions: []
  actions:
  - data:
      title: Motion Detected!
      message: Motion detected in the Blink Backyard Cameras using HomeBridge.
    action: persistent_notification.create
  mode: single
- 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:
    - 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: '{{ (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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      notification_id: '{{ notification_id }}'
  mode: queued
  max: 10
- id: '1784601034537'
  alias: Motion Front Door  - 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: 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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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: 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: '{{ (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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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:
    - 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: '{{ (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.''
        }}

        ![Snapshot](/local/{{ snapshot_filename }})'
      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: '1785339249610'
  alias: 'TEST: Nest Snapshot Capture'
  description: Manual test for nest_snapshot.capture. Trigger from Developer Tools
    after restart.
  triggers: []
  actions:
  - action: nest_snapshot.capture
    data:
      entity_id: camera.front_door_front_door
      filename: /media/nest_snapshot_test_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
  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 (print started), set the
    3D printer lights to bright white, turn on the bedroom lamp, set the basement
    to 22 degrees C, and turn on the filter. When it turns off (print ended), set
    the 3D printer lights to light blue at 25%, turn off the bedroom lamp after 10
    minutes, and turn off the filter after 1 hour.
  triggers:
  - trigger: state
    entity_id: input_boolean.3d_printer_running
    to: 'on'
    id: printer_started
  - trigger: state
    entity_id: input_boolean.3d_printer_running
    to: 'off'
    id: printer_stopped
  actions:
  - choose:
    - conditions:
      - condition: trigger
        id: printer_started
      sequence:
      - action: light.turn_on
        target:
          entity_id: light.3d_printer_lights
        data:
          brightness_pct: 100
          rgb_color:
          - 255
          - 255
          - 255
      - action: light.turn_on
        target:
          entity_id: light.bedroom_lamp_2
      - action: climate.set_temperature
        target:
          entity_id: climate.basement
        data:
          temperature: 22
          hvac_mode: heat
      - action: switch.turn_on
        target:
          entity_id: switch.filter
    - conditions:
      - condition: trigger
        id: printer_stopped
      sequence:
      - parallel:
        - sequence:
          - action: light.turn_on
            target:
              entity_id: light.3d_printer_lights
            data:
              brightness_pct: 25
              rgb_color:
              - 173
              - 216
              - 230
          - delay:
              minutes: 10
          - 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: Increments counter.octoprint_successful_prints on PrintDone and counter.octoprint_failed_prints
    on PrintFailed/PrintCancelled, triggered by sensor.octoprint_last_event state
    changes.
  triggers:
  - trigger: state
    entity_id: sensor.octoprint_last_event
    to: PrintDone
    id: done
  - trigger: state
    entity_id: sensor.octoprint_last_event
    to: PrintFailed
    id: failed
  - trigger: state
    entity_id: sensor.octoprint_last_event
    to: PrintCancelled
    id: failed
  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
  description: Sends a notification with an OctoPrint webcam snapshot to all mobile
    devices when a print finishes successfully.
  triggers:
  - entity_id: sensor.octoprint_last_event
    to: PrintDone
    trigger: state
  actions:
  - action: camera.snapshot
    target:
      entity_id: camera.endercamera_duckdns_org
    data:
      filename: /config/www/octoprint_snapshot.jpg
  - parallel:
    - action: notify.mobile_app_sm_f956w
      data:
        title: 3D print complete
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''Print'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set tt = state_attr(''sensor.octoprint_print_progress'', ''printTime'')
          | int(0) %}{% set s = tt if tt > 0 else states(''sensor.octoprint_elapsed'')
          | int(0) %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h {{
          ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif -%}{%-
          endmacro %}{{ file }} finished successfully at {{ now().strftime(''%I:%M
          %p'').lstrip(''0'') }}.

          Total time: {{ dur(s) }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_motorola_one_vision
      data:
        title: 3D print complete
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''Print'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set tt = state_attr(''sensor.octoprint_print_progress'', ''printTime'')
          | int(0) %}{% set s = tt if tt > 0 else states(''sensor.octoprint_elapsed'')
          | int(0) %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h {{
          ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif -%}{%-
          endmacro %}{{ file }} finished successfully at {{ now().strftime(''%I:%M
          %p'').lstrip(''0'') }}.

          Total time: {{ dur(s) }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_francos_ipad
      data:
        title: 3D print complete
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''Print'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set tt = state_attr(''sensor.octoprint_print_progress'', ''printTime'')
          | int(0) %}{% set s = tt if tt > 0 else states(''sensor.octoprint_elapsed'')
          | int(0) %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h {{
          ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif -%}{%-
          endmacro %}{{ file }} finished successfully at {{ now().strftime(''%I:%M
          %p'').lstrip(''0'') }}.

          Total time: {{ dur(s) }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_sm_t387w
      data:
        title: 3D print complete
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''Print'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set tt = state_attr(''sensor.octoprint_print_progress'', ''printTime'')
          | int(0) %}{% set s = tt if tt > 0 else states(''sensor.octoprint_elapsed'')
          | int(0) %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h {{
          ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif -%}{%-
          endmacro %}{{ file }} finished successfully at {{ now().strftime(''%I:%M
          %p'').lstrip(''0'') }}.

          Total time: {{ dur(s) }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: telegram_bot.send_photo
      data:
        entity_id: notify.franco
        file: /config/www/octoprint_snapshot.jpg
        caption: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''Print'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set tt = state_attr(''sensor.octoprint_print_progress'', ''printTime'')
          | int(0) %}{% set s = tt if tt > 0 else states(''sensor.octoprint_elapsed'')
          | int(0) %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h {{
          ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif -%}{%-
          endmacro %}{{ file }} finished successfully at {{ now().strftime(''%I:%M
          %p'').lstrip(''0'') }}.

          Total time: {{ dur(s) }}'
        parse_mode: plain_text
  mode: single
- id: '1787462157568'
  alias: 3D Print Early Layers Snapshot
  description: Sends a webcam snapshot once per print when Z crosses 1.0 mm while
    printing, approximating layers 4-5 at typical 0.2-0.28 mm layer heights.
  triggers:
  - above: 1
    entity_id: sensor.octoprint_current_z
    trigger: numeric_state
  conditions:
  - condition: state
    entity_id: binary_sensor.octoprint_printing
    state: 'on'
  actions:
  - action: camera.snapshot
    target:
      entity_id: camera.endercamera_duckdns_org
    data:
      filename: /config/www/octoprint_snapshot.jpg
  - parallel:
    - action: notify.mobile_app_sm_f956w
      data:
        title: 3D print early check
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''No file'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set pct = states(''sensor.octoprint_print_progress'') | round(0)
          | int(0) %}{% set es = states(''sensor.octoprint_elapsed'') | int(0) %}{%
          set ts = states(''sensor.octoprint_time_left'') | int(0) %}{% set dt = states(''sensor.octoprint_approximate_completion_time'')
          | as_datetime %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h
          {{ ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif
          -%}{%- endmacro %}{% if dt %}{% set fin = ''~'' + as_local(dt).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% elif ts > 0 %}{% set fin = ''~'' + (now() + timedelta(seconds=ts)).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% else %}{% set fin = ''unknown'' %}{% endif %}

          {{ file }}

          Progress: {{ pct }}% · Elapsed: {{ dur(es) }} · Left: {{ dur(ts) if ts >
          0 else ''unknown'' }}

          Est. finish: {{ fin }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_motorola_one_vision
      data:
        title: 3D print early check
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''No file'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set pct = states(''sensor.octoprint_print_progress'') | round(0)
          | int(0) %}{% set es = states(''sensor.octoprint_elapsed'') | int(0) %}{%
          set ts = states(''sensor.octoprint_time_left'') | int(0) %}{% set dt = states(''sensor.octoprint_approximate_completion_time'')
          | as_datetime %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h
          {{ ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif
          -%}{%- endmacro %}{% if dt %}{% set fin = ''~'' + as_local(dt).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% elif ts > 0 %}{% set fin = ''~'' + (now() + timedelta(seconds=ts)).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% else %}{% set fin = ''unknown'' %}{% endif %}

          {{ file }}

          Progress: {{ pct }}% · Elapsed: {{ dur(es) }} · Left: {{ dur(ts) if ts >
          0 else ''unknown'' }}

          Est. finish: {{ fin }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_francos_ipad
      data:
        title: 3D print early check
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''No file'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set pct = states(''sensor.octoprint_print_progress'') | round(0)
          | int(0) %}{% set es = states(''sensor.octoprint_elapsed'') | int(0) %}{%
          set ts = states(''sensor.octoprint_time_left'') | int(0) %}{% set dt = states(''sensor.octoprint_approximate_completion_time'')
          | as_datetime %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h
          {{ ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif
          -%}{%- endmacro %}{% if dt %}{% set fin = ''~'' + as_local(dt).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% elif ts > 0 %}{% set fin = ''~'' + (now() + timedelta(seconds=ts)).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% else %}{% set fin = ''unknown'' %}{% endif %}

          {{ file }}

          Progress: {{ pct }}% · Elapsed: {{ dur(es) }} · Left: {{ dur(ts) if ts >
          0 else ''unknown'' }}

          Est. finish: {{ fin }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: notify.mobile_app_sm_t387w
      data:
        title: 3D print early check
        message: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''No file'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set pct = states(''sensor.octoprint_print_progress'') | round(0)
          | int(0) %}{% set es = states(''sensor.octoprint_elapsed'') | int(0) %}{%
          set ts = states(''sensor.octoprint_time_left'') | int(0) %}{% set dt = states(''sensor.octoprint_approximate_completion_time'')
          | as_datetime %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h
          {{ ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif
          -%}{%- endmacro %}{% if dt %}{% set fin = ''~'' + as_local(dt).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% elif ts > 0 %}{% set fin = ''~'' + (now() + timedelta(seconds=ts)).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% else %}{% set fin = ''unknown'' %}{% endif %}

          {{ file }}

          Progress: {{ pct }}% · Elapsed: {{ dur(es) }} · Left: {{ dur(ts) if ts >
          0 else ''unknown'' }}

          Est. finish: {{ fin }}'
        data:
          image: /local/octoprint_snapshot.jpg
    - action: telegram_bot.send_photo
      data:
        entity_id: notify.franco
        file: /config/www/octoprint_snapshot.jpg
        caption: '{% set f = states(''sensor.octoprint_print_file'') %}{% set file
          = ''No file'' if f in [''unknown'', ''unavailable'', ''none''] else f.replace(''.gcode'',
          '''') %}{% set pct = states(''sensor.octoprint_print_progress'') | round(0)
          | int(0) %}{% set es = states(''sensor.octoprint_elapsed'') | int(0) %}{%
          set ts = states(''sensor.octoprint_time_left'') | int(0) %}{% set dt = states(''sensor.octoprint_approximate_completion_time'')
          | as_datetime %}{% macro dur(s) -%}{%- if s >= 3600 -%}{{ (s // 3600) }}h
          {{ ((s % 3600) // 60) }}m{%- else -%}{{ ((s % 3600) // 60) }}m{%- endif
          -%}{%- endmacro %}{% if dt %}{% set fin = ''~'' + as_local(dt).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% elif ts > 0 %}{% set fin = ''~'' + (now() + timedelta(seconds=ts)).strftime(''%I:%M
          %p'').lstrip(''0'') %}{% else %}{% set fin = ''unknown'' %}{% endif %}

          {{ file }}

          Progress: {{ pct }}% · Elapsed: {{ dur(es) }} · Left: {{ dur(ts) if ts >
          0 else ''unknown'' }}

          Est. finish: {{ fin }}'
        parse_mode: plain_text
  mode: single
- 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_2
    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_2'']
        | 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: ''
  use_blueprint:
    path: jhol-byte/Ikea_bilresa_scroll_wheel.yaml
    input:
      remote: eb34748c324b33255fb839f867f7a5d9
      click_action_ch1:
      - action: light.toggle
        metadata: {}
        target:
          entity_id: light.3d_printer_lights
        data:
          rgb_color:
          - 255
          - 255
          - 255
          brightness_pct: 100
      scroll_wheel_target_ch1:
      - light.3d_printer_lights
      scroll_wheel_mode_ext_ch1: instant
      long_click_action_ch1: []
      double_click_action_ch1:
      - action: light.turn_on
        metadata: {}
        target:
          entity_id: light.3d_printer_lights
        data:
          rgb_color:
          - 10
          - 127
          - 230
      dim_turns_lights_on: true
      click_action_ch2: []
      scroll_wheel_target_ch2: []
      scroll_wheel_mode_ext_ch2: instant
      click_action_ch3: []
      scroll_wheel_target_ch3: []
      scroll_wheel_mode_ext_ch3: instant
- id: '1787723814939'
  alias: 3D Printer Light - Toggle from Boolean
  description: Turns 3D printer light on/off when input_boolean.3d_printer_light is
    toggled
  triggers:
  - trigger: state
    entity_id: input_boolean.3d_printer_light
  actions:
  - if:
    - condition: state
      entity_id: input_boolean.3d_printer_light
      state: 'on'
    then:
    - action: light.turn_on
      target:
        entity_id: light.3d_printer_lights
      data: {}
    else:
    - action: light.turn_off
      target:
        entity_id: light.3d_printer_lights
      data: {}
  mode: single
- id: '1787723854939'
  alias: 3D Printer Light - Sync Boolean
  description: Syncs input_boolean.3d_printer_light when 3D printer light is toggled
    manually
  triggers:
  - trigger: state
    entity_id: light.3d_printer_lights
  conditions:
  - condition: template
    value_template: '{{ is_state(''input_boolean.3d_printer_light'', ''on'') != is_state(''light.3d_printer_lights'',
      ''on'') }}'
  actions:
  - if:
    - condition: state
      entity_id: light.3d_printer_lights
      state: 'on'
    then:
    - action: input_boolean.turn_on
      target:
        entity_id: input_boolean.3d_printer_light
      data: {}
    else:
    - action: input_boolean.turn_off
      target:
        entity_id: input_boolean.3d_printer_light
      data: {}
  mode: single
