Files
Home-Assistant-Configs/scripts.yaml

3528 lines
101 KiB
YAML

give_me_darkness:
alias: Give Me Darkness
sequence:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.give_me_darkness
alias: Turn on input boolean
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- service: script.volume_reset
data: {}
- service: script.evening_on_first_floor
data:
give_me_darkness: 1
- service: script.evening_on_second_floor
data: {}
- service: mqtt.publish
data:
qos: '2'
retain: true
topic: house/time/give_me_darkness
payload: 'on'
- alias: Security decision
if:
- condition: and
conditions:
- condition: state
entity_id: person.tony_stork
state: home
- condition: state
entity_id: person.christina_stork
state: home
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
- condition: state
entity_id: alarm_control_panel.nerdhome_alarm_panel
state: disarmed
alias: Both adults are home, guest mode off, security disarmed
then:
- alias: Auto or manual trigger?
if:
- condition: template
value_template: '{{ auto == 1 }}'
alias: Triggered by automation
then:
- service: alarm_control_panel.alarm_arm_home
data: {}
target:
entity_id: alarm_control_panel.nerdhome_alarm_panel
alias: Arm security
else:
- service: script.activate_alexa_actionable_notification
data:
text: <voice name='Joanna'><prosody rate='150%'>Would you like me to arm
the security system?</prosody></voice>
event_id: actionable_notification_night_security_arm
alexa_device: media_player.living_room_echo_dot
alias: Ask to arm security
mode: single
icon: mdi:weather-night
alexa_tts_test:
alias: Alexa TTS Test
sequence:
- service: notify.alexa_media
data:
data:
method: all
type: announce
target: Living Room Echo Dot
message: I farted
mode: single
icon: mdi:test-tube
kallen_timer_cancel:
sequence:
- service: timer.cancel
target:
entity_id: timer.kallen_timer
mode: single
alias: Kallen Timer - Cancel
icon: mdi:cancel
global_off:
alias: Global Off
sequence:
- data: {}
target:
entity_id: all
action: light.turn_off
- data: {}
target:
entity_id: all
action: fan.turn_off
mode: single
icon: mdi:earth-off
global_on:
alias: Global On
sequence:
- service: light.turn_on
data: {}
target:
entity_id: all
mode: single
icon: mdi:earth
max_brightness:
sequence:
- alias: Turn off Adaptive Lighting and Motion Lighting
data: {}
target:
label_id:
- adaptive_lighting
- motion_lighting
action: switch.turn_off
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- alias: Cancel motion timers
data: {}
target:
label_id: motion_lighting
action: timer.cancel
- data: {}
target:
entity_id: input_boolean.front_porch_light_on
alias: Turn off Front Porch automation
action: input_boolean.turn_off
- data:
kelvin: 5000
brightness_pct: 100
target:
entity_id: all
alias: Turn on ALL LIGHTS to maximum brightness
action: light.turn_on
mode: single
alias: Max Brightness
icon: mdi:brightness-7
going_upstairs:
alias: Going Upstairs
sequence:
- data:
qos: '2'
retain: true
topic: house/time/night_mode
payload: 'on'
alias: Tell MQTT that it is night mode now
action: mqtt.publish
- data:
option: Adaptive
target:
entity_id:
- input_select.basement_studio_scenes
- input_select.tina_lamp_scenes
- input_select.mud_room_scenes
- input_select.living_room_scenes
alias: Set scenes
action: input_select.select_option
- entity_id: input_boolean.night_mode
alias: Turn on Night Mode
action: input_boolean.turn_on
- alias: Turn off Studio Quiet and Gaming Mode
data: {}
target:
entity_id:
- input_boolean.studio_quiet
- input_boolean.gaming_mode
action: input_boolean.turn_off
- alias: Thermostat reminder
if:
- alias: If triggered from basement
condition: state
entity_id: sensor.last_alexa_name
state: Basement Echo Dot
then:
- alias: Remind in basement
data:
who: basement
message: Remember to set the thermostat for the night
type: alert
action: script.speech_engine
else:
- alias: Remind in living room
data:
who: living_room
message: Remember to set the thermostat for the night
type: alert
action: script.speech_engine
enabled: false
- alias: Basement Studio Climate
if:
- condition: state
entity_id: input_boolean.basement_studio_heat_allowed
state: 'on'
alias: Heat Allowed
then:
- alias: Decide basement studio heater action
if:
- alias: If temp below freezing and heat is on
condition: and
conditions:
- condition: numeric_state
entity_id: weather.iron_nerd_weather_station
attribute: temperature
below: 32
alias: Temperature below freezing
- condition: state
entity_id: climate.basement_studio_vtherm
state: heat
alias: Heat on
then:
- action: climate.set_preset_mode
metadata: {}
data:
preset_mode: frost
target:
entity_id: climate.basement_studio_vtherm
alias: Set temp to lowest preset
else:
- alias: Turn basement studio heater off
action: climate.set_hvac_mode
metadata: {}
data:
hvac_mode: 'off'
target:
entity_id: climate.basement_studio_vtherm
- if:
- condition: not
conditions:
- condition: state
entity_id: media_player.basement_tv
state: playing
then:
- target:
entity_id: media_player.basement_tv
data: {}
action: media_player.turn_off
alias: Turn basement TV off, unless something is playing
- if:
- condition: state
entity_id: input_boolean.kallen_computer_updates
state: 'off'
then:
- data: {}
alias: Shut down Kallen desktop
action: script.kallen_desktop_shutdown
alias: Shutdown Kallen Desktop, unless it is updating
- choose:
- conditions:
- condition: state
entity_id: sensor.last_alexa_name
state: Living Room Echo Dot
alias: If triggered from living room
sequence:
- data:
text: <voice name='Joanna'><prosody rate='150%'>Would you like me to shut
down your computer?</prosody></voice>
event_id: actionable_notification_shutdown_computer
alexa_device: media_player.living_room_echo_dot
response_variable: shutdown
alias: Ask in living room
action: script.activate_alexa_actionable_notification
- conditions:
- condition: state
entity_id: sensor.last_alexa_name
state: Master Bedroom Echo Dot
alias: If triggered from master bedroom
sequence:
- data:
text: <voice name='Joanna'><prosody rate='150%'>Would you like me to shut
down your computer?</prosody></voice>
event_id: actionable_notification_shutdown_computer
alexa_device: media_player.master_bedroom_echo_dot
response_variable: shutdown
alias: Ask in master bedroom
action: script.activate_alexa_actionable_notification
default:
- data:
text: <voice name='Joanna'><prosody rate='150%'>Would you like me to shut
down your computer?</prosody></voice>
event_id: actionable_notification_shutdown_computer
alexa_device: media_player.basement_echo_dot
response_variable: shutdown
alias: Ask in basement
action: script.activate_alexa_actionable_notification
alias: Ask about shutting down main computer
- wait_for_trigger:
- entity_id:
- binary_sensor.basement_studio_door
from: 'off'
to: 'on'
id: door
trigger: state
- entity_id:
- input_boolean.goodnight
from: 'off'
to: 'on'
id: goodnight
trigger: state
- entity_id: light.master_bedroom_lights
to: 'on'
id: lights
trigger: state
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
alias: Figure out where I am
- data: {}
target:
entity_id: light.basement_studio_lights
alias: Turn off the lights
action: light.turn_off
- data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,2)
}}
'
target:
entity_id: input_datetime.tony_night_meds_notify
alias: Schedule the night meds notification
action: input_datetime.set_datetime
- if:
- condition: template
value_template: '{{ wait.trigger.id in [''goodnight'',''lights''] }}'
then:
- data:
type: alert
who: tony
title: Basement Shutdown
message: Would you like me to shut down your computer?
tag: going-upstairs-pc-shutdown
actions:
- action: GU_PC_SHUTDOWN_YES
title: Shutdown
- action: GU_PC_SHUTDOWN_LOCK
title: Lock
- action: GU_PC_SHUTDOWN_NOTHING
title: Do Nothing
alias: Send an actionable notification
action: script.text_notify
- wait_for_trigger:
- event_type: ios.notification_action_fired
event_data:
actionName: GU_PC_SHUTDOWN_YES
id: shutdown-yes
alias: Shutdown Yes
trigger: event
- event_type: ios.notification_action_fired
event_data:
actionName: GU_PC_SHUTDOWN_LOCK
id: shutdown-lock
alias: Shutdown Lock
trigger: event
- event_type: ios.notification_action_fired
event_data:
actionName: GU_PC_SHUTDOWN_NOTHING
alias: Shutdown Nothing
id: shutdown-nothing
trigger: event
timeout:
hours: 0
minutes: 20
seconds: 0
milliseconds: 0
alias: Wait for response to notification
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''shutdown-yes'' }}'
sequence:
- data: {}
action: script.tony_desktop_shutdown
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''shutdown-lock'' }}'
sequence:
- data: {}
action: script.tony_desktop_lock
alias: Run the desired action
- data:
type: alert
who: tony
message: clear_notification
tag: going-upstairs-pc-shutdown
alias: Clear the notification
action: script.text_notify
- stop: Automation steps skipped
alias: If I was not in the basement, ask about shutdown via text and then skip
the rest
- wait_for_trigger:
- entity_id:
- binary_sensor.upstairs_bathroom_motion
to: 'on'
id: bathroom
trigger: state
- entity_id:
- input_boolean.goodnight
to: 'on'
id: goodnight
trigger: state
- entity_id:
- light.master_bedroom_lights
to: 'on'
id: lights
trigger: state
continue_on_timeout: false
timeout:
hours: 0
minutes: 20
seconds: 0
milliseconds: 0
alias: Wait until I am in the bathroom, or in bed, or the lights are manually
turned on
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''bathroom'' }}'
sequence:
- data:
option: Side Nightlight
target:
entity_id: input_select.master_bedroom_scenes
action: input_select.select_option
- conditions:
- condition: template
value_template: '{{ wait.trigger.id in [''lights'',''goodnight''] }}'
sequence:
- variables:
stop_reason: '{{ wait.trigger.id }}'
- stop: Bedroom lighting not needed
response_variable: stop_reason
alias: Turn on lights, or not
mode: single
icon: hue:room-stairs
max_brightness_cleanup:
alias: Max Brightness Cleanup
sequence:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.front_porch_light_on
alias: Turn on Front Porch automation
- alias: Turn on Adaptive Lighting on front porch
service: switch.turn_on
target:
entity_id:
- switch.adaptive_lighting_front_porch
data: {}
- service: script.adaptive_on_first_floor
data: {}
alias: Adaptive on first floor
- service: script.adaptive_on_second_floor
data: {}
alias: Adaptive on second floor
- service: input_select.select_option
data:
option: Adaptive
target:
entity_id: input_select.basement_studio_scenes
alias: Set basement lights to adaptive
- service: switch.turn_on
metadata: {}
data: {}
target:
label_id: motion_lighting
alias: Turn on motion lighting
mode: single
icon: mdi:broom
cleanup_crash:
alias: Cleanup Crash
sequence:
- service: switch.turn_off
data: {}
target:
entity_id:
- switch.presence_simulation
- switch.basement_echo_dot_do_not_disturb_switch
- switch.living_room_echo_dot_do_not_disturb_switch
- switch.master_bedroom_echo_dot_do_not_disturb_switch
alias: Turn off switches
- if:
- condition: time
after: input_datetime.master_bedroom_wakeup
before: input_datetime.master_bedroom_cooling
then:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.master_bedroom_cooling_on
- service: button.press
data: {}
target:
entity_id: button.master_bedroom_day_mode
else:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.master_bedroom_cooling_on
- service: button.press
data: {}
target:
entity_id: button.master_bedroom_night_mode
alias: Set climate state
- if:
- condition: state
entity_id: sensor.twitch_ironnerd24
state: online
then:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.studio_quiet
else:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.studio_quiet
alias: Set studio quiet if Twitch stream is live
- if:
- condition: state
entity_id: calendar.family_tinawork
state: 'on'
- condition: time
before: input_datetime.tina_workday_end
after: input_datetime.tina_workday_start
then:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.work_today
else:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.work_today
alias: Set Tina Work booleans
- if:
- condition: state
entity_id: calendar.kallen_school_days
state: 'on'
- condition: time
before: input_datetime.kallen_school_day_end
after: input_datetime.kallen_school_day_start
then:
- service: input_boolean.turn_on
data: {}
target:
entity_id:
- input_boolean.kallen_school_today
- input_boolean.kallen_school_today_extended
- input_boolean.kallen_at_school
else:
- service: input_boolean.turn_off
data: {}
target:
entity_id:
- input_boolean.kallen_school_today
- input_boolean.kallen_school_today_extended
- input_boolean.kallen_at_school
alias: Set Kallen School booleans
- if:
- condition: time
before: input_datetime.audible_notification_on
after: input_datetime.audible_notification_off
then:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.audible_notifications
else:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.audible_notifications
alias: Set audible notifications
- service: switch.turn_on
data: {}
target:
entity_id:
- switch.adaptive_lighting_basement_studio
- switch.adaptive_lighting_downstairs_bathroom
- switch.adaptive_lighting_front_porch
- switch.adaptive_lighting_kallen_bedroom
- switch.adaptive_lighting_living_room
- switch.adaptive_lighting_master_bedroom
- switch.adaptive_lighting_mud_room
- switch.adaptive_lighting_tina_lamp
- switch.adaptive_lighting_emma_bedroom
- switch.adaptive_lighting_upstairs_bathroom
- switch.adaptive_lighting_upstairs_hallway
alias: Turn on all adaptive lighting
- service: input_text.set_value
data:
value: Adaptive
target:
entity_id:
- input_text.basement_studio_selected_scene
- input_text.downstairs_bathroom_selected_scene
- input_text.front_porch_selected_scene
- input_text.kallen_bedroom_selected_scene
- input_text.living_room_selected_scene
- input_text.master_bedroom_selected_scene
- input_text.mud_room_selected_scene
- input_text.emma_bedroom_selected_scene
- input_text.tina_lamp_selected_scene
- input_text.upstairs_bathroom_selected_scene
- input_text.upstairs_hallway_selected_scene
alias: Reset input texts to adaptive
- service: script.volume_reset
data: {}
alias: Reset all speaker volumes
- service: button.press
data: {}
target:
entity_id: button.cleanup
alias: Run Node-RED cleanup flow
mode: single
icon: mdi:truck-snowflake
basement_shutdown:
alias: Basement Shutdown
sequence:
- alias: Turn off any active modes
data: {}
target:
entity_id:
- input_boolean.studio_quiet
- input_boolean.recliner_mode
- input_boolean.gaming_mode
action: input_boolean.turn_off
- if:
- condition: not
conditions:
- condition: state
entity_id: media_player.basement_tv
state:
- playing
then:
- data: {}
target:
entity_id: media_player.basement_tv
action: media_player.turn_off
alias: If TV is not being used, turn it off
- if:
- condition: state
entity_id: input_boolean.kallen_computer_updates
state: 'off'
then:
- data: {}
action: script.kallen_desktop_shutdown
else:
- data: {}
action: script.kallen_desktop_lock
- data: {}
target:
entity_id: input_boolean.kallen_computer_updates
action: input_boolean.turn_off
alias: Turn off Kallen Desktop unless updates are scheduled
- data: {}
target:
entity_id: fan.basement_fan
action: fan.turn_off
- alias: Basement Studio Climate
if:
- condition: state
entity_id: input_boolean.basement_studio_heat_allowed
state: 'on'
alias: Heat Allowed
then:
- alias: Decide basement studio heater action
if:
- condition: numeric_state
entity_id: weather.iron_nerd_weather_station
attribute: temperature
below: 32
alias: Temperature below freezing
then:
- action: climate.set_preset_mode
metadata: {}
data:
preset_mode: frost
target:
entity_id: climate.basement_studio_vtherm
alias: Set temp to lowest preset
else:
- alias: Turn basement studio heater off
action: climate.set_hvac_mode
metadata: {}
data:
hvac_mode: 'off'
target:
entity_id: climate.basement_studio_vtherm
- data:
type: alert
who: tony
title: Basement Shutting Down
message: Would you like to shut down your computer?
tag: tony-pc-shutdown
actions:
- action: TONY_COMPUTER_SHUTDOWN
title: Shutdown
- action: TONY_COMPUTER_LOCK
title: Lock
- action: TONY_COMPUTER_IGNORE
title: Do Nothing
alias: Ask about shutting down main computer
response_variable: tony_computer
action: script.text_notify
- wait_for_trigger:
- entity_id:
- binary_sensor.basement_studio_door
to: 'on'
trigger: state
timeout:
hours: 0
minutes: 5
seconds: 0
milliseconds: 0
alias: Wait for the door to open
- data: {}
target:
entity_id: light.basement_lights
alias: Turn off the lights
action: light.turn_off
- wait_for_trigger:
- entity_id:
- binary_sensor.basement_studio_door
to: 'off'
for:
hours: 0
minutes: 0
seconds: 10
trigger: state
timeout:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
alias: Wait for the door to close
- data: {}
target:
entity_id: timer.basement_studio_door_timer
alias: Cancel the door timer since the lights are already off
action: timer.cancel
mode: restart
icon: mdi:power
adaptive_on_first_floor:
alias: Adaptive on First Floor
sequence:
- if:
- condition: state
entity_id: light.living_room_lights
state: 'on'
then:
- service: input_select.select_option
target:
entity_id: input_select.living_room_scenes
data:
option: Adaptive
alias: Set adaptive
else:
- service: switch.turn_on
target:
entity_id: switch.adaptive_lighting_living_room
data: {}
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_sleep_mode_living_room
data: {}
- service: input_text.set_value
target:
entity_id: input_text.living_room_selected_scene
data:
value: Adaptive
alias: If living room lights are on
- if:
- condition: state
entity_id: light.tina_lamp
state: 'on'
then:
- service: input_select.select_option
target:
entity_id: input_select.tina_desk_scenes
data:
option: Reset
alias: Set Adaptive
else:
- service: switch.turn_on
target:
entity_id: switch.adaptive_lighting_tina_lamp
data: {}
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_sleep_mode_tina_lamp
data: {}
alias: If Tina's desk lights are on
- if:
- condition: state
entity_id: light.downstairs_bathroom_lights
state: 'on'
then:
- service: input_select.select_option
target:
entity_id: input_select.downstairs_bathroom_scenes
data:
option: Adaptive
alias: Set adaptive
else:
- service: switch.turn_on
target:
entity_id: switch.adaptive_lighting_downstairs_bathroom
data: {}
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_sleep_mode_downstairs_bathroom
data: {}
- service: input_text.set_value
target:
entity_id: input_text.downstairs_bathroom_selected_scene
data:
value: Adaptive
alias: If downstairs bathroom lights are on
- if:
- condition: state
entity_id: light.mud_room_overhead
state: 'on'
then:
- service: input_select.select_option
target:
entity_id: input_select.mud_room_scenes
data:
option: Adaptive
alias: Set adaptive
else:
- service: switch.turn_on
target:
entity_id: switch.adaptive_lighting_mud_room
data: {}
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_sleep_mode_mud_room
data: {}
- service: input_text.set_value
target:
entity_id: input_text.mud_room_selected_scene
data:
value: Adaptive
alias: If mud room light is on
mode: single
adaptive_on_second_floor:
alias: Adaptive on Second Floor
sequence:
- if:
- condition: state
entity_id: light.hallway_overhead
state: 'on'
then:
- target:
entity_id: input_select.upstairs_hallway_scenes
data:
option: Adaptive
alias: Set adaptive
action: input_select.select_option
else:
- target:
entity_id: switch.adaptive_lighting_upstairs_hallway
data: {}
action: switch.turn_on
- target:
entity_id: switch.adaptive_lighting_sleep_mode_upstairs_hallway
data: {}
action: switch.turn_off
- target:
entity_id: input_text.upstairs_hallway_selected_scene
data:
value: Adaptive
action: input_text.set_value
alias: If hallway light is on
- if:
- condition: state
entity_id: light.master_bedroom_lights
state: 'on'
then:
- target:
entity_id: input_select.master_bedroom_scenes
data:
option: Adaptive
alias: Set adaptive
action: input_select.select_option
else:
- target:
entity_id: switch.adaptive_lighting_master_bedroom
data: {}
action: switch.turn_on
- target:
entity_id: switch.adaptive_lighting_sleep_mode_master_bedroom
data: {}
action: switch.turn_off
- target:
entity_id: input_text.master_bedroom_selected_scene
data:
value: Adaptive
action: input_text.set_value
alias: If master bedroom lights are on
- if:
- condition: state
entity_id: light.kallen_bedroom_lights
state: 'on'
then:
- target:
entity_id: input_select.kallen_bedroom_scenes
data:
option: Adaptive
alias: Set adaptive
action: input_select.select_option
else:
- target:
entity_id: switch.adaptive_lighting_kallen_bedroom
data: {}
action: switch.turn_on
- target:
entity_id: switch.adaptive_lighting_sleep_mode_kallen_bedroom
data: {}
action: switch.turn_off
- target:
entity_id: input_text.kallen_bedroom_selected_scene
data:
value: Adaptive
action: input_text.set_value
alias: If Kallen's bedroom lights are on
- if:
- condition: state
entity_id: light.emma_bedroom_light
state: 'on'
then:
- target:
entity_id: input_select.emma_bedroom_scenes
data:
option: Adaptive
alias: Set adaptive
action: input_select.select_option
else:
- target:
entity_id: switch.adaptive_lighting_emma_bedroom
data: {}
action: switch.turn_on
- target:
entity_id: switch.adaptive_lighting_sleep_mode_emma_bedroom
data: {}
action: switch.turn_off
- target:
entity_id: input_text.emma_bedroom_selected_scene
data:
value: Adaptive
action: input_text.set_value
alias: If Emma's bedroom light is on
- alias: Upstairs bathroom handling
if:
- condition: state
entity_id: input_boolean.shower_mode
state: 'off'
then:
- if:
- condition: state
entity_id: binary_sensor.upstairs_bathroom_occupied
state: 'on'
then:
- target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: Adaptive
action: input_select.select_option
else:
- if:
- condition: state
entity_id: binary_sensor.early_night_mode
state: 'on'
then:
- target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: Single Nightlight
action: input_select.select_option
else:
- target:
entity_id: light.upstairs_bathroom_lights
data: {}
action: light.turn_off
- target:
entity_id: switch.adaptive_lighting_upstairs_bathroom
data: {}
action: switch.turn_on
- target:
entity_id: switch.adaptive_lighting_sleep_mode_upstairs_bathroom
data: {}
action: switch.turn_off
- target:
entity_id: input_text.upstairs_bathroom_selected_scene
data:
value: Adaptive
action: input_text.set_value
bright_on_first_floor:
alias: Bright on First Floor
sequence:
- target:
entity_id:
- light.living_room_lights
- light.downstairs_bathroom_lights
- light.mud_room_overhead
data: {}
action: light.turn_on
- delay:
seconds: 1
- target:
entity_id:
- input_select.living_room_scenes
- input_select.downstairs_bathroom_scenes
- input_select.mud_room_scenes
data:
option: Bright
action: input_select.select_option
- target:
entity_id:
- light.tina_lamp
data:
color_temp_kelvin: 2700
action: light.turn_on
- target:
entity_id:
- light.tina_lamp
data:
brightness: 255
action: light.turn_on
bright_on_second_floor:
alias: Bright on Second Floor
sequence:
- service: light.turn_on
target:
entity_id:
- light.hallway_overhead
- light.master_bedroom_lights
data: {}
- if:
- condition: state
entity_id: input_boolean.shower_mode
state: 'off'
then:
- service: input_select.select_option
target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: Bright
- if:
- condition: state
entity_id: input_boolean.kallen_sleeping
state: 'off'
then:
- service: light.turn_on
target:
entity_id: light.kallen_bedroom_lights
data: {}
- if:
- condition: state
entity_id: input_boolean.emma_sleeping
state: 'off'
then:
- service: light.turn_on
target:
entity_id: light.emma_bedroom_light
data: {}
- delay:
seconds: 1
- service: input_select.select_option
target:
entity_id:
- input_select.upstairs_hallway_scenes
- input_select.master_bedroom_scenes
data:
option: Bright
- if:
- condition: state
entity_id: input_boolean.shower_mode
state: 'off'
then:
- service: input_select.select_option
target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: Bright
- if:
- condition: template
value_template: '{{ is_state(''input_boolean.kallen_sleeping'',''off'') or (is_state(''input_boolean.kallen_sleeping'',''on'')
and is_state(''light.kallen_bedroom_lights'',''on'')) }}'
then:
- service: input_select.select_option
target:
entity_id: input_select.kallen_bedroom_scenes
data:
option: Bright
- if:
- condition: template
value_template: '{{ is_state(''input_boolean.emma_sleeping'',''off'') or (is_state(''input_boolean.emma_sleeping'',''on'')
and is_state(''light.emma_bedroom_light'',''on'')) }}'
then:
- service: input_select.select_option
target:
entity_id: input_select.emma_bedroom_scenes
data:
option: Bright
evening_on_first_floor:
alias: Evening on First Floor
sequence:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.early_night_mode
state: 'off'
sequence:
- stop: This scene does nothing during daytime
alias: Early Night Mode off
- conditions:
- condition: state
entity_id: input_boolean.give_me_darkness
state: 'on'
sequence:
- if:
- condition: state
entity_id: person.christina_stork
state: home
then:
- target:
entity_id: input_select.tina_desk_scenes
data:
option: Night Mode
action: input_select.select_option
alias: If Tina is home, turn on desk lights
- alias: Check if script is being called by Give Me Darkness automation
if:
- condition: template
value_template: '{{ give_me_darkness == 1 }}'
alias: If give_me_darkness = 1
then:
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
else:
- target:
entity_id:
- light.living_room_lights
data: {}
action: light.turn_off
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
alias: Give Me Darkness on
- conditions:
- condition: state
entity_id: input_boolean.give_me_darkness
state: 'off'
sequence:
- alias: Check if script is being run by Sunset Lights flow
if:
- condition: template
value_template: '{{ sunset_lights == 1 }}'
alias: If sunset_lights = 1
then:
- target:
entity_id:
- light.living_room_lights
- light.mud_room_overhead
data: {}
action: light.turn_on
- target:
entity_id:
- input_select.living_room_scenes
data:
option: Adaptive
action: input_select.select_option
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
else:
- target:
entity_id:
- light.living_room_lights
- light.mud_room_overhead
data: {}
action: light.turn_on
- target:
entity_id:
- input_select.living_room_scenes
data:
option: Adaptive
action: input_select.select_option
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
alias: Give Me Darkness off
evening_on_second_floor:
alias: Evening on Second Floor
sequence:
- condition: state
entity_id: binary_sensor.early_night_mode
state: 'on'
- choose:
- conditions:
- condition: state
entity_id: input_boolean.give_me_darkness
state: 'on'
sequence:
- alias: Turn off hallway light
if:
- condition: and
conditions:
- condition: state
entity_id: timer.upstairs_hallway_motion_timer
state: idle
- condition: state
entity_id: timer.stairwell_motion_timer
state: idle
alias: If hallway and stairwell motion timers are both idle
then:
- action: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.hallway_overhead
alias: Turn off hallway light
- alias: Set upstairs bathroom scene
if:
- condition: state
entity_id: input_boolean.shower_mode
state: 'off'
then:
- target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: "{% if is_state('binary_sensor.upstairs_bathroom_occupied','on')
%}\n Adaptive\n{% else %}\n Single Nightlight\n{% endif %}\n"
action: input_select.select_option
- target:
area_id:
- kallen_bedroom
- emma_bedroom
data: {}
alias: Turn off kids' bedroom lights
action: light.turn_off
- alias: Turn off Master Bedroom Lights
if:
- condition: state
entity_id: timer.master_bedroom_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
area_id:
- master_bedroom
- master_bedroom_closet
action: light.turn_off
- delay:
seconds: 1
- target:
entity_id:
- switch.adaptive_lighting_kallen_bedroom
- switch.adaptive_lighting_master_bedroom
- switch.adaptive_lighting_emma_bedroom
data: {}
alias: Re-enable adaptive lighting in bedrooms
action: switch.turn_on
- target:
entity_id:
- switch.adaptive_lighting_sleep_mode_kallen_bedroom
- switch.adaptive_lighting_sleep_mode_master_bedroom
- switch.adaptive_lighting_sleep_mode_emma_bedroom
data: {}
alias: Turn off adaptive lighting sleep mode in bedrooms
action: switch.turn_off
- target:
entity_id:
- input_text.kallen_bedroom_selected_scene
- input_text.master_bedroom_selected_scene
- input_text.emma_bedroom_selected_scene
data:
value: Adaptive
alias: Set input texts for bedroom scenes back to Adaptive
action: input_text.set_value
alias: Give Me Darkness on
- conditions:
- condition: state
entity_id: input_boolean.give_me_darkness
state: 'off'
sequence:
- alias: Set hallway light to nightlight
if:
- condition: and
conditions:
- condition: state
entity_id: timer.upstairs_hallway_motion_timer
state: idle
- condition: state
entity_id: timer.stairwell_motion_timer
state: idle
alias: If hallway and stairwell motion timers are both idle
then:
- target:
entity_id:
- input_select.upstairs_hallway_scenes
data:
option: Nightlight
alias: Set hallway light to nightlight
action: input_select.select_option
- if:
- condition: state
entity_id: input_boolean.shower_mode
state: 'off'
then:
- target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: "{% if is_state('binary_sensor.upstairs_bathroom_occupied','on')
%}\n Adaptive\n{% else %}\n Nightlight\n{% endif %}\n"
action: input_select.select_option
alias: Set upstairs bathroom scene
- alias: Check if script is being run by Sunset Lights flow
if:
- condition: template
value_template: '{{ sunset_lights == 1 }}'
alias: If sunset_lights = 1
then:
- stop: Sunset lights don't mess with bedroom light states before bedtime
else:
- target:
area_id:
- kallen_bedroom
- emma_bedroom
data: {}
alias: Turn off kids' bedroom lights
action: light.turn_off
- alias: Turn off Master Bedroom Lights
if:
- condition: state
entity_id: timer.master_bedroom_motion_timer
state: idle
then:
- metadata: {}
data: {}
target:
area_id:
- master_bedroom
- master_bedroom_closet
action: light.turn_off
- delay:
seconds: 1
- target:
entity_id:
- switch.adaptive_lighting_kallen_bedroom
- switch.adaptive_lighting_master_bedroom
- switch.adaptive_lighting_emma_bedroom
data: {}
alias: Re-enable adaptive lighting in bedrooms
action: switch.turn_on
- target:
entity_id:
- switch.adaptive_lighting_sleep_mode_kallen_bedroom
- switch.adaptive_lighting_sleep_mode_master_bedroom
- switch.adaptive_lighting_sleep_mode_emma_bedroom
data: {}
alias: Turn off adaptive lighting sleep mode in bedrooms
action: switch.turn_off
- target:
entity_id:
- input_text.kallen_bedroom_selected_scene
- input_text.master_bedroom_selected_scene
- input_text.emma_bedroom_selected_scene
data:
value: Adaptive
alias: Set input texts for bedroom scenes back to Adaptive
action: input_text.set_value
alias: Give Me Darkness off
goodnight_in_basement:
alias: Goodnight in Basement
sequence:
- service: light.turn_off
target:
area_id:
- basement_studio
- furnace_room
data: {}
- service: fan.turn_off
target:
entity_id: fan.basement_fan
data: {}
goodnight_on_first_floor:
alias: Goodnight on First Floor
sequence:
- if:
- condition: state
entity_id: input_boolean.guest_mode
state: 'on'
then:
- service: light.turn_off
target:
area_id:
- downstairs_bathroom
- tina_desk
entity_id: light.living_room_lights
data: {}
- service: input_select.select_option
target:
entity_id: input_select.mud_room_scenes
data:
option: Nightlight
else:
- service: light.turn_off
target:
area_id:
- downstairs_bathroom
- mud_room
- tina_desk
entity_id: light.living_room_lights
data: {}
goodnight_on_second_floor:
alias: Goodnight on Second Floor
sequence:
- service: light.turn_off
target:
area_id:
- emma_bedroom
- kallen_bedroom
- master_bedroom
- master_bedroom_closet
- upstairs_hallway
data: {}
- if:
- condition: state
entity_id: input_boolean.kallen_overnight
state: 'on'
then:
- service: light.turn_off
target:
area_id: upstairs_bathroom
data: {}
else:
- service: input_select.select_option
target:
entity_id: input_select.upstairs_bathroom_scenes
data:
option: Single Nightlight
morning_scene:
alias: Morning Scene
sequence:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.master_bedroom_sleeping
data: {}
- if:
- condition: template
value_template: '{% set weather = states(''weather.iron_nerd_weather_station'')
%} {{ weather in [''cloudy'',''partlycloudy'',''rainy'',''snowy'',''hail'',''lightning'',''lightning-rainy'',''pouring'',''snowy-rainy'']
}}
'
then:
- if:
- condition: template
value_template: '{{ is_state(''input_boolean.kallen_sleeping'',''off'') and
is_state(''person.kallen_stork'',''home'') }}'
then:
- service: light.turn_on
target:
entity_id: light.kallen_bedroom_lights
data: {}
- if:
- condition: state
entity_id: input_boolean.emma_sleeping
state: 'off'
then:
- service: light.turn_on
target:
entity_id: light.emma_bedroom_light
data: {}
day_mode_in_tina_desk:
alias: Day Mode in Tina Desk
sequence:
- parallel:
- service: light.turn_on
target:
entity_id: light.tina_lamp_top
data: {}
- service: light.turn_off
target:
entity_id: light.tina_lamp_side
data: {}
- wait_template: '{{ is_state(''light.tina_lamp_side'',''off'') }}'
timeout:
seconds: 15
continue_on_timeout: true
- alias: Apply adaptive lighting to lamp
if:
- condition: state
entity_id: switch.adaptive_lighting_tina_lamp
state: 'off'
alias: If switch is off
then:
- service: switch.turn_on
data: {}
target:
entity_id: switch.adaptive_lighting_tina_lamp
alias: Turn on the switch
else:
- alias: Apply adaptive lighting
service: adaptive_lighting.apply
data:
entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true
adapt_color: true
mode: restart
icon: mdi:palette
evening_mode_in_tina_desk:
alias: Evening Mode in Tina Desk
sequence:
- alias: Turn on lamp
service: light.turn_on
data: {}
target:
entity_id:
- light.tina_lamp_top
- light.tina_lamp_side
- alias: Apply adaptive lighting to lamp
if:
- condition: state
entity_id: switch.adaptive_lighting_tina_lamp
state: 'off'
alias: If switch is off
then:
- service: switch.turn_on
data: {}
target:
entity_id: switch.adaptive_lighting_tina_lamp
alias: Turn on the switch
else:
- service: adaptive_lighting.apply
data:
entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true
adapt_color: true
turn_on_lights: true
alias: Apply adaptive lighting
mode: restart
icon: mdi:palette
night_mode_in_tina_desk:
alias: Night Mode in Tina Desk
sequence:
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_tina_lamp
data: {}
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 127
- 0
- 255
brightness: 128
mode: restart
icon: mdi:palette
bright_mode_in_tina_desk:
alias: Bright Mode in Tina Desk
sequence:
- service: switch.turn_off
target:
entity_id: switch.adaptive_lighting_tina_lamp
data: {}
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 255
- 210
- 175
brightness: 255
mode: restart
icon: mdi:palette
tony_morning_meds:
alias: Tony Morning Meds
icon: mdi:medication
mode: restart
sequence:
- metadata: {}
data: {}
target:
entity_id: counter.tony_morning_meds_reminder_count
alias: Increment morning reminder counter
action: counter.increment
- data:
type: alert
who: tony
message: clear_notification
tag: tony-morning-meds
alias: Clear previous morning notification
action: script.text_notify
- alias: Send notifications, using AI if internet is connected
if:
- condition: state
entity_id: binary_sensor.internet
state: 'on'
then:
- alias: Generate reminder, be snarky if it's been several times
if:
- condition: numeric_state
entity_id: counter.tony_morning_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
Be snarky, because at this point he's been reminded multiple times.
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send morning notifications via text, and TTS if needed
parallel:
- alias: Send text notification
data:
who: tony
type: alert
title: Morning Meds
message: '{{ response.text }}'
tag: tony-morning-meds
actions:
- action: TONY_MORNING_MEDS_TAKEN
title: Taken
- action: TONY_MORNING_MEDS_SKIPPED
title: Skip
action: script.text_notify
- alias: Send TTS if reminders > 2 and Tony is home
if:
- alias: When reminders > 2 and Tony is home
condition: and
conditions:
- condition: numeric_state
entity_id: counter.tony_morning_meds_reminder_count
above: 2
alias: When reminder count > 2
- condition: state
entity_id: person.tony_stork
state: home
alias: If Tony is home
then:
- data:
who: common_areas
type: alert
message: '{{ response.text }}'
alias: Send TTS notification
action: script.speech_engine
else:
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send morning notifications via text, and TTS if needed
parallel:
- alias: Send text notification
data:
who: tony
type: alert
title: Morning Meds
tag: tony-morning-meds
actions:
- action: TONY_MORNING_MEDS_TAKEN
title: Taken
- action: TONY_MORNING_MEDS_SKIPPED
title: Skip
message: You need to take your morning meds
action: script.text_notify
- alias: Send TTS if reminders > 2 and Tony is home
if:
- alias: When reminders > 2 and Tony is home
condition: and
conditions:
- condition: numeric_state
entity_id: counter.tony_morning_meds_reminder_count
above: 2
alias: When reminder count > 2
- condition: state
entity_id: person.tony_stork
state: home
alias: If Tony is home
then:
- alias: Send TTS notification
data:
who: common_areas
type: alert
message: Tony, you need to take your morning meds
action: script.speech_engine
tony_night_meds:
alias: Tony Night Meds
icon: mdi:medication
mode: restart
sequence:
- service: counter.increment
metadata: {}
data: {}
target:
entity_id: counter.tony_night_meds_reminder_count
alias: Increment night reminder counter
- service: script.text_notify
data:
type: alert
who: tony
message: clear_notification
tag: tony-night-meds
alias: Clear previous night notification
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
service: script.text_notify
data:
who: tony
type: alert
title: Night Meds
message: You need to take your night meds
tag: tony-night-meds
actions:
- action: TONY_NIGHT_MEDS_TAKEN
title: Taken
- action: TONY_NIGHT_MEDS_SKIPPED
title: Skip
tony_stream_today:
alias: Tony Stream Today
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_streaming_start_time
data:
time: '{% from ''time.jinja'' import time_from_calendar %} {{ time_from_calendar(''calendar.tony_s_twitch_schedule'',''start_time'',''set'')
}}
'
- service: input_boolean.turn_on
entity_id: input_boolean.tony_streaming_today
mode: single
timer_modify:
alias: Timer Modify
description: For adding/subtracting time from a running timer
mode: restart
sequence:
- service: timer.pause
target:
entity_id: '{{ timer }}'
- delay:
seconds: 1
- variables:
modify: '{% set x = state_attr(timer, ''remaining'') ~ ''-0000'' %} {% set y
= strptime(x, ''%H:%M:%S%z'') %} {{ (as_timestamp(y) + change) | timestamp_custom(''%H:%M:%S'',
false) }}
'
- service: timer.start
target:
entity_id: '{{ timer }}'
data:
duration: '{{ modify }}'
tony_custom_meds:
alias: Tony Custom Meds
sequence:
- variables:
reason: '{{ reason }}'
num: '{{ num }}'
active: '{{ ''input_boolean.tony_custom_meds_tracker_'' + num }}'
taken: '{{ ''input_boolean.tony_custom_meds_taken_'' + num }}'
taken_at: '{{ ''input_datetime.tony_custom_meds_taken_'' + num }}'
notify_at: '{{ ''input_datetime.tony_custom_meds_notify_'' + num }}'
type: '{{ states(''input_select.tony_custom_meds_type_'' + num) }}'
name: '{{ states(''input_text.tony_custom_med_name_'' + num) }}'
interval: '{{ states(''input_number.tony_custom_meds_interval_'' + num) }}'
tag: '{{ ''tony-custom-meds-'' + num }}'
alias: Set Variables
- choose:
- conditions:
- condition: template
value_template: '{{ reason == ''notify'' }}'
alias: Notify
sequence:
- service: script.text_notify
data:
who: tony
type: alert
title: '{{ name + '' Tracker'' }}'
message: You need to take your {{ name }}
tag: '{{ tag }}'
alias: Send text notification
- wait_for_trigger:
- platform: state
entity_id:
- person.tony_stork
id: left
alias: Left
from: home
- platform: template
value_template: '{{ is_state(taken,''on'') }}'
alias: Manual
id: manual
timeout: 00:30:00
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id in [''manual'',''left''] }}'
alias: Manual or Left
sequence:
- stop: Automation cancelled
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: None or undefined
sequence:
- service: script.text_notify
data:
who: tony
type: alert
message: clear_notification
tag: '{{ tag }}'
alias: Clear Notification
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_custom_meds_notify_p1
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,1)
}}
'
alias: Reset notification time
alias: Choose depending on the wait trigger
- conditions:
- condition: template
value_template: '{{ reason == ''taken'' }}'
alias: Taken
sequence:
- service: input_datetime.set_datetime
target:
entity_id: '{{ taken_at }}'
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0)
}}
'
alias: Set time the meds were taken
- if:
- condition: template
value_template: '{{ type == ''Interval'' }}'
alias: Is it an interval med?
then:
- service: input_datetime.set_datetime
target:
entity_id: '{{ notify_at }}'
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(interval)
}}
'
alias: Set notification for next dose
alias: If an interval med, then set time for next dose
- service: script.text_notify
data:
who: tony
type: alert
message: clear_notification
tag: '{{ tag }}'
alias: Clear Notification
alias: Routing
icon: mdi:medication
mode: parallel
tony_afternoon_meds:
alias: Tony Afternoon Meds
icon: mdi:medication
mode: restart
sequence:
- metadata: {}
data: {}
target:
entity_id: counter.tony_afternoon_meds_reminder_count
alias: Increment afternoon reminder counter
action: counter.increment
- data:
type: alert
who: tony
message: clear_notification
tag: tony-afternoon-meds
alias: Clear previous afternoon notification
action: script.text_notify
- alias: Send notifications, using AI if internet is connected
if:
- condition: state
entity_id: binary_sensor.internet
state: 'on'
then:
- alias: Generate reminder, be snarky if it's been several times
if:
- condition: numeric_state
entity_id: counter.tony_afternoon_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
Be snarky, because at this point he's been reminded multiple times.
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send afternoon notifications via text, and TTS if needed
parallel:
- alias: Send text notification
data:
who: tony
type: alert
title: Afternoon Meds
message: '{{ response.text }}'
tag: tony-afternoon-meds
actions:
- action: TONY_AFTERNOON_MEDS_TAKEN
title: Taken
- action: TONY_AFTERNOON_MEDS_SKIPPED
title: Skip
action: script.text_notify
- alias: Send TTS if reminders > 2 and Tony is home
if:
- alias: When reminders > 2 and Tony is home
condition: and
conditions:
- condition: numeric_state
entity_id: counter.tony_afternoon_meds_reminder_count
above: 2
alias: When reminder count > 2
- condition: state
entity_id: person.tony_stork
state: home
alias: If Tony is home
then:
- data:
who: common_areas
type: alert
message: '{{ response.text }}'
alias: Send TTS notification
action: script.speech_engine
else:
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send afternoon notifications via text, and TTS if needed
parallel:
- alias: Send text notification
data:
who: tony
type: alert
title: Afternoon Meds
tag: tony-afternoon-meds
actions:
- action: TONY_AFTERNOON_MEDS_TAKEN
title: Taken
- action: TONY_AFTERNOON_MEDS_SKIPPED
title: Skip
message: You need to take your afternoon meds
action: script.text_notify
- alias: Send TTS if reminders > 2 and Tony is home
if:
- alias: When reminders > 2 and Tony is home
condition: and
conditions:
- condition: numeric_state
entity_id: counter.tony_afternoon_meds_reminder_count
above: 2
alias: When reminder count > 2
- condition: state
entity_id: person.tony_stork
state: home
alias: If Tony is home
then:
- alias: Send TTS notification
data:
who: common_areas
type: alert
message: Tony, you need to take your afternoon meds
action: script.speech_engine
tony_ibuprofen:
alias: Tony Ibuprofen
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''ibuprofen-taken'' }}'
alias: If reason is not ibuprofen-taken
then:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.tony_ibuprofen_taken
data: {}
alias: Turn off boolean
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-notify'' }}'
alias: Ibuprofen Notify
sequence:
- service: script.text_notify
data:
type: alert
who: tony
title: Tony Ibuprofen Time
message: It is time to take your next dose of Ibuprofen
tag: tony-ibuprofen
actions:
- action: TONY_IBUPROFEN_TAKEN
title: Taken
- action: TONY_IBUPROFEN_SKIPPED
title: Skipped
- action: TONY_IBUPROFEN_ASK_LATER
title: Ask Later
alias: Send actionable text notification
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_IBUPROFEN_TAKEN
id: ibuprofen-taken
alias: Ibuprofen Taken
- alias: Ibuprofen Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_IBUPROFEN_SKIPPED
id: ibuprofen-skipped
- alias: Ibuprofen Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_IBUPROFEN_ASK_LATER
id: ibuprofen-ask-later
- platform: state
entity_id:
- input_boolean.tony_ibuprofen_taken
from: 'off'
to: 'on'
id: ibuprofen-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tony_ibuprofen_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tony_ibuprofen_taken
data: {}
alias: Turn on boolean
- conditions:
- alias: Ibuprofen Skipped
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-skipped'' }}'
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
- conditions:
- alias: Ibuprofen Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-ask-later'' }}'
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set ibuprofen notification time
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set ibuprofen notification time
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
alias: Act on wait triggers
- service: script.text_notify
data:
type: alert
who: tony
message: clear_notification
tag: tony-ibuprofen
alias: Clear actionable text notification
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set ibuprofen notification time
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set tylenol notification time
mode: queued
icon: mdi:medication
max: 10
tony_tylenol:
alias: Tony Tylenol
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''tylenol-taken'' }}'
alias: If reason is not tylenol-taken
then:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.tony_tylenol_taken
data: {}
alias: Turn off boolean
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-notify'' }}'
alias: Tylenol Notify
sequence:
- service: script.text_notify
data:
type: alert
who: tony
title: Tony Tylenol Time
message: It is time to take your next dose of Tylenol
tag: tony-tylenol
actions:
- action: TONY_TYLENOL_TAKEN
title: Taken
- action: TONY_TYLENOL_SKIPPED
title: Skipped
- action: TONY_TYLENOL_ASK_LATER
title: Ask Later
alias: Send actionable text notification
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_TYLENOL_TAKEN
id: tylenol-taken
alias: Tylenol Taken
- alias: Tylenol Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_TYLENOL_SKIPPED
id: tylenol-skipped
- alias: Tylenol Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TONY_TYLENOL_ASK_LATER
id: tylenol-ask-later
- platform: state
entity_id:
- input_boolean.tony_tylenol_taken
from: 'off'
to: 'on'
id: tylenol-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tony_tylenol_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tony_tylenol_taken
data: {}
alias: Turn on boolean
- conditions:
- alias: Tylenol Skipped
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-skipped'' }}'
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
- conditions:
- alias: Tylenol Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-ask-later'' }}'
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set tylenol notification time
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set tylenol notification time
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
alias: Act on wait triggers
- service: script.text_notify
data:
type: alert
who: tony
message: clear_notification
tag: tony-tylenol
alias: Clear actionable text notification
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set tylenol notification time
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.tony_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set ibuprofen notification time
mode: queued
icon: mdi:medication
max: 10
kallen_morning_meds:
alias: Kallen Morning Meds
sequence:
- metadata: {}
data: {}
target:
entity_id: counter.kallen_morning_meds_reminder_count
alias: Increment morning reminder counter
action: counter.increment
- alias: Clear previous text notifications
data:
type: alert
who: all
message: clear_notification
tag: kallen-morning-meds
action: script.text_notify
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
data:
who: all
type: alert
title: Morning Meds
message: Kallen needs to take his morning meds
tag: kallen-morning-meds
actions:
- action: KALLEN_MORNING_MEDS_TAKEN
title: Taken
- action: KALLEN_MORNING_MEDS_SKIPPED
title: Skip
action: script.text_notify
icon: mdi:medication
mode: restart
kallen_night_meds:
alias: Kallen Night Meds
sequence:
- service: counter.increment
metadata: {}
data: {}
alias: Increment night reminder counter
- service: script.text_notify
data:
type: alert
who: all
message: clear_notification
tag: kallen-night-meds
alias: Clear previous night notification
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- parallel:
- service: script.text_notify
data:
who: "{% if states('person.christina_stork') in ['Bob Evans','BobEvans'] %}\n
\ tony\n{% else %}\n parents\n{% endif %}\n"
type: alert
title: Night Meds
message: Kallen needs to take his night meds (melatonin)
tag: kallen-night-meds
actions:
- action: KALLEN_NIGHT_MEDS_TAKEN
title: Taken
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
alias: Send to parents
- alias: Send to Kallen
service: script.text_notify
data:
who: kallen
type: alert
title: Night Meds
message: You need to take your night meds (melatonin)
tag: kallen-night-meds
actions:
- action: KALLEN_NIGHT_MEDS_TAKEN
title: Taken
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
alias: Send text notifications
icon: mdi:medication
mode: restart
reset_annc_switches:
alias: Reset Announcement Switches
sequence:
- service: input_boolean.turn_off
target:
entity_id:
- input_boolean.good_morning
- input_boolean.daily_briefing
- input_boolean.nightly_briefing
- input_boolean.kallen_morning_briefing
- input_boolean.kallen_nightly_briefing
- input_boolean.basement_briefing
data: {}
mode: single
icon: mdi:bullhorn-outline
emma_rainbow_lights:
alias: Emma Rainbow Lights
sequence:
- service: switch.turn_off
metadata: {}
data: {}
target:
entity_id:
- switch.adaptive_lighting_living_room
- switch.adaptive_lighting_sleep_mode_living_room
alias: Turn off adaptive lighting
- service: lifx.effect_stop
metadata: {}
data: {}
target:
entity_id: light.living_room_led_strip
alias: Stop any current light strip effects
- alias: Choose Effect
choose:
- conditions:
- condition: template
value_template: '{{ effect in [''Rainbow'',null] }}'
alias: Rainbow
sequence:
- service: light.turn_on
metadata: {}
data:
effect: prism
target:
entity_id: light.living_room_overhead
alias: Turn on living room overhead in prism effect
- service: lifx.effect_move
metadata: {}
data:
speed: 8
direction: right
theme: exciting
power_on: true
target:
entity_id: light.living_room_led_strip
alias: Turn on living room LED strip in exciting theme with move effect
- conditions:
- condition: template
value_template: '{{ effect == ''Blue'' }}'
alias: Blue
sequence:
- service: light.turn_on
metadata: {}
data:
rgb_color:
- 0
- 0
- 255
brightness_pct: 100
target:
entity_id: light.living_room_lights
alias: Turn on living room lights, set to blue
- conditions:
- condition: template
value_template: '{{ effect == ''Purple'' }}'
alias: Purple
sequence:
- service: light.turn_on
metadata: {}
data:
rgb_color:
- 134
- 0
- 211
brightness_pct: 100
target:
entity_id: light.living_room_lights
alias: Turn on living room lights, set to purple
- conditions:
- alias: Green
condition: template
value_template: '{{ effect == ''Green'' }}'
sequence:
- alias: Turn on living room lights, set to green
service: light.turn_on
metadata: {}
data:
rgb_color:
- 0
- 255
- 0
brightness_pct: 100
target:
entity_id: light.living_room_lights
- conditions:
- condition: template
value_template: '{{ effect == ''Tokyo'' }}'
alias: Tokyo
sequence:
- service: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.living_room_dynamic_scenes
alias: Turn on dynamic scenes
- service: input_select.select_option
metadata: {}
data:
option: Tokyo
target:
entity_id: input_select.living_room_scenes
alias: Activate Tokyo scene in Living Room
- alias: Turn on living room LED strip in intense theme with move effect
service: lifx.effect_move
metadata: {}
data:
speed: 8
direction: right
theme: intense
power_on: true
target:
entity_id: light.living_room_led_strip
mode: restart
icon: fas:rainbow
fields:
effect:
selector:
select:
options:
- Rainbow
- Blue
- Purple
- Green
- Tokyo
multiple: false
name: Effect
description: What type of effect would you like to run?
default: Rainbow
required: true
rabbit_feeding:
alias: Rabbit Feeding
sequence:
- alias: Send notifications
parallel:
- alias: Play TTS if this is the 3rd or higher reminder
if:
- condition: numeric_state
entity_id: counter.rabbit_feeding_reminder_count
above: 2
then:
- service: script.speech_engine
data:
who: common_areas
type: alert
message: Zeus needs to be fed. This is reminder number {{ states('counter.rabbit_feeding_reminder_count')
}} for today.
alias: Play TTS announcement
- alias: Send phone notifications
service: script.text_notify
metadata: {}
data:
type: alert
who: all
title: Rabbit Feeding
message: Zeus needs to be fed, please do this ASAP!
tag: rabbit-feeding
actions:
- action: RABBIT_FEEDING_DONE
title: Fed
- action: RABBIT_FEEDING_SKIPPED
title: Skip
- action: RABBIT_FEEDING_ASK_LATER
title: Ask Later
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_FEEDING_DONE
alias: Done
id: done
- alias: Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_FEEDING_SKIPPED
id: skipped
- alias: Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_FEEDING_ASK_LATER
id: ask-later
- platform: state
entity_id:
- binary_sensor.parents_home
from: 'on'
to: 'off'
id: left
alias: Left
- platform: state
entity_id:
- input_boolean.rabbit_fed
from: 'off'
to: 'on'
alias: Manual
id: manual
timeout:
hours: 1
minutes: 0
seconds: 0
milliseconds: 0
alias: Triggers
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id in [''done'',''manual''] }}'
alias: Feeding done
sequence:
- service: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.rabbit_fed
alias: Turn on input boolean
- alias: Clear critical notification, if it was sent
service: script.text_notify
metadata: {}
data:
type: alert
who: all
message: clear_notification
tag: rabbit-feeding-critical
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''ask-later'' }}'
alias: Ask later
sequence:
- service: input_datetime.set_datetime
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(1)
}}
'
target:
entity_id: input_datetime.rabbit_feeding_notify
alias: Bump feeding notification by an hour
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''left'' }}'
alias: Left
sequence:
- service: script.text_notify
metadata: {}
data:
type: critical
who: parents
title: YOU DICK
message: YOU FORGOT TO FEED THE RABBIT!
tag: rabbit-feeding-critical
alias: Send critical text notification
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: None or undefined
sequence:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.rabbit_feeding_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,1)
}}
'
alias: Notify again
- alias: Clear notification
service: script.text_notify
metadata: {}
data:
type: alert
who: all
message: clear_notification
tag: rabbit-feeding
mode: restart
icon: mdi:rabbit
rabbit_hutch_cleaning:
alias: Rabbit Hutch Cleaning
sequence:
- alias: Send notifications
parallel:
- alias: Play TTS if this is the 3rd or higher reminder
if:
- condition: numeric_state
entity_id: counter.rabbit_hutch_cleaning_reminder_count
above: 2
then:
- data:
who: living_room
type: normal
message: The rabbit hutch is in need of cleaning. This is reminder number
{{ states('counter.rabbit_hutch_cleaning_reminder_count') }} for today.
alias: Play TTS announcement
action: script.speech_engine
- alias: Send phone notifications
metadata: {}
data:
type: alert
who: parents
title: Rabbit Hutch Cleaning
message: The rabbit hutch is in need of cleaning. For the sake of smell, please
do this ASAP!
tag: rabbit-hutch-cleaning
actions:
- action: RABBIT_HUTCH_CLEANING_DONE
title: Cleaned
- action: RABBIT_HUTCH_CLEANING_SKIPPED
title: Skip
- action: RABBIT_HUTCH_CLEANING_ASK_LATER
title: Ask Later
action: script.text_notify
- alias: Triggers
wait_for_trigger:
- alias: Done
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_HUTCH_CLEANING_DONE
id: done
- alias: Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_HUTCH_CLEANING_SKIPPED
id: skipped
- alias: Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: RABBIT_HUTCH_CLEANING_ASK_LATER
id: ask-later
- alias: Manual
platform: state
entity_id:
- input_boolean.rabbit_hutch_cleaned
from: 'off'
to: 'on'
id: manual
timeout:
hours: 1
minutes: 0
seconds: 0
milliseconds: 0
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id in [''done'',''manual''] }}'
alias: Cleaning done
sequence:
- alias: Turn on input boolean
metadata: {}
data: {}
target:
entity_id: input_boolean.rabbit_hutch_cleaned
action: input_boolean.turn_on
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''ask-later'' }}'
alias: Ask later
sequence:
- data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(1)
}}
'
target:
entity_id: input_datetime.rabbit_hutch_cleaning_notify
alias: Bump cleaning notification by an hour
action: input_datetime.set_datetime
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: None or undefined
sequence:
- target:
entity_id: input_datetime.rabbit_hutch_cleaning_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,1)
}}
'
alias: Notify again
action: input_datetime.set_datetime
- alias: Clear notification
metadata: {}
data:
type: alert
who: parents
message: clear_notification
tag: rabbit-hutch-cleaning
action: script.text_notify
mode: restart
icon: mdi:rabbit
emma_sleep:
alias: Emma Sleep
sequence:
- if:
- condition: time
after: 04:00:00
before: '17:00:00'
then:
- data: {}
action: script.emma_bedroom_scheduling_evening
alias: Run scheduling if it hasn't already been run
- target:
entity_id:
- script.emma_ibuprofen
- script.emma_tylenol
- script.emma_cough_meds
data: {}
alias: Reset med trackers
action: script.turn_off
- target:
entity_id:
- light.emma_bedroom_light
data: {}
alias: Turn on light
action: light.turn_on
- delay:
seconds: 1
- target:
entity_id:
- input_select.emma_bedroom_scenes
data:
option: Adaptive
alias: Set lights to adaptive
action: input_select.select_option
- if:
- alias: White Noise
condition: and
conditions:
- condition: state
entity_id: input_select.scheduled_climate_mode_emma_bedroom
state: White Noise
alias: Scheduled mode is White Noise
- condition: state
entity_id: input_boolean.white_noise_emma_bedroom
state: 'off'
alias: White Noise is not already on
then:
- target:
entity_id: input_boolean.white_noise_emma_bedroom
data: {}
alias: Turn on white noise
action: input_boolean.turn_on
- data:
who: parents
title: Emma Climate Schedule
message: White noise has been activated in Emma's Bedroom.
type: normal
tag: emma-climate
alias: Send white noise notification
action: script.text_notify
alias: Select climate mode
icon: mdi:lightbulb-night
mode: restart
tina_morning_meds:
alias: Tina Morning Meds
icon: mdi:medication
mode: restart
sequence:
- metadata: {}
data: {}
target:
entity_id: counter.tina_morning_meds_reminder_count
alias: Increment morning reminder counter
action: counter.increment
- data:
type: alert
who: tina
message: clear_notification
tag: tina-morning-meds
alias: Clear previous morning notification
action: script.text_notify
- alias: Send notifications, using AI if internet is connected
if:
- condition: state
entity_id: binary_sensor.internet
state: 'on'
then:
- if:
- condition: numeric_state
entity_id: counter.tina_morning_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
Be snarky, because at this point she's been reminded multiple times.
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
response_variable: response
alias: Generate reminder
alias: Generate reminder, be snarky if it's been several times
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
data:
who: tina
type: alert
title: Morning Meds
message: '{{ response.text }}'
tag: tina-morning-meds
actions:
- action: TINA_MORNING_MEDS_TAKEN
title: Taken
- action: TINA_MORNING_MEDS_SKIPPED
title: Skip
action: script.text_notify
else:
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
data:
who: tina
type: alert
title: Morning Meds
tag: tina-morning-meds
actions:
- action: TINA_MORNING_MEDS_TAKEN
title: Taken
- action: TINA_MORNING_MEDS_SKIPPED
title: Skip
message: You need to take your morning meds
action: script.text_notify
tina_night_meds:
alias: Tina Night Meds
icon: mdi:medication
mode: restart
sequence:
- metadata: {}
data: {}
target:
entity_id: counter.tina_night_meds_reminder_count
alias: Increment night reminder counter
action: counter.increment
- data:
type: alert
who: tina
message: clear_notification
tag: tina-night-meds
alias: Clear previous night notification
action: script.text_notify
- alias: Send notifications, using AI if internet is connected
if:
- condition: state
entity_id: binary_sensor.internet
state: 'on'
then:
- if:
- condition: numeric_state
entity_id: counter.tina_night_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
Be snarky, because at this point she's been reminded multiple times.
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
metadata: {}
data:
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
response_variable: response
alias: Generate reminder
alias: Generate reminder, be snarky if it's been several times
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
data:
who: tina
type: alert
title: Night Meds
message: '{{ response.text }}'
tag: tina-night-meds
actions:
- action: TINA_NIGHT_MEDS_TAKEN
title: Taken
- action: TINA_NIGHT_MEDS_SKIPPED
title: Skip
action: script.text_notify
else:
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- alias: Send text notification
data:
who: tina
type: alert
title: Night Meds
tag: tina-night-meds
actions:
- action: TINA_NIGHT_MEDS_TAKEN
title: Taken
- action: TINA_NIGHT_MEDS_SKIPPED
title: Skip
message: You need to take your night meds
action: script.text_notify
tina_ibuprofen:
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''ibuprofen-taken'' }}'
alias: If reason is not ibuprofen-taken
then:
- target:
entity_id: input_boolean.tina_ibuprofen_taken
data: {}
alias: Turn off boolean
action: input_boolean.turn_off
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-notify'' }}'
alias: Ibuprofen Notify
sequence:
- data:
type: alert
who: tina
title: Tina Ibuprofen Time
message: It is time to take your next dose of Ibuprofen
tag: tina-ibuprofen
actions:
- action: TINA_IBUPROFEN_TAKEN
title: Taken
- action: TINA_IBUPROFEN_SKIPPED
title: Skipped
- action: TINA_IBUPROFEN_ASK_LATER
title: Ask Later
alias: Send actionable text notification
action: script.text_notify
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_TAKEN
id: ibuprofen-taken
alias: Ibuprofen Taken
- alias: Ibuprofen Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_SKIPPED
id: ibuprofen-skipped
- alias: Ibuprofen Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_ASK_LATER
id: ibuprofen-ask-later
- platform: state
entity_id:
- input_boolean.tina_ibuprofen_taken
from: 'off'
to: 'on'
id: ibuprofen-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tina_ibuprofen_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- target:
entity_id: input_boolean.tina_ibuprofen_taken
data: {}
alias: Turn on boolean
action: input_boolean.turn_on
- conditions:
- alias: Ibuprofen Skipped
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-skipped'' }}'
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
- conditions:
- alias: Ibuprofen Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-ask-later'' }}'
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
alias: Act on wait triggers
- data:
type: alert
who: tina
message: clear_notification
tag: tina-ibuprofen
alias: Clear actionable text notification
action: script.text_notify
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
alias: Tina Ibuprofen
mode: queued
icon: mdi:medication
max: 10
description: ''
tina_tylenol:
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''tylenol-taken'' }}'
alias: If reason is not tylenol-taken
then:
- target:
entity_id: input_boolean.tina_tylenol_taken
data: {}
alias: Turn off boolean
action: input_boolean.turn_off
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-notify'' }}'
alias: Tylenol Notify
sequence:
- data:
type: alert
who: tina
title: Tina Tylenol Time
message: It is time to take your next dose of Tylenol
tag: tina-tylenol
actions:
- action: TINA_TYLENOL_TAKEN
title: Taken
- action: TINA_TYLENOL_SKIPPED
title: Skipped
- action: TINA_TYLENOL_ASK_LATER
title: Ask Later
alias: Send actionable text notification
action: script.text_notify
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_TAKEN
id: tylenol-taken
alias: Tylenol Taken
- alias: Tylenol Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_SKIPPED
id: tylenol-skipped
- alias: Tylenol Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_ASK_LATER
id: tylenol-ask-later
- platform: state
entity_id:
- input_boolean.tina_tylenol_taken
from: 'off'
to: 'on'
id: tylenol-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tina_tylenol_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- target:
entity_id: input_boolean.tina_tylenol_taken
data: {}
alias: Turn on boolean
action: input_boolean.turn_on
- conditions:
- alias: Tylenol Skipped
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-skipped'' }}'
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
- conditions:
- alias: Tylenol Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-ask-later'' }}'
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
alias: Act on wait triggers
- data:
type: alert
who: tina
message: clear_notification
tag: tina-tylenol
alias: Clear actionable text notification
action: script.text_notify
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- target:
entity_id: input_datetime.tina_tylenol_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
alias: Tina Tylenol
mode: queued
icon: mdi:medication
max: 10
description: ''