AutomationDataset/jazzyisj/automation-descriptions.json

4500 lines
615 KiB
JSON

[
{
"id": "adaptive_lighting_sleep_mode",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When occupancy mode [input_select.occupancy_mode] changes to Night and remains for 5 seconds OR When occupancy mode [input_select.occupancy_mode] changes from Night and remains for 5 seconds OR When adaptive lighting [switch.adaptive_lighting] turns on from off. CONDITIONS: adaptive lighting [switch.adaptive_lighting] is on AND alarm triggered [input_boolean.alarm_triggered] is off. ACTIONS: IF occupancy mode [input_select.occupancy_mode] is Night THEN turn on adaptive lighting sleep mode main lights [switch.adaptive_lighting_sleep_mode_main_lights] AND wait until bathroom sensor motion [binary_sensor.bathroom_sensor_motion] is off AND bathroom vanity light timer [timer.bathroom_vanity_light] is idle THEN turn on adaptive lighting sleep mode bathroom lights [switch.adaptive_lighting_sleep_mode_bathroom_lights] AND wait until dining room light rgb [light.dining_room_light_rgb] is off THEN turn on adaptive lighting sleep mode rgb lights [switch.adaptive_lighting_sleep_mode_rgb_lights] AND wait until bedroom fan light [light.bedroom_fan_light] is off AND bedroom potlights [light.bedroom_potlights] is off THEN turn on adaptive lighting sleep mode bedroom lights [switch.adaptive_lighting_sleep_mode_bedroom_lights] AND turn on adaptive lighting sleep mode cabinet lights [switch.adaptive_lighting_sleep_mode_cabinet_lights]. ELSE turn off adaptive lighting sleep mode bathroom lights [switch.adaptive_lighting_sleep_mode_bathroom_lights] AND adaptive lighting sleep mode outside lights [switch.adaptive_lighting_sleep_mode_outside_lights] AND IF waketime script [script.waketime] is on THEN wait until waketime script [script.waketime] is off AND turn off adaptive lighting sleep mode bathroom lights [switch.adaptive_lighting_sleep_mode_bathroom_lights], adaptive lighting sleep mode outside lights [switch.adaptive_lighting_sleep_mode_outside_lights], adaptive lighting sleep mode bedroom lights [switch.adaptive_lighting_sleep_mode_bedroom_lights], adaptive lighting sleep mode main lights [switch.adaptive_lighting_sleep_mode_main_lights], adaptive lighting sleep mode rgb lights [switch.adaptive_lighting_sleep_mode_rgb_lights], AND adaptive lighting sleep mode cabinet lights [switch.adaptive_lighting_sleep_mode_cabinet_lights].",
"natural_language": {
"trigger": "The automation can be triggered in four ways: when Home Assistant starts up, when the occupancy mode [input_select.occupancy_mode] changes to 'Night' and stays that way for at least 5 seconds, when the occupancy mode changes from 'Night' to another state and remains for 5 seconds, or when the adaptive lighting [switch.adaptive_lighting] is turned on from an off state.",
"conditions": "For the automation to proceed, the adaptive lighting [switch.adaptive_lighting] must be on, and the alarm triggered [input_boolean.alarm_triggered] must be off.",
"action": "If the occupancy mode [input_select.occupancy_mode] is set to 'Night', the automation will turn on several sleep mode lighting switches in parallel. It will immediately turn on the main lights switch. For the bathroom lights, it will wait until there is no motion in the bathroom and the vanity light timer is idle before turning them on. For the RGB lights, it will wait until the dining room RGB light is off. For the bedroom lights, it will wait until both the bedroom fan light and bedroom potlights are off. It will also turn on the cabinet lights immediately. If the occupancy mode is not 'Night', the automation will first turn off the bathroom and outside sleep mode lights. Then, if the waketime script is active, it will wait for it to finish before proceeding to turn off all sleep mode lighting switches, including bathroom, outside, bedroom, main, RGB, and cabinet lights."
},
"human_like": "This automation manages 'sleep mode' lighting by turning on specific, subdued lighting groups when the house enters 'Night' mode, and turning them all off when leaving that mode, ensuring lights are only on when appropriate conditions are met.",
"complexity": "high"
}
},
{
"id": "alarm_announcements",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to pending OR triggered AND remains stable for 5 seconds. OR When house alarm [alarm_control_panel.house] changes to armed_home, armed_night, armed_away, armed_vacation, OR arming. OR When house alarm [alarm_control_panel.house] changes to disarmed FROM armed_home, armed_night, armed_away, armed_vacation, OR triggered. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND alarm announcements [input_boolean.alarm_announcements] is on. AND (IF trigger.to_state.state is in [disarmed, armed_home, armed_night, armed_away, armed_vacation] THEN occupancy announcements [input_boolean.occupancy_announcements] is off ELSE true). ACTIONS: Choose based on alarm state: 1. IF house alarm [alarm_control_panel.house] is arming THEN run tts play script [script.tts_play] with message 'The alarm is now being armed in {{ mode }} mode.'. 2. IF house alarm [alarm_control_panel.house] is pending THEN WHILE alarm remains pending, run tts play script [script.tts_play] with a warning message referencing current alarm [input_text.current_alarm] on broadcast speakers [media_player.broadcast_speakers] with specific voice and volume settings, and wait up to 30 seconds for state change. 3. IF house alarm [alarm_control_panel.house] is triggered AND smoke alarm [binary_sensor.smoke_alarm] is off AND co alarm [binary_sensor.co_alarm] is off AND heat alarm [binary_sensor.heat_alarm] is off THEN wait up to 10 seconds for current alarm [input_text.current_alarm] to be non-empty, then run tts play script [script.tts_play] with an alert message, delay 30 seconds, and IF alarm is still triggered, repeatedly run tts play script [script.tts_play] with an escalated alert message until alarm is no longer triggered, waiting up to 60 seconds between loops. 4. IF house alarm [alarm_control_panel.house] is in [disarmed, armed_home, armed_night, armed_away, armed_vacation] AND (IF alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is on THEN house alarm [alarm_control_panel.house] is NOT disarmed ELSE true) THEN run tts play script [script.tts_play] with a message announcing the disarm or armed mode.",
"natural_language": {
"trigger": "The automation triggers when the house alarm [alarm_control_panel.house] enters a 'pending' or 'triggered' state for at least 5 seconds, when it is armed to any mode (home, night, away, vacation) or is in the 'arming' process, or when it is disarmed from an armed or triggered state.",
"conditions": "Both the alarm enabled [input_boolean.alarm_enabled] and alarm announcements [input_boolean.alarm_announcements] switches must be on. Additionally, if the alarm is changing to a disarmed or armed state (but not 'pending' or 'triggered'), the occupancy announcements [input_boolean.occupancy_announcements] must be off for the announcement to proceed.",
"action": "Depending on the alarm's state, different text-to-speech announcements are made. When arming, a simple status message is played. If the alarm is pending, a repeating warning message is broadcast on specific speakers until the state changes. If the alarm is triggered and it's not due to smoke, CO, or heat sensors, an initial alert is played, followed by a 30-second delay, and then a more severe, looping announcement is played until the alarm is no longer triggered. Finally, when the alarm is disarmed or armed (under normal conditions), a status announcement is played, but it is suppressed if the alarm is disarmed while there is an open sensor alert."
},
"human_like": "Provides voice announcements for the house alarm system, giving status updates when arming or disarming, warnings during the pending period, and escalating alerts if the alarm is triggered.",
"complexity": "high"
}
},
{
"id": "alarm_arming",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes state to arming OR When house alarm [alarm_control_panel.house] changes state from arming. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF house alarm [alarm_control_panel.house] is arming THEN set current arm mode [input_select.current_arm_mode] to the arm_mode attribute from the trigger AND IF the alarm delay attribute from house alarm [alarm_control_panel.house] is greater than 0 seconds THEN start alarm arming timer [timer.alarm_arming] for that delay duration. OTHERWISE (IF house alarm [alarm_control_panel.house] is NOT arming) THEN IF alarm arming timer [timer.alarm_arming] is active THEN cancel alarm arming timer [timer.alarm_arming].",
"natural_language": {
"trigger": "When the house alarm [alarm_control_panel.house] starts arming, or when it stops being in the arming state.",
"conditions": "The automation only runs if the alarm enabled [input_boolean.alarm_enabled] is switched on.",
"action": "If the alarm is starting to arm, it sets the current arm mode [input_select.current_arm_mode] to the mode specified by the alarm and, if there is a configured delay time greater than zero, starts the alarm arming timer [timer.alarm_arming] for that duration. If the alarm is leaving the arming state, it checks if the alarm arming timer [timer.alarm_arming] is still running and cancels it if it is."
},
"human_like": "Manages the arming timer for the house alarm, starting it when arming begins and cancelling it if arming is interrupted.",
"complexity": "medium"
}
},
{
"id": "alarm_arming_lights",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes state to arming OR When house alarm [alarm_control_panel.house] changes state from arming. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND nighttime illuminance [binary_sensor.nighttime_illuminance] is on. ACTIONS: IF house alarm [alarm_control_panel.house] is arming THEN create a scene snapshot named alarm_arming_lights_restore for side entrance light [light.side_entrance_light], kitchen potlights [light.kitchen_potlights], and dining room potlights [light.dining_room_potlights]. IF house alarm [alarm_control_panel.house] arm_mode is armed_away OR armed_vacation AND someone home [binary_sensor.someone_home] is on THEN run turn light on script [script.turn_light_on] for side entrance light [light.side_entrance_light], kitchen potlights [light.kitchen_potlights], and dining room potlights [light.dining_room_potlights]. OTHERWISE (IF house alarm [alarm_control_panel.house] is NOT arming) THEN IF occupancy mode [input_select.occupancy_mode] is Home OR Guest THEN run light scene on script [script.light_scene_on] to restore the alarm_arming_lights_restore scene. ELSE turn off side entrance light [light.side_entrance_light], kitchen potlights [light.kitchen_potlights], and dining room potlights [light.dining_room_potlights].",
"natural_language": {
"trigger": "The automation triggers when the house alarm [alarm_control_panel.house] starts arming or when it stops being in the arming state.",
"conditions": "The automation only runs if the alarm enabled [input_boolean.alarm_enabled] switch is on and the nighttime illuminance [binary_sensor.nighttime_illuminance] sensor indicates it is dark enough (is on).",
"action": "When the alarm starts arming, it first saves the current state of the side entrance, kitchen, and dining room lights as a scene snapshot. Then, if the alarm is being set to 'away' or 'vacation' mode and the someone home [binary_sensor.someone_home] sensor indicates someone is present, it turns those lights on. When the alarm stops arming, it checks the occupancy mode. If the mode is 'Home' or 'Guest', it restores the lights to their previously saved state. Otherwise, it turns those lights off."
},
"human_like": "Manages indoor lighting when the house alarm is being armed or disarmed, turning lights on for safety when leaving or restoring them when arriving home, but only when it's dark outside.",
"complexity": "medium"
}
},
{
"id": "alarm_automation_check",
"result": {
"structured": "TRIGGER: When any of the listed 30 automation or input_boolean entities (e.g., alarm announcements automation [automation.alarm_announcements], alarm arming lights automation [automation.alarm_arming_lights], alarm enabled [input_boolean.alarm_enabled], etc.) changes its state to 'off'. CONDITIONS: house alarm [alarm_control_panel.house] is NOT in the 'disarmed' state. ACTIONS: Turn the specific entity that triggered the automation (referenced as {{ trigger.entity_id }}) back on. Log a warning message to the system log, stating that the entity changed while the alarm was armed and is being reverted. Send a browser notification for 10 seconds stating that settings cannot be changed while the alarm is armed.",
"natural_language": {
"trigger": "The automation is triggered when any one of a specific list of 30 entities, which includes various alarm-related automations (like alarm announcements automation, alarm arming lights automation) and input_booleans (like alarm enabled, alarm announcements), is turned off.",
"conditions": "The automation only proceeds if the house alarm [alarm_control_panel.house] is not in the 'disarmed' state, meaning it is either armed or in another active state.",
"action": "The automation performs three actions: it turns the specific entity that triggered the automation back on, writes a warning entry to the system log noting the change and reversion, and displays a 10-second notification in the browser stating that settings cannot be changed while the alarm is armed."
},
"human_like": "This automation prevents changes to alarm-related settings by automatically turning them back on and notifying the user if they are disabled while the house alarm is armed.",
"complexity": "medium"
}
},
{
"id": "alarm_check_automation_check",
"result": {
"structured": "TRIGGER: When alarm automation check [automation.alarm_automation_check] changes state to off. CONDITIONS: NOT (house alarm [alarm_control_panel.house] is disarmed). ACTIONS: Turn on alarm automation check [automation.alarm_automation_check], Write an error log entry via system_log.write, and Show a browser notification via browser_mod.notification with the message 'Settings cannot be changed while alarm is armed.' for 10 seconds.",
"natural_language": {
"trigger": "When the alarm automation check [automation.alarm_automation_check] is turned off.",
"conditions": "If the house alarm [alarm_control_panel.house] is not in the disarmed state.",
"action": "The automation will turn the alarm automation check [automation.alarm_automation_check] back on, log an error message to the system log, and display a notification on the browser stating that settings cannot be changed while the alarm is armed."
},
"human_like": "Prevents changes to the alarm automation settings while the house alarm is armed by immediately turning it back on and showing a warning.",
"complexity": "low"
}
},
{
"id": "alarm_bypassed_sensor",
"result": {
"structured": "TRIGGER: When alarm bypassed sensor alert [binary_sensor.alarm_bypassed_sensor_alert] changes state from on to off OR from off to on. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND alarm notifications [input_boolean.alarm_notifications] is on. ACTIONS: IF alarm bypassed sensor alert [binary_sensor.alarm_bypassed_sensor_alert] is on, THEN send a notification to jason medication notification [notify.jason] with a title 'Bypassed Sensors' and a message listing the names of bypassed sensors from house alarm [alarm_control_panel.house] (with 'Alert' removed), plus additional notification data including tag, group, channel, and other parameters. OTHERWISE, send a notification to jason medication notification [notify.jason] to clear notifications with the tag 'bypassed_sensor'.",
"natural_language": {
"trigger": "Whenever the alarm bypassed sensor alert [binary_sensor.alarm_bypassed_sensor_alert] changes its state, either turning on or off.",
"conditions": "Both the alarm enabled [input_boolean.alarm_enabled] and alarm notifications [input_boolean.alarm_notifications] switches must be turned on.",
"action": "If the alarm bypassed sensor alert is on, it sends a detailed notification to jason medication notification [notify.jason] listing all currently bypassed sensors from the house alarm system. If the alert is off, it sends a command to clear any previous notifications related to bypassed sensors."
},
"human_like": "Sends a mobile notification when the alarm system has bypassed sensors, and clears it when the bypass is resolved, but only if alarm notifications are enabled.",
"complexity": "medium"
}
},
{
"id": "alarm_clock_failed",
"result": {
"structured": "TRIGGER: When alarm clock failed [input_boolean.alarm_clock_failed] turns on. CONDITIONS: (alarm clock alerts [input_boolean.alarm_clock_alerts] is on) AND (alarm clock [binary_sensor.alarm_clock] is on). ACTIONS: First, ensure alarm clock failed [input_boolean.alarm_clock_failed] is on. Then, if the variable 'person' equals 'jason', send a notification to jason [notify.jason] with a failure message. Finally, repeatedly execute a sequence: run the tts play script [script.tts_play] to play an announcement on dining room hub [media_player.dining_room_hub] at minimum volume 70, wait 120 seconds, and continue this loop until alarm clock failed [input_boolean.alarm_clock_failed] is turned off.",
"natural_language": {
"trigger": "When the alarm clock failed [input_boolean.alarm_clock_failed] input boolean is turned on.",
"conditions": "Both the alarm clock alerts [input_boolean.alarm_clock_alerts] and the alarm clock [binary_sensor.alarm_clock] must be in the 'on' state.",
"action": "The automation first ensures the alarm clock failed [input_boolean.alarm_clock_failed] flag is on. Then, if alarm clock notifications [input_boolean.alarm_clock_notifications] are enabled and jason home [binary_sensor.jason_home] is detected, it sends a detailed mobile notification to jason [notify.jason]. Finally, it enters a loop where it plays a text-to-speech announcement on the dining room hub [media_player.dining_room_hub] and waits two minutes, repeating until the alarm clock failed [input_boolean.alarm_clock_failed] flag is turned off."
},
"human_like": "Handles a failed alarm clock by sending a mobile notification if Jason is home and eligible, and repeatedly playing an audible announcement until the failure is acknowledged and cleared.",
"complexity": "medium"
}
},
{
"id": "alarm_clock_media_player_turned_off",
"result": {
"structured": "TRIGGER: When any media player entity from the included list transitions to state 'off', 'idle', 'unavailable', or 'unknown' AND remains in that state for 5 seconds. CONDITIONS: alarm clock [binary_sensor.alarm_clock] is on AND the triggered media player is an active alarm clock player (via template) AND the triggered media player is NOT an active TTS player (via template) AND alarm clock snooze [switch.alarm_clock_snooze] AND alarm clock play script [script.alarm_clock_play] AND alarm clock stop script [script.alarm_clock_stop] are all off. ACTIONS: If the trigger state is 'unknown' or 'unavailable', then turn on alarm clock failed [input_boolean.alarm_clock_failed]; otherwise, turn off the alarm clock switch corresponding to the current alarm type [switch.alarm_clock_{{ alarm_type }}].",
"natural_language": {
"trigger": "When any media player defined in the included list changes its state to off, idle, unavailable, or unknown and stays in that state for at least five seconds.",
"conditions": "The alarm clock [binary_sensor.alarm_clock] must be on. The media player that triggered the automation must be identified as an active alarm clock player by a template function, and it must not be identified as an active text-to-speech player by another template function. Additionally, the alarm clock snooze [switch.alarm_clock_snooze], the alarm clock play script [script.alarm_clock_play], and the alarm clock stop script [script.alarm_clock_stop] must all be off.",
"action": "If the media player's new state is 'unknown' or 'unavailable', the system marks the alarm as failed by turning on the alarm clock failed [input_boolean.alarm_clock_failed] indicator. Otherwise, it turns off the specific alarm clock switch for the current alarm type, which is determined by the alarm clock type [input_select.alarm_clock_type] selection."
},
"human_like": "Stops the active alarm when its designated media player is turned off or becomes unavailable, ensuring the alarm system is properly reset.",
"complexity": "high"
}
},
{
"id": "alarm_clock_notification",
"result": {
"structured": "TRIGGER: When alarm clock [binary_sensor.alarm_clock] OR alarm clock snooze [switch.alarm_clock_snooze] turns on from off AND remains for 5 seconds OR When alarm clock snooze [switch.alarm_clock_snooze] OR alarm clock [binary_sensor.alarm_clock] turns off from on OR When a mobile app notification action with action 'dismiss_alarm_clock' occurs. CONDITIONS: alarm clock test play [input_boolean.alarm_clock_test_play] is off AND the variable 'person' is in the list ['jason']. ACTIONS: IF (alarm clock [binary_sensor.alarm_clock] is off OR the trigger is the dismiss event) THEN send a clear notification with tag 'alarm_clock' to the person's device. ELSE IF alarm clock snooze [switch.alarm_clock_snooze] is on THEN run alarm clock notification script [script.alarm_clock_notification] with type 'snooze' for the person. ELSE REPEAT: IF (alarm clock snooze [switch.alarm_clock_snooze] is off AND alarm clock [binary_sensor.alarm_clock] is on) THEN run alarm clock notification script [script.alarm_clock_notification] with type 'alarm' for the person. THEN wait until alarm clock [binary_sensor.alarm_clock] is off, with a timeout of 120 seconds. UNTIL alarm clock [binary_sensor.alarm_clock] is off.",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when either the alarm clock [binary_sensor.alarm_clock] or the alarm clock snooze [switch.alarm_clock_snooze] switches from off to on and stays that way for 5 seconds; when either the alarm clock snooze [switch.alarm_clock_snooze] or the alarm clock [binary_sensor.alarm_clock] switches from on to off; or when a specific 'dismiss_alarm_clock' action is received from a mobile app notification.",
"conditions": "Two conditions must be met: the alarm clock test play [input_boolean.alarm_clock_test_play] must be off, and the automation's internal 'person' variable must be set to 'jason'.",
"action": "If the alarm clock is off or the user dismissed the notification, a clear notification command is sent to Jason's device. Otherwise, if the snooze switch is on, a snooze notification script is run. If not, the automation enters a loop: it checks if the alarm is on and snooze is off, then runs an alarm notification script. It then waits for the alarm to turn off (for up to 120 seconds) and repeats this process until the alarm is finally off."
},
"human_like": "Sends alarm or snooze notifications to Jason's device when his alarm activates, and clears them when the alarm is dismissed or turns off.",
"complexity": "high"
}
},
{
"id": "upcoming_alarm_clock_notification",
"result": {
"structured": "TRIGGER: When the current time is within 60 minutes before the alarm time reported by alarm clock next alarm [sensor.alarm_clock_next_alarm] OR when alarm clock [binary_sensor.alarm_clock] turns on. CONDITIONS: alarm clock notifications [input_boolean.alarm_clock_notifications] is on. ACTIONS: If alarm clock [binary_sensor.alarm_clock] is on, then clear any existing notification with tag 'upcoming_alarm_clock' via notify.jason [notify.jason]. Otherwise, send a persistent notification via notify.jason [notify.jason] with the upcoming alarm time, using the alarm clock's icon, and include an action to skip the next alarm.",
"natural_language": {
"trigger": "The automation triggers either when the current time reaches 60 minutes before the next scheduled alarm time from alarm clock next alarm [sensor.alarm_clock_next_alarm], or when the alarm clock [binary_sensor.alarm_clock] itself turns on.",
"conditions": "The automation only runs if the alarm clock notifications [input_boolean.alarm_clock_notifications] setting is turned on.",
"action": "If the alarm is currently active (alarm clock [binary_sensor.alarm_clock] is on), it clears any previous 'upcoming alarm' notification. Otherwise, it sends a detailed notification showing the upcoming alarm time, with options to skip the alarm, and makes sure the notification is persistent and visible."
},
"human_like": "Sends a notification one hour before a scheduled alarm, or clears it when the alarm starts, provided notifications are enabled.",
"complexity": "medium"
}
},
{
"id": "select_active_alarm_clock",
"result": {
"structured": "TRIGGER: When alarm clock [binary_sensor.alarm_clock] changes from off to on AND remains on for 1 second. CONDITIONS: alarm clock test play [input_boolean.alarm_clock_test_play] is off. ACTIONS: Turn on media launcher alarm clock [input_boolean.media_launcher_alarm_clock] AND Turn on the input_boolean entity determined by the template: input_boolean.alarm_clock_launcher_{{ alarm_type }} where alarm_type is the current state of alarm clock type [input_select.alarm_clock_type].",
"natural_language": {
"trigger": "When the alarm clock [binary_sensor.alarm_clock] turns on and stays on for one second.",
"conditions": "The alarm clock test play [input_boolean.alarm_clock_test_play] must be off.",
"action": "Turns on the media launcher alarm clock [input_boolean.media_launcher_alarm_clock] and also turns on a specific alarm clock launcher input_boolean based on the current alarm type selected in alarm clock type [input_select.alarm_clock_type]."
},
"human_like": "Activates the alarm clock launchers when the alarm is triggered, provided a test mode is not active.",
"complexity": "medium"
}
},
{
"id": "reset_alarm_clock_options_view",
"result": {
"structured": "TRIGGER: When show alarm clock settings [input_boolean.show_alarm_clock_settings] turns on AND remains on for 5 minutes OR When any of the following entities turns on: alarm clock launcher daily [input_boolean.alarm_clock_launcher_daily], alarm clock launcher manual [input_boolean.alarm_clock_launcher_manual], alarm clock launcher nap [input_boolean.alarm_clock_launcher_nap], alarm clock launcher other [input_boolean.alarm_clock_launcher_other]. CONDITIONS: None. ACTIONS: Turn off show alarm clock settings [input_boolean.show_alarm_clock_settings].",
"natural_language": {
"trigger": "The automation triggers in two ways. First, when the show alarm clock settings [input_boolean.show_alarm_clock_settings] switch is turned on and stays on for five minutes. Second, when any one of the alarm clock launcher switches—daily, manual, nap, or other—is turned on.",
"conditions": "There are no conditions that must be checked after the trigger.",
"action": "The automation turns off the show alarm clock settings [input_boolean.show_alarm_clock_settings] input boolean."
},
"human_like": "Automatically hides the alarm clock settings view after a delay or when a specific alarm type is selected.",
"complexity": "low"
}
},
{
"id": "reset_alarm_clock_selection",
"result": {
"structured": "TRIGGER: When any of the following input booleans changes to null: alarm clock launcher daily [input_boolean.alarm_clock_launcher_daily], alarm clock launcher manual [input_boolean.alarm_clock_launcher_manual], alarm clock launcher nap [input_boolean.alarm_clock_launcher_nap], alarm clock launcher other [input_boolean.alarm_clock_launcher_other]. CONDITIONS: None. ACTIONS: 1. Turn off this automation [reset_alarm_clock_selection]. 2. Turn off all other input booleans in group.alarm_clock_launchers except the one that triggered. 3. Turn this automation [reset_alarm_clock_selection] back on. 4. If alarm clock [binary_sensor.alarm_clock] is on, wait until it turns off (with a 900 second timeout). Otherwise, delay for 600 seconds. 5. Turn off this automation [reset_alarm_clock_selection]. 6. Turn off all input booleans in group.alarm_clock_launchers. 7. Set alarm clock selection [input_select.alarm_clock_selection] to 'Jason Phone'. 8. Turn this automation [reset_alarm_clock_selection] back on.",
"natural_language": {
"trigger": "When any of the alarm clock launcher input booleans (daily, manual, nap, or other) changes its state to null.",
"conditions": "There are no conditions that must be met for the actions to run; they execute immediately after the trigger.",
"action": "The automation first turns itself off, then turns off all other alarm clock launcher booleans except the one that triggered. It turns itself back on, then checks if the alarm clock [binary_sensor.alarm_clock] is active. If it is, it waits for the alarm to turn off (up to 15 minutes). If the alarm is not active, it waits for 10 minutes. After the wait, it turns itself off again, turns off all alarm clock launcher booleans, sets the alarm clock selection [input_select.alarm_clock_selection] to 'Jason Phone', and finally turns itself back on."
},
"human_like": "Resets the alarm clock selection and launcher booleans when any launcher is turned off, ensuring a default selection after a waiting period.",
"complexity": "high"
}
},
{
"id": "turn_on_skip_next_alarm_clock",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_next_alarm' OR When a mobile app notification action event occurs with action 'enable_next_alarm'. CONDITIONS: None. ACTIONS: If the triggering event ID is 'skip', turn on alarm clock skip next [input_boolean.alarm_clock_skip_next]; otherwise, turn off alarm clock skip next [input_boolean.alarm_clock_skip_next].",
"natural_language": {
"trigger": "When a notification action from a mobile app is received, specifically for either 'skip_next_alarm' or 'enable_next_alarm'.",
"conditions": "There are no additional conditions that must be met.",
"action": "If the notification action was 'skip_next_alarm', the automation turns on the alarm clock skip next [input_boolean.alarm_clock_skip_next]. If the notification action was 'enable_next_alarm', it turns the same entity off."
},
"human_like": "Toggles the 'skip next alarm' setting on or off based on a tap in a mobile app notification.",
"complexity": "low"
}
},
{
"id": "turn_off_skip_next_alarm_clock",
"result": {
"structured": "TRIGGER: When alarm clock next alarm [sensor.alarm_clock_next_alarm] changes to state 'unknown' AND previous state was not 'unavailable'. CONDITIONS: None. ACTIONS: Turn off alarm clock skip next [input_boolean.alarm_clock_skip_next].",
"natural_language": {
"trigger": "When the alarm clock next alarm [sensor.alarm_clock_next_alarm] sensor changes its state to 'unknown', but only if it wasn't previously 'unavailable'.",
"conditions": "There are no additional conditions that must be met.",
"action": "Turns off the alarm clock skip next [input_boolean.alarm_clock_skip_next] input boolean."
},
"human_like": "Automatically resets the 'skip next alarm' setting when the next alarm time becomes unknown.",
"complexity": "low"
}
},
{
"id": "alarm_clock_skipped",
"result": {
"structured": "TRIGGER: When alarm clock skip next [input_boolean.alarm_clock_skip_next] changes state. CONDITIONS: (alarm clock skip next [input_boolean.alarm_clock_skip_next] is on) AND (sensor.alarm_clock_next_alarm has a value) AND (alarm clock notifications [input_boolean.alarm_clock_notifications] is on). ACTIONS: If all conditions are met, send a notification to jason [notify.jason] with details of the skipped alarm. If alarm clock skip next [input_boolean.alarm_clock_skip_next] is on but sensor.alarm_clock_next_alarm has no value, then turn off alarm clock skip next [input_boolean.alarm_clock_skip_next] and send a browser mod notification [browser_mod.notification] stating there is no alarm to skip. If alarm clock skip next [input_boolean.alarm_clock_skip_next] is off and sensor.alarm_clock_next_alarm has a value, then send a notification to jason [notify.jason] to clear the previous skipped alarm notification.",
"natural_language": {
"trigger": "The automation is triggered whenever the state of the alarm clock skip next [input_boolean.alarm_clock_skip_next] changes.",
"conditions": "The automation checks if the alarm clock skip next [input_boolean.alarm_clock_skip_next] is turned on, if there is a next alarm time available from sensor.alarm_clock_next_alarm, and if alarm clock notifications [input_boolean.alarm_clock_notifications] are enabled.",
"action": "If all conditions are satisfied, a detailed notification is sent to jason [notify.jason] informing them that the upcoming alarm has been skipped. If the skip is activated but there is no alarm set, the automation turns off the skip switch and sends a browser notification stating there is no alarm to skip. If the skip switch is turned off and there is a next alarm, the automation clears the previous skipped alarm notification."
},
"human_like": "Manages notifications when skipping an alarm, either alerting the user of the skipped time or clearing the alert if the skip is cancelled.",
"complexity": "medium"
}
},
{
"id": "turn_alarm_clock_snooze_on",
"result": {
"structured": "TRIGGER: When any media player entity (from include /config/include/media_player_entities_single.yaml) changes to paused OR when timer alarm clock snooze [timer.alarm_clock_snooze] starts OR when shelly click event [shelly.click] occurs with device shellybutton1-E8DB84AA2E96 and click_type single OR when mobile_app_notification_action event occurs with action snooze_alarm_clock. CONDITIONS: alarm clock snooze [switch.alarm_clock_snooze] is off AND alarm clock [binary_sensor.alarm_clock] is on AND (IF trigger is player THEN the triggering entity is in the entity_id list of alarm clock active media player [sensor.alarm_clock_active_media_player] ELSE true). ACTIONS: IF trigger is player OR timer THEN wait 1 second. IF alarm clock snooze [switch.alarm_clock_snooze] is off THEN turn on alarm clock snooze [switch.alarm_clock_snooze].",
"natural_language": {
"trigger": "The automation can be triggered in four ways: when any media player (from a defined list) is paused, when the alarm clock snooze timer [timer.alarm_clock_snooze] starts, when a specific Shelly button [shellybutton1-E8DB84AA2E96] is clicked once, or when a mobile app notification action with the 'snooze_alarm_clock' command is received.",
"conditions": "For the automation to proceed, the alarm clock snooze switch [switch.alarm_clock_snooze] must be off, and the alarm clock [binary_sensor.alarm_clock] must be on. Additionally, if the trigger was a media player pausing, that specific player must be listed as an active alarm clock media player in the sensor alarm clock active media player [sensor.alarm_clock_active_media_player].",
"action": "If the trigger was a media player pausing or the snooze timer starting, the automation first waits for one second. Then, if the alarm clock snooze switch [switch.alarm_clock_snooze] is still off, it turns the switch on."
},
"human_like": "Turns on the alarm clock snooze function when triggered by a paused media player, a started timer, a button press, or a mobile notification, provided the alarm is active and snooze isn't already on.",
"complexity": "medium"
}
},
{
"id": "turn_alarm_clock_snooze_off",
"result": {
"structured": "TRIGGER: When alarm clock [binary_sensor.alarm_clock] turns off OR When alarm clock snooze timer [timer.alarm_clock_snooze] finishes OR When alarm clock snooze timer [timer.alarm_clock_snooze] is cancelled OR When alarm clock snooze timer [timer.alarm_clock_snooze] is paused. CONDITIONS: alarm clock snooze [switch.alarm_clock_snooze] is on. ACTIONS: Turn off alarm clock snooze [switch.alarm_clock_snooze].",
"natural_language": {
"trigger": "The automation triggers when the alarm clock [binary_sensor.alarm_clock] turns off, or when the alarm clock snooze timer [timer.alarm_clock_snooze] finishes, is cancelled, or is paused.",
"conditions": "The automation only runs if the alarm clock snooze [switch.alarm_clock_snooze] is currently switched on.",
"action": "It turns off the alarm clock snooze [switch.alarm_clock_snooze]."
},
"human_like": "Turns off the alarm clock snooze switch when the alarm is turned off or the snooze timer finishes or is interrupted.",
"complexity": "low"
}
},
{
"id": "reset_alarm_clock_snooze_switch",
"result": {
"structured": "TRIGGER: When alarm clock snooze [switch.alarm_clock_snooze] turns on from off. CONDITIONS: alarm clock [binary_sensor.alarm_clock] is off. ACTIONS: Turn off alarm clock snooze [switch.alarm_clock_snooze].",
"natural_language": {
"trigger": "When the alarm clock snooze switch [switch.alarm_clock_snooze] is turned on from an off state.",
"conditions": "The alarm clock [binary_sensor.alarm_clock] must be off.",
"action": "Immediately turns the alarm clock snooze switch [switch.alarm_clock_snooze] back off."
},
"human_like": "Prevents the snooze switch from being left on when the alarm clock itself is off.",
"complexity": "low"
}
},
{
"id": "alarm_clock_volume_changed",
"result": {
"structured": "TRIGGER: When alarm clock volume daily [input_number.alarm_clock_volume_daily] OR alarm clock volume manual [input_number.alarm_clock_volume_manual] OR alarm clock volume nap [input_number.alarm_clock_volume_nap] changes state. CONDITIONS: alarm clock [binary_sensor.alarm_clock] is on AND (the new value of the triggering entity, formatted to two decimal places after dividing by 100, is not equal to the current volume_level attribute of the media player entity specified by alarm clock active media player [sensor.alarm_clock_active_media_player], also formatted to two decimal places). ACTIONS: Set the volume level of the media player specified by alarm clock active media player [sensor.alarm_clock_active_media_player] to the value of the triggering entity divided by 100.",
"natural_language": {
"trigger": "When any of the alarm volume input numbers (alarm clock volume daily [input_number.alarm_clock_volume_daily], alarm clock volume manual [input_number.alarm_clock_volume_manual], or alarm clock volume nap [input_number.alarm_clock_volume_nap]) changes its state.",
"conditions": "The alarm clock [binary_sensor.alarm_clock] must be active (on). Additionally, the newly set volume value (converted from a percentage to a decimal) must be different from the current volume level of the active media player [sensor.alarm_clock_active_media_player].",
"action": "Adjusts the volume of the active media player [sensor.alarm_clock_active_media_player] to match the new alarm volume setting."
},
"human_like": "Updates the volume of the active alarm media player when an alarm volume setting is changed, but only if the alarm is currently active.",
"complexity": "medium"
}
},
{
"id": "alarm_code_error",
"result": {
"structured": "TRIGGER: When a system log event [system_log_event] with level WARNING occurs. CONDITIONS: (alarm enabled [input_boolean.alarm_enabled] is on) AND (the event name contains 'custom_components.alarmo.alarm_control_panel') AND (the event message contains 'Wrong code provided'). ACTIONS: Increment alarm code error count [counter.alarm_code_error_count]. IF alarm code error count [counter.alarm_code_error_count] is above 5, THEN send a notification to jason medication notification [notify.jason] with title 'Alarm Code Error' and message 'Alarm code errors exceeded', including specific notification data and action buttons.",
"natural_language": {
"trigger": "Whenever a system log event [system_log_event] with a WARNING level is generated.",
"conditions": "The alarm enabled [input_boolean.alarm_enabled] must be turned on. The log event must originate from the 'custom_components.alarmo.alarm_control_panel' component, and its message must contain the text 'Wrong code provided'.",
"action": "First, it increments the alarm code error count [counter.alarm_code_error_count]. Then, if the count exceeds 5, it sends an urgent notification to jason medication notification [notify.jason] with the title 'Alarm Code Error' and a message stating the errors have exceeded the threshold. The notification includes options to reset the counter or view camera feeds."
},
"human_like": "Tracks incorrect alarm code entries and sends an urgent notification if too many errors occur while the alarm is enabled.",
"complexity": "medium"
}
},
{
"id": "alarm_code_error_reset",
"result": {
"structured": "TRIGGER: When the time reaches the value set in day reset [input_datetime.day_reset] OR when a mobile app notification action with the action 'alarm_code_error_reset' is received. CONDITIONS: alarm code error count [counter.alarm_code_error_count] is greater than 0. ACTIONS: Reset alarm code error count [counter.alarm_code_error_count] AND send a browser notification with the message 'Alarm error code counter has been reset.' for 10 seconds.",
"natural_language": {
"trigger": "The automation runs either at a specific time of day defined by the day reset [input_datetime.day_reset] entity, or when a specific action ('alarm_code_error_reset') is pressed in a mobile app notification.",
"conditions": "The automation only proceeds if the alarm code error count [counter.alarm_code_error_count] is greater than zero.",
"action": "Resets the alarm code error count [counter.alarm_code_error_count] to zero and sends a confirmation notification via browser mod that the counter has been reset, which will be displayed for 10 seconds."
},
"human_like": "Resets the alarm code error counter either at a scheduled daily time or manually via a notification button, and sends a confirmation message.",
"complexity": "low"
}
},
{
"id": "alarm_disabled",
"result": {
"structured": "TRIGGER: When alarm enabled [input_boolean.alarm_enabled] remains off for 5 seconds. CONDITIONS: None. ACTIONS: Turn off arm alarm script [script.arm_alarm] AND turn off alarm pending [input_boolean.alarm_pending] AND turn off alarm triggered [input_boolean.alarm_triggered] AND set value of current alarm [input_text.current_alarm] to an empty string AND run disarm alarm script [script.disarm_alarm].",
"natural_language": {
"trigger": "When the alarm enabled [input_boolean.alarm_enabled] switch remains in the 'off' position for 5 seconds.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "The automation stops the arm alarm script [script.arm_alarm], turns off the alarm pending [input_boolean.alarm_pending] and alarm triggered [input_boolean.alarm_triggered] indicators, clears the current alarm [input_text.current_alarm] text field, and runs the disarm alarm script [script.disarm_alarm]."
},
"human_like": "Fully disables the house alarm system when the main alarm switch is turned off for a few seconds.",
"complexity": "low"
}
},
{
"id": "alarm_disarmed",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to disarmed. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND (alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is off AND alarm bypassed sensor alert [binary_sensor.alarm_bypassed_sensor_alert] is off). ACTIONS: Set occupancy mode [input_select.occupancy_mode] to the result of the Jinja2 template '{{ occupancy_mode() }}'.",
"natural_language": {
"trigger": "When the house alarm [alarm_control_panel.house] is disarmed.",
"conditions": "The alarm enabled [input_boolean.alarm_enabled] switch must be on, and neither the alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] nor the alarm bypassed sensor alert [binary_sensor.alarm_bypassed_sensor_alert] should be active (both must be off).",
"action": "Updates the occupancy mode [input_select.occupancy_mode] selection by running a custom Jinja2 template function that determines the appropriate mode."
},
"human_like": "When the house alarm is disarmed normally, it updates the home's occupancy mode based on a custom calculation.",
"complexity": "medium"
}
},
{
"id": "alarm_mode_reset",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off and remains off for 30 seconds OR When alarm enabled [input_boolean.alarm_enabled] OR alarm auto arming [input_boolean.alarm_auto_arming] turns on. CONDITIONS: (alarm pending [input_boolean.alarm_pending] AND alarm triggered [input_boolean.alarm_triggered] are both off) AND (alarm enabled [input_boolean.alarm_enabled] AND alarm auto arming [input_boolean.alarm_auto_arming] are both on) AND ((house alarm [alarm_control_panel.house] is NOT armed_away AND NOT armed_vacation) AND (someone home [binary_sensor.someone_home] is off OR occupancy mode [input_select.occupancy_mode] is Away OR Vacation)) OR (someone home [binary_sensor.someone_home] is on AND house alarm [alarm_control_panel.house] is armed_away OR armed_vacation) OR (occupancy mode [input_select.occupancy_mode] is Night AND someone home [binary_sensor.someone_home] is on AND house alarm [alarm_control_panel.house] is NOT armed_night)). ACTIONS: Wait until house alarm [alarm_control_panel.house] is not in the 'arming' state. Then, choose an action based on conditions: If someone home [binary_sensor.someone_home] is off AND occupancy mode [input_select.occupancy_mode] is Vacation AND house alarm [alarm_control_panel.house] is NOT armed_vacation, then run script arm alarm script [script.arm_alarm] in vacation mode with force and skip_delay. Else if (someone home [binary_sensor.someone_home] is off OR occupancy mode [input_select.occupancy_mode] is Away) AND house alarm [alarm_control_panel.house] is NOT armed_away, then run script arm alarm script [script.arm_alarm] in away mode with force and skip_delay. Else if someone home [binary_sensor.someone_home] is on AND occupancy mode [input_select.occupancy_mode] is Night AND house alarm [alarm_control_panel.house] is NOT armed_night, then run script arm alarm script [script.arm_alarm] in night mode with force and skip_delay. Else if someone home [binary_sensor.someone_home] is on AND occupancy mode [input_select.occupancy_mode] is Home AND house alarm [alarm_control_panel.house] is NOT armed_home AND NOT disarmed, then run script arm alarm script [script.arm_alarm] in home mode with force and skip_delay.",
"natural_language": {
"trigger": "The automation triggers either when the startup pending [input_boolean.startup_pending] indicator turns off and stays off for 30 seconds, or when either the alarm enabled [input_boolean.alarm_enabled] or alarm auto arming [input_boolean.alarm_auto_arming] switches are turned on.",
"conditions": "Several conditions must be met: First, the alarm pending [input_boolean.alarm_pending] and alarm triggered [input_boolean.alarm_triggered] must both be off. Second, the alarm enabled [input_boolean.alarm_enabled] and alarm auto arming [input_boolean.alarm_auto_arming] must both be on. Third, one of the following scenarios must be true: The house alarm [alarm_control_panel.house] is not armed for away or vacation, and either nobody is home or the occupancy mode is set to Away or Vacation. Or, someone is home but the alarm is incorrectly armed for away or vacation. Or, the occupancy mode is Night, someone is home, but the alarm is not armed for night.",
"action": "The automation first waits for the house alarm [alarm_control_panel.house] to finish any ongoing arming process. It then evaluates the current state to determine the correct alarm mode. If nobody is home and the occupancy mode is Vacation, it arms the alarm in vacation mode. If nobody is home or the mode is Away, it arms the alarm in away mode. If someone is home and the mode is Night, it arms the alarm in night mode. If someone is home and the mode is Home, it arms the alarm in home mode. In all cases, the arming is forced and any entry delay is skipped."
},
"human_like": "This automation ensures the house alarm is armed to match the current occupancy mode, automatically correcting it if it's out of sync, such as when the system starts up or when arming settings are changed.",
"complexity": "high"
}
},
{
"id": "alarm_open_sensor",
"result": {
"structured": "TRIGGER: When alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] changes state (from on to off OR from off to on) AND remains in the new state for 5 seconds. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND alarm triggered [input_boolean.alarm_triggered] is off. ACTIONS: IF alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is on THEN: REPEAT up to 3 times: IF house alarm [alarm_control_panel.house] is disarmed THEN: IF alarm announcements [input_boolean.alarm_announcements] is on THEN: Run tts play script [script.tts_play] with a message listing open sensors. IF alarm notifications [input_boolean.alarm_notifications] is on THEN: Send a persistent notification to jason medication notification [notify.jason] listing open sensors. WAIT until alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is off (timeout 60 seconds). STOP repeating when alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is off OR after 3 repetitions. IF house alarm [alarm_control_panel.house] is disarmed THEN: Run arm alarm script [script.arm_alarm] with the current arm mode [input_select.current_arm_mode] and force enabled. ELSE (alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] is off): Send a clear_notification message to jason medication notification [notify.jason] to clear the open_sensor tag.",
"natural_language": {
"trigger": "When the alarm open sensor alert [binary_sensor.alarm_open_sensor_alert] changes its state, either turning on or off, and stays in that new state for at least five seconds.",
"conditions": "The alarm enabled [input_boolean.alarm_enabled] must be turned on, and the alarm triggered [input_boolean.alarm_triggered] must be off.",
"action": "If the alarm open sensor alert is on, it will attempt to handle the open sensors. It will repeat a sequence up to three times: if the house alarm is disarmed, it will announce the open sensors via text-to-speech if announcements are enabled, and send a persistent mobile notification with actions to arm the alarm if notifications are enabled. It will then wait up to 60 seconds for the open sensor alert to clear. If the alert clears or after three attempts, the loop stops. If, after the loop, the house alarm is still disarmed, it will force-arm the alarm to the last selected mode. If the alarm open sensor alert is off, it simply clears any existing open sensor notifications."
},
"human_like": "Handles open sensors when trying to arm the alarm, providing voice announcements and mobile notifications, and will automatically attempt to re-arm the system once sensors are closed.",
"complexity": "high"
}
},
{
"id": "alarm_pending",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to state pending OR When house alarm [alarm_control_panel.house] changes from state pending. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF house alarm [alarm_control_panel.house] is pending THEN turn on alarm pending [input_boolean.alarm_pending] AND IF the alarm's delay attribute is greater than 0 seconds THEN start alarm pending timer [timer.alarm_pending] for that delay duration. OTHERWISE (when house alarm [alarm_control_panel.house] is not pending) cancel alarm pending timer [timer.alarm_pending] AND wait up to 5 seconds for alarm triggered [input_boolean.alarm_triggered] to be on AND IF alarm triggered [input_boolean.alarm_triggered] is on THEN wait for alarm triggered [input_boolean.alarm_triggered] to be off AND THEN turn off alarm pending [input_boolean.alarm_pending].",
"natural_language": {
"trigger": "The automation triggers when the house alarm [alarm_control_panel.house] either enters or exits the 'pending' state.",
"conditions": "The automation only runs if the alarm enabled [input_boolean.alarm_enabled] switch is turned on.",
"action": "If the alarm is entering the pending state, the automation turns on the alarm pending [input_boolean.alarm_pending] indicator. If the alarm panel has a delay attribute set to a positive number of seconds, it also starts the alarm pending timer [timer.alarm_pending] for that duration. If the alarm is leaving the pending state, it first cancels any running alarm pending timer [timer.alarm_pending]. It then waits for up to 5 seconds for the alarm triggered [input_boolean.alarm_triggered] indicator to turn on. If that happens, it waits for the alarm triggered [input_boolean.alarm_triggered] indicator to turn off again. Finally, it turns off the alarm pending [input_boolean.alarm_pending] indicator."
},
"human_like": "Manages the 'alarm pending' status light and timer when the house alarm is arming or disarming, ensuring the system waits for any triggered alarm to clear before resetting.",
"complexity": "high"
}
},
{
"id": "alarm_pending_lights",
"result": {
"structured": "TRIGGER: When alarm pending [input_boolean.alarm_pending] turns on OR When alarm pending [input_boolean.alarm_pending] turns off AND remains off for 5 seconds. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF alarm pending [input_boolean.alarm_pending] is on THEN create a snapshot scene named 'alarm_pending_lights_restore' capturing the states of side entrance light [light.side_entrance_light], kitchen potlights [light.kitchen_potlights], dining room potlights [light.dining_room_potlights], and hallway potlights [light.hallway_potlights] AND run script light scene on script [script.light_scene_on] with scene 'alarm_pending'. OTHERWISE (if alarm pending [input_boolean.alarm_pending] is off) run script light scene on script [script.light_scene_on] with scene 'alarm_pending_lights_restore'.",
"natural_language": {
"trigger": "When the alarm pending [input_boolean.alarm_pending] switch is turned on, or when it is turned off and remains off for five seconds.",
"conditions": "The automation only runs if the alarm enabled [input_boolean.alarm_enabled] switch is on.",
"action": "If the alarm pending [input_boolean.alarm_pending] is on, it first saves the current light states of the side entrance light [light.side_entrance_light], kitchen potlights [light.kitchen_potlights], dining room potlights [light.dining_room_potlights], and hallway potlights [light.hallway_potlights] into a restore scene. It then activates a specific 'alarm_pending' lighting scene. If the alarm pending [input_boolean.alarm_pending] is off, it restores the lights to their previously saved state by activating the 'alarm_pending_lights_restore' scene."
},
"human_like": "Activates a special lighting scene when the alarm is set to pending, and restores the original lights when the pending state ends.",
"complexity": "medium"
}
},
{
"id": "alarm_triggered",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to triggered. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: Turn on alarm triggered [input_boolean.alarm_triggered].",
"natural_language": {
"trigger": "When the house alarm [alarm_control_panel.house] is triggered.",
"conditions": "If the alarm enabled [input_boolean.alarm_enabled] switch is turned on.",
"action": "Sets the alarm triggered [input_boolean.alarm_triggered] status to on."
},
"human_like": "Sets an alarm triggered flag when the house alarm goes off, but only if the alarm system is enabled.",
"complexity": "low"
}
},
{
"id": "alarm_triggered_reset",
"result": {
"structured": "TRIGGER: When someone home [binary_sensor.someone_home] changes from off to on. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is on. ACTIONS: Wait for up to 5 minutes until both house alarm [alarm_control_panel.house] is disarmed AND alarm triggered [input_boolean.alarm_triggered] is off. If the condition is met before the timeout, then turn off alarm triggered [input_boolean.alarm_triggered].",
"natural_language": {
"trigger": "When the system detects that someone has arrived home, indicated by the someone home [binary_sensor.someone_home] sensor changing from off to on.",
"conditions": "The alarm triggered [input_boolean.alarm_triggered] status must be on, meaning the alarm is in a triggered state.",
"action": "The automation will wait for a maximum of five minutes for two conditions to be true simultaneously: the house alarm [alarm_control_panel.house] must be disarmed, and the alarm triggered [input_boolean.alarm_triggered] status must be off. Once both conditions are met, it will turn off the alarm triggered [input_boolean.alarm_triggered] input boolean."
},
"human_like": "Resets the alarm triggered status when someone comes home, after ensuring the house alarm is disarmed.",
"complexity": "medium"
}
},
{
"id": "alarm_triggered_camera_monitors",
"result": {
"structured": "TRIGGER: When alarm triggered [input_boolean.alarm_triggered] changes to on OR off AND remains stable for 1 minute. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF alarm triggered [input_boolean.alarm_triggered] is on: REPEAT WHILE alarm triggered [input_boolean.alarm_triggered] is on: (PARALLEL SEQUENCES: (SEQUENCE 1: IF danger alarm [binary_sensor.danger_alarm] is on: IF living room tv [media_player.living_room_tv] is off: Turn on living room tv [media_player.living_room_tv] AND wait up to 30 seconds for living room tv [media_player.living_room_tv] to not be off. ELSE: IF living room tv [media_player.living_room_tv] is off: Turn on living room tv [media_player.living_room_tv]. Wait up to 30 seconds for living room tv [media_player.living_room_tv] volume mute attribute to be defined. IF living room tv [media_player.living_room_tv] is not muted: Mute living room tv [media_player.living_room_tv]. IF danger alarm [binary_sensor.danger_alarm] is on: Wait up to 30 seconds for HDMI 2 to be in living room tv [media_player.living_room_tv] source list. IF wait completed AND living room tv [media_player.living_room_tv] source is not HDMI 2: Select HDMI 2 source on living room tv [media_player.living_room_tv]. IF living room chromecast [media_player.living_room_chromecast] media title is not 'Cast: Danger': Show 'danger' Lovelace view on living room chromecast [media_player.living_room_chromecast]. ELSE: Wait up to 30 seconds for HDMI 1 to be in living room tv [media_player.living_room_tv] source list. IF wait completed AND living room tv [media_player.living_room_tv] source is not HDMI 1: Delay 5 seconds AND select HDMI 1 source on living room tv [media_player.living_room_tv].) AND (SEQUENCE 2: IF danger alarm [binary_sensor.danger_alarm] is off AND bedroom tv [media_player.bedroom_tv] source list does not contain HDMI 1: IF bedroom tv [media_player.bedroom_tv] is off: Turn on bedroom tv [media_player.bedroom_tv]. Wait up to 30 seconds for bedroom tv [media_player.bedroom_tv] volume mute attribute to be defined. IF bedroom tv [media_player.bedroom_tv] is not muted: Mute bedroom tv [media_player.bedroom_tv]. Wait up to 30 seconds for HDMI 1 to be in bedroom tv [media_player.bedroom_tv] source list. IF wait completed AND bedroom tv [media_player.bedroom_tv] source is not HDMI 1: Delay 5 seconds AND select HDMI 1 source on bedroom tv [media_player.bedroom_tv].) AND (SEQUENCE 3: IF danger alarm [binary_sensor.danger_alarm] is off: IF office tv [media_player.office_tv] is off OR standby: Turn on office tv [media_player.office_tv]. Delay 5 seconds. Mute office tv [media_player.office_tv]. Wait up to 30 seconds for Camera to be in office tv [media_player.office_tv] source list. IF wait completed AND office tv [media_player.office_tv] source is not Camera: Delay 1 second AND select Camera source on office tv [media_player.office_tv].) AND (SEQUENCE 4: PARALLEL SEQUENCES: (IF danger alarm [binary_sensor.danger_alarm] is on AND kiosk browser path [sensor.kiosk_browser_path] is not '/ui-cast/danger': Navigate kiosk browser to '/ui-cast/danger'.) AND (IF danger alarm [binary_sensor.danger_alarm] is on AND dining room hub [media_player.dining_room_hub] media title is not 'ui-cast: Danger': Show 'danger' Lovelace view on dining room hub [media_player.dining_room_hub].) AND (IF danger alarm [binary_sensor.danger_alarm] is on AND kitchen hub [media_player.kitchen_hub] media title is not 'ui-cast: Danger': Show 'danger' Lovelace view on kitchen hub [media_player.kitchen_hub].) AND (IF danger alarm [binary_sensor.danger_alarm] is on AND bedroom hub [media_player.bedroom_hub] media title is not 'ui-cast: Danger': Show 'danger' Lovelace view on bedroom hub [media_player.bedroom_hub].))). Wait up to 60 seconds for alarm triggered [input_boolean.alarm_triggered] to be off. ELSE (alarm triggered [input_boolean.alarm_triggered] is off): PARALLEL SEQUENCES: (IF kiosk browser path [sensor.kiosk_browser_path] is '/ui-cast/danger': Press kiosk tablet load start url button [button.kiosk_tablet_load_start_url].) AND (IF living room chromecast [media_player.living_room_chromecast] media title is 'ui-cast: Danger': Select Live TV source on living room tv [media_player.living_room_tv] AND unmute living room tv [media_player.living_room_tv] AND turn off living room chromecast [media_player.living_room_chromecast] AND living room tv [media_player.living_room_tv].) AND (IF living room tv [media_player.living_room_tv] source is HDMI 1: Select Live TV source on living room tv [media_player.living_room_tv] AND unmute living room tv [media_player.living_room_tv] AND turn off living room tv [media_player.living_room_tv].) AND (IF bedroom tv [media_player.bedroom_tv] source is HDMI 1: Select Live TV source on bedroom tv [media_player.bedroom_tv] AND unmute bedroom tv [media_player.bedroom_tv] AND turn off bedroom tv [media_player.bedroom_tv].) AND (IF office tv [media_player.office_tv] source is Camera: Unmute office tv [media_player.office_tv] AND turn off office tv [media_player.office_tv].) AND (IF dining room hub [media_player.dining_room_hub] media title is 'ui-cast: Danger': Turn off dining room hub [media_player.dining_room_hub].) AND (IF kitchen hub [media_player.kitchen_hub] media title is 'ui-cast: Danger': Turn off kitchen hub [media_player.kitchen_hub].) AND (IF bedroom hub [media_player.bedroom_hub] media title is 'ui-cast: Danger': Turn off bedroom hub [media_player.bedroom_hub].).",
"natural_language": {
"trigger": "The automation triggers when the alarm triggered [input_boolean.alarm_triggered] input boolean changes to either on or off and remains in that new state for one minute.",
"conditions": "The automation only runs if the alarm enabled [input_boolean.alarm_enabled] input boolean is currently set to on.",
"action": "If the alarm is triggered (the input boolean is on), the automation enters a loop that runs as long as the alarm remains triggered. Within this loop, it performs several sequences in parallel. It prepares the living room TV and Chromecast for displaying a camera feed or a danger alert view, depending on whether a danger alarm is active. It also sets up the bedroom TV and office TV to show camera feeds if there is no danger alarm. Additionally, if a danger alarm is active, it navigates a kiosk browser and several smart displays (hubs) to show a specific danger alert view. After these parallel actions, it waits for up to 60 seconds for the alarm to be turned off. If the alarm is not triggered (the input boolean is off), the automation performs a cleanup sequence in parallel. It resets the kiosk browser, switches the TVs back to their default sources (like Live TV), unmutes them, and turns them off. It also turns off the smart displays that were showing the danger alert."
},
"human_like": "When the alarm is triggered, this automation automatically turns on and configures multiple TVs and smart displays to show security camera feeds or danger alerts. When the alarm is cleared, it resets all the devices back to their normal state.",
"complexity": "high"
}
},
{
"id": "alarm_triggered_lights",
"result": {
"structured": "TRIGGER: When alarm triggered [input_boolean.alarm_triggered] changes state to on OR off. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF alarm triggered [input_boolean.alarm_triggered] is on THEN create a snapshot scene named 'alarm_triggered_lights_restore' from the entities in lights group [group.lights], turn off adaptive lighting [switch.adaptive_lighting], and execute turn light on script [script.turn_light_on] with profile 'default_max'. OTHERWISE (alarm triggered [input_boolean.alarm_triggered] is off) THEN execute light scene on script [script.light_scene_on] to restore the 'alarm_triggered_lights_restore' scene, wait 5 seconds, turn on adaptive lighting [switch.adaptive_lighting], AND IF occupancy mode [input_select.occupancy_mode] is Night AND nighttime illuminance [binary_sensor.nighttime_illuminance] is on THEN execute light scene on script [script.light_scene_on] to activate the 'night_lights' scene.",
"natural_language": {
"trigger": "When the alarm triggered [input_boolean.alarm_triggered] input boolean changes its state, either turning on or off.",
"conditions": "The alarm enabled [input_boolean.alarm_enabled] input boolean must be in the on state.",
"action": "If the alarm is triggered, the automation first saves the current state of all lights in the house as a scene named 'alarm_triggered_lights_restore'. It then turns off the adaptive lighting [switch.adaptive_lighting] and runs a script to turn on the lights with a maximum brightness profile. If the alarm is no longer triggered, the automation restores the previously saved light scene, waits for five seconds, and turns the adaptive lighting back on. Additionally, if the occupancy mode [input_select.occupancy_mode] is set to 'Night' and the nighttime illuminance [binary_sensor.nighttime_illuminance] sensor indicates it is dark, it will also activate a 'night_lights' scene."
},
"human_like": "When the alarm is triggered, it turns all lights to maximum brightness and saves their previous state. When the alarm is cleared, it restores the lights to their previous state and reactivates adaptive lighting, with an extra step for night-time lighting if needed.",
"complexity": "medium"
}
},
{
"id": "alarm_triggered_notification",
"result": {
"structured": "TRIGGER: When alarm triggered [input_boolean.alarm_triggered] OR alarm pending [input_boolean.alarm_pending] turns on and remains on for 5 seconds. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND alarm notifications [input_boolean.alarm_notifications] is on AND danger alarm [binary_sensor.danger_alarm] is off. ACTIONS: If alarm triggered [input_boolean.alarm_triggered] is on, create a persistent notification with alarm details and run notify tv script [script.notify_tv]. If alarm pending [input_boolean.alarm_pending] is on, run notify tv script [script.notify_tv]. Then, based on the first open sensor from house alarm [alarm_control_panel.house], assign up to four camera identifiers (cam1, cam2, cam3, cam4) by checking sensor group membership. If alarm triggered [input_boolean.alarm_triggered] is on, repeat up to 4 times or until house alarm [alarm_control_panel.house] is no longer triggered: take snapshots from the assigned cameras, create a persistent notification with the images, send a mobile notification via notify.jason, and if alarm emails [input_boolean.alarm_emails] is on and it's the first iteration, send an email with images and details. Wait for house alarm [alarm_control_panel.house] to no longer be triggered, with a 60-second timeout per loop. If alarm pending [input_boolean.alarm_pending] is on, take a snapshot from the first assigned camera and send a mobile notification via notify.jason.",
"natural_language": {
"trigger": "When either the alarm triggered [input_boolean.alarm_triggered] or the alarm pending [input_boolean.alarm_pending] input boolean turns on and stays on for five seconds.",
"conditions": "The alarm must be enabled, as indicated by alarm enabled [input_boolean.alarm_enabled] being on. Alarm notifications must also be enabled, as indicated by alarm notifications [input_boolean.alarm_notifications] being on. Additionally, the danger alarm [binary_sensor.danger_alarm] must be off.",
"action": "First, it sends different notifications based on which trigger was activated. If the alarm is triggered, it creates a persistent notification and sends a message to the TV. If the alarm is only pending, it just sends a message to the TV. Next, it determines which area of the house triggered the alarm by checking the first open sensor from the house alarm panel. Based on that sensor's location group, it selects up to four specific cameras to monitor. If the alarm is in a triggered state, it enters a loop (up to 4 times) to repeatedly take snapshots from those cameras, create notifications with the images, and send detailed mobile alerts. If email notifications are enabled, it also sends an HTML email with the snapshots on the first loop iteration. The loop continues until the alarm is no longer triggered or it completes four cycles, waiting for the alarm state to clear each time. If the alarm is only in a pending state, it takes a single snapshot from the primary camera and sends a mobile notification with a countdown timer."
},
"human_like": "Sends detailed notifications and captures camera snapshots when the house alarm is triggered or about to trigger, keeping the user informed with visual evidence.",
"complexity": "high"
}
},
{
"id": "alarm_triggered_siren",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to triggered OR When house alarm [alarm_control_panel.house] changes from triggered. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND danger alarm [binary_sensor.danger_alarm] is off. ACTIONS: IF house alarm [alarm_control_panel.house] is triggered THEN turn on charlie cam camera power [switch.charlie_cam_camera_power] AND turn on living room camera power [switch.living_room_camera_power]. THEN IN PARALLEL: Wait for charlie cam camera power [switch.charlie_cam_camera_power] to be on (timeout 60 seconds) AND then turn on charlie cam camera alarm [siren.charlie_cam_camera_alarm]. AND Wait for living room camera power [switch.living_room_camera_power] to be on (timeout 60 seconds) AND then turn on living room camera alarm [siren.living_room_camera_alarm]. ELSE (if house alarm [alarm_control_panel.house] is not triggered) turn off charlie cam camera alarm [siren.charlie_cam_camera_alarm] AND turn off living room camera alarm [siren.living_room_camera_alarm].",
"natural_language": {
"trigger": "When the house alarm [alarm_control_panel.house] becomes triggered, or when it changes from being triggered to another state.",
"conditions": "The alarm must be enabled, as indicated by alarm enabled [input_boolean.alarm_enabled] being on, and there must be no immediate danger alarm condition, meaning danger alarm [binary_sensor.danger_alarm] is off.",
"action": "If the house alarm is triggered, the automation first turns on the power for both the charlie cam camera power [switch.charlie_cam_camera_power] and the living room camera power [switch.living_room_camera_power]. It then waits in parallel for each camera's power to be confirmed as on, with a 60-second timeout. Once a camera's power is on, its corresponding siren (charlie cam camera alarm [siren.charlie_cam_camera_alarm] or living room camera alarm [siren.living_room_camera_alarm]) is turned on. If the house alarm is not in the triggered state, the automation turns off both sirens."
},
"human_like": "Activates camera sirens when the house alarm is triggered, ensuring the cameras are powered on first, and turns the sirens off when the alarm is no longer triggered.",
"complexity": "medium"
}
},
{
"id": "alert_announcements",
"result": {
"structured": "TRIGGER: When any of the following alert entities turns on: alert.climate_window_door_open, alert.door_lock_failed, alert.door_lock_jammed, alert.door_lock_keypad_disabled, alert.indoor_sump, alert.leak_detected, alert.open_windows, alert.outdoor_sump, alert.power_use. OR When any of the following alert entities turns on and remains on for 5 minutes: alert.air_quality, alert.allergy_risk, alert.asthma_risk, alert.flu_risk, alert.garage_extended_heat, alert.garage_heat_door_open, alert.garage_high_temperature, alert.garage_low_temperature, alert.garage_temperature_throttle, alert.indoor_camera, alert.outdoor_low_temperature, alert.outdoor_high_temperature, alert.presence_override_jason, alert.spa_low_temperature, alert.spa_offline, alert.precipitation, alert.unavailable_leak_sensor, alert.unknown_browsers, alert.uv_risk, alert.wind. OR When any of the following alert entities turns on and remains on for 15 minutes: alert.bathroom_mold_risk, alert.indoor_high_humidity, alert.indoor_high_temperature, alert.indoor_low_temperature. CONDITIONS: None. ACTIONS: If the triggering alert entity has the attribute 'tts_repeat' set to true AND the attribute 'tts_timeout' is greater than 0, then repeatedly run the tts play script [script.tts_play] with a dynamically generated message (based on the triggering entity) and wait until the alert is no longer on (with a timeout defined by 'tts_timeout' minutes). Otherwise, run the tts play script [script.tts_play] once with the dynamically generated message.",
"natural_language": {
"trigger": "This automation is triggered by a wide variety of alert entities turning on. The alerts are grouped into three categories with different timing requirements. The first group triggers immediately when the alert turns on. The second group requires the alert to remain on for five minutes before triggering. The third group requires the alert to remain on for fifteen minutes before triggering.",
"conditions": "There are no conditions that must be met for the action to run; the automation proceeds directly after a trigger is satisfied.",
"action": "When triggered, the automation generates a specific spoken message based on which alert entity caused the trigger. It then uses the tts play script [script.tts_play] to announce this message. For certain alerts that are configured to repeat, it will keep announcing the message at intervals until the alert turns off, up to a specified timeout period. For other alerts, it will only announce the message once."
},
"human_like": "This automation announces various household alerts using text-to-speech, with different urgency levels based on the type of alert. Some alerts are announced immediately, while others require the alert to be active for a few minutes first.",
"complexity": "high"
}
},
{
"id": "alert_persistent_notification",
"result": {
"structured": "TRIGGER: When Calendar Empty Alert [alert.calendar_empty] changes from idle to on. CONDITIONS: None. ACTIONS: Create a persistent notification with a title derived from the alert's object_id (with underscores replaced by spaces and title-cased) and a message that, if the alert is calendar_empty, lists each calendar entity from the attribute 'entity_id' of calendar empty alert [binary_sensor.calendar_empty_alert] with the text 'The [item] calendar is empty or not connected.', each on a new line.",
"natural_language": {
"trigger": "When the Calendar Empty Alert [alert.calendar_empty] becomes active (changes from idle to on).",
"conditions": "There are no conditions; the automation runs whenever the trigger fires.",
"action": "Creates a persistent notification. The notification's title is generated from the alert's internal ID, formatted for readability. The message is dynamically built: if the alert is for empty calendars, it retrieves a list of calendar entities from the calendar empty alert [binary_sensor.calendar_empty_alert] and generates a line for each one stating that the specific calendar is empty or not connected."
},
"human_like": "Creates a persistent notification when a calendar empty alert is triggered, showing which calendars are empty or disconnected.",
"complexity": "medium"
}
},
{
"id": "pause_alert_notifications",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs. CONDITIONS: The event's action data contains the substring 'pause_alert_'. ACTIONS: Extract the alert name from the event action by removing the 'pause_alert_' prefix. If the extracted alert name is NOT in the list ['door_lock_jammed', 'door_lock_keypad_disabled', 'door_lock_intrusion', 'door_lock_failed'], then turn off Alert Notification Cleared Automation [automation.alert_notification_cleared] (without stopping running actions). Then, turn off the specific alert entity alert.[extracted_name] (continue on error). Finally, if the extracted alert name is NOT in the list ['door_lock_jammed', 'door_lock_keypad_disabled', 'door_lock_intrusion', 'door_lock_failed'], then turn on Alert Notification Cleared Automation [automation.alert_notification_cleared].",
"natural_language": {
"trigger": "When a user interacts with a notification on their mobile device, triggering a specific action event.",
"conditions": "The action taken by the user on the notification must be one that starts with the text 'pause_alert_'.",
"action": "The automation extracts the specific alert name from the user's action. If the alert is not related to certain door lock issues, it first disables the Alert Notification Cleared Automation [automation.alert_notification_cleared]. It then attempts to turn off the specific alert that was paused. Finally, if the alert was not a door lock issue, it re-enables the Alert Notification Cleared Automation [automation.alert_notification_cleared]."
},
"human_like": "Pauses a specific alert notification from the mobile app and manages a related automation based on the type of alert.",
"complexity": "medium"
}
},
{
"id": "resume_alert_notifications",
"result": {
"structured": "TRIGGER: When the list of entities in the offline integrations group [group.offline_integrations] attribute 'entity_id' becomes empty (null) AND remains so for 60 seconds. CONDITIONS: The alert entity corresponding to the ID of the trigger (alert.{{ trigger.id }}) is in the 'off' state. ACTIONS: Turn on the alert entity corresponding to the ID of the trigger (alert.{{ trigger.id }}).",
"natural_language": {
"trigger": "When the offline integrations group [group.offline_integrations] no longer contains any entities in its list, and this state persists for 60 seconds.",
"conditions": "If the specific alert associated with the integration that just came back online is currently turned off.",
"action": "Resumes notifications for that integration by turning the corresponding alert entity back on."
},
"human_like": "Automatically re-enables alert notifications for an integration once it comes back online and remains stable.",
"complexity": "medium"
}
},
{
"id": "alert_notification_cleared",
"result": {
"structured": "TRIGGER: When a mobile_app_notification_cleared event occurs. CONDITIONS: The variable 'device' (derived from the event's device_id) is not none AND the event data contains a 'tag' key. ACTIONS: Turn off Alert Notification Cleared Automation [automation.alert_notification_cleared] (stop_actions: false), then send a clear_notification message with the event's tag to the notify service for the identified device (continue_on_error: true), then turn on Alert Notification Cleared Automation [automation.alert_notification_cleared].",
"natural_language": {
"trigger": "When a notification is cleared on a mobile device, triggering a mobile_app_notification_cleared event.",
"conditions": "The automation checks that the device which cleared the notification is either jason tablet [mobile_app_jtablet] or jason phone [mobile_app_jphone], and that the cleared notification had a specific tag.",
"action": "First, it temporarily disables itself (Alert Notification Cleared Automation [automation.alert_notification_cleared]) to prevent re-triggering. Then, it sends a command to clear the same notification (using its tag) on the other mobile device (either jason tablet [mobile_app_jtablet] or jason phone [mobile_app_jphone]), ignoring any errors. Finally, it re-enables itself."
},
"human_like": "Clears a notification on one mobile device when the same notification is cleared on the other, keeping alerts in sync between the phone and tablet.",
"complexity": "medium"
}
},
{
"id": "clear_alert_notification",
"result": {
"structured": "TRIGGER: When any of the listed alert entities (e.g., alarm clock presence alert [alert.alarm_clock_presence], alarm disabled alert [alert.alarm_disabled], offline cameras alert [alert.offline_cameras], ...) changes to state 'off' OR when calendar empty alert [alert.calendar_empty] changes to state 'off' OR 'idle'. CONDITIONS: None. ACTIONS: Turn off Alert Notification Cleared Automation [automation.alert_notification_cleared]; Send a clear_notification message to jason [notify.jason] with a tag derived from the triggering alert's object_id; IF the trigger was from calendar empty alert [alert.calendar_empty] (trigger id 'persistent'), THEN dismiss a persistent notification with the same tag; Turn on Alert Notification Cleared Automation [automation.alert_notification_cleared].",
"natural_language": {
"trigger": "This automation is triggered when any of a long list of alert entities (covering system health, phone status, environmental conditions, security, and more) changes its state to 'off'. A separate trigger also fires specifically when the calendar empty alert [alert.calendar_empty] changes to either 'off' or 'idle'.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "When triggered, the automation first turns off another automation called Alert Notification Cleared Automation [automation.alert_notification_cleared]. It then sends a command to the notification service for jason [notify.jason] to clear any notification tagged with the name of the alert that triggered this automation. If the trigger came specifically from the calendar empty alert, it also attempts to dismiss a persistent notification with the same tag. Finally, it turns the Alert Notification Cleared Automation back on."
},
"human_like": "Clears related notifications when any alert in the system is resolved or turned off.",
"complexity": "medium"
}
},
{
"id": "arm_alarm",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] remains disarmed for 1 minute OR When occupancy mode [input_select.occupancy_mode] remains Away OR Vacation for 1 minute OR When occupancy mode [input_select.occupancy_mode] remains Night for 1 minute OR When back door lock status [sensor.back_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR side door lock status [sensor.side_door_lock_status] changes to Locked (Keypad) (not from unknown or unavailable) OR When back door lock status [sensor.back_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR side door lock status [sensor.side_door_lock_status] OR garage side door lock status [sensor.garage_side_door_lock_status] changes to Locked (Jason) OR Locked (Guest) (not from unknown or unavailable) OR When back door lock status [sensor.back_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR side door lock status [sensor.side_door_lock_status] OR garage side door lock status [sensor.garage_side_door_lock_status] changes to Locked (Manual) (not from unknown or unavailable) OR When a mobile app notification action event with action 'arm_alarm_home' occurs OR When a mobile app notification action event with action 'arm_alarm_away' occurs OR When a mobile app notification action event with action 'arm_alarm_night' occurs. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on AND alarm auto arming [input_boolean.alarm_auto_arming] is on. ACTIONS: If the trigger is a mobile app notification action, then run arm alarm script [script.arm_alarm] with mode derived from the action name (home, away, or night), force true, and skip_delay true. If the trigger is house alarm disarmed, then if someone home [binary_sensor.someone_home] is off, wait up to 10 minutes for someone home [binary_sensor.someone_home] to become on; if after the wait it is still off, run arm alarm script [script.arm_alarm] with mode away and skip_delay true. If the trigger is house alarm disarmed AND occupancy mode [input_select.occupancy_mode] is Night AND someone home [binary_sensor.someone_home] has attribute just_arrived true, then delay 10 minutes, wait up to 5 minutes for a template condition from alarm.jinja (arm_alarm_check('night')) to be true, check occupancy mode [input_select.occupancy_mode] is still Night, then run arm alarm script [script.arm_alarm] with mode night. If the trigger is occupancy mode Night, then wait up to 5 minutes for a template condition from alarm.jinja (arm_alarm_check('night')) to be true; if after the wait someone home [binary_sensor.someone_home] is on AND occupancy mode [input_select.occupancy_mode] is Night, then run arm alarm script [script.arm_alarm] with mode night. If the trigger is occupancy mode Away or Vacation, then wait up to 5 minutes for a template condition from alarm.jinja (arm_alarm_check('away')) to be true; if after the wait occupancy mode [input_select.occupancy_mode] is Away, then run arm alarm script [script.arm_alarm] with mode away. If the trigger is a lock code lock (Locked (Jason) or Locked (Guest)), then delay 60 seconds, if the lock state is still the triggered state, wait up to 5 minutes for a template condition from alarm.jinja (arm_alarm_check('away')) to be true, then run arm alarm script [script.arm_alarm] with mode away. If the trigger is a manual lock (Locked (Manual)), then wait up to 5 minutes for a template condition from alarm.jinja (arm_alarm_check('away')) to be true; if after the wait someone home [binary_sensor.someone_home] is on, then run arm alarm script [script.arm_alarm] with mode night if occupancy mode [input_select.occupancy_mode] is Night, otherwise mode home.",
"natural_language": {
"trigger": "The automation can be triggered by several events: the house alarm [alarm_control_panel.house] staying disarmed for one minute; the occupancy mode [input_select.occupancy_mode] being set to 'Away', 'Vacation', or 'Night' for one minute; any of the back, front, or side door locks being locked via a keypad; any of the back, front, side, or garage side door locks being locked with a specific user code (Jason or Guest); any of those same doors being locked manually; or receiving a specific mobile app notification action to arm the alarm in home, away, or night mode.",
"conditions": "For the automation to run, both the alarm enabled [input_boolean.alarm_enabled] and alarm auto arming [input_boolean.alarm_auto_arming] switches must be turned on.",
"action": "The action taken depends on which trigger activated the automation. If triggered by a mobile app action, it immediately arms the alarm in the specified mode. If triggered by the alarm being disarmed, it checks if anyone is home and, if not, arms the alarm in away mode after a wait. If triggered by the alarm being disarmed while in Night mode and someone has just arrived, it delays and then arms in night mode after checks. If triggered by the system entering Night mode, it waits for conditions to be met and then arms in night mode. If triggered by entering Away or Vacation mode, it waits and then arms in away mode. If triggered by a door being locked with a user code, it delays, waits, and then arms in away mode. If triggered by a manual lock, it waits and then arms in either night or home mode based on the current occupancy mode."
},
"human_like": "Automatically arms the house alarm based on various triggers like leaving the house, locking doors, or using a mobile app, but only when the alarm system is enabled and set to auto-arm.",
"complexity": "high"
}
},
{
"id": "arrive_home_lighting",
"result": {
"structured": "TRIGGER: When jason home [binary_sensor.jason_home] changes from off to on OR guest home [binary_sensor.guest_home] changes from off to on OR jason almost home [binary_sensor.jason_almost_home] remains on for 1 minute. CONDITIONS: daytime illuminance [binary_sensor.daytime_illuminance] is on OR nighttime illuminance [binary_sensor.nighttime_illuminance] is on. ACTIONS: 1. Execute turn light on script [script.turn_light_on] on side entrance light [light.side_entrance_light] with activate_timer and override. 2. If variable first_home is false (i.e., someone home [binary_sensor.someone_home] attribute home count is not less than 2), then create a snapshot scene arrive_home_lights_restore from kitchen potlights [light.kitchen_potlights], dining room potlights [light.dining_room_potlights], and hallway potlights [light.hallway_potlights]. 3. Execute light scene on script [script.light_scene_on] with scene arrive_home. 4. Wait until someone home [binary_sensor.someone_home] attribute just_arrived becomes false. 5. If first_home is true (i.e., someone home [binary_sensor.someone_home] attribute home count is less than 2), then if nighttime illuminance [binary_sensor.nighttime_illuminance] is off, execute turn light off script [script.turn_light_off] on kitchen potlights [light.kitchen_potlights], dining room potlights [light.dining_room_potlights], and hallway potlights [light.hallway_potlights] without reset. Else (if first_home is false), then if occupancy mode [input_select.occupancy_mode] is Home OR Guest, execute light scene on script [script.light_scene_on] with scene arrive_home_lights_restore.",
"natural_language": {
"trigger": "The automation triggers when either Jason or a guest arrives home, indicated by the jason home [binary_sensor.jason_home] or guest home [binary_sensor.guest_home] sensors turning on from an off state. It can also trigger when the jason almost home [binary_sensor.jason_almost_home] sensor remains on for one minute.",
"conditions": "The automation only runs if it is either daytime or nighttime, as determined by the daytime illuminance [binary_sensor.daytime_illuminance] or nighttime illuminance [binary_sensor.nighttime_illuminance] sensors being on.",
"action": "First, the side entrance light [light.side_entrance_light] is turned on using a script. Then, if this is not the first person to arrive home (meaning at least two people are marked as home), a snapshot scene is created to save the current state of the kitchen, dining room, and hallway lights. Next, a predefined 'arrive home' light scene is activated. The automation then waits for the 'just_arrived' status to clear. Finally, if this was the first person home and it's nighttime, the kitchen, dining, and hallway lights are turned off. If it was not the first person home and the occupancy mode is set to 'Home' or 'Guest', the previously saved light scene is restored."
},
"human_like": "This automation turns on welcoming lights when someone arrives home, adjusting interior lighting based on who is home, the time of day, and how many people are present.",
"complexity": "high"
}
},
{
"id": "arrive_home_notification",
"result": {
"structured": "TRIGGER: When jason almost home [binary_sensor.jason_almost_home] becomes on. CONDITIONS: occupancy notifications [input_boolean.occupancy_notifications] is on. ACTIONS: Send a notification to the person determined by the trigger (via template) with the message 'Arriving Home', including dynamic data for persistence, timeout, and actions. Then, wait for up to 10 minutes until the condition (the person's home sensor [binary_sensor.{{ person }}_home] is on AND house alarm [alarm_control_panel.house] is disarmed AND side door lock [lock.side_door_lock] is unlocked) becomes true. Finally, send a notification to the same person to clear the previous notification.",
"natural_language": {
"trigger": "When the binary sensor jason almost home [binary_sensor.jason_almost_home] changes its state to on, indicating that Jason is almost home.",
"conditions": "The automation only runs if the occupancy notifications [input_boolean.occupancy_notifications] is turned on.",
"action": "Sends a persistent notification to the person who triggered the automation (determined via a template) with the message 'Arriving Home'. This notification includes options to disarm the alarm or open the garage, and is configured to be sticky under certain conditions. The automation then waits for up to 10 minutes for the person to arrive home (their home sensor is on), the house alarm to be disarmed, and the side door to be unlocked. Once all these conditions are met, it sends a follow-up notification to clear the original arrival notification."
},
"human_like": "Sends a notification when someone is almost home, waits for them to arrive and disarm the alarm, and then clears the notification.",
"complexity": "medium"
}
},
{
"id": "turn_bathroom_shower_light_off",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When timer.bathroom_shower_light finishes. CONDITIONS: (bathroom shower light [light.bathroom_shower_light] is on) AND (bathroom shower light timer [timer.bathroom_shower_light] is idle) AND (alarm triggered [input_boolean.alarm_triggered] is off AND shower scene [switch.shower_scene] is off). ACTIONS: Turn off bathroom shower light [light.bathroom_shower_light].",
"natural_language": {
"trigger": "When Home Assistant first starts up, or when the bathroom shower light timer [timer.bathroom_shower_light] finishes its countdown.",
"conditions": "The bathroom shower light [light.bathroom_shower_light] must be on, the bathroom shower light timer [timer.bathroom_shower_light] must be idle, and both the alarm triggered [input_boolean.alarm_triggered] and the shower scene [switch.shower_scene] must be off.",
"action": "Turns off the bathroom shower light [light.bathroom_shower_light]."
},
"human_like": "Turns off the bathroom shower light when the timer finishes or at system startup, provided the alarm and shower scene are not active.",
"complexity": "medium"
}
},
{
"id": "turn_bathroom_vanity_light_on",
"result": {
"structured": "TRIGGER: When bathroom sensor motion [binary_sensor.bathroom_sensor_motion] changes from off to on. CONDITIONS: (bathroom vanity light rgb [light.bathroom_vanity_light_rgb] is off OR occupancy mode [input_select.occupancy_mode] is Night) AND bathroom illuminance [binary_sensor.bathroom_illuminance] is on. ACTIONS: If adaptive lighting bathroom lights [switch.adaptive_lighting_bathroom_lights] is on AND shower scene [switch.shower_scene] is off, then if occupancy mode [input_select.occupancy_mode] is Night, run turn light on script [script.turn_light_on] on bathroom vanity light rgb [light.bathroom_vanity_light_rgb] with brightness 70 and activate_timer true; otherwise, run turn light on script [script.turn_light_on] on bathroom vanity light rgb [light.bathroom_vanity_light_rgb] with default parameters. Otherwise, run turn light on script [script.turn_light_on] on bathroom vanity light rgb [light.bathroom_vanity_light_rgb] with profile determined by template: default_max if shower scene [switch.shower_scene] is on, night if occupancy mode [input_select.occupancy_mode] is Night, else default.",
"natural_language": {
"trigger": "When motion is first detected in the bathroom, indicated by the bathroom sensor motion [binary_sensor.bathroom_sensor_motion] changing from off to on.",
"conditions": "The automation runs only if the bathroom vanity light rgb [light.bathroom_vanity_light_rgb] is currently off, or if the occupancy mode [input_select.occupancy_mode] is set to Night. Additionally, the bathroom must be dark enough, as indicated by the bathroom illuminance [binary_sensor.bathroom_illuminance] being on.",
"action": "If adaptive lighting is enabled for the bathroom lights [switch.adaptive_lighting_bathroom_lights] and the shower scene [switch.shower_scene] is not active, the light is turned on using a script. During Night mode, the light is set to a specific brightness of 70 and a timer is activated. Otherwise, the light is turned on with default settings. If adaptive lighting is off or the shower scene is on, the light is turned on with a color profile that depends on the current state: a maximum brightness profile if the shower scene is on, a night profile if in Night mode, or a default profile otherwise."
},
"human_like": "Turns on the bathroom vanity light when motion is detected, adjusting brightness and color based on the time of day and whether adaptive lighting or a shower scene is active.",
"complexity": "high"
}
},
{
"id": "turn_bathroom_vanity_light_off",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When bathroom sensor motion [binary_sensor.bathroom_sensor_motion] changes from on to off and remains off for 5 minutes OR When occupancy mode [input_select.occupancy_mode] changes from Night and remains changed for 1 minute OR When timer.bathroom_vanity_light finishes. CONDITIONS: bathroom vanity light rgb [light.bathroom_vanity_light_rgb] is on AND (alarm triggered [input_boolean.alarm_triggered] is off AND shower scene [switch.shower_scene] is off) AND bathroom sensor motion [binary_sensor.bathroom_sensor_motion] is off for 5 minutes AND bathroom vanity light timer [timer.bathroom_vanity_light] is idle. ACTIONS: Execute turn light off script [script.turn_light_off] on entity light.bathroom_vanity_light_rgb.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: when Home Assistant first starts up; when the bathroom sensor motion [binary_sensor.bathroom_sensor_motion] stops detecting motion and remains inactive for five minutes; when the occupancy mode [input_select.occupancy_mode] changes from 'Night' and stays changed for one minute; or when the bathroom vanity light timer [timer.bathroom_vanity_light] finishes its countdown.",
"conditions": "For the automation to run, the bathroom vanity light rgb [light.bathroom_vanity_light_rgb] must be on. Additionally, the alarm triggered [input_boolean.alarm_triggered] and the shower scene [switch.shower_scene] must both be off. There must also be no motion detected by the bathroom sensor motion [binary_sensor.bathroom_sensor_motion] for at least five minutes, and the bathroom vanity light timer [timer.bathroom_vanity_light] must be idle.",
"action": "The automation runs the turn light off script [script.turn_light_off] to turn off the bathroom vanity light rgb [light.bathroom_vanity_light_rgb]."
},
"human_like": "Turns off the bathroom vanity light when there has been no motion for a while, the system is not in alarm or shower mode, and a timer is idle.",
"complexity": "medium"
}
},
{
"id": "bathroom_vanity_night_light",
"result": {
"structured": "TRIGGER: When bathroom vanity light rgb [light.bathroom_vanity_light_rgb] remains off for 5 seconds OR When occupancy mode [input_select.occupancy_mode] remains set to Night for 15 seconds. CONDITIONS: bathroom illuminance [binary_sensor.bathroom_illuminance] is on AND occupancy mode [input_select.occupancy_mode] is Night AND (bathroom sensor motion [binary_sensor.bathroom_sensor_motion] is off AND alarm triggered [input_boolean.alarm_triggered] is off AND shower scene [switch.shower_scene] is off). ACTIONS: IF adaptive lighting bathroom lights [switch.adaptive_lighting_bathroom_lights] is on THEN run script turn light on script [script.turn_light_on] on bathroom vanity light rgb [light.bathroom_vanity_light_rgb] with activate_timer false ELSE run script turn light on script [script.turn_light_on] on bathroom vanity light rgb [light.bathroom_vanity_light_rgb] with profile night_dim and activate_timer false.",
"natural_language": {
"trigger": "The automation triggers when the bathroom vanity light rgb [light.bathroom_vanity_light_rgb] has been off for 5 seconds, or when the occupancy mode [input_select.occupancy_mode] has been set to 'Night' for 15 seconds.",
"conditions": "All of the following must be true: the bathroom illuminance [binary_sensor.bathroom_illuminance] is on, the occupancy mode [input_select.occupancy_mode] is set to 'Night', and there is no motion (bathroom sensor motion [binary_sensor.bathroom_sensor_motion] is off), the alarm is not triggered (alarm triggered [input_boolean.alarm_triggered] is off), and the shower scene [switch.shower_scene] is off.",
"action": "If the adaptive lighting bathroom lights [switch.adaptive_lighting_bathroom_lights] is on, it turns on the bathroom vanity light rgb [light.bathroom_vanity_light_rgb] using the standard script. Otherwise, it turns on the same light using a special 'night_dim' profile for dimmer lighting."
},
"human_like": "Turns on the bathroom vanity light with a dimmed night profile when it's dark, the house is in night mode, and no one is using the bathroom.",
"complexity": "medium"
}
},
{
"id": "udpate_bathroom_vanity_light_timer",
"result": {
"structured": "TRIGGER: When bathroom shower light timer [timer.bathroom_shower_light] becomes active OR when bathroom shower light timer [timer.bathroom_shower_light] becomes idle. CONDITIONS: bathroom vanity light rgb [light.bathroom_vanity_light_rgb] is on. ACTIONS: Start bathroom vanity light timer [timer.bathroom_vanity_light] with a duration equal to the remaining duration of bathroom shower light timer [timer.bathroom_shower_light] if it is active, otherwise use a duration of 10 minutes.",
"natural_language": {
"trigger": "When the bathroom shower light timer [timer.bathroom_shower_light] either starts (becomes active) or stops (becomes idle).",
"conditions": "The bathroom vanity light rgb [light.bathroom_vanity_light_rgb] must be turned on.",
"action": "Start or restart the bathroom vanity light timer [timer.bathroom_vanity_light]. If the shower light timer is currently running, the vanity light timer is set to match its remaining duration. If the shower light timer is not running, the vanity light timer is set to 10 minutes."
},
"human_like": "Synchronizes the bathroom vanity light timer with the shower light timer when the vanity light is on, ensuring both lights can be managed with coordinated timing.",
"complexity": "medium"
}
},
{
"id": "turn_bathroom_vent_fan_on",
"result": {
"structured": "TRIGGER: When bathroom humidity fan [binary_sensor.bathroom_humidity_fan] changes from off to on OR bathroom mold fan [binary_sensor.bathroom_mold_fan] changes from off to on OR bathroom temperature fan [binary_sensor.bathroom_temperature_fan] changes from off to on OR indoor high temperature alert [alert.indoor_high_temperature] changes from off to on OR shower scene [switch.shower_scene] changes from off to on. CONDITIONS: None. ACTIONS: Execute turn fan on script [script.turn_fan_on] with data: entity_id fan.bathroom_fan [fan.bathroom_fan] and speed determined by: IF (bathroom humidity fan [binary_sensor.bathroom_humidity_fan] is on OR shower scene [switch.shower_scene] is on) THEN 100 ELSE IF (bathroom mold fan [binary_sensor.bathroom_mold_fan] is on) THEN 66 ELSE 33.",
"natural_language": {
"trigger": "The automation triggers when any of the following sensors or switches change from off to on: the bathroom humidity fan [binary_sensor.bathroom_humidity_fan], the bathroom mold fan [binary_sensor.bathroom_mold_fan], the bathroom temperature fan [binary_sensor.bathroom_temperature_fan], the indoor high temperature alert [alert.indoor_high_temperature], or the shower scene [switch.shower_scene].",
"conditions": "There are no conditions that must be met for the action to run.",
"action": "It runs the turn fan on script [script.turn_fan_on] to control the bathroom fan [fan.bathroom_fan]. The fan speed is set based on the current state of the triggers: if the humidity fan is active or the shower scene is on, the speed is set to 100%. If the mold fan is active, the speed is set to 66%. Otherwise, the speed is set to 33%."
},
"human_like": "Turns on the bathroom fan at a variable speed when humidity, mold risk, high temperature, or a shower scene is detected.",
"complexity": "medium"
}
},
{
"id": "turn_bathroom_vent_fan_off",
"result": {
"structured": "TRIGGER: When any of bathroom humidity fan [binary_sensor.bathroom_humidity_fan], bathroom mold fan [binary_sensor.bathroom_mold_fan], bathroom temperature fan [binary_sensor.bathroom_temperature_fan], or shower scene [switch.shower_scene] changes from 'on' to 'off' OR When the timer bathroom fan timer [timer.bathroom_fan] finishes OR When the alert indoor high temperature alert [alert.indoor_high_temperature] changes to idle. CONDITIONS: bathroom fan [fan.bathroom_fan] is on AND all of bathroom humidity fan [binary_sensor.bathroom_humidity_fan], bathroom mold fan [binary_sensor.bathroom_mold_fan], bathroom temperature fan [binary_sensor.bathroom_temperature_fan], and shower scene [switch.shower_scene] are off AND indoor high temperature alert [alert.indoor_high_temperature] is idle. ACTIONS: Execute the turn fan off script [script.turn_fan_off] with the entity_id set to bathroom fan [fan.bathroom_fan] and override set to false.",
"natural_language": {
"trigger": "This automation can be triggered in three ways: when any of the bathroom humidity fan, bathroom mold fan, bathroom temperature fan, or shower scene sensors turn off after being on; when the bathroom fan timer finishes its countdown; or when the indoor high temperature alert becomes idle.",
"conditions": "For the automation to proceed, the bathroom fan must currently be on. Additionally, all the bathroom humidity fan, bathroom mold fan, bathroom temperature fan, and shower scene sensors must be off, and the indoor high temperature alert must be in an idle state.",
"action": "It runs the 'turn fan off' script, targeting the bathroom fan, without overriding any other settings."
},
"human_like": "Turns off the bathroom fan when all the conditions that prompted it to turn on are no longer active, a timer expires, or a high temperature alert clears.",
"complexity": "medium"
}
},
{
"id": "battery_replaced",
"result": {
"structured": "TRIGGER: When the event 'battery_notes_battery_increased' occurs. CONDITIONS: None. ACTIONS: Call the service 'battery_notes.set_battery_replaced' with data: device_id = {{ trigger.event.data.device_id }}, source_entity_id = {{ trigger.event.data.source_entity_id }} AND Create a persistent notification with title '{{ trigger.event.data.device_name }} Battery Increased' and message 'The device has increased its battery level and was marked replaced.'.",
"natural_language": {
"trigger": "When the system detects an event named 'battery_notes_battery_increased'.",
"conditions": "There are no conditions for this automation.",
"action": "It marks the battery as replaced for the specific device by calling the 'battery_notes.set_battery_replaced' service, using the device and entity information from the event. It also creates a notification to inform the user that the device's battery level increased and was marked as replaced."
},
"human_like": "Automatically marks a battery as replaced and notifies the user when a device's battery level significantly increases.",
"complexity": "low"
}
},
{
"id": "battery_reporting_check",
"result": {
"structured": "TRIGGER: At 09:00:00. CONDITIONS: None. ACTIONS: Execute the script battery_notes.check_battery_last_reported with parameter days_last_reported set to 2.",
"natural_language": {
"trigger": "Every day at 9:00 AM.",
"conditions": "There are no conditions for this automation.",
"action": "Runs a script called battery_notes.check_battery_last_reported, checking for batteries that have not reported their status in the last 2 days."
},
"human_like": "Checks daily at 9 AM for any batteries that haven't reported their status in the last two days.",
"complexity": "low"
}
},
{
"id": "battery_not_reporting",
"result": {
"structured": "TRIGGER: When the event 'battery_notes_battery_not_reported' occurs. CONDITIONS: None. ACTIONS: Create a persistent notification with a title containing the device name from the event data and a message containing the number of days since the battery last reported, the last reported battery level percentage, and the required battery quantity and type from the event data.",
"natural_language": {
"trigger": "When the system receives a specific event indicating that a device's battery has not reported its status.",
"conditions": "There are no additional conditions that must be met for this automation to run.",
"action": "Creates a persistent notification. The notification's title includes the name of the device from the event. The message details how many days it has been since the battery last reported, the last known battery level percentage, and the quantity and type of batteries the device needs."
},
"human_like": "Sends a notification when a device fails to report its battery level, reminding you of the last known status and what batteries it needs.",
"complexity": "low"
}
},
{
"id": "turn_bedroom_ceiling_fan_on",
"result": {
"structured": "TRIGGER: When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] OR bedroom temperature fan [binary_sensor.bedroom_temperature_fan] changes from off to on. OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to on. CONDITIONS: (bedroom fan [fan.bedroom_fan] is off) AND (bedtime active [binary_sensor.bedtime_active] is off AND waketime active [binary_sensor.waketime_active] is off) AND (occupancy mode [input_select.occupancy_mode] is NOT Night). ACTIONS: Execute turn fan on script [script.turn_fan_on] with entity_id fan.bedroom_fan, speed 50, and override set to true if the trigger was an alert, otherwise false.",
"natural_language": {
"trigger": "The automation triggers when any of the following conditions occur: the climate fan, schedule fan, or bedroom temperature fan sensors turn on, or when an indoor low or high temperature alert becomes active.",
"conditions": "The automation will only run if the bedroom fan is currently off, neither the bedtime nor waketime active sensors are on, and the occupancy mode is not set to 'Night'.",
"action": "It runs the 'turn fan on' script for the bedroom fan, setting its speed to 50%. If the trigger was an alert, an override parameter is passed to the script."
},
"human_like": "Turns on the bedroom ceiling fan at medium speed when a fan request is made, provided it's not bedtime, waketime, or night mode.",
"complexity": "medium"
}
},
{
"id": "turn_bedroom_ceiling_fan_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation AND remains for 1 minute OR When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] OR bedroom temperature fan [binary_sensor.bedroom_temperature_fan] changes from on to off OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to idle. CONDITIONS: bedroom fan [fan.bedroom_fan] is on AND (schedule fan [binary_sensor.schedule_fan] is off AND bedroom temperature fan [binary_sensor.bedroom_temperature_fan] is off) AND (indoor low temperature alert [alert.indoor_low_temperature] is idle AND indoor high temperature alert [alert.indoor_high_temperature] is idle). ACTIONS: Execute turn fan off script [script.turn_fan_off] on bedroom fan [fan.bedroom_fan] with override parameter set to true if the trigger was occupancy mode change, otherwise false.",
"natural_language": {
"trigger": "The automation triggers in three scenarios: first, when the occupancy mode [input_select.occupancy_mode] is set to either 'Away' or 'Vacation' and stays that way for at least one minute. Second, when any of the fan control sensors—climate fan [binary_sensor.climate_fan], schedule fan [binary_sensor.schedule_fan], or bedroom temperature fan [binary_sensor.bedroom_temperature_fan]—turn off after being on. Third, when either the indoor low temperature alert [alert.indoor_low_temperature] or the indoor high temperature alert [alert.indoor_high_temperature] becomes idle.",
"conditions": "All conditions must be met: the bedroom fan [fan.bedroom_fan] must be currently on. Both the schedule fan [binary_sensor.schedule_fan] and the bedroom temperature fan [binary_sensor.bedroom_temperature_fan] must be off. Additionally, both the indoor low temperature alert [alert.indoor_low_temperature] and the indoor high temperature alert [alert.indoor_high_temperature] must be in an idle state.",
"action": "It runs the turn fan off script [script.turn_fan_off] to turn off the bedroom fan [fan.bedroom_fan]. If the trigger was the occupancy mode changing, it passes an override flag to the script."
},
"human_like": "Turns off the bedroom ceiling fan when the house is unoccupied, when automated fan controls are off, or when temperature alerts clear, but only if the fan is currently running and other conditions are met.",
"complexity": "medium"
}
},
{
"id": "wake_bedroom_tv_on",
"result": {
"structured": "TRIGGER: When webostv.turn_on [webostv.turn_on] is triggered for bedroom tv [media_player.bedroom_tv]. ACTIONS: Send a Wake-on-LAN magic packet to the device with the specified MAC address.",
"natural_language": {
"trigger": "When the system receives a command to turn on the bedroom tv [media_player.bedroom_tv] via the WebOS TV integration.",
"conditions": "There are no conditions for this automation.",
"action": "Sends a Wake-on-LAN magic packet to the television to power it on."
},
"human_like": "Turns on the bedroom TV by sending a network wake-up signal when a turn-on command is issued.",
"complexity": "low"
}
},
{
"id": "turn_bedroom_tv_on",
"result": {
"structured": "TRIGGER: When bedroom chromecast [media_player.bedroom_chromecast] changes from off, idle, unknown, or unavailable to playing, buffering, or paused OR When bedroom chromecast [media_player.bedroom_chromecast] changes from paused to playing. CONDITIONS: (bedroom tv [media_player.bedroom_tv] is off) OR (bedroom tv [media_player.bedroom_tv] source is NOT HDMI 2). ACTIONS: If bedroom tv [media_player.bedroom_tv] is off, turn it on. Then wait for bedroom tv [media_player.bedroom_tv] to be on (timeout 30 seconds). Then wait for bedroom tv [media_player.bedroom_tv] source attribute to be none (timeout 30 seconds). If bedroom tv [media_player.bedroom_tv] source is NOT HDMI 2, select source HDMI 2 on bedroom tv [media_player.bedroom_tv].",
"natural_language": {
"trigger": "When the bedroom chromecast [media_player.bedroom_chromecast] starts playing, buffering, or is paused after being off, idle, unknown, or unavailable, or when it resumes playing from a paused state.",
"conditions": "The automation runs only if the bedroom tv [media_player.bedroom_tv] is either turned off, or if it is on but its current input source is not set to HDMI 2.",
"action": "If the TV is off, it will be turned on. The automation then waits for the TV to be fully on, and then waits for its source attribute to be ready (none). Finally, if the TV's source is not already set to HDMI 2, it will switch the input to HDMI 2."
},
"human_like": "Automatically turns on the bedroom TV and switches it to the Chromecast input when the Chromecast starts playing media.",
"complexity": "medium"
}
},
{
"id": "turn_bedroom_tv_off",
"result": {
"structured": "TRIGGER: When bedroom chromecast [media_player.bedroom_chromecast] turns off. CONDITIONS: bedroom tv [media_player.bedroom_tv] has source attribute equal to HDMI 2. ACTIONS: Turn off bedroom tv [media_player.bedroom_tv].",
"natural_language": {
"trigger": "When the bedroom chromecast [media_player.bedroom_chromecast] turns off.",
"conditions": "The bedroom tv [media_player.bedroom_tv] must be set to the HDMI 2 input source.",
"action": "Turns off the bedroom tv [media_player.bedroom_tv]."
},
"human_like": "Turns off the bedroom TV if the Chromecast turns off while the TV is on the correct input.",
"complexity": "low"
}
},
{
"id": "turn_bedroom_chromecast_on",
"result": {
"structured": "TRIGGER: When bedroom tv [media_player.bedroom_tv] source attribute changes to HDMI 2 AND remains for 5 seconds. CONDITIONS: bedroom chromecast [media_player.bedroom_chromecast] is off OR unknown OR unavailable. ACTIONS: Turn on bedroom chromecast [media_player.bedroom_chromecast].",
"natural_language": {
"trigger": "When the bedroom tv [media_player.bedroom_tv] is switched to the HDMI 2 input and stays on that input for at least 5 seconds.",
"conditions": "The bedroom chromecast [media_player.bedroom_chromecast] must be off, in an unknown state, or unavailable.",
"action": "Turn on the bedroom chromecast [media_player.bedroom_chromecast]."
},
"human_like": "Automatically turns on the bedroom Chromecast when the TV is switched to the HDMI 2 input.",
"complexity": "low"
}
},
{
"id": "turn_bedroom_chromecast_off",
"result": {
"structured": "TRIGGER: When bedroom tv [media_player.bedroom_tv] turns off. CONDITIONS: NOT (bedroom chromecast [media_player.bedroom_chromecast] is off OR unknown OR unavailable). ACTIONS: Turn off bedroom chromecast [media_player.bedroom_chromecast].",
"natural_language": {
"trigger": "When the bedroom tv [media_player.bedroom_tv] is turned off.",
"conditions": "Only if the bedroom chromecast [media_player.bedroom_chromecast] is not already off, unknown, or unavailable.",
"action": "Turn off the bedroom chromecast [media_player.bedroom_chromecast]."
},
"human_like": "Turns off the bedroom Chromecast when the TV is turned off, but only if the Chromecast is currently on.",
"complexity": "low"
}
},
{
"id": "bedtime",
"result": {
"structured": "TRIGGER: At the time specified by bedtime warning [sensor.bedtime_warning]. CONDITIONS: (someone home [binary_sensor.someone_home] is on) AND (occupancy mode [input_select.occupancy_mode] is Home OR Guest) AND (alarm triggered [input_boolean.alarm_triggered] is off) AND ((work tomorrow [binary_sensor.work_tomorrow] is on AND workday night [input_boolean.workday_night] is on) OR (work tomorrow [binary_sensor.work_tomorrow] is off AND weekend night [input_boolean.weekend_night] is on) OR (owner home [binary_sensor.owner_home] is off AND guest night [input_boolean.guest_night] is on)). ACTIONS: Run bedtime script [script.bedtime] with warning set to true.",
"natural_language": {
"trigger": "When the time reaches the value specified by the bedtime warning [sensor.bedtime_warning] sensor.",
"conditions": "If someone is home, indicated by the someone home [binary_sensor.someone_home] sensor being on. The occupancy mode [input_select.occupancy_mode] must be set to either 'Home' or 'Guest'. The alarm triggered [input_boolean.alarm_triggered] flag must be off. Finally, one of three night mode conditions must be met: either it's a work night (work tomorrow [binary_sensor.work_tomorrow] is on and workday night [input_boolean.workday_night] is on), a weekend night (work tomorrow [binary_sensor.work_tomorrow] is off and weekend night [input_boolean.weekend_night] is on), or a guest night (owner home [binary_sensor.owner_home] is off and guest night [input_boolean.guest_night] is on).",
"action": "Executes the bedtime script [script.bedtime] with a warning parameter set to true."
},
"human_like": "Starts the bedtime routine at a scheduled time, but only if someone is home, the alarm is off, and the correct night mode (workday, weekend, or guest) is active.",
"complexity": "medium"
}
},
{
"id": "bedtime_delay_turned_on",
"result": {
"structured": "TRIGGER: When bedtime delayed [input_boolean.bedtime_delayed] turns on. CONDITIONS: None. ACTIONS: If occupancy mode [input_select.occupancy_mode] is Night OR Away OR Vacation, then turn off bedtime delayed [input_boolean.bedtime_delayed] AND send a browser notification for 10 seconds with a message stating the house is in the current occupancy mode AND stop further execution with a message. Otherwise, execute script.delay_bedtime.",
"natural_language": {
"trigger": "When the bedtime delayed [input_boolean.bedtime_delayed] switch is turned on.",
"conditions": "There are no separate conditions; the logic is handled within the action sequence.",
"action": "The automation checks the current occupancy mode [input_select.occupancy_mode]. If the mode is set to Night, Away, or Vacation, it will turn the bedtime delayed [input_boolean.bedtime_delayed] switch back off, send a notification to the browser for 10 seconds explaining the delay was cancelled because the house is in the current mode, and then stop all further processing. If the occupancy mode is any other state, it will run the script.delay_bedtime."
},
"human_like": "Prevents activating the bedtime delay when the house is in Night, Away, or Vacation mode, and runs the delay script otherwise.",
"complexity": "medium"
}
},
{
"id": "bedtime_delay_changed",
"result": {
"structured": "TRIGGER: When bedtime delay input number [input_number.bedtime_delay] changes state for 5 seconds. CONDITIONS: bedtime delay timer [timer.bedtime_delay] is active. ACTIONS: Start bedtime delay timer [timer.bedtime_delay] with a duration equal to the current value of bedtime delay input number [input_number.bedtime_delay] in minutes.",
"natural_language": {
"trigger": "When the bedtime delay input number [input_number.bedtime_delay] changes and remains in its new state for five seconds.",
"conditions": "The bedtime delay timer [timer.bedtime_delay] must currently be running.",
"action": "Restarts the bedtime delay timer [timer.bedtime_delay], setting its duration to the number of minutes specified by the current value of the bedtime delay input number [input_number.bedtime_delay]."
},
"human_like": "Restarts the bedtime delay timer with the new delay value whenever the delay setting is changed.",
"complexity": "low"
}
},
{
"id": "bedtime_delay_turned_off",
"result": {
"structured": "TRIGGER: When bedtime delayed [input_boolean.bedtime_delayed] changes to off. CONDITIONS: None. ACTIONS: Choose from the following sequences based on conditions: 1. IF scene active binary sensor [binary_sensor.scene_active] is on THEN turn off bedtime delay turned on automation [automation.bedtime_delay_turned_on], turn on bedtime delayed [input_boolean.bedtime_delayed], send a browser notification for 10 seconds with message 'Bedtime delay cannot be turned off when a scene is active.', and turn on bedtime delay turned on automation [automation.bedtime_delay_turned_on]. 2. ELSE IF bedtime active [binary_sensor.bedtime_active] is on AND bedtime script [script.bedtime] is off THEN cancel bedtime delay timer [timer.bedtime_delay] and run bedtime script [script.bedtime] with warning set to false. 3. OTHERWISE (default) cancel bedtime delay timer [timer.bedtime_delay].",
"natural_language": {
"trigger": "When the bedtime delayed [input_boolean.bedtime_delayed] switch is turned off.",
"conditions": "There are no global conditions; the automation uses conditional logic within its actions to decide what to do.",
"action": "The automation checks specific conditions and performs different actions based on them. If a scene is currently active, it prevents the delay from being turned off by re-enabling it, shows a notification, and restores the related automation. If the bedtime routine is active but the bedtime script is not running, it cancels the delay timer and starts the bedtime script. In all other cases, it simply cancels the delay timer."
},
"human_like": "Handles turning off the bedtime delay, either by restarting the delay if a scene is active, starting the bedtime routine if needed, or just cancelling the timer.",
"complexity": "medium"
}
},
{
"id": "turn_bedtime_delay_on",
"result": {
"structured": "TRIGGER: When a mobile app notification action with action 'bedtime_delay_on' is received OR When scene active binary sensor [binary_sensor.scene_active] changes from off to on. CONDITIONS: None. ACTIONS: Turn on bedtime delayed [input_boolean.bedtime_delayed].",
"natural_language": {
"trigger": "The automation starts either when a specific notification action named 'bedtime_delay_on' is received from a mobile app, or when the scene active binary sensor [binary_sensor.scene_active] turns on from an off state.",
"conditions": "There are no conditions that must be checked; the automation runs immediately when triggered.",
"action": "It turns on the bedtime delayed [input_boolean.bedtime_delayed] input boolean."
},
"human_like": "Activates a bedtime delay feature when a specific mobile app notification is tapped or when a scene becomes active.",
"complexity": "low"
}
},
{
"id": "turn_bedtime_delay_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action with action 'bedtime_delay_off' is received OR When the bedtime delay timer [timer.bedtime_delay] finishes OR When the bedtime delay timer [timer.bedtime_delay] is cancelled OR When scene active binary sensor [binary_sensor.scene_active] changes from on to off OR When occupancy mode [input_select.occupancy_mode] changes to Night, Away, or Vacation. CONDITIONS: None. ACTIONS: Turn off bedtime delayed [input_boolean.bedtime_delayed].",
"natural_language": {
"trigger": "The automation can be triggered in five ways: by receiving a specific 'bedtime_delay_off' action from a mobile app notification, when the bedtime delay timer [timer.bedtime_delay] finishes its countdown, when the same timer is cancelled, when the scene active binary sensor [binary_sensor.scene_active] turns off, or when the occupancy mode [input_select.occupancy_mode] is set to Night, Away, or Vacation.",
"conditions": "There are no conditions that must be met for the action to run.",
"action": "It turns off the bedtime delayed [input_boolean.bedtime_delayed] input boolean."
},
"human_like": "Turns off the 'bedtime delayed' flag when a timer ends, a scene deactivates, the house mode changes, or a user cancels it from their phone.",
"complexity": "medium"
}
},
{
"id": "clear_bedtime_notification",
"result": {
"structured": "TRIGGER: When bedtime delayed [input_boolean.bedtime_delayed] turns off OR When occupancy mode [input_select.occupancy_mode] changes to Night and remains for 1 minute OR When a mobile app notification action event with action 'clear_bedtime' occurs. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with message 'clear_notification' and data tag 'bedtime_alert'.",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the bedtime delayed [input_boolean.bedtime_delayed] switch is turned off, when the occupancy mode [input_select.occupancy_mode] is set to 'Night' and stays that way for one minute, or when a specific notification action 'clear_bedtime' is received from a mobile app.",
"conditions": "There are no conditions to check; the automation runs immediately after any of the triggers is activated.",
"action": "It sends a notification to the user named jason medication notification [notify.jason] with a message to clear a notification, specifically using the tag 'bedtime_alert'."
},
"human_like": "Clears a bedtime-related notification for Jason when bedtime is no longer delayed, the house enters night mode, or a clear action is tapped on the phone.",
"complexity": "medium"
}
},
{
"id": "before_leaving_work",
"result": {
"structured": "TRIGGER: When home commute active binary sensor [binary_sensor.home_commute_active] changes from off to on. CONDITIONS: (someone home [binary_sensor.someone_home] is off AND climate manual mode input boolean [input_boolean.climate_manual_mode] is off) AND (jason person [person.jason] is at Work). ACTIONS: Turn on climate presence override input boolean [input_boolean.climate_presence_override].",
"natural_language": {
"trigger": "When the home commute active binary sensor [binary_sensor.home_commute_active] is activated, indicating a change from not commuting to commuting.",
"conditions": "If no one is home, as indicated by the someone home [binary_sensor.someone_home] sensor being off, and the climate manual mode input boolean [input_boolean.climate_manual_mode] is also off, meaning the system is not in a manual override state. Additionally, the person jason [person.jason] must be at Work.",
"action": "Activates the climate presence override by turning on the climate presence override input boolean [input_boolean.climate_presence_override]."
},
"human_like": "Starts preheating or cooling the house when Jason starts his commute home from work, provided the house is empty and not in manual mode.",
"complexity": "medium"
}
},
{
"id": "before_work",
"result": {
"structured": "TRIGGER: When work commute active binary sensor [binary_sensor.work_commute_active] changes from off to on OR when jason home [binary_sensor.jason_home] changes from off to on and remains on for 5 minutes. CONDITIONS: (work commute active binary sensor [binary_sensor.work_commute_active] is on) AND (jason home [binary_sensor.jason_home] is on). ACTIONS: Execute work commute lights script [script.work_commute_lights] AND execute tts play script [script.tts_play] on inside speakers media player [media_player.inside_speakers] with a minimum volume of 50%, playing a message containing the leave home time for Jason, the commute weather, and a notification if jason phone battery low alert [alert.jason_phone_battery_low] is active, stating the battery level from jphone battery level sensor [sensor.jphone_battery_level].",
"natural_language": {
"trigger": "The automation starts when the work commute active binary sensor [binary_sensor.work_commute_active] turns on, or when the jason home [binary_sensor.jason_home] sensor detects Jason has been home for five minutes.",
"conditions": "Both the work commute active binary sensor [binary_sensor.work_commute_active] must be on, and the jason home [binary_sensor.jason_home] sensor must be on.",
"action": "It runs the work commute lights script [script.work_commute_lights] and then plays a text-to-speech announcement on the inside speakers media player [media_player.inside_speakers]. The announcement tells Jason it's time to get ready, provides his scheduled leave time and the commute weather, and warns him if his phone battery is low."
},
"human_like": "Plays a morning announcement and adjusts lights when Jason's work commute begins or when he has been home for a while, reminding him of his schedule and weather.",
"complexity": "medium"
}
},
{
"id": "turn_camera_alerts_on",
"result": {
"structured": "TRIGGER: When camera alerts input boolean [input_boolean.camera_alerts] remains off for 8 hours OR When house alarm [alarm_control_panel.house] changes to armed_home, armed_night, armed_away, or armed_vacation. CONDITIONS: None. ACTIONS: Turn on camera alerts input boolean [input_boolean.camera_alerts].",
"natural_language": {
"trigger": "When the camera alerts input boolean [input_boolean.camera_alerts] has been turned off for a continuous period of eight hours, or when the house alarm [alarm_control_panel.house] is armed in any mode (home, night, away, or vacation).",
"conditions": "There are no additional conditions that must be met.",
"action": "Turns the camera alerts input boolean [input_boolean.camera_alerts] back on."
},
"human_like": "Re-enables camera alerts either after they've been off for eight hours or when the house alarm is armed.",
"complexity": "medium"
}
},
{
"id": "turn_camera_alerts_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'turn_off_camera_alerts' is received. CONDITIONS: None. ACTIONS: Turn off camera alerts input boolean [input_boolean.camera_alerts].",
"natural_language": {
"trigger": "When a specific action, 'turn_off_camera_alerts', is performed from a mobile app notification.",
"conditions": "There are no additional conditions that must be met.",
"action": "Turns off the camera alerts input boolean [input_boolean.camera_alerts]."
},
"human_like": "Disables camera alerts when a user taps the 'turn off camera alerts' action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "indoor_camera_control",
"result": {
"structured": "TRIGGER: When the entity list of indoor cameras group [group.indoor_cameras] changes OR when someone home [binary_sensor.someone_home] changes state (to on or off from on or off) OR when alarm triggered [input_boolean.alarm_triggered] changes state. CONDITIONS: startup pending [input_boolean.startup_pending] is off. ACTIONS: Wait up to 2 minutes for indoor camera stream switches group [group.indoor_camera_stream_switches] to have a non-empty entity list. IF (someone home [binary_sensor.someone_home] is on) AND (alarm triggered [input_boolean.alarm_triggered] is off) THEN turn off indoor camera stream switches group [group.indoor_camera_stream_switches] ELSE turn on indoor camera stream switches group [group.indoor_camera_stream_switches].",
"natural_language": {
"trigger": "The automation triggers when the composition of the indoor cameras group [group.indoor_cameras] changes, when the presence sensor someone home [binary_sensor.someone_home] changes its state, or when the alarm triggered [input_boolean.alarm_triggered] input boolean changes state.",
"conditions": "The automation only runs if the startup pending [input_boolean.startup_pending] flag is off.",
"action": "First, the automation waits for up to two minutes for the indoor camera stream switches group [group.indoor_camera_stream_switches] to be populated with entities. Then, it checks if someone is home and the alarm is not triggered. If both are true, it turns off the camera stream switches. Otherwise, it turns them on."
},
"human_like": "Manages indoor camera streams, turning them off when someone is home and the alarm is not active, and turning them on otherwise.",
"complexity": "medium"
}
},
{
"id": "camera_object_detected",
"result": {
"structured": "TRIGGER: When an MQTT message is received on topic 'frigate/events' with payload 'alert' and the 'max_severity' field in the JSON payload is truthy. CONDITIONS: (Throttle condition: The automation has never been triggered before OR more than 60 seconds have passed since the automation was last triggered) AND (Someone hasn't just arrived home: The attribute 'just_arrived' of someone home [binary_sensor.someone_home] is false) AND (New valid object: The event start time is less than 60 seconds ago AND ((the detected object is 'person' AND its confidence score is >= 0.65) OR (the detected object is 'car' AND its confidence score is >= 0.65)) AND a snapshot is available). ACTIONS: Execute two sequences in parallel: SEQUENCE 1: If (camera object announcements input boolean [input_boolean.camera_object_announcements] is on AND someone home [binary_sensor.someone_home] is on AND (camera event announce tod binary sensor [binary_sensor.camera_event_announce_tod] is on OR Alarm Control Panel [alarm_control_panal.home] is NOT disarmed OR the camera is 'front_driveway' or 'front_door')) then: If (the automation has never been triggered before OR the camera is 'front_door' or 'side_door' OR more than 2 minutes have passed since the automation was last triggered) then: Run the tts play script [script.tts_play] with a message announcing the object at/in the camera location. Then, run the kiosk display camera script [script.kiosk_display_camera] to show the camera feed. SEQUENCE 2: If camera object notifications input boolean [input_boolean.camera_object_notifications] is on, then wait 5 seconds and send a notification to jason medication notification [notify.jason] with details of the detection.",
"natural_language": {
"trigger": "The automation is triggered when the Frigate camera system sends an MQTT event alert, indicating a potential object detection.",
"conditions": "The automation only proceeds if it hasn't been triggered in the last 60 seconds, if the system indicates that someone hasn't just arrived home, and if the detection is recent (within 60 seconds), is either a person or a car with a high confidence score (65% or higher), and a snapshot image is available.",
"action": "If enabled, the automation performs two main actions simultaneously. First, if announcements are enabled and someone is home, and it's either the right time of day, the alarm is armed, or it's a priority camera (front driveway or front door), it will make a voice announcement and display the camera feed on a kiosk. The announcement is throttled to avoid being too frequent, unless it's for the front or side door. Second, if notifications are enabled, it will send a detailed mobile notification with a thumbnail image and interactive buttons after a short delay."
},
"human_like": "Sends voice announcements and mobile notifications for high-confidence person or car detections from security cameras, but only when someone is home and under specific conditions to avoid being annoying.",
"complexity": "high"
}
},
{
"id": "camera_object_detection_control",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR when frigate integration connected binary sensor [binary_sensor.frigate_integration_connected] turns on from off OR when camera object detection switch [switch.camera_object_detection] turns off from on and remains off for 8 hours OR when house alarm [alarm_control_panel.house] changes to any of the following states: disarmed, armed_home, armed_night, armed_away, armed_vacation. CONDITIONS: startup pending [input_boolean.startup_pending] is off. ACTIONS: IF the trigger was the camera object detection switch [switch.camera_object_detection] turning off for 8 hours, THEN turn on camera object detection switch [switch.camera_object_detection]. THEN wait for up to 5 minutes until frigate integration connected binary sensor [binary_sensor.frigate_integration_connected] is on AND wyze integration connected binary sensor [binary_sensor.wyze_integration_connected] is on AND frigate cameras group [group.frigate_cameras] exists and contains at least one camera. THEN define variables: 'state' as the house alarm [alarm_control_panel.house] state with 'armed_vacation' replaced by 'armed_away' and 'armed_' prefix removed; 'on_cameras' as the list of cameras in frigate cameras group [group.frigate_cameras] whose attribute matching the 'state' variable is true; 'off_cameras' as the list of cameras in frigate cameras group [group.frigate_cameras] whose attribute matching the 'state' variable is not true. THEN turn on the detection, motion, recordings, and snapshots switches for the 'on_cameras' list. THEN turn off the detection, recordings, and snapshots switches for the 'off_cameras' list. THEN turn off the motion switches for the 'off_cameras' list.",
"natural_language": {
"trigger": "The automation can start when the startup pending [input_boolean.startup_pending] is turned off, when the frigate integration connected binary sensor [binary_sensor.frigate_integration_connected] becomes connected (turns on), when the camera object detection switch [switch.camera_object_detection] is turned off and stays off for eight hours, or when the house alarm [alarm_control_panel.house] changes its armed state.",
"conditions": "The automation only proceeds if the startup pending [input_boolean.startup_pending] is off.",
"action": "If the automation was triggered because the object detection switch was off for eight hours, it first turns that switch back on. It then waits for up to five minutes for the Frigate and Wyze integrations to be connected and for the camera group to be populated. Next, it checks the house alarm state and uses it to determine which cameras should have their features active. For cameras that should be active based on the alarm state, it turns on their detection, motion detection, recordings, and snapshot switches. For cameras that should be inactive, it turns off their detection, recording, and snapshot switches, and also turns off their motion detection switches."
},
"human_like": "Manages camera detection, recording, and snapshot features based on the house alarm state, ensuring the system is only active when the necessary integrations are ready.",
"complexity": "high"
}
},
{
"id": "turn_camera_object_detection_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'disable_side_driveway_camera_events' OR 'disable_side_door_camera_events' OR 'disable_front_driveway_camera_events' OR 'disable_front_door_camera_events' OR 'disable_front_yard_camera_events' OR 'disable_side_gate_front_camera_events' OR 'disable_side_gate_back_camera_events' OR 'disable_back_yard_camera_events' OR 'disable_back_door_camera_events' OR 'disable_patio_door_camera_events' OR 'disable_back_house_camera_events' OR 'disable_garage_inside_camera_events' OR 'disable_living_room_camera_events' OR 'disable_charlie_cam_camera_events'. CONDITIONS: None. ACTIONS: Turn off the detection, recordings, and snapshots switches for the camera corresponding to the triggered event. Turn off the motion switch for the camera corresponding to the triggered event.",
"natural_language": {
"trigger": "The automation is triggered by receiving a specific action from a mobile app notification. Each trigger corresponds to a different camera location and the action is to disable events for that camera. The locations are: side driveway, side door, front driveway, front door, front yard, side gate front, side gate back, back yard, back door, patio door, back house, garage inside, living room, and charlie cam camera.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "For the camera associated with the triggered notification action, the automation turns off three types of switches: one for object detection, one for recordings, and one for snapshots. It also turns off the motion switch for that same camera."
},
"human_like": "This automation allows you to quickly disable event detection and recording for any specific camera by tapping a corresponding action in a mobile app notification.",
"complexity": "medium"
}
},
{
"id": "turn_camera_object_notifications_on",
"result": {
"structured": "TRIGGER: When camera object announcements input boolean [input_boolean.camera_object_announcements] OR camera object notifications input boolean [input_boolean.camera_object_notifications] remains off for 4 hours OR When house alarm [alarm_control_panel.house] changes to disarmed, armed_home, armed_night, armed_away, or armed_vacation. CONDITIONS: None. ACTIONS: Turn on camera object announcements input boolean [input_boolean.camera_object_announcements] AND turn on camera object notifications input boolean [input_boolean.camera_object_notifications].",
"natural_language": {
"trigger": "The automation triggers in two ways: first, if either the camera object announcements input boolean [input_boolean.camera_object_announcements] or the camera object notifications input boolean [input_boolean.camera_object_notifications] remains in the 'off' state for a continuous period of 4 hours. Second, it triggers whenever the house alarm [alarm_control_panel.house] changes its state to any of the following: disarmed, armed_home, armed_night, armed_away, or armed_vacation.",
"conditions": "There are no conditions that need to be checked for this automation to run.",
"action": "The automation turns on both the camera object announcements input boolean [input_boolean.camera_object_announcements] and the camera object notifications input boolean [input_boolean.camera_object_notifications]."
},
"human_like": "This automation ensures camera notifications are turned back on if they have been off for 4 hours or when the house alarm state changes.",
"complexity": "medium"
}
},
{
"id": "turn_camera_object_notifications_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'pause_camera_object_notifications' is received. CONDITIONS: None. ACTIONS: Turn off camera object announcements input boolean [input_boolean.camera_object_announcements] AND turn off camera object notifications input boolean [input_boolean.camera_object_notifications].",
"natural_language": {
"trigger": "When a specific action ('pause_camera_object_notifications') is performed on a notification sent to the mobile app.",
"conditions": "There are no conditions that must be met.",
"action": "Disables both camera object announcements and notifications by turning off the corresponding input booleans: camera object announcements input boolean [input_boolean.camera_object_announcements] and camera object notifications input boolean [input_boolean.camera_object_notifications]."
},
"human_like": "Pauses camera object notifications and announcements when the user taps the corresponding action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "play_charlie_media_preset",
"result": {
"structured": "TRIGGER: When someone home [binary_sensor.someone_home] remains off for 30 minutes. CONDITIONS: (charlie home binary sensor [binary_sensor.charlie_home] is on AND media enabled charlie input boolean [input_boolean.media_enabled_charlie] is on) AND occupancy mode [input_select.occupancy_mode] is Away. ACTIONS: Execute media play script [script.media_play] with preset 'charlie'.",
"natural_language": {
"trigger": "When the system detects that no one has been home for 30 minutes, based on the someone home [binary_sensor.someone_home] sensor.",
"conditions": "Charlie must be at home, as indicated by the charlie home binary sensor [binary_sensor.charlie_home] being on, and the media enabled charlie input boolean [input_boolean.media_enabled_charlie] must also be on. Furthermore, the overall occupancy mode [input_select.occupancy_mode] must be set to 'Away'.",
"action": "Starts playing a specific media preset for Charlie by calling the media play script [script.media_play] with the preset name 'charlie'."
},
"human_like": "Automatically plays Charlie's media preset when the house has been empty for 30 minutes, but only if Charlie is home and media is enabled for him.",
"complexity": "medium"
}
},
{
"id": "stop_charlie_media_preset",
"result": {
"structured": "TRIGGER: When someone home [binary_sensor.someone_home] changes to on OR When occupancy mode [input_select.occupancy_mode] changes to Night and remains for 1 minute. CONDITIONS: (charlie home binary sensor [binary_sensor.charlie_home] is on AND media enabled charlie input boolean [input_boolean.media_enabled_charlie] is on) AND (The media player determined by the variable 'media_player' is in a state of playing, paused, buffering, on, or idle). ACTIONS: Run the script turn media player off script [script.turn_media_player_off] on the media player determined by the variable 'media_player'.",
"natural_language": {
"trigger": "The automation can be triggered in two ways: when the system detects that someone is home, or when the occupancy mode is set to 'Night' and remains in that state for at least one minute.",
"conditions": "For the automation to proceed, Charlie must be home, and the media function for Charlie must be enabled. Additionally, the specific media player assigned to Charlie's current media type (either a video display or a speaker) must be in an active state, such as playing, paused, buffering, on, or idle.",
"action": "The automation stops the active media by running a script that turns off the specific media player assigned to Charlie's current media preset."
},
"human_like": "This automation stops Charlie's media player when someone arrives home or when the house enters Night mode, but only if Charlie is home and his media is currently active.",
"complexity": "medium"
}
},
{
"id": "charlie_staying_home",
"result": {
"structured": "TRIGGER: When charlie home input boolean [input_boolean.charlie_home] changes from off to on. CONDITIONS: None. ACTIONS: Execute tts play script [script.tts_play] with the message 'Looks like Charlie has to stay home alone. I'm sure he'll be a good doggie!' using the HASS provider, English (USA) language, Jane:sad voice, with quiet_play and save_message enabled.",
"natural_language": {
"trigger": "When the charlie home input boolean [input_boolean.charlie_home] is turned on from an off state.",
"conditions": "There are no conditions that must be met.",
"action": "Plays a text-to-speech announcement saying 'Looks like Charlie has to stay home alone. I'm sure he'll be a good doggie!' using the HASS provider, the English (USA) language, and a sad-sounding voice named Jane. The announcement is played quietly and the message is saved."
},
"human_like": "Plays a sad-sounding announcement when Charlie is marked as staying home alone.",
"complexity": "low"
}
},
{
"id": "turn_charlie_home_on",
"result": {
"structured": "TRIGGER: When jason person [person.jason] changes state to Work. CONDITIONS: None. ACTIONS: Turn on charlie home input boolean [input_boolean.charlie_home].",
"natural_language": {
"trigger": "When jason person [person.jason] changes their state to 'Work'.",
"conditions": "There are no conditions that must be met.",
"action": "Turns on the charlie home input boolean [input_boolean.charlie_home]."
},
"human_like": "Marks Charlie as being home when Jason leaves for work.",
"complexity": "low"
}
},
{
"id": "turn_charlie_home_off",
"result": {
"structured": "TRIGGER: When jason home [binary_sensor.jason_home] becomes on. CONDITIONS: None. ACTIONS: Turn off charlie home input boolean [input_boolean.charlie_home].",
"natural_language": {
"trigger": "When the jason home [binary_sensor.jason_home] sensor indicates that Jason is home.",
"conditions": "There are no additional conditions that must be met.",
"action": "Turns off the charlie home input boolean [input_boolean.charlie_home]."
},
"human_like": "Turns off the indicator for Charlie being home when Jason arrives home.",
"complexity": "low"
}
},
{
"id": "turn_charlie_mealtime_on",
"result": {
"structured": "TRIGGER: When a template evaluates to true. The template requires that charlie mealtime enabled input boolean [input_boolean.charlie_mealtime_enabled] is on AND occupancy mode [input_select.occupancy_mode] is not 'Vacation' AND the current time from time sensor [sensor.time] matches a specific scheduled time based on the shift attribute from work status sensor [sensor.work_status]. The schedule is: (shift is 'Days' AND time matches charlie mealtime days 1 input datetime [input_datetime.charlie_mealtime_days_1] OR charlie mealtime days 2 input datetime [input_datetime.charlie_mealtime_days_2]) OR (shift is 'Afternoons' AND time matches charlie mealtime afternoons 1 input datetime [input_datetime.charlie_mealtime_afternoons_1] OR charlie mealtime afternoons 2 input datetime [input_datetime.charlie_mealtime_afternoons_2]) OR (shift is 'Off' AND time matches charlie mealtime weekends 1 input datetime [input_datetime.charlie_mealtime_weekends_1] OR charlie mealtime weekends 2 input datetime [input_datetime.charlie_mealtime_weekends_2]). CONDITIONS: A template condition 'Not done within last 4 hours' must be true, which requires that the last press time of charlie mealtime done button [button.charlie_mealtime_done] was more than 4 hours ago. ACTIONS: If charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is on, turn it off. If charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is on, turn it off (action listed twice). If charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] is on, turn it off. Otherwise (if charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] is off), turn on charlie mealtime active input boolean [input_boolean.charlie_mealtime_active].",
"natural_language": {
"trigger": "The automation triggers when the system time matches a pre-configured mealtime schedule for a person named Charlie. This only happens if the reminder feature is enabled via the charlie mealtime enabled input boolean [input_boolean.charlie_mealtime_enabled] and the house is not in 'Vacation' mode according to occupancy mode [input_select.occupancy_mode]. The specific time to trigger depends on the current work shift reported by work status sensor [sensor.work_status]. For a 'Days' shift, it triggers at the times set in charlie mealtime days 1 input datetime [input_datetime.charlie_mealtime_days_1] or charlie mealtime days 2 input datetime [input_datetime.charlie_mealtime_days_2]. For an 'Afternoons' shift, it triggers at the times set in charlie mealtime afternoons 1 input datetime [input_datetime.charlie_mealtime_afternoons_1] or charlie mealtime afternoons 2 input datetime [input_datetime.charlie_mealtime_afternoons_2]. For an 'Off' shift, it triggers at the times set in charlie mealtime weekends 1 input datetime [input_datetime.charlie_mealtime_weekends_1] or charlie mealtime weekends 2 input datetime [input_datetime.charlie_mealtime_weekends_2].",
"conditions": "Before taking action, the system checks that the last time the 'done' button was pressed, charlie mealtime done button [button.charlie_mealtime_done], was more than four hours ago. This prevents the reminder from activating again too soon after a previous meal was logged.",
"action": "The automation first ensures any previous reminder states are cleared. It turns off the charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] if it is on. It also turns off the charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] if it is on. Furthermore, it turns off the charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] if it is on. Finally, if the 'skipped' boolean was off, it activates the new reminder by turning on the charlie mealtime active input boolean [input_boolean.charlie_mealtime_active]."
},
"human_like": "Activates a mealtime reminder for Charlie at scheduled times based on the current work shift, provided the reminder hasn't been acknowledged in the last four hours.",
"complexity": "high"
}
},
{
"id": "charlie_mealtime_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'charlie_mealtime_done'. CONDITIONS: charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is on. ACTIONS: Press the charlie mealtime done button [button.charlie_mealtime_done].",
"natural_language": {
"trigger": "When a notification action named 'charlie_mealtime_done' is received from the mobile app.",
"conditions": "The charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] must be in the 'on' state.",
"action": "Presses the charlie mealtime done button [button.charlie_mealtime_done]."
},
"human_like": "Marks a mealtime reminder as completed when a notification action is tapped, provided the reminder is currently active.",
"complexity": "low"
}
},
{
"id": "skip_charlie_mealtime",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_charlie_mealtime'. CONDITIONS: None. ACTIONS: Press skip charlie mealtime button [button.skip_charlie_mealtime].",
"natural_language": {
"trigger": "When a specific action, 'skip_charlie_mealtime', is selected from a notification sent to a mobile app.",
"conditions": "There are no conditions that must be met.",
"action": "Presses the virtual skip charlie mealtime button [button.skip_charlie_mealtime]."
},
"human_like": "Skips a mealtime reminder for Charlie by pressing a button when the user selects the option from a mobile notification.",
"complexity": "low"
}
},
{
"id": "pause_charlie_mealtime",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'pause_charlie_mealtime'. CONDITIONS: None. ACTIONS: Turn on charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification by selecting the 'pause_charlie_mealtime' action.",
"conditions": "There are no conditions for this automation.",
"action": "Sets the pause state for Charlie's mealtime by turning on the charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused]."
},
"human_like": "Pauses Charlie's mealtime reminders when the user taps the pause action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_charlie_mealtime",
"result": {
"structured": "TRIGGER: When charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] turns on OR When charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] remains on for 2 hours OR When owner home [binary_sensor.owner_home] remains on for 15 minutes. CONDITIONS: charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is on. ACTIONS: Turn off charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the 'charlie mealtime skipped' indicator [input_boolean.charlie_mealtime_skipped] is turned on, when the 'charlie mealtime paused' indicator [input_boolean.charlie_mealtime_paused] has been on for two hours, or when the owner has been home [binary_sensor.owner_home] for fifteen minutes.",
"conditions": "The automation only runs if the 'charlie mealtime paused' indicator [input_boolean.charlie_mealtime_paused] is currently on.",
"action": "It resets the pause by turning off the 'charlie mealtime paused' indicator [input_boolean.charlie_mealtime_paused]."
},
"human_like": "Resets the paused state for Charlie's mealtime reminders when a meal is skipped, the pause has lasted two hours, or the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_charlie_mealtime_booleans",
"result": {
"structured": "TRIGGER: When charlie mealtime enabled input boolean [input_boolean.charlie_mealtime_enabled] turns off OR When charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] turns off OR When any entity in the list (charlie mealtime active input boolean [input_boolean.charlie_mealtime_active], charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused], charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped]) turns on. CONDITIONS: (charlie mealtime enabled input boolean [input_boolean.charlie_mealtime_enabled] is off) OR (The triggering entity is charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] AND (charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is off OR charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] is on)) OR (The trigger ID is 'done'). ACTIONS: If the trigger ID is 'entity', turn off the specific entity that triggered the automation. Otherwise, turn off all entities in the list: charlie mealtime active input boolean [input_boolean.charlie_mealtime_active], charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused], and charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped].",
"natural_language": {
"trigger": "This automation triggers in three scenarios: when the 'charlie mealtime enabled' toggle is turned off, when the 'charlie mealtime active' status is turned off, or when any one of the three reminder-related booleans ('charlie mealtime active', 'charlie mealtime paused', or 'charlie mealtime skipped') is turned on.",
"conditions": "For the automation to proceed, at least one of the following must be true: the 'charlie mealtime enabled' toggle is already off, the trigger was the 'paused' boolean turning on while the reminder is either not active or has been skipped, or the trigger was specifically the 'active' boolean turning off (which indicates the reminder was completed).",
"action": "Depending on what triggered the automation, it will either turn off only the specific boolean that was turned on (if the trigger was one of the three booleans turning on), or it will turn off all three reminder booleans ('active', 'paused', and 'skipped') if the trigger was the 'enabled' toggle turning off or the 'active' status turning off."
},
"human_like": "Resets Charlie's mealtime reminder status booleans when the reminder is disabled, completed, or when an invalid state change occurs.",
"complexity": "medium"
}
},
{
"id": "charlie_mealtime_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] turns on OR When charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] turns off. CONDITIONS: charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is on AND charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is off. ACTIONS: REPEAT the following sequence UNTIL charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is off OR charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is on: 1. IF occupancy mode [input_select.occupancy_mode] is NOT 'Night', THEN send a persistent notification to jason medication notification [notify.jason] with a message and action buttons, THEN WAIT UP TO 2 minutes for charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] to be off OR charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] to be on. 2. IF after the wait, charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is still on AND charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is still off, THEN trigger the tts play script [script.tts_play] with a specific message. 3. WAIT UP TO the number of minutes specified by charlie mealtime notification interval input number [input_number.charlie_mealtime_notification_interval] for charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] to be off OR charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] to be on.",
"natural_language": {
"trigger": "The automation starts when Home Assistant first boots up, when the charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] is turned on, or when the charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] is turned off.",
"conditions": "For the automation to run its actions, the charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] must be on, and the charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] must be off.",
"action": "The automation enters a repeating loop that sends reminders to feed Charlie. In each loop, if the house is not in 'Night' mode, it sends a persistent notification with action buttons. It then waits for up to two minutes for the mealtime to be marked as done or paused. If, after that wait, the mealtime is still active and not paused, it plays a text-to-speech announcement. Finally, it waits for a longer, configurable interval before starting the loop again. This entire process repeats until the mealtime is marked as done or paused."
},
"human_like": "Sends repeated notifications and voice reminders to feed Charlie until the task is marked as done or paused, ensuring reminders are not sent during the night.",
"complexity": "high"
}
},
{
"id": "clear_charlie_mealtime_notification",
"result": {
"structured": "TRIGGER: When charlie mealtime active input boolean [input_boolean.charlie_mealtime_active] turns off OR When charlie mealtime paused input boolean [input_boolean.charlie_mealtime_paused] turns on OR When charlie mealtime skipped input boolean [input_boolean.charlie_mealtime_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with a message to clear the notification tagged 'charlie_mealtime_reminder'.",
"natural_language": {
"trigger": "When the mealtime active status is turned off, or when the mealtime is marked as paused, or when the mealtime is marked as skipped.",
"conditions": "There are no additional conditions that need to be met.",
"action": "Sends a notification to Jason's device to clear any existing reminder notification tagged as 'charlie_mealtime_reminder'."
},
"human_like": "Clears the mealtime reminder notification for Charlie when the meal is no longer active, is paused, or is skipped.",
"complexity": "low"
}
},
{
"id": "turn_chill_scene_off",
"result": {
"structured": "TRIGGER: When timer.finished event occurs for chill scene timer [timer.chill_scene]. CONDITIONS: None. ACTIONS: Turn off chill scene switch [switch.chill_scene].",
"natural_language": {
"trigger": "When the chill scene timer [timer.chill_scene] finishes.",
"conditions": "There are no additional conditions.",
"action": "Turns off the chill scene switch [switch.chill_scene]."
},
"human_like": "Turns off the chill scene when its timer finishes.",
"complexity": "low"
}
},
{
"id": "clear_idle_media_player",
"result": {
"structured": "TRIGGER: When hass media player mass media player [media_player.hass_media_player_mass] OR kiosk speaker mass media player [media_player.kiosk_speaker_mass] becomes idle and remains idle for 30 seconds. CONDITIONS: The triggered media player entity supports the clear playlist feature (bitwise check of supported_features attribute for value 256). ACTIONS: Clear the playlist of the triggered media player entity.",
"natural_language": {
"trigger": "When either the hass media player mass media player [media_player.hass_media_player_mass] or the kiosk speaker mass media player [media_player.kiosk_speaker_mass] enters the 'idle' state and stays in that state for 30 seconds.",
"conditions": "The specific media player that triggered the automation must support the 'clear playlist' feature, as determined by a check of its capabilities.",
"action": "Clears the playlist of the media player that triggered the automation."
},
"human_like": "Automatically clears the playlist of a media player after it has been idle for 30 seconds, but only if the player supports that feature.",
"complexity": "medium"
}
},
{
"id": "climate_window_door_open",
"result": {
"structured": "TRIGGER: When climate window door open alert [alert.climate_window_door_open] turns on. CONDITIONS: None. ACTIONS: 1. Turn off climate house climate [climate.house]. 2. REPEAT: Wait for climate window door open alert [alert.climate_window_door_open] to change from 'on' OR from 'off' for up to 15 minutes. IF the wait times out AND climate house climate [climate.house] is not off AND climate window door open alert [alert.climate_window_door_open] is on, THEN: a. Turn off climate window door open alert [alert.climate_window_door_open]. b. Wait for climate window door open alert [alert.climate_window_door_open] to become idle for up to 2 hours. c. IF the wait times out, turn on climate window door open alert [alert.climate_window_door_open]. REPEAT UNTIL climate window door open alert [alert.climate_window_door_open] is idle OR off. 3. Set climate house climate [climate.house] to the mode stored in climate mode input select [input_select.climate_mode].",
"natural_language": {
"trigger": "When the climate window door open alert [alert.climate_window_door_open] becomes active (turns on).",
"conditions": "There are no conditions that must be met before the actions run.",
"action": "Immediately turns off the house thermostat [climate.house]. Then, it enters a loop that waits for the alert to change state (either from on or from off) for up to 15 minutes. If the alert does not change and the thermostat hasn't been manually turned back on, the automation turns off the alert and waits for it to become idle for up to 2 hours. If it doesn't become idle in that time, it turns the alert back on. This loop repeats until the alert is either idle or off. Finally, it restores the thermostat to the mode selected in the climate mode input select [input_select.climate_mode]."
},
"human_like": "Turns off the heating or cooling when a window or door is open, and manages an alert to remind you to close it before restoring the thermostat.",
"complexity": "high"
}
},
{
"id": "close_garage_door",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night OR Away OR Vacation AND remains for 1 second OR When house alarm [alarm_control_panel.house] changes to armed_home OR armed_night OR armed_away OR When side door lock status [sensor.side_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR back door lock status [sensor.back_door_lock_status] changes to Locked (Manual) AND previous state is NOT unknown OR unavailable OR When a mobile app notification action event with action 'close_garage_door' occurs. CONDITIONS: garage door binary sensor [binary_sensor.garage_door] is on. ACTIONS: Execute garage door script [script.garage_door].",
"natural_language": {
"trigger": "The automation triggers in four possible ways: first, when the occupancy mode [input_select.occupancy_mode] changes to Night, Away, or Vacation and stays in that state for at least one second; second, when the house alarm [alarm_control_panel.house] is armed to armed_home, armed_night, or armed_away; third, when any of the side door lock status [sensor.side_door_lock_status], front door lock status [sensor.front_door_lock_status], or back door lock status [sensor.back_door_lock_status] becomes manually locked, provided it wasn't previously in an unknown or unavailable state; or fourth, when a specific notification action 'close_garage_door' is received from a mobile app.",
"conditions": "The garage door must currently be open, as indicated by the garage door binary sensor [binary_sensor.garage_door] being in the 'on' state.",
"action": "Runs the garage door script [script.garage_door], which presumably closes the garage door."
},
"human_like": "Automatically closes the garage door when the house is set to a secure mode (like Night or Away), the alarm is armed, a door is manually locked, or a mobile app button is pressed, but only if the garage door is currently open.",
"complexity": "medium"
}
},
{
"id": "garage_door_closed",
"result": {
"structured": "TRIGGER: When garage door cover [cover.garage_door] attribute current_position changes to 0 (closed). CONDITIONS: garage door announcements input boolean [input_boolean.garage_door_announcements] is on. ACTIONS: Execute tts play script [script.tts_play] with parameters: message 'The garage door is closed.', provider 'HASS', language 'English (USA)', voice 'Guy:newscast', ignore_away true.",
"natural_language": {
"trigger": "When the garage door cover [cover.garage_door] is fully closed, as indicated by its current_position attribute becoming 0.",
"conditions": "The automation only runs if the garage door announcements input boolean [input_boolean.garage_door_announcements] is switched on.",
"action": "Plays a text-to-speech announcement saying 'The garage door is closed.' using the HASS provider, English (USA) language, and the 'Guy:newscast' voice, even when the system is in away mode."
},
"human_like": "Announces when the garage door is closed, but only if announcements are enabled.",
"complexity": "low"
}
},
{
"id": "commute_map_directions",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'work_directions' OR When a mobile app notification action event occurs with action 'home_directions'. CONDITIONS: None. ACTIONS: If the triggering event had id 'work', press directions to work button [button.directions_to_work]. Otherwise, press directions to home button [button.directions_to_home].",
"natural_language": {
"trigger": "When a notification action is received from the mobile app, specifically for either 'work_directions' or 'home_directions'.",
"conditions": "There are no additional conditions that must be met.",
"action": "If the notification action was for work, it presses the directions to work button [button.directions_to_work]. If the notification action was for home, it presses the directions to home button [button.directions_to_home]."
},
"human_like": "Opens Google Maps directions to either work or home based on which notification button is pressed on a mobile device.",
"complexity": "low"
}
},
{
"id": "turn_company_scene_off",
"result": {
"structured": "TRIGGER: When company scene timer [timer.company_scene] finishes. CONDITIONS: None. ACTIONS: Turn off company scene switch [switch.company_scene].",
"natural_language": {
"trigger": "When the company scene timer [timer.company_scene] finishes.",
"conditions": "There are no conditions.",
"action": "Turns off the company scene switch [switch.company_scene]."
},
"human_like": "Turns off the company scene when its timer finishes.",
"complexity": "low"
}
},
{
"id": "current_alarm_trigger",
"result": {
"structured": "TRIGGER: When alarm triggered [input_boolean.alarm_triggered] OR alarm pending [input_boolean.alarm_pending] changes state to on OR off. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: CHOOSE: IF (alarm triggered [input_boolean.alarm_triggered] is off AND alarm pending [input_boolean.alarm_pending] is off) THEN set current alarm [input_text.current_alarm] to empty string. OTHERWISE IF ((alarm triggered [input_boolean.alarm_triggered] is on AND alarm pending [input_boolean.alarm_pending] is off) OR (alarm triggered [input_boolean.alarm_triggered] is off AND alarm pending [input_boolean.alarm_pending] is on)) THEN set current alarm [input_text.current_alarm] to a value determined by: IF smoke alarm [binary_sensor.smoke_alarm] is on THEN 'Smoke Alert' ELSE IF co alarm [binary_sensor.co_alarm] is on THEN 'Carbon Monoxide Alert' ELSE IF heat alarm [binary_sensor.heat_alarm] is on THEN 'Heat/Fire Alert' ELSE the name of the first open sensor from house alarm [alarm_control_panel.house] attribute 'open_sensors' (with text formatting).",
"natural_language": {
"trigger": "When either the alarm triggered [input_boolean.alarm_triggered] or the alarm pending [input_boolean.alarm_pending] switches to an on or off state.",
"conditions": "The alarm system must be enabled, meaning the alarm enabled [input_boolean.alarm_enabled] is set to on.",
"action": "If both the alarm triggered and alarm pending states are off, the current alarm message [input_text.current_alarm] is cleared. Otherwise, if exactly one of them is on (either alarm triggered is on and alarm pending is off, or alarm triggered is off and alarm pending is on), a new message is set. The message is determined by checking active hazard sensors: a smoke alarm [binary_sensor.smoke_alarm] triggers a 'Smoke Alert', a carbon monoxide alarm [binary_sensor.co_alarm] triggers a 'Carbon Monoxide Alert', and a heat alarm [binary_sensor.heat_alarm] triggers a 'Heat/Fire Alert'. If none of these are active, the message is set to the name of the first sensor that triggered the alarm, retrieved from the house alarm panel [alarm_control_panel.house]."
},
"human_like": "Updates the displayed alarm message based on whether the alarm is triggered or pending, showing the specific hazard or sensor that caused the alert.",
"complexity": "medium"
}
},
{
"id": "turn_deck_tv_on",
"result": {
"structured": "TRIGGER: When the webostv.turn_on trigger is activated for deck tv media player [media_player.deck_tv]. CONDITIONS: None. ACTIONS: Send a Wake-on-LAN magic packet to the MAC address defined by the secret DECK_TV_MAC.",
"natural_language": {
"trigger": "When the system receives a command to turn on the deck tv media player [media_player.deck_tv] via the webOS TV integration.",
"conditions": "There are no conditions that must be met.",
"action": "Sends a Wake-on-LAN magic packet to the television's network interface using its stored MAC address to power it on."
},
"human_like": "Turns on the deck TV by sending a network wake-up signal when a turn-on command is received.",
"complexity": "low"
}
},
{
"id": "dining_room_hub_light_color_sync",
"result": {
"structured": "TRIGGER: When dining room hub [media_player.dining_room_hub] changes its entity_picture attribute OR when media color light sync input boolean [input_boolean.media_color_light_sync] OR dining room light rgb [light.dining_room_light_rgb] turns on. CONDITIONS: (media color light sync input boolean [input_boolean.media_color_light_sync] is on AND dining room light rgb [light.dining_room_light_rgb] is on) AND (the stored picture variable is not None) AND (media player is not an active tts player). ACTIONS: Call color_extractor.turn_on service on dining room light rgb [light.dining_room_light_rgb] with color_extract_url set to the picture variable, brightness at 80%, and a 5-second transition.",
"natural_language": {
"trigger": "The automation triggers when the entity picture attribute of the dining room hub [media_player.dining_room_hub] changes, or when either the media color light sync input boolean [input_boolean.media_color_light_sync] or the dining room light rgb [light.dining_room_light_rgb] is turned on.",
"conditions": "For the action to run, both the media color light sync input boolean [input_boolean.media_color_light_sync] and the dining room light rgb [light.dining_room_light_rgb] must be in the 'on' state. Additionally, the stored picture URL from the media player must be valid (not empty), and the dining room hub must not be currently acting as an active text-to-speech player.",
"action": "The automation extracts the dominant color from the media player's picture and applies it to the dining room light rgb [light.dining_room_light_rgb], setting the brightness to 80% with a smooth 5-second color transition."
},
"human_like": "Syncs the dining room RGB light to match the color of the picture currently displayed on the media hub, when sync is enabled and the light is on.",
"complexity": "medium"
}
},
{
"id": "turn_off_light_color_sync",
"result": {
"structured": "TRIGGER: When dining room light rgb [light.dining_room_light_rgb] turns off OR When dining room hub [media_player.dining_room_hub] becomes idle or off AND remains in that state for 60 seconds. CONDITIONS: media color light sync input boolean [input_boolean.media_color_light_sync] is on. ACTIONS: Turn off media color light sync input boolean [input_boolean.media_color_light_sync].",
"natural_language": {
"trigger": "When the dining room light rgb [light.dining_room_light_rgb] is turned off, or when the dining room hub [media_player.dining_room_hub] is idle or off for at least 60 seconds.",
"conditions": "The media color light sync input boolean [input_boolean.media_color_light_sync] must be turned on.",
"action": "Turns off the media color light sync input boolean [input_boolean.media_color_light_sync]."
},
"human_like": "Disables the media color light sync feature when the dining room light is turned off or the media player becomes inactive.",
"complexity": "low"
}
},
{
"id": "reset_dining_room_light_color",
"result": {
"structured": "TRIGGER: When media color light sync input boolean [input_boolean.media_color_light_sync] turns off OR when dining room hub [media_player.dining_room_hub] turns off and remains off for 15 seconds OR when work commute active binary sensor [binary_sensor.work_commute_active] OR work commute jason alert [alert.work_commute_jason] OR late for work jason alert [alert.late_for_work_jason] changes from on or off to off or idle OR when scene active binary sensor [binary_sensor.scene_active] changes from on to off. CONDITIONS: dining room light rgb [light.dining_room_light_rgb] is on AND alarm triggered [input_boolean.alarm_triggered] is off AND dining room light timer [timer.dining_room_light] is idle AND (IF the trigger was the player (media_player.dining_room_hub turning off) THEN media color light sync input boolean [input_boolean.media_color_light_sync] must be on, ELSE true) AND (IF scene active binary sensor [binary_sensor.scene_active] has an entity_id attribute THEN dining room light rgb [light.dining_room_light_rgb] must NOT be in that list, ELSE true). ACTIONS: IF (work commute active binary sensor [binary_sensor.work_commute_active] is on OR work commute jason alert [alert.work_commute_jason] is on OR late for work jason alert [alert.late_for_work_jason] is on) THEN run script work commute lights script [script.work_commute_lights]. ELSE run script reset rgb lights script [script.reset_rgb_lights] on dining room light rgb [light.dining_room_light_rgb] AND THEN IF (nighttime illuminance [binary_sensor.nighttime_illuminance] is off AND daytime illuminance [binary_sensor.daytime_illuminance] is off) THEN turn off dining room light rgb [light.dining_room_light_rgb].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when the media color light sync input boolean [input_boolean.media_color_light_sync] is turned off; when the dining room hub [media_player.dining_room_hub] is turned off and stays off for 15 seconds; when the work commute active binary sensor [binary_sensor.work_commute_active], the work commute jason alert [alert.work_commute_jason], or the late for work jason alert [alert.late_for_work_jason] changes from an active state (on/off) to an inactive state (off/idle); or when the scene active binary sensor [binary_sensor.scene_active] is deactivated (changes from on to off).",
"conditions": "For the automation to proceed, several conditions must be met: the dining room light rgb [light.dining_room_light_rgb] must be on; the alarm triggered [input_boolean.alarm_triggered] must be off; the dining room light timer [timer.dining_room_light] must be idle. Additionally, if the trigger was the dining room hub turning off, then the media color light sync input boolean [input_boolean.media_color_light_sync] must have been on at that moment. Finally, if the scene active binary sensor [binary_sensor.scene_active] is tracking specific lights, the dining room light rgb must not be one of them.",
"action": "The automation first checks if any work commute-related entity (work commute active binary sensor [binary_sensor.work_commute_active], work commute jason alert [alert.work_commute_jason], or late for work jason alert [alert.late_for_work_jason]) is active. If so, it runs the work commute lights script [script.work_commute_lights]. Otherwise, it runs the reset rgb lights script [script.reset_rgb_lights] on the dining room light rgb [light.dining_room_light_rgb]. After that, if both the nighttime illuminance [binary_sensor.nighttime_illuminance] and daytime illuminance [binary_sensor.daytime_illuminance] are off (indicating it's neither night nor day), it turns off the dining room light rgb."
},
"human_like": "Resets the color of the dining room light when media sync stops, the hub turns off, or a scene ends, but only if the light is on and no alarm or timer is active. It may also run a special lighting script during a work commute.",
"complexity": "high"
}
},
{
"id": "disable_guest_wifi",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night OR Away OR Vacation AND remains in that state for 1 minute. CONDITIONS: None. ACTIONS: Turn off jnet guest switch [switch.jnet_guest] AND turn off rt ax58u guest 2.4 ghz 1 switch [switch.rt_ax58u_guest_2_4_ghz_1] AND turn off rt ax58u guest 5 ghz 1 switch [switch.rt_ax58u_guest_5_ghz_1].",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] is set to either Night, Away, or Vacation and stays in that mode for at least one minute.",
"conditions": "There are no additional conditions that must be met.",
"action": "Turns off the guest Wi-Fi networks by switching off the jnet guest switch [switch.jnet_guest], the rt ax58u guest 2.4 ghz 1 switch [switch.rt_ax58u_guest_2_4_ghz_1], and the rt ax58u guest 5 ghz 1 switch [switch.rt_ax58u_guest_5_ghz_1]."
},
"human_like": "Automatically turns off the guest Wi-Fi when the house is set to Night, Away, or Vacation mode.",
"complexity": "low"
}
},
{
"id": "disarm_alarm",
"result": {
"structured": "TRIGGER: When side door lock status [sensor.side_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR back door lock status [sensor.back_door_lock_status] OR garage side door lock status [sensor.garage_side_door_lock_status] changes to Unlocked (Jason) OR Unlocked (Guest) OR Unlocked (Keypad) AND previous state was NOT unknown OR unavailable OR When mobile app notification action event with action disarm_alarm_jason occurs OR When mobile app notification action event with action doorbell_unlock_door occurs OR When danger alarm [binary_sensor.danger_alarm] changes from on to off OR When mobile app notification action event with action arriving_home_jason occurs OR When mobile app notification action event with action arriving_home_garage_jason occurs OR When mobile app notification action event with action disarm_danger_alarm occurs. CONDITIONS: alarm enabled [input_boolean.alarm_enabled] is on. ACTIONS: IF trigger is disarm_danger_alarm THEN send clear_notification to jason medication notification [notify.jason] with tag danger_alarm. IF trigger is arriving THEN wait for a template condition defined in alarm.jinja. THEN run disarm alarm script [script.disarm_alarm] with person variable set to the result of trigger_person function.",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when any of the door locks (side door, front door, back door, or garage side door) are unlocked by Jason, a guest, or a keypad; when a mobile app notification action is received to disarm the alarm, unlock the door via the doorbell, indicate arrival home (either main or garage), or disarm the danger alarm; or when the danger alarm sensor turns off.",
"conditions": "The automation only proceeds if the alarm enabled [input_boolean.alarm_enabled] is turned on.",
"action": "Depending on the trigger, the automation performs different actions. If the trigger is to disarm the danger alarm, it clears a specific notification for Jason. If the trigger is an arrival notification, it waits for a custom condition check. Finally, it runs the main disarm alarm script, passing along information about who triggered it."
},
"human_like": "Disarms the house alarm when an authorized person unlocks a door, uses a mobile app action, or when the danger alarm is cleared, but only if the alarm system is currently enabled.",
"complexity": "medium"
}
},
{
"id": "dishwasher_rinse_refill",
"result": {
"structured": "TRIGGER: When dishwasher sensor [sensor.dishwasher] changes to state 'on' (excluding transitions from 'unknown' or 'unavailable') AND remains in that state for 5 minutes. CONDITIONS: The attribute 'rinse_refill' of dishwasher sensor [sensor.dishwasher] is 'on'. ACTIONS: Execute the tts play script [script.tts_play] with the message 'Attention! The dishwasher rinse agent needs to be refilled!' on the media player dining room hub [media_player.dining_room_hub] using quiet play and saving the message.",
"natural_language": {
"trigger": "When the dishwasher sensor [sensor.dishwasher] turns on and stays on for at least five minutes, ignoring any transitions from an unknown or unavailable state.",
"conditions": "The dishwasher sensor [sensor.dishwasher] must have its 'rinse_refill' attribute set to on.",
"action": "Plays a text-to-speech announcement on the dining room hub [media_player.dining_room_hub] saying 'Attention! The dishwasher rinse agent needs to be refilled!', using quiet play and saving the message."
},
"human_like": "Announces when the dishwasher rinse agent needs to be refilled, triggered after the dishwasher has been running for five minutes.",
"complexity": "low"
}
},
{
"id": "doorbell_notification",
"result": {
"structured": "TRIGGER: When doorbell input button [input_button.doorbell] is pressed (state change). CONDITIONS: The automation has never been triggered before OR the time since its last trigger is greater than 30 seconds. ACTIONS: 1. Turn on tts play script [script.tts_play] with variables: message='Some ugly schmuck is ringing the doorbell', media_player=media_player.dining_room_hub, quiet_play=true, save_message=false. 2. Turn on kiosk display camera script [script.kiosk_display_camera] with variable camera='front_door'. 3. Take a snapshot from front door camera [camera.front_door] and save it to a generated filename. 4. Wait for 1 second. 5. Send a notification to jason medication notification [notify.jason] with message='Front Doorbell', including an image from the snapshot, vibration pattern, and action buttons for 'Cameras' and 'Unlock'.",
"natural_language": {
"trigger": "When the doorbell input button [input_button.doorbell] is pressed.",
"conditions": "The automation only runs if it has never been triggered before, or if more than 30 seconds have passed since it was last triggered.",
"action": "First, it plays a text-to-speech announcement on the dining room hub [media_player.dining_room_hub] saying 'Some ugly schmuck is ringing the doorbell'. Then, it displays the front door camera [camera.front_door] feed on the kiosk. Next, it takes a snapshot from the front door camera and saves it. After a one-second delay, it sends a rich notification to Jason [notify.jason] with the message 'Front Doorbell', the snapshot image, a custom vibration, and action buttons to view cameras or unlock the door."
},
"human_like": "When someone rings the doorbell, it announces the event, shows the front door camera on a screen, and sends a detailed notification with a snapshot and quick actions.",
"complexity": "medium"
}
},
{
"id": "turn_downstairs_bathroom_vent_fan_off",
"result": {
"structured": "TRIGGER: When downstairs bathroom fan [fan.downstairs_bathroom_fan] remains on for 1 hour OR When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation and remains for 1 minute OR When indoor high temperature alert [alert.indoor_high_temperature] becomes idle. CONDITIONS: downstairs bathroom fan [fan.downstairs_bathroom_fan] is on AND indoor high temperature alert [alert.indoor_high_temperature] is idle. ACTIONS: Execute turn fan off script [script.turn_fan_off] for downstairs bathroom fan [fan.downstairs_bathroom_fan] with override parameter set to true if the trigger was occupancy mode change, otherwise false.",
"natural_language": {
"trigger": "The automation can start when the downstairs bathroom fan [fan.downstairs_bathroom_fan] has been running continuously for one hour, when the occupancy mode [input_select.occupancy_mode] switches to 'Away' or 'Vacation' and stays that way for one minute, or when the indoor high temperature alert [alert.indoor_high_temperature] returns to an idle state.",
"conditions": "For the automation to proceed, the downstairs bathroom fan [fan.downstairs_bathroom_fan] must currently be on, and the indoor high temperature alert [alert.indoor_high_temperature] must be idle.",
"action": "It runs the turn fan off script [script.turn_fan_off] to turn off the downstairs bathroom fan [fan.downstairs_bathroom_fan]. If the automation was triggered by a change in the occupancy mode, it passes an 'override' parameter to the script."
},
"human_like": "Turns off the downstairs bathroom fan after an hour of runtime, when the house is set to 'Away' or 'Vacation' mode, or when a high-temperature alert clears, ensuring the fan isn't left on unnecessarily.",
"complexity": "medium"
}
},
{
"id": "enable_alarm",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'enable_alarm'. CONDITIONS: None. ACTIONS: Turn on alarm enabled [input_boolean.alarm_enabled].",
"natural_language": {
"trigger": "When a specific action named 'enable_alarm' is tapped on a notification sent to a mobile device.",
"conditions": "There are no conditions that must be met.",
"action": "Turns on the alarm enabled [input_boolean.alarm_enabled] input boolean."
},
"human_like": "Enables the house alarm when a user taps the 'enable_alarm' action on a mobile notification.",
"complexity": "low"
}
},
{
"id": "turn_alarm_auto_arming_on",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'enable_auto_arming' is received. CONDITIONS: None. ACTIONS: Turn on alarm auto arming [input_boolean.alarm_auto_arming].",
"natural_language": {
"trigger": "When a specific action named 'enable_auto_arming' is triggered from a mobile app notification.",
"conditions": "There are no conditions that must be met.",
"action": "Enables the alarm auto arming feature by turning on the alarm auto arming [input_boolean.alarm_auto_arming] switch."
},
"human_like": "Enables the alarm's automatic arming feature when a specific button is pressed in a mobile app notification.",
"complexity": "low"
}
},
{
"id": "enable_pihole",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'enable_pihole'. CONDITIONS: None. ACTIONS: Turn on pi hole switch [switch.pi_hole].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the 'enable_pihole' action.",
"conditions": "There are no conditions that must be met.",
"action": "Turns on the pi hole switch [switch.pi_hole]."
},
"human_like": "Turns on the Pi-hole ad blocker when a user taps the 'enable_pihole' action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "envcan_weather_alert",
"result": {
"structured": "TRIGGER: When any of the following sensors changes to a non-null state (not from unknown or unavailable) and remains stable for 10 seconds: windsor warnings sensor [sensor.windsor_warnings], windsor watches sensor [sensor.windsor_watches], windsor statements sensor [sensor.windsor_statements], or windsor advisory sensor [sensor.windsor_advisory]. CONDITIONS: The trigger's from_state and to_state are different AND the state of the triggering entity is a numerical value. ACTIONS: IF envcan weather alert binary sensor [binary_sensor.envcan_weather_alert] is off, THEN clear the notification with tag 'envcan_alert' via jason medication notification [notify.jason], set previous envcan alert title input text [input_text.previous_envcan_alert_title] to empty, and set previous envcan alert severity input select [input_select.previous_envcan_alert_severity] to 'none'. ELSE (if the sensor is on), THEN IF the current alert severity is more severe than the previous severity OR the alert title has changed and is not empty, THEN send a notification via jason medication notification [notify.jason] with alert details and run the tts play script [script.tts_play] to announce the weather alert (with quiet_play if severity is 'warning' or 'watch'). THEN update previous envcan alert title input text [input_text.previous_envcan_alert_title] with the current title and previous envcan alert severity input select [input_select.previous_envcan_alert_severity] with the current severity.",
"natural_language": {
"trigger": "When any of the Windsor weather alert sensors (windsor warnings sensor [sensor.windsor_warnings], windsor watches sensor [sensor.windsor_watches], windsor statements sensor [sensor.windsor_statements], or windsor advisory sensor [sensor.windsor_advisory]) changes from a known state to a non-null state, and remains in that new state for at least 10 seconds.",
"conditions": "The state change must be a real change (the old and new states are different), and the new state of the triggering sensor must be a number.",
"action": "If the envcan weather alert binary sensor [binary_sensor.envcan_weather_alert] is off, it clears any existing weather alert notification and resets the stored previous alert title and severity. If the sensor is on, it checks if the new alert is more severe than the last recorded one, or if the alert title has changed. If either is true, it sends a detailed notification to the user and plays a text-to-speech announcement of the alert (playing quietly for severe warnings or watches). Finally, it updates the stored previous alert title and severity for future comparisons."
},
"human_like": "This automation monitors Environment Canada weather alerts for Windsor, sending notifications and voice announcements for new or more severe alerts, while clearing old alerts when conditions improve.",
"complexity": "high"
}
},
{
"id": "turn_fan_schedule_on",
"result": {
"structured": "TRIGGER: When fan schedule input boolean [input_boolean.fan_schedule] turns on OR When timer.finished event occurs for fan schedule delay timer [timer.fan_schedule_delay]. CONDITIONS: fan schedule input boolean [input_boolean.fan_schedule] is on. ACTIONS: Start fan schedule duration timer [timer.fan_schedule_duration] for a duration equal to the value of fan schedule duration input number [input_number.fan_schedule_duration] (in minutes).",
"natural_language": {
"trigger": "When the fan schedule input boolean [input_boolean.fan_schedule] is turned on, or when the fan schedule delay timer [timer.fan_schedule_delay] finishes.",
"conditions": "The fan schedule input boolean [input_boolean.fan_schedule] must be in the 'on' state.",
"action": "Starts the fan schedule duration timer [timer.fan_schedule_duration] for a number of minutes specified by the fan schedule duration input number [input_number.fan_schedule_duration]."
},
"human_like": "Starts a fan timer for a set duration when the fan schedule is enabled, either immediately or after a delay.",
"complexity": "medium"
}
},
{
"id": "turn_fan_schedule_off",
"result": {
"structured": "TRIGGER: When fan schedule input boolean [input_boolean.fan_schedule] turns off OR When timer.cancelled event occurs for fan schedule duration timer [timer.fan_schedule_duration] OR When timer.cancelled event occurs for fan schedule delay timer [timer.fan_schedule_delay]. CONDITIONS: None. ACTIONS: Turn off fan schedule input boolean [input_boolean.fan_schedule]. IF climate house climate [climate.house] fan_mode attribute is 'on', THEN set fan_mode to 'off'. IF fan schedule duration timer [timer.fan_schedule_duration] is paused OR active, THEN cancel fan schedule duration timer [timer.fan_schedule_duration]. IF fan schedule delay timer [timer.fan_schedule_delay] is paused OR active, THEN cancel fan schedule delay timer [timer.fan_schedule_delay].",
"natural_language": {
"trigger": "When the fan schedule input boolean [input_boolean.fan_schedule] is turned off, or when either the fan schedule duration timer [timer.fan_schedule_duration] or the fan schedule delay timer [timer.fan_schedule_delay] is cancelled.",
"conditions": "There are no conditions that must be met for the actions to run; the automation executes immediately upon any trigger.",
"action": "First, it turns off the fan schedule input boolean [input_boolean.fan_schedule] again (ensuring its state is off). If the climate house climate [climate.house] is currently set to fan mode 'on', it will turn the fan mode off. Then, it checks the status of the fan schedule duration timer [timer.fan_schedule_duration] and the fan schedule delay timer [timer.fan_schedule_delay]; if either timer is currently active or paused, it cancels that timer."
},
"human_like": "Stops the fan schedule, turns off the house fan if it's running, and cancels any related timers when the schedule is manually turned off or a timer is cancelled.",
"complexity": "medium"
}
},
{
"id": "fan_schedule_delay",
"result": {
"structured": "TRIGGER: When timer.fan_schedule_duration finishes. CONDITIONS: fan schedule input boolean [input_boolean.fan_schedule] is on. ACTIONS: Start fan schedule delay timer [timer.fan_schedule_delay] for a duration equal to the value of fan schedule delay input number [input_number.fan_schedule_delay] (in minutes).",
"natural_language": {
"trigger": "When the fan schedule duration timer [timer.fan_schedule_duration] finishes.",
"conditions": "If the fan schedule input boolean [input_boolean.fan_schedule] is turned on.",
"action": "Starts the fan schedule delay timer [timer.fan_schedule_delay] for a number of minutes equal to the current value set in the fan schedule delay input number [input_number.fan_schedule_delay]."
},
"human_like": "Starts a delay timer for the fan schedule when the main schedule timer finishes, provided the schedule is active.",
"complexity": "low"
}
},
{
"id": "fan_schedule_adjusted",
"result": {
"structured": "TRIGGER: When fan schedule duration input number [input_number.fan_schedule_duration] OR fan schedule delay input number [input_number.fan_schedule_delay] changes state. CONDITIONS: fan schedule input boolean [input_boolean.fan_schedule] is on. ACTIONS: Wait for 30 seconds. Then, if fan schedule duration timer [timer.fan_schedule_duration] is active OR paused, start fan schedule duration timer [timer.fan_schedule_duration] with a duration equal to (the value of fan schedule duration input number [input_number.fan_schedule_duration] in minutes multiplied by 60, plus 5 seconds). Otherwise, if fan schedule delay timer [timer.fan_schedule_delay] is active OR paused, start fan schedule delay timer [timer.fan_schedule_delay] with a duration equal to (the value of fan schedule delay input number [input_number.fan_schedule_delay] in minutes multiplied by 60, plus 5 seconds). Finally, send a browser mod notification [browser_mod.notification] with a message 'Scheduled climate fan timers have been adjusted.' for 10 seconds.",
"natural_language": {
"trigger": "The automation is triggered whenever the value of the fan schedule duration input number [input_number.fan_schedule_duration] or the fan schedule delay input number [input_number.fan_schedule_delay] changes.",
"conditions": "The automation only proceeds if the fan schedule input boolean [input_boolean.fan_schedule] is currently turned on.",
"action": "After a 30-second delay, the automation checks the state of two timers. If the fan schedule duration timer [timer.fan_schedule_duration] is either active or paused, it restarts that timer. The new duration is calculated by taking the current value from the fan schedule duration input number [input_number.fan_schedule_duration] (which is in minutes), converting it to seconds, and adding 5 seconds. If the first timer is not in an active or paused state, it then checks the fan schedule delay timer [timer.fan_schedule_delay]. If that timer is active or paused, it restarts it using the value from the fan schedule delay input number [input_number.fan_schedule_delay] (also in minutes), converting to seconds and adding 5 seconds. Finally, a notification is sent to the browser with the message 'Scheduled climate fan timers have been adjusted.' for 10 seconds."
},
"human_like": "When the fan schedule duration or delay settings are changed, this automation updates the corresponding running timers and sends a confirmation notification.",
"complexity": "medium"
}
},
{
"id": "turn_fan_timer_on",
"result": {
"structured": "TRIGGER: When bathroom fan [fan.bathroom_fan] OR living room fan [fan.living_room_fan] OR office fan [fan.office_fan] OR bedroom fan [fan.bedroom_fan] changes state to on OR off. CONDITIONS: If the triggering entity has an attribute 'type' equal to 'vent', then the condition is true only if the new state is not 'off'. Otherwise, the condition is always true. ACTIONS: Start a timer for the specific fan using a template function 'fan_timer' that determines the timer entity based on the triggering fan entity.",
"natural_language": {
"trigger": "When any of the fans (bathroom fan [fan.bathroom_fan], living room fan [fan.living_room_fan], office fan [fan.office_fan], or bedroom fan [fan.bedroom_fan]) turn on or off.",
"conditions": "If the fan that changed state is of type 'vent', the automation proceeds only if the fan was turned on. For other fan types, the automation proceeds regardless of whether it was turned on or off.",
"action": "Starts a timer associated with the specific fan that triggered the automation."
},
"human_like": "Starts a timer for a fan whenever it is turned on or off, with special handling for vent-type fans to only start the timer when they are turned on.",
"complexity": "medium"
}
},
{
"id": "turn_fireplace_on",
"result": {
"structured": "TRIGGER: When indoor low temperature alert [alert.indoor_low_temperature] turns on. CONDITIONS: None. ACTIONS: Turn on fireplace switch [switch.fireplace]. IF the trigger was alert [alert.indoor_low_temperature] turning on, THEN send a notification to jason medication notification [notify.jason] with a title 'Fireplace Alert' and a message containing HVAC Mode: climate house climate [climate.house] state, HVAC State: climate house climate [climate.house] hvac_action attribute, Temperature: indoor temperature sensor [sensor.indoor_temperature] state with unit, Target: indoor temperature target sensor [sensor.indoor_temperature_target] state with unit. The notification includes data for grouping, icon, color, vibration, a click action, and an action button titled 'Fireplace Off'.",
"natural_language": {
"trigger": "When the indoor low temperature alert [alert.indoor_low_temperature] becomes active.",
"conditions": "There are no conditions that must be met.",
"action": "The automation turns on the fireplace switch [switch.fireplace]. Additionally, if the automation was triggered by the indoor low temperature alert, it sends a detailed notification to jason medication notification [notify.jason]. This notification includes the current HVAC mode and state, the indoor temperature and its target, and provides a button to turn the fireplace off."
},
"human_like": "Automatically turns on the fireplace and sends an alert when the indoor temperature gets too low.",
"complexity": "medium"
}
},
{
"id": "turn_fireplace_off",
"result": {
"structured": "TRIGGER: When fireplace switch [switch.fireplace] remains on for 60 minutes OR When living room sensor temperature sensor [sensor.living_room_sensor_temperature] is above 22 OR When indoor low temperature alert [alert.indoor_low_temperature] becomes idle OR When occupancy mode [input_select.occupancy_mode] changes to Night, Away, or Vacation and remains for 1 minute OR When a mobile app notification action event with action 'fireplace_off' occurs. CONDITIONS: fireplace switch [switch.fireplace] is on AND (living room sensor temperature sensor [sensor.living_room_sensor_temperature] is above 22 OR indoor low temperature alert [alert.indoor_low_temperature] is idle OR the trigger was the mobile app notification action). ACTIONS: Turn off fireplace switch [switch.fireplace].",
"natural_language": {
"trigger": "The automation can start in several ways: if the fireplace switch [switch.fireplace] has been on for a full hour, if the living room temperature sensor [sensor.living_room_sensor_temperature] reports a temperature above 22 degrees, if the indoor low temperature alert [alert.indoor_low_temperature] clears and becomes idle, if the occupancy mode [input_select.occupancy_mode] is set to Night, Away, or Vacation for at least one minute, or if a specific 'fireplace_off' action is received from a mobile app notification.",
"conditions": "For the automation to proceed, the fireplace switch [switch.fireplace] must currently be on. Additionally, at least one of the following must be true: the living room temperature [sensor.living_room_sensor_temperature] is above 22 degrees, the indoor low temperature alert [alert.indoor_low_temperature] is idle, or the trigger that started the automation was the mobile app notification action.",
"action": "Turns off the fireplace by sending a command to the fireplace switch [switch.fireplace]."
},
"human_like": "Automatically turns off the fireplace when it has been on for too long, the room is warm enough, the low-temperature alert is inactive, the house is in a low-occupancy mode, or a user requests it via a mobile notification.",
"complexity": "medium"
}
},
{
"id": "fireplace_safety_check",
"result": {
"structured": "TRIGGER: Every 5 minutes (time pattern). CONDITIONS: (fireplace switch [switch.fireplace] is on) AND (someone home [binary_sensor.someone_home] is off) AND (indoor low temperature alert [alert.indoor_low_temperature] is idle). ACTIONS: Turn off fireplace switch [switch.fireplace] AND send a notification to jason medication notification [notify.jason] with title 'Fireplace Alert' and message 'The fireplace was on but nobody is home. It has been turned off.'.",
"natural_language": {
"trigger": "The automation runs every 5 minutes.",
"conditions": "The fireplace switch [switch.fireplace] must be on, the someone home [binary_sensor.someone_home] sensor must indicate that nobody is home, and the indoor low temperature alert [alert.indoor_low_temperature] must be in an idle state (not active).",
"action": "It turns off the fireplace switch [switch.fireplace] and sends an urgent notification to jason medication notification [notify.jason] with a message stating the fireplace was turned off because nobody was home."
},
"human_like": "Automatically turns off the fireplace and sends an alert if it's left on when nobody is home and there is no low temperature alert.",
"complexity": "low"
}
},
{
"id": "turn_furnace_filter_on",
"result": {
"structured": "TRIGGER: When the template evaluates to true. The template condition is: IF furnace filter enabled input boolean [input_boolean.furnace_filter_enabled] is on AND furnace filter hours sensor [sensor.furnace_filter_hours] is greater than or equal to furnace filter hours input number [input_number.furnace_filter_hours] AND ( (work status sensor [sensor.work_status] shift attribute is 'Days' AND time sensor [sensor.time] matches the first 5 characters of furnace filter days input datetime [input_datetime.furnace_filter_days]) OR (work status sensor [sensor.work_status] shift attribute is 'Afternoons' AND time sensor [sensor.time] matches the first 5 characters of furnace filter afternoons input datetime [input_datetime.furnace_filter_afternoons]) OR (work status sensor [sensor.work_status] shift attribute is 'Off' AND time sensor [sensor.time] matches the first 5 characters of furnace filter weekends input datetime [input_datetime.furnace_filter_weekends]) ). CONDITIONS: None. ACTIONS: IF furnace filter active input boolean [input_boolean.furnace_filter_active] is on THEN turn it off. IF furnace filter paused input boolean [input_boolean.furnace_filter_paused] is on THEN turn it off (action is listed twice). IF furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] is on THEN turn it off, OTHERWISE turn on furnace filter active input boolean [input_boolean.furnace_filter_active].",
"natural_language": {
"trigger": "The automation triggers when a complex set of conditions is met. First, the furnace filter reminder must be enabled. Then, the number of hours the furnace filter has been used must meet or exceed a configured limit. Finally, the current time of day must match a specific time slot based on the user's work shift. If the work shift is 'Days', the time must match the configured 'Days' time. If the shift is 'Afternoons', the time must match the 'Afternoons' time. If the shift is 'Off', the time must match the 'Weekends' time.",
"conditions": "There are no separate conditions defined; all logic is contained within the trigger template.",
"action": "The automation performs a series of checks and actions on several status booleans. If the furnace filter active status is already on, it is turned off. If the furnace filter paused status is on, it is turned off (this action is performed twice in the YAML). If the furnace filter skipped status is on, it is turned off. If the furnace filter skipped status is off, then the furnace filter active status is turned on, effectively activating the reminder."
},
"human_like": "Activates a furnace filter maintenance reminder when the filter usage hours reach a limit, but only at specific times depending on your work schedule.",
"complexity": "high"
}
},
{
"id": "furnace_filter_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'furnace_filter_done' is received. CONDITIONS: furnace filter active input boolean [input_boolean.furnace_filter_active] is on. ACTIONS: Press furnace filter done button [button.furnace_filter_done].",
"natural_language": {
"trigger": "When a specific action ('furnace_filter_done') is tapped on a notification sent to the mobile app.",
"conditions": "The furnace filter active input boolean [input_boolean.furnace_filter_active] must be in the 'on' state.",
"action": "Press the furnace filter done button [button.furnace_filter_done]."
},
"human_like": "Marks a furnace filter reminder as completed when the user taps the corresponding notification, provided the reminder is currently active.",
"complexity": "low"
}
},
{
"id": "skip_furnace_filter",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_furnace_filter'. CONDITIONS: None. ACTIONS: Press skip furnace filter button [button.skip_furnace_filter].",
"natural_language": {
"trigger": "When a specific action named 'skip_furnace_filter' is performed via a mobile app notification.",
"conditions": "There are no additional conditions that need to be met.",
"action": "Presses the skip furnace filter button [button.skip_furnace_filter]."
},
"human_like": "Skips the furnace filter reminder by pressing a button when the user selects the skip action from a mobile notification.",
"complexity": "low"
}
},
{
"id": "pause_furnace_filter",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'pause_furnace_filter' is received. CONDITIONS: None. ACTIONS: Turn on furnace filter paused input boolean [input_boolean.furnace_filter_paused].",
"natural_language": {
"trigger": "When a specific action ('pause_furnace_filter') is tapped on a notification sent to a mobile app.",
"conditions": "There are no conditions that must be met.",
"action": "Sets the furnace filter paused input boolean [input_boolean.furnace_filter_paused] to on."
},
"human_like": "Pauses the furnace filter reminder when the user taps the 'pause' action on a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_furnace_filter",
"result": {
"structured": "TRIGGER: When furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] turns on OR When furnace filter paused input boolean [input_boolean.furnace_filter_paused] remains on for 24 hours OR When owner home [binary_sensor.owner_home] remains on for 15 minutes. CONDITIONS: furnace filter paused input boolean [input_boolean.furnace_filter_paused] is on. ACTIONS: Turn off furnace filter paused input boolean [input_boolean.furnace_filter_paused].",
"natural_language": {
"trigger": "The automation triggers in three situations: when the furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] is turned on, when the furnace filter paused input boolean [input_boolean.furnace_filter_paused] has been on for 24 hours, or when the owner home [binary_sensor.owner_home] sensor has been on for 15 minutes.",
"conditions": "The automation only proceeds if the furnace filter paused input boolean [input_boolean.furnace_filter_paused] is currently on.",
"action": "Resets the paused state by turning off the furnace filter paused input boolean [input_boolean.furnace_filter_paused]."
},
"human_like": "Resets the furnace filter reminder pause when the reminder is skipped, the pause has lasted a full day, or the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_furnace_filter_booleans",
"result": {
"structured": "TRIGGER: When furnace filter enabled input boolean [input_boolean.furnace_filter_enabled] turns off OR When furnace filter active input boolean [input_boolean.furnace_filter_active] turns off OR When furnace filter active input boolean [input_boolean.furnace_filter_active] OR furnace filter paused input boolean [input_boolean.furnace_filter_paused] OR furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] turns on. CONDITIONS: (furnace filter enabled input boolean [input_boolean.furnace_filter_enabled] is off) OR (furnace filter paused input boolean [input_boolean.furnace_filter_paused] turned on AND (furnace filter active input boolean [input_boolean.furnace_filter_active] is off OR furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] is on)) OR (trigger id is 'done'). ACTIONS: If the trigger id is 'entity', turn off the specific entity that triggered the automation. Otherwise, turn off furnace filter active input boolean [input_boolean.furnace_filter_active], furnace filter paused input boolean [input_boolean.furnace_filter_paused], and furnace filter skipped input boolean [input_boolean.furnace_filter_skipped].",
"natural_language": {
"trigger": "The automation triggers when the furnace filter enabled input boolean [input_boolean.furnace_filter_enabled] is turned off, when the furnace filter active input boolean [input_boolean.furnace_filter_active] is turned off, or when any of the three booleans (furnace filter active, paused, or skipped) are turned on.",
"conditions": "The automation proceeds if the furnace filter reminder is disabled, if the pause boolean is turned on while the reminder is either not active or has been skipped, or if the trigger was specifically the furnace filter active boolean turning off (marking the reminder as completed).",
"action": "Depending on the trigger, the automation either turns off the specific boolean that was just turned on (if the trigger was one of the three booleans turning on), or it turns off all three booleans (active, paused, and skipped) to reset the reminder state."
},
"human_like": "Resets the furnace filter reminder booleans when the reminder is disabled, completed, or paused under invalid conditions.",
"complexity": "medium"
}
},
{
"id": "furnace_filter_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When furnace filter active input boolean [input_boolean.furnace_filter_active] turns on OR When furnace filter paused input boolean [input_boolean.furnace_filter_paused] turns off. CONDITIONS: furnace filter active input boolean [input_boolean.furnace_filter_active] is on AND furnace filter paused input boolean [input_boolean.furnace_filter_paused] is off. ACTIONS: REPEAT the following sequence until furnace filter active input boolean [input_boolean.furnace_filter_active] is off OR furnace filter paused input boolean [input_boolean.furnace_filter_paused] is on: 1. IF occupancy mode [input_select.occupancy_mode] is NOT 'Night', THEN send a persistent notification to jason medication notification [notify.jason] with actions to Pause, Skip, or Done, AND WAIT until furnace filter active input boolean [input_boolean.furnace_filter_active] is off OR furnace filter paused input boolean [input_boolean.furnace_filter_paused] is on, with a timeout of 2 minutes. 2. IF after the wait, furnace filter active input boolean [input_boolean.furnace_filter_active] is still on AND furnace filter paused input boolean [input_boolean.furnace_filter_paused] is still off, THEN run tts play script [script.tts_play] with a TTS message. 3. WAIT again until furnace filter active input boolean [input_boolean.furnace_filter_active] is off OR furnace filter paused input boolean [input_boolean.furnace_filter_paused] is on, with a timeout equal to the value of furnace filter notification interval input number [input_number.furnace_filter_notification_interval] minutes.",
"natural_language": {
"trigger": "The automation triggers when Home Assistant starts, when the furnace filter active input boolean [input_boolean.furnace_filter_active] is turned on, or when the furnace filter paused input boolean [input_boolean.furnace_filter_paused] is turned off.",
"conditions": "Both the furnace filter active input boolean [input_boolean.furnace_filter_active] must be on and the furnace filter paused input boolean [input_boolean.furnace_filter_paused] must be off for the automation to proceed.",
"action": "The automation enters a repeating loop that continues until the reminder is either deactivated or paused. In each loop iteration, if the house is not in 'Night' occupancy mode, it sends a persistent notification to Jason with options to pause, skip, or mark the task as done. It then waits for up to 2 minutes for the reminder to be turned off or paused. If after this wait the reminder is still active and not paused, it plays a text-to-speech reminder. Finally, it waits again for a longer period, determined by a configurable interval, before repeating the loop."
},
"human_like": "Sends repeated notifications and voice reminders to change the furnace filter until the user acknowledges the task, with options to pause, skip, or mark it as complete.",
"complexity": "high"
}
},
{
"id": "clear_furnace_filter_notification",
"result": {
"structured": "TRIGGER: When furnace filter active input boolean [input_boolean.furnace_filter_active] turns off OR When furnace filter paused input boolean [input_boolean.furnace_filter_paused] turns on OR When furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with a message to clear the notification tagged 'furnace_filter_reminder'.",
"natural_language": {
"trigger": "The automation triggers when the furnace filter active input boolean [input_boolean.furnace_filter_active] is turned off, or when either the furnace filter paused input boolean [input_boolean.furnace_filter_paused] or furnace filter skipped input boolean [input_boolean.furnace_filter_skipped] is turned on.",
"conditions": "There are no conditions for this automation.",
"action": "It sends a notification to jason medication notification [notify.jason] with a command to clear any existing notification that has the tag 'furnace_filter_reminder'."
},
"human_like": "Clears the furnace filter reminder notification when the filter task is deactivated, paused, or skipped.",
"complexity": "low"
}
},
{
"id": "garage_door_check",
"result": {
"structured": "TRIGGER: When garage door cover [cover.garage_door] changes state to opening OR when garage door cover [cover.garage_door] changes state to closing. CONDITIONS: None. ACTIONS: Execute garage door check script [script.garage_door_check] with data variable check_state set to the trigger id (open or closed).",
"natural_language": {
"trigger": "When the garage door cover [cover.garage_door] starts opening or starts closing.",
"conditions": "There are no conditions for this automation.",
"action": "Runs the garage door check script [script.garage_door_check], passing it information about whether the trigger was for opening or closing."
},
"human_like": "Checks the garage door status and sends a notification or plays an announcement whenever the door starts to open or close.",
"complexity": "low"
}
},
{
"id": "garage_door_extended_open_alert",
"result": {
"structured": "TRIGGER: When garage door binary sensor [binary_sensor.garage_door] remains open (on) for 20 minutes. CONDITIONS: None. ACTIONS: Turn on garage door alert input boolean [input_boolean.garage_door_alert]. Then, repeat the following sequence until garage door alert input boolean [input_boolean.garage_door_alert] is off OR garage door binary sensor [binary_sensor.garage_door] is off: 1. Set variables: open_time (time the door opened, formatted) and open_duration (time since the door opened). 2. Execute garage door notification script [script.garage_door_notification] with a message containing the open_duration and open_time, notifying 'jason'. 3. Wait for up to 15 minutes for the condition (garage door alert input boolean [input_boolean.garage_door_alert] is off OR garage door binary sensor [binary_sensor.garage_door] is off) to become true. Finally, turn off garage door alert input boolean [input_boolean.garage_door_alert].",
"natural_language": {
"trigger": "When the garage door binary sensor [binary_sensor.garage_door] has been in the open state for 20 consecutive minutes.",
"conditions": "There are no additional conditions that must be met for the automation to run.",
"action": "First, it turns on the garage door alert input boolean [input_boolean.garage_door_alert]. Then, it enters a repeating loop. In each loop, it calculates the time the door opened and how long it has been open, sends a notification via the garage door notification script [script.garage_door_notification] to 'jason' with these details, and then waits for up to 15 minutes for either the alert to be manually turned off or for the garage door to close. This loop repeats until one of those two conditions is met. Finally, it turns the garage door alert input boolean [input_boolean.garage_door_alert] off."
},
"human_like": "Sends repeated notifications if the garage door is left open for too long, reminding the user until it is closed or the alert is acknowledged.",
"complexity": "medium"
}
},
{
"id": "clear_garage_doo_alert_notification",
"result": {
"structured": "TRIGGER: When garage door alert input boolean [input_boolean.garage_door_alert] changes to off OR When a mobile app notification action event with action 'turn_off_garage_door_alert' occurs. CONDITIONS: None. ACTIONS: Turn off garage door alert input boolean [input_boolean.garage_door_alert] AND Send a notification to jason medication notification [notify.jason] with a message 'clear_notification' and data tag 'garage_door_alert'.",
"natural_language": {
"trigger": "The automation triggers in two ways: when the garage door alert input boolean [input_boolean.garage_door_alert] is turned off, or when a specific action ('turn_off_garage_door_alert') is received from a mobile app notification.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "The automation turns off the garage door alert input boolean [input_boolean.garage_door_alert] and sends a clear notification command to the jason medication notification [notify.jason] service, specifying the tag 'garage_door_alert'."
},
"human_like": "Clears the garage door alert and its associated notification when the alert is manually turned off or dismissed from a mobile device.",
"complexity": "low"
}
},
{
"id": "turn_garage_freeze_protection_on",
"result": {
"structured": "TRIGGER: When garage climate [climate.garage] attribute preset_mode changes to eco. CONDITIONS: None. ACTIONS: Turn on garage freeze protection input boolean [input_boolean.garage_freeze_protection].",
"natural_language": {
"trigger": "When the garage climate [climate.garage] thermostat's preset mode changes to 'eco'.",
"conditions": "There are no additional conditions.",
"action": "Turn on the garage freeze protection input boolean [input_boolean.garage_freeze_protection]."
},
"human_like": "Turns on the garage freeze protection setting when the garage thermostat is set to eco mode.",
"complexity": "low"
}
},
{
"id": "turn_garage_furnace_on",
"result": {
"structured": "TRIGGER: When garage freeze protection input boolean [input_boolean.garage_freeze_protection] turns on OR When garage furnace switch [switch.garage_furnace] remains on for 5 seconds OR When garage climate [climate.garage] turns off. CONDITIONS: garage climate [climate.garage] is off AND (IF the trigger is thermostat THEN garage freeze protection input boolean [input_boolean.garage_freeze_protection] is on ELSE true). ACTIONS: IF the trigger is NOT furnace THEN wait for garage door binary sensor [binary_sensor.garage_door] to be closed (off) for up to 15 minutes, aborting if timeout occurs. IF the trigger is furnace OR garage door binary sensor [binary_sensor.garage_door] is closed (off) THEN set garage climate [climate.garage] preset mode to eco (if trigger is freeze or thermostat) OR home (otherwise). THEN turn on garage climate [climate.garage].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the garage freeze protection input boolean [input_boolean.garage_freeze_protection] is turned on, when the garage furnace switch [switch.garage_furnace] has been on for 5 seconds, or when the garage climate [climate.garage] thermostat is turned off.",
"conditions": "The garage climate [climate.garage] must be off. Additionally, if the trigger was the thermostat turning off, then the garage freeze protection input boolean [input_boolean.garage_freeze_protection] must also be on.",
"action": "If the trigger was not the furnace switch, the automation will wait for the garage door binary sensor [binary_sensor.garage_door] to be closed for up to 15 minutes; it will stop if the door does not close in time. If the trigger was the furnace switch or if the garage door is already closed, the automation sets the garage climate [climate.garage] to a preset mode: 'eco' if triggered by freeze protection or the thermostat, otherwise 'home'. Finally, it turns on the garage climate [climate.garage]."
},
"human_like": "Turns on the garage furnace, ensuring the door is closed first for safety, and sets an appropriate heating mode based on whether freeze protection is active.",
"complexity": "high"
}
},
{
"id": "turn_garage_furnace_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night, Away, or Vacation AND remains for 1 minute OR When garage high temperature alert [alert.garage_high_temperature] turns on AND remains for 5 minutes OR When garage door binary sensor [binary_sensor.garage_door] changes from off to on AND remains for 2 minutes OR When garage furnace switch [switch.garage_furnace] turns off AND remains for 5 minutes OR When garage freeze protection input boolean [input_boolean.garage_freeze_protection] turns off OR When garage climate [climate.garage] changes to heat. CONDITIONS: garage climate [climate.garage] is in heat mode AND (IF the trigger is thermostat THEN garage door binary sensor [binary_sensor.garage_door] is on ELSE true). ACTIONS: Turn off garage climate [climate.garage]. IF the trigger is garage OR thermostat THEN: 1) Run tts play script [script.tts_play] with a message that the garage heat is off because the garage door is open. 2) Wait up to 15 minutes for garage door binary sensor [binary_sensor.garage_door] to be off. 3) IF garage occupied binary sensor [binary_sensor.garage_occupied] is on THEN: a) Turn on garage climate [climate.garage]. b) Run tts play script [script.tts_play] with a message that the heat is back on, stating the thermostat setpoint and current garage sensor air temperature [sensor.garage_sensor_air_temperature], directed to office speaker media player [media_player.office_speaker].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when the occupancy mode [input_select.occupancy_mode] is set to Night, Away, or Vacation for one minute; when the garage high temperature alert [alert.garage_high_temperature] is active for five minutes; when the garage door [binary_sensor.garage_door] opens and stays open for two minutes; when the garage furnace switch [switch.garage_furnace] is off for five minutes; when the garage freeze protection [input_boolean.garage_freeze_protection] is turned off; or when the garage climate [climate.garage] switches to heat mode.",
"conditions": "For the automation to run, the garage climate [climate.garage] must currently be in heat mode. Additionally, if the trigger was the thermostat switching to heat, the garage door [binary_sensor.garage_door] must be open.",
"action": "The main action is to turn off the garage climate [climate.garage]. If the automation was triggered by the garage door opening or the thermostat switching to heat, it will also announce via text-to-speech that the heat is off because the door is open. It will then wait up to 15 minutes for the garage door to close. If, after the door closes, the garage is detected as occupied [binary_sensor.garage_occupied], it will turn the heat back on and announce the current thermostat setting and garage temperature via the office speaker [media_player.office_speaker]."
},
"human_like": "Turns off the garage heater when the house is empty, the garage door is left open, or it gets too hot, and can announce the status and automatically turn the heat back on when the garage is occupied and the door is closed.",
"complexity": "high"
}
},
{
"id": "turn_garage_furnace_filter_on",
"result": {
"structured": "TRIGGER: When the template condition evaluates to true. The template condition is: IF garage furnace filter enabled input boolean [input_boolean.garage_furnace_filter_enabled] is on AND garage furnace filter hours sensor [sensor.garage_furnace_filter_hours] value is greater than or equal to garage furnace filter hours input number [input_number.garage_furnace_filter_hours] value AND ( (work status sensor [sensor.work_status] shift attribute is 'Days' AND time sensor [sensor.time] value matches the first 5 characters of garage furnace filter days input datetime [input_datetime.garage_furnace_filter_days] state) OR (work status sensor [sensor.work_status] shift attribute is 'Afternoons' AND time sensor [sensor.time] value matches the first 5 characters of garage furnace filter afternoons input datetime [input_datetime.garage_furnace_filter_afternoons] state) OR (work status sensor [sensor.work_status] shift attribute is 'Off' AND time sensor [sensor.time] value matches the first 5 characters of garage furnace filter weekends input datetime [input_datetime.garage_furnace_filter_weekends] state) ). CONDITIONS: None specified outside the trigger template. ACTIONS: IF garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is on THEN turn it off. IF garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is on THEN turn it off (executed twice). IF garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] is on THEN turn it off, OTHERWISE turn on garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active].",
"natural_language": {
"trigger": "The automation triggers based on a complex template. It first checks if the garage furnace filter reminder is enabled. If enabled, it compares the current accumulated filter hours to a configured limit. It also checks the current work shift and time. The trigger fires when the filter hours have reached or exceeded the limit, and the current time matches a specific time configured for the current work shift (Days, Afternoons, or Off/Weekends).",
"conditions": "There are no separate conditions defined; all logic is embedded within the trigger template.",
"action": "The action sequence first ensures any existing reminder states are cleared. If the active reminder boolean is on, it is turned off. If the paused reminder boolean is on, it is turned off (this action is duplicated). If the skipped reminder boolean is on, it is turned off. Finally, if the skipped boolean was not on, the active reminder boolean is turned on to indicate a new reminder is due."
},
"human_like": "Activates a furnace filter replacement reminder when the filter usage hours reach a limit, but only at specific times depending on your work schedule.",
"complexity": "high"
}
},
{
"id": "garage_furnace_filter_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'garage_furnace_filter_done' is received. CONDITIONS: garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is on. ACTIONS: Press garage furnace filter done button [button.garage_furnace_filter_done].",
"natural_language": {
"trigger": "When a specific notification action named 'garage_furnace_filter_done' is tapped in the mobile app.",
"conditions": "The garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] must be in the 'on' state.",
"action": "Press the garage furnace filter done button [button.garage_furnace_filter_done]."
},
"human_like": "Marks a garage furnace filter reminder as completed when a notification is tapped, provided the reminder is active.",
"complexity": "low"
}
},
{
"id": "skip_garage_furnace_filter",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action data equal to 'skip_garage_furnace_filter'. CONDITIONS: None. ACTIONS: Press the skip garage furnace filter button [button.skip_garage_furnace_filter].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the action labeled 'skip_garage_furnace_filter'.",
"conditions": "There are no conditions that must be met.",
"action": "Presses the virtual skip garage furnace filter button [button.skip_garage_furnace_filter]."
},
"human_like": "Allows a user to skip a furnace filter reminder by tapping a notification on their phone.",
"complexity": "low"
}
},
{
"id": "pause_garage_furnace_filter",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'pause_garage_furnace_filter'. CONDITIONS: None. ACTIONS: Turn on garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification by selecting the 'pause_garage_furnace_filter' action.",
"conditions": "There are no conditions that must be met.",
"action": "Turns on the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] to indicate the reminder is paused."
},
"human_like": "Pauses the garage furnace filter reminder when the user taps the pause action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_garage_furnace_filter",
"result": {
"structured": "TRIGGER: When garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] turns on OR When garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] remains on for 24 hours OR When owner home [binary_sensor.owner_home] turns on and remains on for 15 minutes. CONDITIONS: garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is on. ACTIONS: Turn off garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused].",
"natural_language": {
"trigger": "The automation can start in three ways: if the garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] is turned on; if the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] has been on for a full 24 hours; or if the owner home [binary_sensor.owner_home] sensor indicates someone is home and stays that way for 15 minutes.",
"conditions": "The automation only proceeds if the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is currently on.",
"action": "It resets the pause by turning off the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused]."
},
"human_like": "Resets the paused status for the garage furnace filter reminder when it's skipped, after a 24-hour pause, or when the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_garage_furnace_filter_booleans",
"result": {
"structured": "TRIGGER: When garage furnace filter enabled input boolean [input_boolean.garage_furnace_filter_enabled] turns off OR When garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] turns off OR When any of the following entities turns on: garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active], garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused], garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped]. CONDITIONS: (garage furnace filter enabled input boolean [input_boolean.garage_furnace_filter_enabled] is off) OR (trigger entity is garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] AND (garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is off OR garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] is on)) OR (trigger id is 'done'). ACTIONS: If the trigger id is 'entity', turn off the specific entity that triggered. Otherwise, turn off all entities: garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active], garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused], garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped].",
"natural_language": {
"trigger": "This automation runs when the garage furnace filter reminder is disabled, when it is marked as completed, or when any of the reminder's status booleans become active. Specifically, it triggers if the 'enabled' boolean is turned off, if the 'active' boolean is turned off, or if any of the 'active', 'paused', or 'skipped' booleans are turned on.",
"conditions": "For the automation to proceed, one of the following must be true: the reminder is disabled (the 'enabled' boolean is off), the 'paused' boolean was turned on while the reminder was either not active or was skipped, or the trigger was specifically the 'active' boolean turning off (marking the reminder as done).",
"action": "Depending on what triggered the automation, it will either turn off the specific boolean that was just turned on, or it will turn off all three status booleans ('active', 'paused', and 'skipped') to reset the reminder system."
},
"human_like": "Resets the garage furnace filter reminder status booleans when the reminder is disabled, completed, or when an invalid state change occurs.",
"complexity": "medium"
}
},
{
"id": "garage_furnace_filter_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] turns on OR When garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] turns off. CONDITIONS: garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is on AND garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is off. ACTIONS: REPEAT the following sequence UNTIL garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is off OR garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is on: 1. IF occupancy mode [input_select.occupancy_mode] is NOT 'Night', THEN send a persistent notification to jason medication notification [notify.jason] with the message 'Change the Garage Furnace Filter. Hours: [value from furnace filter hours sensor [sensor.furnace_filter_hours]]' and action buttons for Pause, Skip, and Done, AND wait for garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] to be off OR garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] to be on for up to 2 minutes. 2. IF after the wait, garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is still on AND garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is still off, THEN run tts play script [script.tts_play] with a TTS message about the furnace filter. 3. Wait for garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] to be off OR garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] to be on for up to the number of minutes specified by garage furnace filter notification interval input number [input_number.garage_furnace_filter_notification_interval].",
"natural_language": {
"trigger": "The automation triggers when Home Assistant starts, when the garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is turned on, or when the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is turned off.",
"conditions": "The automation only runs if the garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is currently on and the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] is currently off.",
"action": "The automation enters a repeating loop that continues until the reminder is either deactivated or paused. In each loop iteration, if the occupancy mode [input_select.occupancy_mode] is not set to 'Night', it sends a persistent notification to jason medication notification [notify.jason] with the current furnace filter usage hours and interactive buttons. It then waits for up to two minutes for the reminder to be turned off or paused. If after that wait the reminder is still active and not paused, it triggers a text-to-speech announcement via the tts play script [script.tts_play]. Finally, it waits for a longer period, defined by the garage furnace filter notification interval input number [input_number.garage_furnace_filter_notification_interval], for the reminder to be resolved before starting the loop again."
},
"human_like": "Sends repeated notifications and voice reminders to change the garage furnace filter until the user acknowledges the task by pausing, skipping, or marking it as done.",
"complexity": "high"
}
},
{
"id": "clear_garage_furnace_filter_notification",
"result": {
"structured": "TRIGGER: When garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] turns off OR When garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] turns on OR When garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with a message to clear the notification tagged 'garage_furnace_filter_reminder'.",
"natural_language": {
"trigger": "This automation triggers when the garage furnace filter active input boolean [input_boolean.garage_furnace_filter_active] is turned off, or when either the garage furnace filter paused input boolean [input_boolean.garage_furnace_filter_paused] or the garage furnace filter skipped input boolean [input_boolean.garage_furnace_filter_skipped] is turned on.",
"conditions": "There are no conditions that must be met for the action to run.",
"action": "It sends a notification to jason medication notification [notify.jason] with a command to clear any existing notification that has the tag 'garage_furnace_filter_reminder'."
},
"human_like": "Clears the garage furnace filter reminder notification when the filter task is deactivated, paused, or skipped.",
"complexity": "low"
}
},
{
"id": "turn_garage_lights_on",
"result": {
"structured": "TRIGGER: When garage occupied binary sensor [binary_sensor.garage_occupied] changes from off to on OR When garage side door lock [lock.garage_side_door_lock] changes to unlocked. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off. ACTIONS: Execute turn light on script [script.turn_light_on] with data entity_id: light.garage_lights and activate_timer: false.",
"natural_language": {
"trigger": "When the garage occupied binary sensor [binary_sensor.garage_occupied] detects the garage becomes occupied, or when the garage side door lock [lock.garage_side_door_lock] is unlocked.",
"conditions": "The automation only runs if the alarm triggered [input_boolean.alarm_triggered] is off.",
"action": "Runs the turn light on script [script.turn_light_on] to turn on the garage lights [light.garage_lights], without activating a timer."
},
"human_like": "Turns on the garage lights when someone enters the garage or unlocks the side door, provided the alarm is not triggered.",
"complexity": "low"
}
},
{
"id": "turn_garage_light_off",
"result": {
"structured": "TRIGGER: When garage occupied binary sensor [binary_sensor.garage_occupied] changes from on to off AND remains off for 15 minutes OR When garage side door lock [lock.garage_side_door_lock] changes to locked. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND garage occupied binary sensor [binary_sensor.garage_occupied] is off. ACTIONS: Turn off garage light [light.garage_light] AND workbench light [light.workbench_light].",
"natural_language": {
"trigger": "The automation triggers when the garage occupied binary sensor [binary_sensor.garage_occupied] reports the garage is no longer occupied (changes from on to off) and stays that way for 15 minutes. It also triggers immediately when the garage side door lock [lock.garage_side_door_lock] is locked.",
"conditions": "For the action to run, the alarm triggered [input_boolean.alarm_triggered] must be off, and the garage occupied binary sensor [binary_sensor.garage_occupied] must currently be in the off state.",
"action": "Turns off both the garage light [light.garage_light] and the workbench light [light.workbench_light]."
},
"human_like": "Turns off the garage and workbench lights when the garage is unoccupied for a while or when the side door is locked, provided the alarm is not active.",
"complexity": "medium"
}
},
{
"id": "guest_home_alert",
"result": {
"structured": "TRIGGER: When owner home [binary_sensor.owner_home] changes from on to off AND remains off for 5 minutes. CONDITIONS: occupancy notifications [input_boolean.occupancy_notifications] is on AND guest home [binary_sensor.guest_home] is on. ACTIONS: Send a notification via jason medication notification [notify.jason] with title 'Guest Home' and a message containing the current occupancy mode [input_select.occupancy_mode] and alarm status sensor [sensor.alarm_status], including a custom icon and an action button labeled 'Away'.",
"natural_language": {
"trigger": "When the owner home [binary_sensor.owner_home] sensor changes from 'on' to 'off' and stays off for five minutes.",
"conditions": "Both the occupancy notifications [input_boolean.occupancy_notifications] toggle must be enabled (on) and the guest home [binary_sensor.guest_home] sensor must indicate a guest is present (on).",
"action": "Sends a notification to Jason with the title 'Guest Home'. The message includes the current occupancy mode and alarm system status. The notification also provides an 'Away' button to set the system to away mode."
},
"human_like": "Alerts the homeowner when they leave and a guest is still at home, provided notifications are enabled.",
"complexity": "medium"
}
},
{
"id": "hass_alert_notification",
"result": {
"structured": "TRIGGER: When any of the group entities (available_updates group [group.available_updates], offline_integrations group [group.offline_integrations], unavailable_entities group [group.unavailable_entities], unknown_browsers group [group.unknown_browsers]) have their 'entity_id' attribute become null for 60 seconds OR when the state of any of the alert entities (available updates alert [alert.available_updates], offline integrations alert [alert.offline_integrations], unavailable entities alert [alert.unavailable_entities], unknown browsers alert [alert.unknown_browsers]) changes. CONDITIONS: The input_boolean for the alert's category (derived from the triggering entity) must be 'on'. ACTIONS: Wait 1 second. If the triggering alert entity is 'on', then if the corresponding group entity has at least one member, send a notification to jason medication notification [notify.jason] with a title, a list of entity names, and a 'Pause' action. If the triggering alert entity is not 'on', send a notification to jason medication notification [notify.jason] to clear the notification for the tag.",
"natural_language": {
"trigger": "This automation triggers in two ways. First, if any of the four system group entities (available_updates group, offline_integrations group, unavailable_entities group, or unknown_browsers group) have their 'entity_id' attribute become and stay null for one minute. Second, whenever the state of any of the four corresponding alert entities (available updates alert, offline integrations alert, unavailable entities alert, or unknown browsers alert) changes.",
"conditions": "The automation only proceeds if a specific input_boolean, named after the alert's category (e.g., 'available_updates_alerts'), is turned on. This allows for selective enabling or disabling of alert categories.",
"action": "After a one-second delay, the automation checks if the alert that triggered it is in an 'on' state. If it is, and if the associated group contains any members, it sends a detailed notification to the user 'jason' listing the problematic items and providing a 'Pause' button. If the alert is not 'on', it sends a command to clear any existing notification for that specific alert type."
},
"human_like": "Manages system alert notifications by sending detailed messages when issues are detected and clearing them when resolved, with user-configurable categories.",
"complexity": "medium"
}
},
{
"id": "hass_notification_actions",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'restart_hass' OR When a mobile app notification action event occurs with action 'reboot_server' OR When a mobile app notification action event occurs with action 'shutdown_server'. CONDITIONS: None. ACTIONS: If the trigger was 'restart_hass', then restart Home Assistant. If the trigger was 'reboot_server', then reboot the host system. If the trigger was 'shutdown_server', then shut down the host system.",
"natural_language": {
"trigger": "When a notification action is received from the mobile app, specifically for restarting Home Assistant, rebooting the server, or shutting down the server.",
"conditions": "There are no additional conditions that must be met.",
"action": "Depending on which action was received, the automation will either restart the Home Assistant service, reboot the host machine, or shut down the host machine."
},
"human_like": "Allows remote control of the Home Assistant server via notification actions from a mobile app, enabling restart, reboot, or shutdown commands.",
"complexity": "low"
}
},
{
"id": "hass_startup",
"result": {
"structured": "TRIGGER: When Home Assistant starts. CONDITIONS: None. ACTIONS: Log a critical startup message. Wait 60 seconds. Then wait up to 2 minutes for the condition (startup pending [input_boolean.startup_pending] is off OR (wan [binary_sensor.wan] is on AND Offline Integrations Sensor [sensor.offline_integrations] equals 0 AND offline zwave devices sensor [sensor.offline_zwave_devices] equals 0 AND unavailable entities sensor [sensor.unavailable_entities] equals 0)). Then turn off startup pending [input_boolean.startup_pending]. Create a persistent notification about the restart. If hass alerts input boolean [input_boolean.hass_alerts] is on, then send a notification via jason medication notification [notify.jason]. If jlaptop chrome external browser user sensor [sensor.jlaptop_chrome_external_browser_user] is Jason, then send an HTML5 notification to JLaptop External [jlaptop_external]. Log a critical startup complete message. Refresh browser mod.",
"natural_language": {
"trigger": "When Home Assistant starts up.",
"conditions": "There are no explicit conditions for this automation.",
"action": "First, a critical log entry is written to mark the start. After a 60-second delay, the automation waits for up to 2 minutes for the system to be ready. It considers the system ready if the startup pending flag is turned off, or if the WAN connection is active and there are zero offline integrations, zero offline Z-Wave devices, and zero unavailable entities. Once ready, it turns off the startup pending flag, creates a persistent notification with the restart time, and logs the startup completion. If alerts are enabled, it sends a notification to Jason. If Jason is using the external browser on his laptop, a specific HTML5 notification is also sent. Finally, it refreshes the browser interface."
},
"human_like": "This automation manages the startup sequence for Home Assistant, turning off a pending flag and sending notifications once the system is fully loaded and stable.",
"complexity": "medium"
}
},
{
"id": "hass_shutdown",
"result": {
"structured": "TRIGGER: When Home Assistant shutdown event occurs. CONDITIONS: None. ACTIONS: Write a critical log entry via system log write service [system_log.write] with message '**** HOME ASSISTANT STOP ****'.",
"natural_language": {
"trigger": "When Home Assistant begins its shutdown process.",
"conditions": "There are no conditions for this automation.",
"action": "Writes a critical log entry to the system log using the system log write service [system_log.write], containing the message '**** HOME ASSISTANT STOP ****'."
},
"human_like": "Logs a critical message to the system log when Home Assistant is shutting down.",
"complexity": "low"
}
},
{
"id": "clear_hass_restart_notification",
"result": {
"structured": "TRIGGER: When an HTML5 notification with tag 'hass_restart' is closed OR when an HTML5 notification with tag 'hass_restart' is clicked on action 'dismiss_hass_restart' OR when a mobile app notification with tag 'hass_restart' is cleared. CONDITIONS: None. ACTIONS: Send a 'clear_notification' message to jason medication notification [notify.jason] with tag 'hass_restart', dismiss HTML5 notifications with tag 'hass_restart', dismiss the persistent notification with ID 'hass_restart', and then wait for 60 seconds.",
"natural_language": {
"trigger": "The automation triggers in three ways: when a browser or desktop notification tagged 'hass_restart' is closed by the user, when a user clicks the 'dismiss_hass_restart' action on such a notification, or when a mobile app notification with the same tag is cleared from the device.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "The automation performs a series of cleanup actions: it sends a command to the jason medication notification [notify.jason] service to clear the 'hass_restart' notification, it dismisses any remaining HTML5 notifications with that tag, it dismisses a persistent notification with the ID 'hass_restart', and finally it pauses for one minute."
},
"human_like": "Cleans up all Home Assistant restart notifications across different platforms when the user dismisses or interacts with them.",
"complexity": "medium"
}
},
{
"id": "turn_hot_tub_scene_off",
"result": {
"structured": "TRIGGER: When timer hot tub scene timer [timer.hot_tub_scene] finishes. CONDITIONS: None. ACTIONS: Turn off hot tub scene switch [switch.hot_tub_scene].",
"natural_language": {
"trigger": "When the hot tub scene timer [timer.hot_tub_scene] finishes.",
"conditions": "There are no conditions.",
"action": "Turns off the hot tub scene switch [switch.hot_tub_scene]."
},
"human_like": "Automatically turns off the hot tub scene when its timer finishes.",
"complexity": "low"
}
},
{
"id": "illuminance_lighting",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When daytime illuminance [binary_sensor.daytime_illuminance] remains off for 15 minutes (from on) OR When daytime illuminance [binary_sensor.daytime_illuminance] turns on (from off) OR When nighttime illuminance [binary_sensor.nighttime_illuminance] remains off for 15 minutes (from on) OR When nighttime illuminance [binary_sensor.nighttime_illuminance] turns on (from off) OR When occupancy mode [input_select.occupancy_mode] changes to Home or Guest (from Night, Away, or Vacation) and remains for 5 seconds OR When occupancy mode [input_select.occupancy_mode] changes to Away or Vacation and remains for 2 minutes OR When occupancy mode [input_select.occupancy_mode] changes to Night and remains for 5 seconds OR When waketime script [script.waketime] turns off. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND waketime script [script.waketime] is off. ACTIONS: If the trigger is startup, wait for lights group [group.lights] to have a value (timeout 300 seconds) then delay 5 seconds. Then, define variables for light groups. Then, if the trigger is day_lux: if nighttime illuminance [binary_sensor.nighttime_illuminance] is off, then if daytime illuminance [binary_sensor.daytime_illuminance] is on AND someone home [binary_sensor.someone_home] is on, run turn light on script [script.turn_light_on] on day lux lights group [group.day_lux_lights]; otherwise, run turn light off script [script.turn_light_off] on day lux lights group [group.day_lux_lights]. If the trigger is not day_lux: if nighttime illuminance [binary_sensor.nighttime_illuminance] is on, then: if occupancy mode [input_select.occupancy_mode] is Away or Vacation, run turn light on script [script.turn_light_on] on night away lights group [group.night_away_lights] (if night time [binary_sensor.night_time] is on) or away lights group [group.away_lights] (if night time [binary_sensor.night_time] is off) AND run turn light off script [script.turn_light_off] on all lights in lights group [group.lights] that are on and not in the group just turned on; else if occupancy mode [input_select.occupancy_mode] is Night, run turn light on script [script.turn_light_on] on night lights group [group.night_lights] AND run turn light off script [script.turn_light_off] on all lights in lights group [group.lights] that are on and not in night lights group [group.night_lights] or timed lights group [group.timed_lights] or the arrive home scene (if arriving from Away); else (default) if morning hours [binary_sensor.morning_hours] is on, run light scene on script [script.light_scene_on] for scene morning; else run turn light on script [script.turn_light_on] on night lux lights group [group.night_lux_lights]. If nighttime illuminance [binary_sensor.nighttime_illuminance] is off, then: if daytime illuminance [binary_sensor.daytime_illuminance] is on AND occupancy mode [input_select.occupancy_mode] is Home or Guest, run turn light on script [script.turn_light_on] on day lux lights group [group.day_lux_lights] AND if the trigger is night_lux or wake, run turn light off script [script.turn_light_off] on all lights in lights group [group.lights] that are on and not in day lux lights group [group.day_lux_lights] or timed lights group [group.timed_lights]; else run turn light off script [script.turn_light_off] with reset parameter set if the trigger is not day_lux or night_lux AND occupancy mode [input_select.occupancy_mode] is Night, Away, or Vacation.",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when Home Assistant starts up; when the daytime illuminance sensor [binary_sensor.daytime_illuminance] stays off for 15 minutes after being on, or when it turns on from off; when the nighttime illuminance sensor [binary_sensor.nighttime_illuminance] stays off for 15 minutes after being on, or when it turns on from off; when the occupancy mode [input_select.occupancy_mode] changes to 'Home' or 'Guest' from 'Night', 'Away', or 'Vacation' and stays that way for 5 seconds; when the occupancy mode changes to 'Away' or 'Vacation' and stays for 2 minutes; when the occupancy mode changes to 'Night' and stays for 5 seconds; or when the waketime script [script.waketime] turns off.",
"conditions": "The automation only runs if the alarm triggered [input_boolean.alarm_triggered] is off and the waketime script [script.waketime] is also off.",
"action": "On startup, it waits for the lights group [group.lights] to be available and then pauses briefly. It then sets up variables for different groups of lights. The main logic decides which lights to turn on or off based on the trigger and the current states of illuminance sensors and occupancy mode. During the day, if it's bright enough and someone is home, it turns on a specific set of day lights. At night, it selects different light groups based on whether the house is occupied, in night mode, or away, and turns off lights that shouldn't be on. It also handles special morning lighting and adjusts lights when the waketime script finishes."
},
"human_like": "This automation manages indoor lighting based on outdoor brightness and the home's occupancy mode, turning appropriate lights on or off to match the time of day and whether anyone is home.",
"complexity": "high"
}
},
{
"id": "increase_alarm_clock_volume",
"result": {
"structured": "TRIGGER: When alarm clock [binary_sensor.alarm_clock] remains on for 2 minutes. CONDITIONS: alarm clock increase volume input boolean [input_boolean.alarm_clock_increase_volume] is on. ACTIONS: Repeat the following sequence: IF alarm clock snooze [switch.alarm_clock_snooze] is on, THEN set the volume of the media player specified by alarm clock active media player [sensor.alarm_clock_active_media_player] to a level derived from alarm clock type [input_select.alarm_clock_type] and Alarm Clock Volume Input Number [input_number.alarm_clock_volume_], AND wait for alarm clock snooze [switch.alarm_clock_snooze] to turn off (timeout 60 minutes). THEN increase the volume of the media player specified by alarm clock active media player [sensor.alarm_clock_active_media_player] by one step. THEN wait for alarm clock [binary_sensor.alarm_clock] to turn off (timeout 2 minutes). REPEAT UNTIL alarm clock [binary_sensor.alarm_clock] is off OR the volume level of the media player specified by alarm clock active media player [sensor.alarm_clock_active_media_player] exceeds 0.9.",
"natural_language": {
"trigger": "When the alarm clock [binary_sensor.alarm_clock] has been active for two minutes.",
"conditions": "The automation only runs if the alarm clock increase volume input boolean [input_boolean.alarm_clock_increase_volume] is switched on.",
"action": "The automation enters a loop. First, it checks if the alarm clock snooze [switch.alarm_clock_snooze] is active. If it is, it sets the volume of the active alarm media player [sensor.alarm_clock_active_media_player] to a specific level based on the current alarm type [input_select.alarm_clock_type] and a corresponding volume setting. It then waits for the snooze to be turned off, up to a maximum of 60 minutes. Next, it increases the volume of the active media player by one step. Finally, it waits for the alarm clock to turn off, with a timeout of two minutes. This entire sequence repeats until either the alarm clock turns off or the media player's volume reaches over 90%."
},
"human_like": "Gradually increases the volume of an active alarm over time, pausing during snooze and stopping when the alarm ends or the volume gets very high.",
"complexity": "high"
}
},
{
"id": "indoor_temperature_alert",
"result": {
"structured": "TRIGGER: When indoor low temperature alert [alert.indoor_low_temperature] becomes active (on) OR when indoor high temperature alert [alert.indoor_high_temperature] becomes active (on). CONDITIONS: None. ACTIONS: Turn on climate manual mode input boolean [input_boolean.climate_manual_mode]. Set climate house climate [climate.house] to heat mode if indoor low temperature alert [alert.indoor_low_temperature] is on, otherwise set to cool mode. Wait for 5 seconds. Set climate house climate [climate.house] target temperature to the value of low temperature threshold input number [input_number.low_temperature_threshold] if indoor low temperature alert [alert.indoor_low_temperature] is on, otherwise set to the value of high temperature threshold input number [input_number.high_temperature_threshold]. Send a notification to jason medication notification [notify.jason] with details about the emergency HVAC activation. Wait for either indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] to become idle, with a timeout of 4 hours. Turn off climate manual mode input boolean [input_boolean.climate_manual_mode].",
"natural_language": {
"trigger": "When either the indoor low temperature alert [alert.indoor_low_temperature] or the indoor high temperature alert [alert.indoor_high_temperature] becomes active.",
"conditions": "There are no specific conditions that must be met for the actions to run.",
"action": "First, it enables manual climate control by turning on the climate manual mode input boolean [input_boolean.climate_manual_mode]. Then, it sets the house climate system [climate.house] to heating mode if the low temperature alert is active, or to cooling mode if the high temperature alert is active. After a short 5-second delay, it sets the thermostat's target temperature to the low threshold [input_number.low_temperature_threshold] for a low alert, or the high threshold [input_number.high_temperature_threshold] for a high alert. A detailed emergency notification is sent to Jason [notify.jason] with the current HVAC status and temperature readings. The automation then waits for up to 4 hours for the temperature alert to clear (become idle). Once the alert ends or the timeout is reached, it turns off the manual climate mode [input_boolean.climate_manual_mode]."
},
"human_like": "Automatically activates the HVAC system in heating or cooling mode when an indoor temperature alert is triggered, sets a target temperature, notifies the user, and returns to normal operation once the alert is resolved.",
"complexity": "medium"
}
},
{
"id": "intruder_warning",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'intruder_warning'. CONDITIONS: None. ACTIONS: Execute script tts play [script.tts_play] with parameters: message 'Hey you ugly schmuck! Get the fuck outta my house!', target media player broadcast speakers [media_player.broadcast_speakers], provider HASS, language English (USA), voice Brandon, minimum volume 100, alert enabled, and do not save the message.",
"natural_language": {
"trigger": "When a specific action, named 'intruder_warning', is received from a mobile app notification.",
"conditions": "There are no additional conditions that need to be met.",
"action": "Plays a loud, custom text-to-speech warning message on the broadcast speakers [media_player.broadcast_speakers], using the specified voice and at maximum volume."
},
"human_like": "Plays a loud, rude warning message on all speakers when an 'intruder warning' action is triggered from a mobile app.",
"complexity": "low"
}
},
{
"id": "iqvia_update",
"result": {
"structured": "TRIGGER: When the time pattern matches minutes equal to 35 (i.e., every hour at minute 35). CONDITIONS: wan binary sensor [binary_sensor.wan] is on. ACTIONS: Update the following entities: Allergy Index Forecasted Average Sensor [sensor.allergy_index_forecasted_average], Allergy Index Today Sensor [sensor.allergy_index_today], Allergy Index Tomorrow Sensor [sensor.allergy_index_tomorrow], Asthma Index Forecasted Average Sensor [sensor.asthma_index_forecasted_average], Asthma Index Today Sensor [sensor.asthma_index_today], Asthma Index Tomorrow Sensor [sensor.asthma_index_tomorrow], Cold Flu Index Today Sensor [sensor.cold_flu_index_today], Cold Flu Forecasted Average Sensor [sensor.cold_flu_forecasted_average].",
"natural_language": {
"trigger": "The automation runs every hour at 35 minutes past the hour.",
"conditions": "It only proceeds if the wan binary sensor [binary_sensor.wan] is reporting that the internet connection is on.",
"action": "It triggers an update for a set of health index sensors, including allergy, asthma, and cold/flu indices for today, tomorrow, and forecasted averages."
},
"human_like": "Updates daily health index data from IQVIA every hour, but only when the internet connection is active.",
"complexity": "low"
}
},
{
"id": "turn_jason_medication_on",
"result": {
"structured": "TRIGGER: When the template evaluates to true. The template is true when jason medication enabled input boolean [input_boolean.jason_medication_enabled] is on AND the current time from time sensor [sensor.time] (HH:MM) matches: (work status sensor [sensor.work_status] shift attribute is 'Days' AND time matches jason medication days input datetime [input_datetime.jason_medication_days] HH:MM) OR (work status sensor [sensor.work_status] shift attribute is 'Afternoons' AND time matches jason medication afternoons input datetime [input_datetime.jason_medication_afternoons] HH:MM) OR (work status sensor [sensor.work_status] shift attribute is 'Off' AND time matches jason medication weekends input datetime [input_datetime.jason_medication_weekends] HH:MM). CONDITIONS: The template condition 'Not done within last 4 hours' must be true. This condition is true when the last press time of charlie mealtime done button [button.charlie_mealtime_done] was more than 4 hours ago. ACTIONS: If jason medication active input boolean [input_boolean.jason_medication_active] is on, turn it off. If jason medication paused input boolean [input_boolean.jason_medication_paused] is on, turn it off (this action is listed twice). If jason medication skipped input boolean [input_boolean.jason_medication_skipped] is on, turn it off. Otherwise, if jason medication skipped input boolean [input_boolean.jason_medication_skipped] is off, turn on jason medication active input boolean [input_boolean.jason_medication_active].",
"natural_language": {
"trigger": "The automation triggers when the medication reminder is enabled, and the current time matches the scheduled time based on the current work shift. Specifically, if the work shift is 'Days', it checks against the 'Days' schedule time. If the shift is 'Afternoons', it checks against the 'Afternoons' schedule time. If the shift is 'Off', it checks against the 'Weekends' schedule time.",
"conditions": "The automation only proceeds if the 'Charlie mealtime done' button has not been pressed within the last four hours.",
"action": "The automation first ensures any existing reminder states are cleared: it turns off the 'active', 'paused', and 'skipped' status indicators if they are on. Then, if the 'skipped' status was not on, it turns on the 'active' status to start a new medication reminder."
},
"human_like": "Activates Jason's medication reminder at the scheduled time based on his work shift, provided a related mealtime task hasn't been completed recently.",
"complexity": "high"
}
},
{
"id": "jason_medication_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'jason_medication_done'. CONDITIONS: jason medication active input boolean [input_boolean.jason_medication_active] is on. ACTIONS: Press jason medication done button [button.jason_medication_done].",
"natural_language": {
"trigger": "When a notification action named 'jason_medication_done' is received from a mobile app.",
"conditions": "The jason medication active input boolean [input_boolean.jason_medication_active] must be in the 'on' state.",
"action": "Presses the jason medication done button [button.jason_medication_done]."
},
"human_like": "Marks a medication reminder as completed when the user taps a specific notification action, provided the reminder is currently active.",
"complexity": "low"
}
},
{
"id": "skip_jason_medication",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'skip_jason_medication' occurs. CONDITIONS: None. ACTIONS: Press skip jason medication button [button.skip_jason_medication].",
"natural_language": {
"trigger": "When a specific action named 'skip_jason_medication' is selected from a notification on a mobile app.",
"conditions": "There are no additional conditions that must be met.",
"action": "Presses the virtual skip jason medication button [button.skip_jason_medication]."
},
"human_like": "Skips Jason's medication reminder when the skip action is tapped in a mobile notification.",
"complexity": "low"
}
},
{
"id": "pause_jason_medication",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'pause_jason_medication' is received. CONDITIONS: None. ACTIONS: Turn on jason medication paused input boolean [input_boolean.jason_medication_paused].",
"natural_language": {
"trigger": "When a specific action named 'pause_jason_medication' is tapped within a notification sent to a mobile device.",
"conditions": "There are no additional conditions that must be met.",
"action": "Sets the jason medication paused input boolean [input_boolean.jason_medication_paused] to the 'on' state."
},
"human_like": "Pauses Jason's medication reminder when the user taps the 'pause' action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_jason_medication",
"result": {
"structured": "TRIGGER: When jason medication skipped input boolean [input_boolean.jason_medication_skipped] turns on OR When jason medication paused input boolean [input_boolean.jason_medication_paused] remains on for 2 hours OR When owner home [binary_sensor.owner_home] turns on and remains on for 15 minutes. CONDITIONS: jason medication paused input boolean [input_boolean.jason_medication_paused] is on. ACTIONS: Turn off jason medication paused input boolean [input_boolean.jason_medication_paused].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the 'jason medication skipped input boolean' [input_boolean.jason_medication_skipped] is turned on, when the 'jason medication paused input boolean' [input_boolean.jason_medication_paused] has been on for two hours, or when the 'owner home' [binary_sensor.owner_home] sensor indicates someone is home and remains in that state for fifteen minutes.",
"conditions": "The only condition is that the 'jason medication paused input boolean' [input_boolean.jason_medication_paused] must currently be on.",
"action": "The automation resets the pause state by turning off the 'jason medication paused input boolean' [input_boolean.jason_medication_paused]."
},
"human_like": "Resets the medication reminder pause if a dose is skipped, the pause has lasted too long, or the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_jason_medication_booleans",
"result": {
"structured": "TRIGGER: When jason medication enabled input boolean [input_boolean.jason_medication_enabled] turns off OR When jason medication active input boolean [input_boolean.jason_medication_active] turns off OR When jason medication active input boolean [input_boolean.jason_medication_active] OR jason medication paused input boolean [input_boolean.jason_medication_paused] OR jason medication skipped input boolean [input_boolean.jason_medication_skipped] turns on. CONDITIONS: (jason medication enabled input boolean [input_boolean.jason_medication_enabled] is off) OR (jason medication paused input boolean [input_boolean.jason_medication_paused] is turned on AND (jason medication active input boolean [input_boolean.jason_medication_active] is off OR jason medication skipped input boolean [input_boolean.jason_medication_skipped] is on)) OR (trigger.id is 'done'). ACTIONS: If the trigger was an entity turning on, then turn off that specific entity. Otherwise, turn off all three entities: jason medication active input boolean [input_boolean.jason_medication_active], jason medication paused input boolean [input_boolean.jason_medication_paused], and jason medication skipped input boolean [input_boolean.jason_medication_skipped].",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when the jason medication enabled input boolean [input_boolean.jason_medication_enabled] is turned off, when the jason medication active input boolean [input_boolean.jason_medication_active] is turned off, or when any one of the three booleans (jason medication active input boolean [input_boolean.jason_medication_active], jason medication paused input boolean [input_boolean.jason_medication_paused], or jason medication skipped input boolean [input_boolean.jason_medication_skipped]) is turned on.",
"conditions": "For the automation to proceed, at least one of the following must be true: the jason medication enabled input boolean [input_boolean.jason_medication_enabled] is already off, the trigger is the jason medication paused input boolean [input_boolean.jason_medication_paused] turning on while the active boolean is off or the skipped boolean is on, or the trigger is specifically the active boolean turning off (identified by the trigger id 'done').",
"action": "If the trigger was one of the three booleans turning on, the automation turns off that specific boolean. In all other trigger cases, it turns off all three booleans: jason medication active input boolean [input_boolean.jason_medication_active], jason medication paused input boolean [input_boolean.jason_medication_paused], and jason medication skipped input boolean [input_boolean.jason_medication_skipped]."
},
"human_like": "Resets medication reminder status booleans when the reminder is disabled, completed, or paused/skipped under invalid conditions.",
"complexity": "medium"
}
},
{
"id": "jason_medication_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When jason medication active input boolean [input_boolean.jason_medication_active] turns on OR When jason medication paused input boolean [input_boolean.jason_medication_paused] turns off. CONDITIONS: jason medication active input boolean [input_boolean.jason_medication_active] is on AND jason medication paused input boolean [input_boolean.jason_medication_paused] is off. ACTIONS: REPEAT sequence UNTIL (jason medication active input boolean [input_boolean.jason_medication_active] is off OR jason medication paused input boolean [input_boolean.jason_medication_paused] is on). Sequence: IF occupancy mode [input_select.occupancy_mode] is NOT 'Night' THEN send notification to jason medication notification [notify.jason] with message 'Time to take your medication' and action buttons (Pause, Skip, Done) AND WAIT until (jason medication active input boolean [input_boolean.jason_medication_active] is off OR jason medication paused input boolean [input_boolean.jason_medication_paused] is on) OR timeout after 2 minutes. IF after waiting (jason medication active input boolean [input_boolean.jason_medication_active] is on AND jason medication paused input boolean [input_boolean.jason_medication_paused] is off) THEN trigger tts play script [script.tts_play] with a TTS message. WAIT until (jason medication active input boolean [input_boolean.jason_medication_active] is off OR jason medication paused input boolean [input_boolean.jason_medication_paused] is on) OR timeout after jason notification interval [input_number.jason_medication_notification_interval] minutes.",
"natural_language": {
"trigger": "The automation triggers when Home Assistant starts, when the jason medication active input boolean [input_boolean.jason_medication_active] is turned on, or when the jason medication paused input boolean [input_boolean.jason_medication_paused] is turned off.",
"conditions": "The automation only runs if the jason medication active input boolean [input_boolean.jason_medication_active] is currently on and the jason medication paused input boolean [input_boolean.jason_medication_paused] is currently off.",
"action": "The automation enters a repeating loop that continues until the medication reminder is either turned off or paused. In each loop, if the occupancy mode [input_select.occupancy_mode] is not set to 'Night', it sends a persistent notification to jason medication notification [notify.jason] with action buttons. It then waits for up to two minutes for the reminder to be turned off or paused. If after the wait the reminder is still active and not paused, it triggers the tts play script [script.tts_play] to play a voice reminder. Finally, it waits for a configurable interval (specified by jason notification interval [input_number.jason_medication_notification_interval]) before repeating the loop, unless the reminder is turned off or paused."
},
"human_like": "Sends repeated notifications and voice reminders to Jason to take his medication, with options to pause, skip, or mark it as done, until the reminder is manually stopped.",
"complexity": "high"
}
},
{
"id": "clear_jason_medication_notification",
"result": {
"structured": "TRIGGER: When jason medication active input boolean [input_boolean.jason_medication_active] turns off OR When jason medication paused input boolean [input_boolean.jason_medication_paused] turns on OR When jason medication skipped input boolean [input_boolean.jason_medication_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with a message to clear the notification tagged 'jason_medication_reminder'.",
"natural_language": {
"trigger": "This automation runs when the jason medication active input boolean [input_boolean.jason_medication_active] is turned off, or when either the jason medication paused input boolean [input_boolean.jason_medication_paused] or the jason medication skipped input boolean [input_boolean.jason_medication_skipped] is turned on.",
"conditions": "There are no conditions that must be met for the action to execute.",
"action": "It sends a notification to the jason medication notification [notify.jason] service, instructing it to clear any existing notification with the tag 'jason_medication_reminder'."
},
"human_like": "Clears the medication reminder notification for Jason when the medication is no longer active, is paused, or is skipped.",
"complexity": "low"
}
},
{
"id": "jason_phone_alarm_triggered_volume_control",
"result": {
"structured": "TRIGGER: When alarm triggered [input_boolean.alarm_triggered] changes state to on OR off. CONDITIONS: None. ACTIONS: IF alarm triggered [input_boolean.alarm_triggered] is on THEN set jason phone dnd select [select.jason_phone_dnd] to 'off', set jason phone alarm volume number [number.jason_phone_alarm_volume] to 7, wait until house alarm [alarm_control_panel.house] is not 'triggered' (timeout after 10 minutes), then run silence mobile alarm script [script.silence_mobile_alarm]. ELSE (when alarm triggered [input_boolean.alarm_triggered] is off) IF jason phone volume control [input_boolean.jason_phone_volume_control] is on THEN set jason phone alarm volume number [number.jason_phone_alarm_volume] to the integer value of mobile waketime volume jason [input_number.mobile_waketime_volume_jason] (default 7), AND IF occupancy mode [input_select.occupancy_mode] is 'Night' THEN set jason phone dnd select [select.jason_phone_dnd] to 'priority_only'.",
"natural_language": {
"trigger": "When the alarm triggered [input_boolean.alarm_triggered] input boolean changes its state, either turning on or off.",
"conditions": "There are no separate conditions for this automation; the logic is handled within the action sequence.",
"action": "If the alarm is triggered, it turns off Do Not Disturb on Jason's phone, sets his alarm volume to 7, waits for the house alarm to stop being triggered (for up to 10 minutes), and then silences his mobile alarm. If the alarm is not triggered, it checks if Jason's phone volume control is enabled. If so, it sets his alarm volume based on a stored wake time volume setting and, if the house is in Night mode, sets his phone to priority-only Do Not Disturb."
},
"human_like": "Manages Jason's phone volume and Do Not Disturb settings when the alarm system is triggered or cleared, ensuring appropriate sound levels and notifications.",
"complexity": "medium"
}
},
{
"id": "jason_phone_alert_announcements",
"result": {
"structured": "TRIGGER: When jason phone bluetooth device alert [alert.jason_phone_bluetooth_device] OR jason phone battery low alert [alert.jason_phone_battery_low] OR jason phone high accuracy alert [alert.jason_phone_high_accuracy] turns on. OR When jason phone wifi off alert [alert.jason_phone_wifi_off] OR jason phone wifi disconnected alert [alert.jason_phone_wifi_disconnected] OR jason phone ringer off alert [alert.jason_phone_ringer_off] OR jason phone offline alert [alert.jason_phone_offline] OR jason phone bluetooth off alert [alert.jason_phone_bluetooth_off] OR jason phone bluetooth disconnected alert [alert.jason_phone_bluetooth_disconnected] turns on AND remains on for 5 minutes. CONDITIONS: jason home [binary_sensor.jason_home] is on. ACTIONS: Define a variable 'message' based on the triggering alert entity, then repeatedly execute the following sequence until the triggering alert is no longer on: 1. Run tts play script [script.tts_play] with the variable 'message' as the announcement text, using the HASS provider, English (USA) language, Sara:shouting voice, and quiet_play enabled. 2. Wait for the triggering alert to turn off, with a timeout of 10 minutes if the trigger is jason phone battery low alert [alert.jason_phone_battery_low], otherwise 30 minutes.",
"natural_language": {
"trigger": "The automation is triggered when any of several phone-related alerts turn on. For alerts about a Bluetooth device, low battery, or high accuracy mode, the trigger is immediate. For alerts about Wi-Fi status, ringer status, phone offline status, or Bluetooth connectivity, the alert must remain active for at least five minutes.",
"conditions": "The automation only runs if the jason home [binary_sensor.jason_home] sensor indicates that Jason is home.",
"action": "A custom text-to-speech announcement is generated based on which specific alert triggered the automation. This announcement is then played via the tts play script [script.tts_play] using a specific voice and settings. The automation will keep repeating this announcement in a loop, waiting between attempts, until the alert condition is resolved. The wait time between announcements is 10 minutes for low battery alerts and 30 minutes for all other alerts."
},
"human_like": "Announces phone-related alerts to Jason when he is at home, repeating the message until the issue is fixed.",
"complexity": "high"
}
},
{
"id": "turn_jason_phone_high_accuracy_on",
"result": {
"structured": "TRIGGER: When jason person [person.jason] changes state to not_home OR Near Home OR Almost Home OR When jphone detected activity sensor [sensor.jphone_detected_activity] changes state to in_vehicle OR When jason home [binary_sensor.jason_home] changes from on to off. CONDITIONS: home jason distance sensor [sensor.home_jason_distance] is less than or equal to 20 (or -1 if unavailable). ACTIONS: Send notification to mobile app jphone notify [notify.mobile_app_jphone] with command 'force_on' for high accuracy mode AND Send notification to mobile app jphone notify [notify.mobile_app_jphone] with command 'high_accuracy_set_update_interval' and interval 15.",
"natural_language": {
"trigger": "The automation triggers when Jason's person tracker [person.jason] changes to 'not_home', 'Near Home', or 'Almost Home'; when the phone's activity sensor [sensor.jphone_detected_activity] detects 'in_vehicle'; or when the binary sensor indicating Jason is at home [binary_sensor.jason_home] turns off.",
"conditions": "The automation only runs if the distance sensor tracking Jason's distance from home [sensor.home_jason_distance] reports a value of 20 or less (or a default of -1 if the sensor is unavailable), meaning he is not considered to be out of town.",
"action": "Sends two notifications to Jason's phone via the mobile app [notify.mobile_app_jphone]. The first forces high accuracy location mode on, and the second sets the high accuracy update interval to 15 seconds."
},
"human_like": "Turns on high-accuracy location tracking for Jason's phone when he leaves home or starts driving, provided he is not too far away.",
"complexity": "medium"
}
},
{
"id": "turn_jason_phone_high_accuracy_off",
"result": {
"structured": "TRIGGER: When jason phone high accuracy switch [switch.jason_phone_high_accuracy] OR jphone high accuracy mode binary sensor [binary_sensor.jphone_high_accuracy_mode] changes from off to on AND remains on for 60 minutes OR When a mobile app notification action with event_data action 'turn_off_jason_phone_high_accuracy' occurs OR When jason person [person.jason] leaves states not_home, Near Home, or Almost Home AND remains away from those states for 60 minutes OR When home jason distance sensor [sensor.home_jason_distance] exceeds 20 OR When jphone detected activity sensor [sensor.jphone_detected_activity] changes from in_vehicle AND remains not in_vehicle for 10 minutes OR When jason home [binary_sensor.jason_home] changes from off to on. CONDITIONS: If the trigger is from jphone detected activity sensor [sensor.jphone_detected_activity], then commute active binary sensor [binary_sensor.commute_active] must be off; otherwise, the condition is true. ACTIONS: Send a notification to mobile app jphone notify [notify.mobile_app_jphone] with command 'high_accuracy_set_update_interval' and interval 60, then send another notification to mobile app jphone notify [notify.mobile_app_jphone] with command 'force_off'.",
"natural_language": {
"trigger": "The automation can start in several ways: if the high accuracy mode on Jason's phone, indicated by either the switch or binary sensor, turns on and stays on for an hour; if a specific notification action to turn off high accuracy is received; if Jason's person entity leaves the 'not_home', 'Near Home', or 'Almost Home' states and stays away for an hour; if the distance sensor shows Jason is more than 20 units away from home; if the phone's detected activity changes from 'in_vehicle' and stays out of that state for ten minutes; or if the binary sensor indicating Jason is at home turns on.",
"conditions": "A special condition applies only when the trigger is the phone's activity sensor changing from 'in_vehicle'. In that specific case, the automation checks that the commute active sensor is off, ensuring high accuracy isn't turned off during a commute. For all other triggers, this condition is automatically satisfied.",
"action": "The automation sends two sequential notifications to Jason's phone. The first sets the high accuracy location update interval to 60, and the second commands the high accuracy mode to turn off."
},
"human_like": "Turns off high-accuracy location tracking on Jason's phone after specific events like being away from home, ending a drive, or a manual request, while avoiding doing so during a commute.",
"complexity": "high"
}
},
{
"id": "jason_phone_night_mode",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night AND remains for 1 minute OR When occupancy mode [input_select.occupancy_mode] changes from Night AND remains for 1 minute OR When jason home [binary_sensor.jason_home] changes from off to on OR When waketime active [binary_sensor.waketime_active] changes from off to on. CONDITIONS: jason home [binary_sensor.jason_home] is on AND jason phone volume control [input_boolean.jason_phone_volume_control] is on. ACTIONS: IF occupancy mode [input_select.occupancy_mode] is Night AND waketime active [binary_sensor.waketime_active] is off THEN set jason phone dnd select [select.jason_phone_dnd] to priority_only AND set jason phone alarm volume number [number.jason_phone_alarm_volume] to the value of mobile waketime volume jason [input_number.mobile_waketime_volume_jason]. OTHERWISE set jason phone dnd select [select.jason_phone_dnd] to off AND set jason phone ringer mode select [select.jason_phone_ringer_mode] to normal AND IF jphone volume level alarm sensor [sensor.jphone_volume_level_alarm] is below the value of mobile waketime volume jason [input_number.mobile_waketime_volume_jason] THEN set jason phone alarm volume number [number.jason_phone_alarm_volume] to the value of mobile waketime volume jason [input_number.mobile_waketime_volume_jason].",
"natural_language": {
"trigger": "The automation triggers when the occupancy mode [input_select.occupancy_mode] changes to or from 'Night' and stays that way for one minute, when Jason arrives home (jason home [binary_sensor.jason_home] turns on), or when the waketime becomes active (waketime active [binary_sensor.waketime_active] turns on).",
"conditions": "For the automation to run, Jason must be home (jason home [binary_sensor.jason_home] is on) and the phone volume control must be enabled (jason phone volume control [input_boolean.jason_phone_volume_control] is on).",
"action": "If the occupancy mode is 'Night' and the waketime is not active, the automation sets Jason's phone to 'priority only' Do Not Disturb mode and adjusts the alarm volume to a preset level. Otherwise, it turns off Do Not Disturb, sets the ringer mode to normal, and, if the current alarm volume is lower than the preset level, it increases it to that level."
},
"human_like": "Manages Jason's phone settings for night and day, turning on Do Not Disturb and setting alarm volume at night, and restoring normal settings during the day or when he arrives home.",
"complexity": "medium"
}
},
{
"id": "jason_phone_quiet_time",
"result": {
"structured": "TRIGGER: When quiet time binary sensor [binary_sensor.quiet_time] changes state from on to off OR from off to on. CONDITIONS: (jason home [binary_sensor.jason_home] is on) AND (jason phone volume control [input_boolean.jason_phone_volume_control] is on). ACTIONS: If quiet time binary sensor [binary_sensor.quiet_time] is on, then set jason phone media volume number [number.jason_phone_media_volume] to 10 AND set jason phone ringer volume number [number.jason_phone_ringer_volume] to 4. Otherwise, set jason phone media volume number [number.jason_phone_media_volume] to 15 AND set jason phone ringer volume number [number.jason_phone_ringer_volume] to 5.",
"natural_language": {
"trigger": "Whenever the quiet time binary sensor [binary_sensor.quiet_time] changes its state, either turning on or off.",
"conditions": "Both jason home [binary_sensor.jason_home] must be on, indicating Jason is home, and jason phone volume control [input_boolean.jason_phone_volume_control] must be on, meaning the volume control feature is enabled.",
"action": "If quiet time is active, it lowers Jason's phone media volume to 10 and ringer volume to 4. If quiet time is not active, it sets the media volume to 15 and the ringer volume to 5."
},
"human_like": "Automatically adjusts Jason's phone volume levels based on whether quiet time is active, but only when he is home and the feature is enabled.",
"complexity": "medium"
}
},
{
"id": "jason_phone_update_location",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'update_jason_location' occurs OR When jphone device tracker [device_tracker.jphone] changes state from home to not home OR When jason phone wifi connected binary sensor [binary_sensor.jason_phone_wifi_connected] changes state from on to off or from off to on. CONDITION: The automation has never been triggered before OR more than 30 seconds have passed since the automation was last triggered. ACTIONS: Press jason phone update location button [button.jason_phone_update_location].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when a specific mobile app notification action named 'update_jason_location' is received, when the jphone device tracker [device_tracker.jphone] leaves the 'home' state, or when the jason phone wifi connected binary sensor [binary_sensor.jason_phone_wifi_connected] changes its connection status (either connecting or disconnecting).",
"conditions": "The automation will only proceed if it has either never run before, or if it has been at least 30 seconds since it last ran.",
"action": "Presses the jason phone update location button [button.jason_phone_update_location] to update the phone's location."
},
"human_like": "Updates Jason's phone location when triggered by a notification, leaving home, or a Wi-Fi connection change, but prevents it from running too frequently.",
"complexity": "medium"
}
},
{
"id": "kiosk_alarm_display",
"result": {
"structured": "TRIGGER: When alarm pending [input_boolean.alarm_pending] changes to on OR off OR When alarm triggered [input_boolean.alarm_triggered] changes to on OR off AND remains for 1 second. CONDITIONS: (alarm enabled [input_boolean.alarm_enabled] is on) AND (someone home [binary_sensor.someone_home] is on) AND (danger alarm [binary_sensor.danger_alarm] is off). ACTIONS: If (alarm pending [input_boolean.alarm_pending] is on) OR (alarm triggered [input_boolean.alarm_triggered] is on) THEN navigate browser kiosk to 'alarm' page, wait 15 seconds, then if (alarm pending [input_boolean.alarm_pending] is on) OR (alarm triggered [input_boolean.alarm_triggered] is on) THEN check the entity that triggered the house alarm [alarm_control_panel.house] (from its open_sensors attribute) and navigate to a specific camera page on the kiosk based on which sensor group it belongs to: if in group front house sensors [group.front_house_sensors] then navigate to 'front-door-camera', if in group front north side house sensors [group.front_north_side_house_sensors] then navigate to 'side-gate-front-camera', if in group back north side house sensors [group.back_north_side_house_sensors] then navigate to 'side-gate-back-camera', if in group back house sensors [group.back_house_sensors] then navigate to 'back-door-camera', if in group garage sensors [group.garage_sensors] then navigate to 'side-door-camera', if in group south side house sensors [group.south_side_house_sensors] then navigate to 'side-door-camera'. OTHERWISE (if neither alarm pending nor alarm triggered is on) navigate browser kiosk to 'home' page.",
"natural_language": {
"trigger": "The automation triggers when the alarm pending [input_boolean.alarm_pending] state changes to either on or off, or when the alarm triggered [input_boolean.alarm_triggered] state changes to either on or off and remains in that new state for one second.",
"conditions": "For the automation to run, the alarm must be enabled via alarm enabled [input_boolean.alarm_enabled] being on, someone must be home as indicated by someone home [binary_sensor.someone_home] being on, and there must be no immediate danger alarm as indicated by danger alarm [binary_sensor.danger_alarm] being off.",
"action": "If the alarm is either pending or triggered, the action first navigates the kiosk browser to a general 'alarm' page. After a 15-second delay, it checks again if the alarm is still pending or triggered. If so, it identifies which sensor triggered the house alarm [alarm_control_panel.house] and navigates the kiosk to a specific camera feed page corresponding to the location of that sensor (e.g., front door, back door, side gates, garage). If the alarm is neither pending nor triggered, the action navigates the kiosk back to the 'home' page."
},
"human_like": "When the alarm system is active and someone is home, this automation shows relevant alarm information and camera feeds on a kiosk display, switching back to the home screen when the alarm is cleared.",
"complexity": "high"
}
},
{
"id": "kiosk_reset_dashboard",
"result": {
"structured": "TRIGGER: When kiosk tablet current page sensor [sensor.kiosk_tablet_current_page] changes from http://192.168.1.100:8123/ui-kiosk/home AND remains changed for 300 seconds OR When kiosk tablet foreground app sensor [sensor.kiosk_tablet_foreground_app] changes from de.ozerov.fully AND remains changed for 300 seconds. CONDITIONS: fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] is on. ACTIONS: Wait until kiosk motion binary sensor [binary_sensor.kiosk_motion] is off AND alarm triggered [input_boolean.alarm_triggered] is off, with a timeout of 300 seconds. THEN, IF kiosk tablet foreground app sensor [sensor.kiosk_tablet_foreground_app] is not de.ozerov.fully, press kiosk tablet bring to foreground button [button.kiosk_tablet_bring_to_foreground]. THEN, IF kiosk tablet current page sensor [sensor.kiosk_tablet_current_page] contains http://192.168.1.100:8123, navigate the kiosk browser to /ui-kiosk/home.",
"natural_language": {
"trigger": "When the tablet's current page changes away from the home dashboard (http://192.168.1.100:8123/ui-kiosk/home) and stays away for 5 minutes, or when the tablet's foreground app changes away from the Fully Kiosk Browser app (de.ozerov.fully) and stays away for 5 minutes.",
"conditions": "The Fully Kiosk service must be connected, as indicated by the fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] being on.",
"action": "First, the automation waits for up to 5 minutes for the area to be still (no motion detected by kiosk motion binary sensor [binary_sensor.kiosk_motion]) and for the alarm to not be triggered. Once those conditions are met, it checks the tablet's state. If the Fully Kiosk Browser app is not in the foreground, it presses a button to bring it to the front. Finally, if the tablet's current page is still a Home Assistant page, it navigates the browser back to the home dashboard."
},
"human_like": "Automatically resets a wall-mounted tablet's dashboard to the home page after a period of inactivity, ensuring the screen is not disturbed during motion or an alarm.",
"complexity": "medium"
}
},
{
"id": "kiosk_restart",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When kiosk offline alert binary sensor [binary_sensor.kiosk_offline_alert] changes from off to on OR When a mobile app notification action event with action 'restart_kiosk' occurs. ACTIONS: If the trigger is startup, wait for 60 seconds. Then, if sensor.kiosk_browser_user has no value, press the kiosk tablet restart browser button [button.kiosk_tablet_restart_browser].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when Home Assistant first starts up, when the kiosk offline alert binary sensor [binary_sensor.kiosk_offline_alert] changes from off to on, or when a specific mobile app notification action named 'restart_kiosk' is received.",
"conditions": "There are no explicit conditions defined in the automation. The actions contain conditional logic based on the trigger and a sensor state.",
"action": "If the automation was triggered by Home Assistant starting up, it first waits for 60 seconds. Then, if the sensor 'sensor.kiosk_browser_user' has no value, it presses the kiosk tablet restart browser button [button.kiosk_tablet_restart_browser] to restart the browser. If the automation was triggered by the other two events, it proceeds directly to check the sensor and press the button if needed."
},
"human_like": "Restarts the kiosk browser automatically when Home Assistant starts, the kiosk goes offline, or a user requests it via a mobile notification.",
"complexity": "medium"
}
},
{
"id": "reset_kiosk_motion",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When kiosk motion binary sensor [binary_sensor.kiosk_motion] becomes unknown AND remains for 10 seconds. CONDITIONS: None. ACTIONS: Publish MQTT message to topic 'fully/event/onMotion/6c1f5c36-4b34530' with payload '{\"type\": \"visual\", \"deviceId\": \"6c1f5c36-4b34530\", \"event\": \"onMotion\"}'.",
"natural_language": {
"trigger": "The automation runs either when Home Assistant starts up, or when the kiosk motion binary sensor [binary_sensor.kiosk_motion] enters an 'unknown' state and stays that way for 10 seconds.",
"conditions": "There are no conditions for this automation.",
"action": "Sends an MQTT command to the topic 'fully/event/onMotion/6c1f5c36-4b34530' to simulate a motion event, effectively restarting the kiosk's motion detection."
},
"human_like": "Restarts the kiosk's motion detection whenever Home Assistant starts or if the motion sensor becomes unresponsive.",
"complexity": "low"
}
},
{
"id": "kiosk_screen_on",
"result": {
"structured": "TRIGGER: When kiosk motion binary sensor [binary_sensor.kiosk_motion] changes to on OR When fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] changes to on OR When alarm pending [input_boolean.alarm_pending] changes to on OR When alarm triggered [input_boolean.alarm_triggered] changes to on. CONDITIONS: fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] is on AND kiosk tablet screen switch [switch.kiosk_tablet_screen] is off. ACTIONS: Turn on kiosk tablet screen switch [switch.kiosk_tablet_screen].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when motion is detected by the kiosk motion binary sensor [binary_sensor.kiosk_motion], when the fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] indicates the kiosk is connected, or when either the alarm pending [input_boolean.alarm_pending] or alarm triggered [input_boolean.alarm_triggered] input booleans are turned on.",
"conditions": "For the action to run, the fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] must be on, and the kiosk tablet screen switch [switch.kiosk_tablet_screen] must currently be off.",
"action": "Turns on the kiosk tablet screen switch [switch.kiosk_tablet_screen]."
},
"human_like": "Turns on the kiosk screen when motion is detected, the kiosk connects, or an alarm is activated, but only if the screen is currently off.",
"complexity": "medium"
}
},
{
"id": "kiosk_screen_off",
"result": {
"structured": "TRIGGER: When kiosk motion binary sensor [binary_sensor.kiosk_motion] stops detecting motion (off) AND remains off for 5 minutes OR When alarm pending [input_boolean.alarm_pending] OR alarm triggered [input_boolean.alarm_triggered] turns off (to 'off'). CONDITIONS: (fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] is on AND kiosk tablet screen switch [switch.kiosk_tablet_screen] is on) AND (alarm pending [input_boolean.alarm_pending] is off AND alarm triggered [input_boolean.alarm_triggered] is off) AND (kiosk motion binary sensor [binary_sensor.kiosk_motion] is off AND remains off for 5 minutes) AND (occupancy mode [input_select.occupancy_mode] is Night OR Away OR Vacation). ACTIONS: Turn off kiosk tablet screen switch [switch.kiosk_tablet_screen].",
"natural_language": {
"trigger": "The automation triggers in two ways: first, when the kiosk motion binary sensor [binary_sensor.kiosk_motion] reports no motion for a continuous period of five minutes. Second, when either the alarm pending [input_boolean.alarm_pending] or alarm triggered [input_boolean.alarm_triggered] switches turn off.",
"conditions": "All of the following must be true: the fully kiosk connected binary sensor [binary_sensor.fully_kiosk_connected] must be on, indicating the tablet is connected, and the kiosk tablet screen switch [switch.kiosk_tablet_screen] must be on. Neither an alarm pending [input_boolean.alarm_pending] nor an alarm triggered [input_boolean.alarm_triggered] can be active; both must be off. The kiosk motion binary sensor [binary_sensor.kiosk_motion] must have been off for at least five minutes. Finally, the occupancy mode [input_select.occupancy_mode] must be set to either 'Night', 'Away', or 'Vacation'.",
"action": "Turns off the kiosk tablet screen by toggling the kiosk tablet screen switch [switch.kiosk_tablet_screen]."
},
"human_like": "Turns off the kiosk tablet screen after five minutes of no motion, but only when the system is in a night, away, or vacation mode and no alarm is active.",
"complexity": "medium"
}
},
{
"id": "kiosk_screen_brightness",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night, Home, or Guest AND remains for 1 second OR When quiet time binary sensor [binary_sensor.quiet_time] changes state (from on to off or off to on). CONDITIONS: The current value of kiosk tablet screen brightness number [number.kiosk_tablet_screen_brightness] (if it exists) is not equal to the computed brightness variable. ACTIONS: Set kiosk tablet screen brightness number [number.kiosk_tablet_screen_brightness] to the computed brightness value.",
"natural_language": {
"trigger": "The automation triggers when the occupancy mode [input_select.occupancy_mode] changes to Night, Home, or Guest and stays in that state for at least one second, or when the quiet time binary sensor [binary_sensor.quiet_time] turns on or off.",
"conditions": "The automation only runs if the current brightness level of the kiosk tablet screen brightness number [number.kiosk_tablet_screen_brightness] is different from the brightness value calculated based on the occupancy mode and quiet time status.",
"action": "Sets the kiosk tablet screen brightness number [number.kiosk_tablet_screen_brightness] to a new brightness level, which is determined by the current occupancy mode and quiet time status."
},
"human_like": "Automatically adjusts the kiosk screen brightness based on the current occupancy mode and whether quiet time is active.",
"complexity": "medium"
}
},
{
"id": "turn_light_timer_off",
"result": {
"structured": "TRIGGER: When any of the listed lights changes state to off. The lights are: bathroom vanity light rgb [light.bathroom_vanity_light_rgb], bathroom shower light [light.bathroom_shower_light], back house potlights [light.back_house_potlights], back yard tree lights [light.back_yard_tree_lights], bedroom fan light [light.bedroom_fan_light], bedroom potlights [light.bedroom_potlights], dining room light rgb [light.dining_room_light_rgb], dining room potlights [light.dining_room_potlights], front house potlights [light.front_house_potlights], front porch light [light.front_porch_light], hallway potlights [light.hallway_potlights], kitchen sink light [light.kitchen_sink_light], kitchen potlights [light.kitchen_potlights], living room cove light [light.living_room_cove_light], living room fan light [light.living_room_fan_light], living room potlights [light.living_room_potlights], master bedroom light [light.master_bedroom_light], office fan light [light.office_fan_light], office potlights [light.office_potlights], outside garage lights [light.outside_garage_lights], side entrance light [light.side_entrance_light]. CONDITIONS: The variable 'timer' derived from the triggering light entity via a template function must have a valid value. ACTIONS: Cancel the timer entity whose ID is stored in the variable 'timer'.",
"natural_language": {
"trigger": "When any one of the many listed lights in the house turns off. This includes lights in the bathroom, bedroom, dining room, kitchen, living room, office, hallways, and various outdoor areas.",
"conditions": "The automation checks that a specific timer variable, which is calculated based on which light triggered the automation, has a valid value. This variable is fetched using a custom template function.",
"action": "Cancels the specific timer that is associated with the light that just turned off."
},
"human_like": "Stops the associated usage timer whenever a light is turned off, helping to manage automated lighting durations.",
"complexity": "medium"
}
},
{
"id": "turn_living_room_ceiling_fan_on",
"result": {
"structured": "TRIGGER: When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] OR living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan] changes from off to on. OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to on. CONDITIONS: living room fan [fan.living_room_fan] is off. ACTIONS: Execute turn fan on script [script.turn_fan_on] with entity_id fan.living_room_fan, speed 50, and override set to true if the trigger was an alert, otherwise false.",
"natural_language": {
"trigger": "When any of the three binary sensors—climate fan [binary_sensor.climate_fan], schedule fan [binary_sensor.schedule_fan], or living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan]—turn on from an off state. Alternatively, when either the indoor low temperature alert [alert.indoor_low_temperature] or indoor high temperature alert [alert.indoor_high_temperature] becomes active.",
"conditions": "The living room fan [fan.living_room_fan] must currently be off.",
"action": "Runs the 'turn fan on script' [script.turn_fan_on] to turn on the living room fan at 50% speed. If the trigger was one of the temperature alerts, it will also pass an override flag to the script."
},
"human_like": "Turns on the living room ceiling fan when a climate, schedule, or temperature sensor indicates it should run, or when a temperature alert is active, but only if the fan is currently off.",
"complexity": "medium"
}
},
{
"id": "turn_living_room_ceiling_fan_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation AND remains for 1 minute OR When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] OR living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan] changes from on to off OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to idle. CONDITIONS: living room fan [fan.living_room_fan] is on AND schedule fan [binary_sensor.schedule_fan] AND living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan] are off AND indoor low temperature alert [alert.indoor_low_temperature] AND indoor high temperature alert [alert.indoor_high_temperature] are idle AND (IF the trigger entity is schedule fan [binary_sensor.schedule_fan] THEN climate fan [binary_sensor.climate_fan] must be off, ELSE true). ACTIONS: Execute turn fan off script [script.turn_fan_off] for living room fan [fan.living_room_fan] with override parameter set to true if the trigger id is 'occupancy', else false.",
"natural_language": {
"trigger": "The automation can be triggered in three ways: first, if the occupancy mode [input_select.occupancy_mode] changes to either 'Away' or 'Vacation' and stays that way for at least one minute. Second, if any of the binary sensors for climate fan [binary_sensor.climate_fan], schedule fan [binary_sensor.schedule_fan], or living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan] change from being on to off. Third, if either the indoor low temperature alert [alert.indoor_low_temperature] or indoor high temperature alert [alert.indoor_high_temperature] changes its state to idle.",
"conditions": "For the automation to run, the living room fan [fan.living_room_fan] must currently be on. Both the schedule fan [binary_sensor.schedule_fan] and the living room temperature fan binary sensor [binary_sensor.living_room_temperature_fan] must be off. Both the indoor low temperature alert [alert.indoor_low_temperature] and indoor high temperature alert [alert.indoor_high_temperature] must be in an idle state. Additionally, if the automation was triggered specifically by the schedule fan [binary_sensor.schedule_fan] turning off, then the climate fan [binary_sensor.climate_fan] must also be off; otherwise, this specific check is not required.",
"action": "Runs the turn fan off script [script.turn_fan_off] to turn off the living room fan [fan.living_room_fan]. If the automation was triggered by the occupancy mode changing, it passes an 'override' parameter set to true to the script."
},
"human_like": "Turns off the living room fan when the house is unoccupied or when the various conditions that normally require the fan to be on are no longer met.",
"complexity": "medium"
}
},
{
"id": "wake_living_room_tv_on",
"result": {
"structured": "TRIGGER: When the webostv.turn_on trigger is activated for living room tv [media_player.living_room_tv]. ACTIONS: Send a Wake-on-LAN magic packet to the device with the specified MAC address.",
"natural_language": {
"trigger": "When the system receives a command to turn on the living room tv [media_player.living_room_tv] via the WebOS TV integration.",
"conditions": "There are no conditions for this automation.",
"action": "Sends a Wake-on-LAN magic packet to the television to power it on."
},
"human_like": "Turns on the living room TV by sending a Wake-on-LAN command when a turn-on request is received.",
"complexity": "low"
}
},
{
"id": "turn_living_room_tv_on",
"result": {
"structured": "TRIGGER: When living room chromecast [media_player.living_room_chromecast] changes from off, idle, unknown, or unavailable to playing, buffering, or paused OR When living room chromecast [media_player.living_room_chromecast] changes from paused to playing. CONDITIONS: (living room tv [media_player.living_room_tv] is off) OR (living room tv [media_player.living_room_tv] source is NOT HDMI 2). ACTIONS: If living room tv [media_player.living_room_tv] is off, turn it on. Then wait for living room tv [media_player.living_room_tv] to be on (timeout 30 seconds). Then wait for living room tv [media_player.living_room_tv] source attribute to be none (timeout 30 seconds). Then, if living room tv [media_player.living_room_tv] source is NOT HDMI 2, select source HDMI 2 on living room tv [media_player.living_room_tv].",
"natural_language": {
"trigger": "When the living room chromecast [media_player.living_room_chromecast] starts playing, buffering, or resumes from a paused state, or when it changes from being off, idle, unknown, or unavailable to an active state.",
"conditions": "The automation runs only if the living room tv [media_player.living_room_tv] is either turned off, or if it is on but not currently set to the HDMI 2 input source.",
"action": "First, if the TV is off, it will be turned on. The automation then waits for the TV to report an 'on' state, and then waits for its source attribute to become 'none'. Finally, if the TV's source is not already set to HDMI 2, it will switch the input to HDMI 2."
},
"human_like": "Automatically turns on the living room TV and switches it to the Chromecast input when media starts playing on the Chromecast.",
"complexity": "medium"
}
},
{
"id": "turn_living_room_tv_off",
"result": {
"structured": "TRIGGER: When living room chromecast [media_player.living_room_chromecast] turns off. CONDITIONS: living room tv [media_player.living_room_tv] has its source attribute set to HDMI 2. ACTIONS: Turn off living room tv [media_player.living_room_tv].",
"natural_language": {
"trigger": "When the living room chromecast [media_player.living_room_chromecast] is turned off.",
"conditions": "The living room tv [media_player.living_room_tv] must currently be set to the HDMI 2 input source.",
"action": "Turns off the living room tv [media_player.living_room_tv]."
},
"human_like": "Turns off the living room TV if it's on the Chromecast input when the Chromecast itself turns off.",
"complexity": "low"
}
},
{
"id": "turn_living_room_chromecast_on",
"result": {
"structured": "TRIGGER: When living room tv [media_player.living_room_tv] attribute 'source' changes to HDMI 2 AND remains for 5 seconds. CONDITIONS: living room chromecast [media_player.living_room_chromecast] is off OR unknown OR unavailable. ACTIONS: Turn on living room chromecast [media_player.living_room_chromecast].",
"natural_language": {
"trigger": "When the living room tv [media_player.living_room_tv] is switched to the HDMI 2 source and stays on that source for at least 5 seconds.",
"conditions": "If the living room chromecast [media_player.living_room_chromecast] is currently off, unknown, or unavailable.",
"action": "Turns on the living room chromecast [media_player.living_room_chromecast]."
},
"human_like": "Automatically turns on the Chromecast when the TV is set to the HDMI 2 input.",
"complexity": "low"
}
},
{
"id": "turn_living_room_chromecast_off",
"result": {
"structured": "TRIGGER: When living room tv [media_player.living_room_tv] turns off. CONDITIONS: NOT (living room chromecast [media_player.living_room_chromecast] is off OR unknown OR unavailable). ACTIONS: Turn off living room chromecast [media_player.living_room_chromecast].",
"natural_language": {
"trigger": "When the living room tv [media_player.living_room_tv] is turned off.",
"conditions": "If the living room chromecast [media_player.living_room_chromecast] is not already off, unknown, or unavailable.",
"action": "Turn off the living room chromecast [media_player.living_room_chromecast]."
},
"human_like": "Automatically turns off the Chromecast in the living room when the TV is turned off, but only if the Chromecast is currently on.",
"complexity": "low"
}
},
{
"id": "lock_door_locks",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to armed_home OR armed_night OR armed_away OR armed_vacation OR When occupancy mode [input_select.occupancy_mode] changes to Night OR Away OR Vacation AND remains for 1 minute OR When back door lock [lock.back_door_lock] OR front door lock [lock.front_door_lock] OR side door lock [lock.side_door_lock] OR garage side door lock [lock.garage_side_door_lock] remains unlocked for 10 minutes OR When back door lock status [sensor.back_door_lock_status] OR front door lock status [sensor.front_door_lock_status] OR side door lock status [sensor.side_door_lock_status] OR garage side door lock status [sensor.garage_side_door_lock_status] changes to Locked (Keypad) OR Locked (Guest) OR Locked (Jason) (but not from unknown OR unavailable) AND remains for 1 minute. CONDITIONS: (IF trigger.id is 'alarm' THEN alarm enabled [input_boolean.alarm_enabled] must be on ELSE condition is true) AND (IF trigger.id is 'unlocked' THEN house alarm [alarm_control_panel.house] must NOT be disarmed ELSE door locks group [group.door_locks] must be unlocked). ACTIONS: Run script lock door locks script [script.lock_door_locks] with entity_id set to the entity list of door locks group [group.door_locks] AND then wait for 60 seconds.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: when the house alarm [alarm_control_panel.house] is armed to any mode (home, night, away, or vacation); when the occupancy mode [input_select.occupancy_mode] is set to Night, Away, or Vacation and stays that way for one minute; when any of the door locks (back, front, side, or garage side) remains unlocked for ten minutes; or when any of the door lock status sensors reports a specific locked state (via Keypad, Guest, or Jason) for one minute, provided the previous state was not unknown or unavailable.",
"conditions": "The conditions depend on which trigger fired. If the alarm trigger fired, the alarm enabled [input_boolean.alarm_enabled] must be turned on. For the unlocked trigger, the house alarm [alarm_control_panel.house] must not be disarmed. For all other triggers, the door locks group [group.door_locks] must be in an unlocked state.",
"action": "The automation runs the lock door locks script [script.lock_door_locks], passing it the list of door locks from the door locks group [group.door_locks], and then waits for one minute."
},
"human_like": "Automatically locks all door locks when the house is armed, occupancy mode is set to away, doors are left unlocked for too long, or when a door is locked via a keypad.",
"complexity": "high"
}
},
{
"id": "lock_status_update",
"result": {
"structured": "TRIGGER: When a zwave_js_notification event occurs. CONDITIONS: The event_label ends with 'lock operation' AND the node_id is greater than 0 AND the entity_id is not an empty string. ACTIONS: Set the value of the input_text entity (derived from the object_id of the entity referenced by entity_id with '_status' appended) to a string based on the event_label: If 'Manual unlock operation' then 'Unlocked (Manual)', if 'Manual lock operation' then 'Locked (Manual)', if 'RF unlock operation' then 'Unlocked (Hassio)', if 'RF lock operation' then 'Locked (Hassio)', if 'Keypad unlock operation' then 'Unlocked ({{ user }})', if 'Keypad lock operation' then 'Locked ({{ user }})', otherwise 'ERROR'.",
"natural_language": {
"trigger": "When a Z-Wave JS notification event is received.",
"conditions": "The event label must end with the text 'lock operation', the extracted node ID must be a positive number, and a corresponding lock entity must be found in the door locks group.",
"action": "Updates a status text input field associated with the lock. The status text is set to describe the lock operation, such as 'Locked (Manual)' or 'Unlocked (Hassio)', depending on the specific event label and, for keypad operations, the user name."
},
"human_like": "Updates a text display with the status and method (manual, app, or keypad user) whenever a door lock is operated.",
"complexity": "medium"
}
},
{
"id": "log_error_notification",
"result": {
"structured": "TRIGGER: When a system log event [system_log_event] with level ERROR occurs. CONDITIONS: The template variable 'log_error' is not equal to 'none' (meaning the error message is not filtered out). ACTIONS: Send a browser notification [browser_mod.notification] with the error message for 10 seconds. Create a persistent notification [persistent_notification.create] with title 'HASS Log Error' and the error message. IF (tts enabled [input_boolean.tts_enabled] is on AND Kiosk TTS Enabled Input Boolean [input_boolean.kiosk_tts_enabled] is on) THEN send a TTS notification [notify.kiosk_tts] with the error message.",
"natural_language": {
"trigger": "When an error is logged in the Home Assistant system log.",
"conditions": "The automation only proceeds if the error message is not one that is filtered out. Specifically, it checks that the generated 'log_error' variable is not empty, which happens if the error is not the 'Fully Kiosk Error - Missing device owner or root rights to reboot the device'.",
"action": "It sends a temporary notification to the browser for 10 seconds, creates a persistent notification in Home Assistant with the error details, and, if both the general TTS and kiosk TTS features are enabled, it also reads the error message aloud via the kiosk's text-to-speech."
},
"human_like": "Notifies the user when a non-ignored error occurs in the Home Assistant logs, using on-screen and spoken alerts.",
"complexity": "medium"
}
},
{
"id": "log_level_selection",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When log level input select [input_select.log_level] changes state. CONDITIONS: None. ACTIONS: Set the default logger level to the current value of log level input select [input_select.log_level] AND Write a critical log entry to the system log with the message '***** HA LOG LEVEL SET TO : [current level] *****'.",
"natural_language": {
"trigger": "This automation runs either when Home Assistant first starts up, or whenever the log level input select [input_select.log_level] changes its value.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "It sets the system-wide default logging level to the value currently selected in the log level input select [input_select.log_level]. It also writes a critical-level message to the system log, confirming the new log level has been applied."
},
"human_like": "Updates the Home Assistant logging level to the user's selected value whenever it changes or on system startup.",
"complexity": "low"
}
},
{
"id": "turn_master_bathroom_vent_fan_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation AND remains for 1 minute OR When indoor high temperature alert [alert.indoor_high_temperature] changes to idle. CONDITIONS: master bathroom fan [fan.master_bathroom_fan] is on AND indoor high temperature alert [alert.indoor_high_temperature] is idle. ACTIONS: Execute turn fan off script [script.turn_fan_off] with data: entity_id fan.master_bathroom_fan and override set to true if the trigger was occupancy mode change, otherwise false.",
"natural_language": {
"trigger": "This automation triggers when the occupancy mode [input_select.occupancy_mode] is set to either 'Away' or 'Vacation' and remains in that state for at least one minute, or when the indoor high temperature alert [alert.indoor_high_temperature] becomes idle.",
"conditions": "The automation only runs if the master bathroom fan [fan.master_bathroom_fan] is currently on and the indoor high temperature alert [alert.indoor_high_temperature] is in the idle state.",
"action": "It calls the turn fan off script [script.turn_fan_off] for the master bathroom fan [fan.master_bathroom_fan], passing an override parameter that is true if the trigger was the occupancy mode change, and false if the trigger was the alert becoming idle."
},
"human_like": "Turns off the master bathroom fan when the house is set to 'Away' or 'Vacation' mode, or when a high temperature alert clears, but only if the fan is currently running.",
"complexity": "medium"
}
},
{
"id": "media_launcher_control",
"result": {
"structured": "TRIGGER: When any of the preset input_booleans (media launcher preset jason [input_boolean.media_launcher_preset_jason], media launcher preset charlie [input_boolean.media_launcher_preset_charlie], media launcher preset guest [input_boolean.media_launcher_preset_guest], media launcher preset wake [input_boolean.media_launcher_preset_wake], media launcher preset morning [input_boolean.media_launcher_preset_morning], media launcher preset sleep [input_boolean.media_launcher_preset_sleep], media launcher preset chill [input_boolean.media_launcher_preset_chill], media launcher preset company [input_boolean.media_launcher_preset_company], media launcher preset shower [input_boolean.media_launcher_preset_shower]) changes state OR when any of the other input_booleans (media launcher play media [input_boolean.media_launcher_play_media], media launcher tv [input_boolean.media_launcher_tv], media launcher alarm clock [input_boolean.media_launcher_alarm_clock], media launcher tts [input_boolean.media_launcher_tts], media launcher volume [input_boolean.media_launcher_volume]) changes state. CONDITIONS: None. ACTIONS: Turn off this automation (Media Launcher Control) without stopping its current actions. Then, turn off all input_booleans in the media launchers group [group.media_launchers] except for the one that triggered the automation, ignoring any errors. Then, turn this automation back on. Then, wait for 120 seconds. Then, wait for up to 900 seconds for media launcher lock [input_boolean.media_launcher_lock] to be turned off. Then, turn off this automation again without stopping its current actions. Then, turn off media launcher lock [input_boolean.media_launcher_lock] and the entire media launchers group [group.media_launchers], ignoring any errors. Finally, turn this automation back on.",
"natural_language": {
"trigger": "The automation is triggered when any of the media launcher preset switches (like media launcher preset jason, media launcher preset charlie, etc.) changes its state, or when any of the other media launcher control switches (like media launcher play media, media launcher tv, etc.) changes its state.",
"conditions": "There are no specific conditions that must be met for the actions to run.",
"action": "When triggered, the automation first turns itself off (without stopping any running actions), then turns off all other media launcher switches in the group except for the one that triggered it. It then turns itself back on, waits for two minutes, and then waits for up to fifteen minutes for the media launcher lock to be released. Once the lock is off or the wait times out, it turns itself off again, turns off the lock and all media launcher switches, and finally turns itself back on to be ready for the next trigger."
},
"human_like": "Manages media launcher controls by ensuring only one option is active at a time, resetting the system after a delay, and clearing all selections when finished.",
"complexity": "high"
}
},
{
"id": "media_player_dnd_mode",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night AND remains for 1 minute OR When occupancy mode [input_select.occupancy_mode] changes from Night AND remains for 1 minute. CONDITIONS: None. ACTIONS: For all switches whose entity_id is in the list of Google Home integration entities containing '_do_not_disturb', turn them on if occupancy mode [input_select.occupancy_mode] is Night, otherwise turn them off.",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] changes to 'Night' and stays that way for one minute, or when it changes from 'Night' to another state and stays that way for one minute.",
"conditions": "There are no additional conditions that must be met for this automation to run.",
"action": "The automation finds all switches associated with Google Home devices that have 'do_not_disturb' in their entity ID. It then turns those switches on if the occupancy mode is 'Night', or turns them off if the occupancy mode is anything else."
},
"human_like": "Automatically enables or disables 'Do Not Disturb' mode on Google Home media players based on whether the house is in 'Night' mode.",
"complexity": "medium"
}
},
{
"id": "turn_media_player_mute_off",
"result": {
"structured": "TRIGGER: When timer.finished event occurs for timed mute duration timer [timer.timed_mute_duration]. CONDITIONS: None. ACTIONS: Turn off media mute switch [switch.media_mute].",
"natural_language": {
"trigger": "When the timed mute duration timer [timer.timed_mute_duration] finishes.",
"conditions": "There are no conditions for this automation.",
"action": "Turns off the media mute switch [switch.media_mute]."
},
"human_like": "Automatically unmutes the media when a timer expires.",
"complexity": "low"
}
},
{
"id": "toggle_media_player_mute",
"result": {
"structured": "TRIGGER: When a shelly.click event occurs with device shellybutton1-E8DB84AA2E96 and click_type triple. CONDITIONS: None. ACTIONS: Toggle media mute switch [switch.media_mute].",
"natural_language": {
"trigger": "When the shelly button device [device: shellybutton1-E8DB84AA2E96] is triple-clicked, generating a shelly.click event.",
"conditions": "There are no conditions for this automation.",
"action": "Toggles the state of the media mute switch [switch.media_mute]."
},
"human_like": "Triple-clicking a Shelly button toggles the mute state of the media player.",
"complexity": "low"
}
},
{
"id": "mute_media_players",
"result": {
"structured": "TRIGGER: When mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] attribute speaker_on changes to true. CONDITIONS: None. ACTIONS: 1. If tts input boolean [input_boolean.tts] is on, wait until it becomes off. 2. Execute media players mute script [script.media_players_mute] with mute set to true on the list of unmuted, non-group media player entities derived from speaker media players group [group.speaker_media_players]. 3. Wait until the mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] attribute speaker_on is no longer true. 4. If media mute switch [switch.media_mute] is off, execute media players mute script [script.media_players_mute] with mute set to false on the same list of entities.",
"natural_language": {
"trigger": "When the mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] indicates that the phone's speaker is turned on.",
"conditions": "There are no explicit conditions that must be met before the actions start; the automation runs immediately upon the trigger.",
"action": "First, if text-to-speech announcements are enabled (tts input boolean [input_boolean.tts] is on), the automation waits for them to finish. Then, it mutes all media players that are currently not muted and are not groups, based on the list from the speaker media players group [group.speaker_media_players]. After that, it waits until the phone's speaker is no longer in use. Finally, if the media mute switch [switch.media_mute] is turned off, it unmutes those same media players."
},
"human_like": "Automatically mutes media players when a phone call starts, waits for the call to end, and then unmutes them if a master mute switch is off.",
"complexity": "medium"
}
},
{
"id": "media_play_error",
"result": {
"structured": "TRIGGER: When a system log event occurs with name 'homeassistant.components.script.media_play' and level 'ERROR'. CONDITIONS: None. ACTIONS: Execute tts play script [script.tts_play] with message 'The selected media has failed to play. Is Music Assistant offline?' and quiet_play true (continue on error). THEN execute media player reset volumes script [script.media_player_reset_volumes] with force_reset true (continue on error). THEN wait for 1 second. THEN fire the media play error event [media_play_error].",
"natural_language": {
"trigger": "The automation is triggered when a system log event is recorded for the 'media_play' script component with an error level.",
"conditions": "There are no conditions for this automation.",
"action": "When triggered, the system will first use the tts play script [script.tts_play] to announce a message asking if Music Assistant is offline. It will then run the media player reset volumes script [script.media_player_reset_volumes] to reset audio levels. After a one-second delay, it will fire a custom event named media play error [media_play_error]. Both script actions are configured to continue even if they encounter an error."
},
"human_like": "Notifies the user via voice and resets media player volumes when a media playback error is detected, then logs the error event.",
"complexity": "low"
}
},
{
"id": "reset_media_preset_option_view",
"result": {
"structured": "TRIGGER: When media preset options [input_boolean.media_preset_options] remains on for 5 minutes OR When any of the following entities turns on: media launcher preset charlie [input_boolean.media_launcher_preset_charlie], media launcher preset chill [input_boolean.media_launcher_preset_chill], media launcher preset company [input_boolean.media_launcher_preset_company], media launcher preset guest [input_boolean.media_launcher_preset_guest], media launcher preset jason [input_boolean.media_launcher_preset_jason], media launcher preset morning [input_boolean.media_launcher_preset_morning], media launcher preset shower [input_boolean.media_launcher_preset_shower], media launcher preset sleep [input_boolean.media_launcher_preset_sleep], media launcher preset wake [input_boolean.media_launcher_preset_wake]. CONDITIONS: None. ACTIONS: Turn off media preset options [input_boolean.media_preset_options].",
"natural_language": {
"trigger": "The automation triggers in two ways: first, when the media preset options [input_boolean.media_preset_options] switch has been on for five minutes continuously. Second, when any one of the nine specific media preset switches (like media launcher preset jason [input_boolean.media_launcher_preset_jason], media launcher preset charlie [input_boolean.media_launcher_preset_charlie], etc.) turns on.",
"conditions": "There are no additional conditions that must be met for the action to run.",
"action": "Turns off the media preset options [input_boolean.media_preset_options] switch."
},
"human_like": "Automatically hides the media preset options menu after five minutes or as soon as a specific preset is selected.",
"complexity": "medium"
}
},
{
"id": "morning_before_waketime",
"result": {
"structured": "TRIGGER: When waketime active [binary_sensor.waketime_active] changes from off to on. CONDITIONS: (occupancy mode [input_select.occupancy_mode] is Night) AND (climate manual mode input boolean [input_boolean.climate_manual_mode] is off). ACTIONS: Turn on climate presence override input boolean [input_boolean.climate_presence_override].",
"natural_language": {
"trigger": "When the waketime active [binary_sensor.waketime_active] sensor turns on, indicating the scheduled wake-up time has started.",
"conditions": "The occupancy mode [input_select.occupancy_mode] must be set to 'Night', and the climate manual mode input boolean [input_boolean.climate_manual_mode] must be off, meaning the HVAC system is not in a user-controlled manual state.",
"action": "Activates a climate presence override by turning on the climate presence override input boolean [input_boolean.climate_presence_override]."
},
"human_like": "Preheats the house before the scheduled wake-up time by overriding the climate system, but only when the house is in night mode and the climate is not manually controlled.",
"complexity": "low"
}
},
{
"id": "turn_movie_scene_off",
"result": {
"structured": "TRIGGER: When movie scene timer [timer.movie_scene] finishes. CONDITIONS: None. ACTIONS: Turn off movie scene switch [switch.movie_scene].",
"natural_language": {
"trigger": "When the movie scene timer [timer.movie_scene] finishes.",
"conditions": "There are no conditions for this automation.",
"action": "Turns off the movie scene switch [switch.movie_scene]."
},
"human_like": "Automatically turns off the movie scene when its timer finishes.",
"complexity": "low"
}
},
{
"id": "nap_alarm_clock_timer_control",
"result": {
"structured": "TRIGGER: When alarm clock nap input boolean [input_boolean.alarm_clock_nap] changes state. CONDITIONS: None. ACTIONS: If alarm clock nap input boolean [input_boolean.alarm_clock_nap] is on, then start alarm clock nap timer [timer.alarm_clock_nap] for a duration equal to the value of alarm clock nap time input number [input_number.alarm_clock_nap_time] minutes. Otherwise, cancel alarm clock nap timer [timer.alarm_clock_nap].",
"natural_language": {
"trigger": "Whenever the alarm clock nap input boolean [input_boolean.alarm_clock_nap] changes its state.",
"conditions": "There are no additional conditions that must be met.",
"action": "If the alarm clock nap input boolean [input_boolean.alarm_clock_nap] is turned on, the alarm clock nap timer [timer.alarm_clock_nap] is started for a duration specified by the alarm clock nap time input number [input_number.alarm_clock_nap_time]. If the alarm clock nap input boolean [input_boolean.alarm_clock_nap] is turned off, the alarm clock nap timer [timer.alarm_clock_nap] is cancelled."
},
"human_like": "Controls a nap timer for an alarm clock, starting it when enabled and cancelling it when disabled.",
"complexity": "low"
}
},
{
"id": "nap_alarm_clock_timer_duration_changed",
"result": {
"structured": "TRIGGER: When alarm clock nap time input number [input_number.alarm_clock_nap_time] changes state. CONDITIONS: alarm clock nap input boolean [input_boolean.alarm_clock_nap] is on AND alarm clock nap switch [switch.alarm_clock_nap] is off. ACTIONS: Start alarm clock nap timer [timer.alarm_clock_nap] with a duration equal to the integer value of alarm clock nap time input number [input_number.alarm_clock_nap_time] in minutes.",
"natural_language": {
"trigger": "Whenever the value of the alarm clock nap time input number [input_number.alarm_clock_nap_time] changes.",
"conditions": "The alarm clock nap input boolean [input_boolean.alarm_clock_nap] must be turned on, and the alarm clock nap switch [switch.alarm_clock_nap] must be off.",
"action": "Restarts the nap timer by starting the alarm clock nap timer [timer.alarm_clock_nap] and setting its duration to the number of minutes specified by the alarm clock nap time input number [input_number.alarm_clock_nap_time]."
},
"human_like": "Restarts the nap timer whenever the nap duration setting is changed, as long as the nap feature is enabled but not currently active.",
"complexity": "low"
}
},
{
"id": "nap_alarm_clock_timer_turned_off",
"result": {
"structured": "TRIGGER: When alarm clock nap timer [timer.alarm_clock_nap] becomes idle OR paused AND remains in that state for 15 seconds. CONDITIONS: alarm clock nap input boolean [input_boolean.alarm_clock_nap] is on. ACTIONS: Turn off alarm clock nap input boolean [input_boolean.alarm_clock_nap].",
"natural_language": {
"trigger": "When the alarm clock nap timer [timer.alarm_clock_nap] is turned off (idle) or paused, and stays in that state for 15 seconds.",
"conditions": "The alarm clock nap input boolean [input_boolean.alarm_clock_nap] must be switched on.",
"action": "Turns off the alarm clock nap input boolean [input_boolean.alarm_clock_nap]."
},
"human_like": "Resets the nap alarm clock status when its timer is turned off or paused for a short period.",
"complexity": "low"
}
},
{
"id": "nest_protect_reload",
"result": {
"structured": "TRIGGER: When wan offline alert [alert.wan_offline] changes to idle OR on. CONDITIONS: None. ACTIONS: Reload the configuration entry for nest protect upstairs smoke status [binary_sensor.nest_protect_upstairs_smoke_status].",
"natural_language": {
"trigger": "When the wan offline alert [alert.wan_offline] changes its state to either 'idle' or 'on'.",
"conditions": "There are no conditions that must be met.",
"action": "Reloads the configuration entry for the Nest Protect device, specifically for the nest protect upstairs smoke status [binary_sensor.nest_protect_upstairs_smoke_status]."
},
"human_like": "Reloads the Nest Protect integration when the WAN connection status changes, ensuring the smoke detector remains properly connected.",
"complexity": "low"
}
},
{
"id": "notification_led",
"result": {
"structured": "TRIGGER: When any of the following binary sensors changes state to on or off: alarm clock led alert binary sensor [binary_sensor.alarm_clock_led_alert], alarm led alert binary sensor [binary_sensor.alarm_led_alert], commute led alert binary sensor [binary_sensor.commute_led_alert], garage led alert binary sensor [binary_sensor.garage_led_alert], media led alert binary sensor [binary_sensor.media_led_alert], presence led alert binary sensor [binary_sensor.presence_led_alert], reminder led alert binary sensor [binary_sensor.reminder_led_alert], scene led alert binary sensor [binary_sensor.scene_led_alert], shower led alert binary sensor [binary_sensor.shower_led_alert], weather led alert binary sensor [binary_sensor.weather_led_alert]. CONDITIONS: None. ACTIONS: Wait up to 300 seconds for a group entity named group.<type>_led to exist (where <type> is derived from the triggering entity's object_id by removing '_led_alert'). If the group exists before the timeout, execute the script named <type>_led [script.<type>_led].",
"natural_language": {
"trigger": "Whenever any of the ten notification LED binary sensors (alarm clock, alarm, commute, garage, media, presence, reminder, scene, shower, or weather) changes its state, either turning on or off.",
"conditions": "There are no explicit conditions that must be met for the automation to proceed.",
"action": "First, the automation extracts a notification type from the triggering sensor's name by removing the '_led_alert' suffix. It then waits for up to five minutes for a corresponding LED group entity (group.<type>_led) to be created. Once that group exists, it runs the matching LED control script (script.<type>_led)."
},
"human_like": "When a notification LED alert sensor changes state, it waits for a corresponding LED group to be available and then runs the appropriate script to control the LED indicators.",
"complexity": "medium"
}
},
{
"id": "notification_led_reset",
"result": {
"structured": "TRIGGER: When any of the listed lights changes state from unknown OR unavailable. The lights are: back house potlights [light.back_house_potlights], back yard garden lights [light.back_yard_garden_lights], back yard tree lights [light.back_yard_tree_lights], bathroom shower light [light.bathroom_shower_light], bathroom vanity light [light.bathroom_vanity_light], bedroom fan light [light.bedroom_fan_light], bedroom potlights [light.bedroom_potlights], dining room light [light.dining_room_light], dining room potlights [light.dining_room_potlights], front house potlights [light.front_house_potlights], front porch light [light.front_porch_light], hallway potlights [light.hallway_potlights], kitchen potlights [light.kitchen_potlights], kitchen sink light [light.kitchen_sink_light], living room cove light [light.living_room_cove_light], living room fan light [light.living_room_fan_light], living room potlights [light.living_room_potlights], master bedroom light [light.master_bedroom_light], office fan light [light.office_fan_light], office potlights [light.office_potlights], outside garage lights [light.outside_garage_lights], side entrance light [light.side_entrance_light]. CONDITIONS: None. ACTIONS: Execute the led reset script [script.led_reset] with the triggering light's entity_id passed as data.",
"natural_language": {
"trigger": "When any of the many lights in the house, such as the back house potlights, bedroom fan light, or kitchen potlights, changes its state from being either 'unknown' or 'unavailable'.",
"conditions": "There are no additional conditions for this automation.",
"action": "Runs a script called 'led reset' [script.led_reset], passing the specific light that triggered the automation to the script."
},
"human_like": "Resets the LED notification for any light that comes back online after being unreachable or in an unknown state.",
"complexity": "medium"
}
},
{
"id": "set_occupancy_mode",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR When someone home [binary_sensor.someone_home] OR owner home [binary_sensor.owner_home] changes from off to on OR When someone home [binary_sensor.someone_home] OR owner home [binary_sensor.owner_home] changes from on to off AND remains off for 60 seconds OR When house alarm [alarm_control_panel.house] changes to armed_night OR When a mobile app notification action event with action 'set_home_mode' occurs OR When a mobile app notification action event with action 'set_away_mode' occurs. CONDITIONS: startup pending [input_boolean.startup_pending] is off AND (IF trigger.id is 'night' THEN alarm auto arming [input_boolean.alarm_auto_arming] is on ELSE occupancy mode automation [input_boolean.occupancy_mode_automation] is on). ACTIONS: Set occupancy mode [input_select.occupancy_mode] to the result of the template: if trigger.id is 'startup', 'arrive', or 'leave', use the value from the imported occupancy_mode function; otherwise, use the trigger.id capitalized (e.g., 'Night', 'Home', 'Away').",
"natural_language": {
"trigger": "The automation triggers in several situations: when the system finishes starting up, indicated by startup pending turning off; when someone arrives home, indicated by either the 'someone home' or 'owner home' sensor turning on; when everyone leaves home, indicated by both the 'someone home' and 'owner home' sensors turning off and staying off for one minute; when the house alarm is set to night mode; or when a mobile app notification action is received to set the home or away mode.",
"conditions": "The automation only runs if the startup process is complete, meaning startup pending is off. Additionally, a conditional check is performed based on which trigger fired: if the trigger was the alarm being set to night mode, then the alarm auto arming feature must be enabled. For all other triggers, the occupancy mode automation feature must be enabled.",
"action": "Updates the occupancy mode selection based on the trigger. For startup, arrival, or departure triggers, it calculates the mode using a predefined logic function. For the night alarm or mobile app action triggers, it sets the mode directly to 'Night', 'Home', or 'Away'."
},
"human_like": "Automatically updates the home's occupancy mode based on who is home, the alarm state, or manual commands from a mobile app.",
"complexity": "high"
}
},
{
"id": "occupancy_mode_changed",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes state. CONDITIONS: occupancy mode automation [input_boolean.occupancy_mode_automation] is on. ACTIONS: If occupancy mode [input_select.occupancy_mode] is Home: 1. For each presence override control in group.presence_override_controls that is on, if the corresponding person is home, turn off that override. 2. Wait 1 second. 3. If owner home [binary_sensor.owner_home] is off, then: turn off all automations in group.occupancy_automations, set occupancy mode [input_select.occupancy_mode] to Guest if guest home [binary_sensor.guest_home] is on, otherwise revert to previous mode, then turn on all automations in group.occupancy_automations. If occupancy mode [input_select.occupancy_mode] is Night: 1. If someone home [binary_sensor.someone_home] is off, then: turn off all automations in group.occupancy_automations, revert occupancy mode [input_select.occupancy_mode] to previous mode, then turn on all automations in group.occupancy_automations. 2. Else: turn off someone arrives home [automation.someone_arrives_home] and then turn it on. If occupancy mode [input_select.occupancy_mode] is Away OR Vacation: 1. Run script.turn_presence_override_on for all people marked as home in someone home [binary_sensor.someone_home] to turn off their presence overrides. 2. Turn off someone arrives home [automation.someone_arrives_home] and then turn it on. If occupancy mode [input_select.occupancy_mode] is Guest: 1. Turn on guest home [input_boolean.guest_home]. 2. If owner home [binary_sensor.owner_home] is on, then: turn off all automations in group.occupancy_automations, set occupancy mode [input_select.occupancy_mode] to Night if previous mode was Night, otherwise set to Home, then turn on all automations in group.occupancy_automations.",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] is changed.",
"conditions": "The occupancy mode automation [input_boolean.occupancy_mode_automation] must be switched on.",
"action": "Depending on the new occupancy mode, different actions are performed. If set to Home, it clears any active presence overrides for people who are actually home, and if the owner is not home, it temporarily disables all occupancy automations, adjusts the mode to Guest if a guest is home or back to the previous mode, and then re-enables the automations. If set to Night, it checks if someone is home; if not, it reverts the mode and toggles the automations off and on, otherwise it restarts the 'someone arrives home' automation. For Away or Vacation modes, it runs a script to turn off presence overrides for everyone home and restarts the 'someone arrives home' automation. If set to Guest, it marks the guest as home and, if the owner is also home, it switches the mode to either Night or Home and toggles the automations accordingly."
},
"human_like": "This automation manages the home's occupancy mode by validating changes, clearing presence overrides, and controlling other automations based on who is home.",
"complexity": "high"
}
},
{
"id": "occupancy_mode_alert",
"result": {
"structured": "TRIGGER: When occupancy mode alert entity [alert.occupancy_mode] remains on for 5 minutes. CONDITIONS: occupancy notifications [input_boolean.occupancy_notifications] is on. ACTIONS: Repeat the following sequence: 1. Run the tts play script [script.tts_play] with a custom message. 2. Wait until occupancy mode alert entity [alert.occupancy_mode] is no longer on, with a maximum timeout of 15 minutes. Continue repeating this sequence until occupancy mode alert entity [alert.occupancy_mode] is not on.",
"natural_language": {
"trigger": "When the occupancy mode alert entity [alert.occupancy_mode] has been active for at least five minutes.",
"conditions": "The occupancy notifications [input_boolean.occupancy_notifications] must be turned on.",
"action": "Repeatedly plays a custom text-to-speech alert message using the tts play script [script.tts_play], and then waits for the occupancy mode alert entity [alert.occupancy_mode] to turn off, pausing for up to 15 minutes between each alert. This loop continues as long as the alert remains active."
},
"human_like": "Repeatedly announces a custom alert message via TTS when the occupancy mode alert is active for five minutes and notifications are enabled.",
"complexity": "medium"
}
},
{
"id": "turn_occupancy_notifications_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'turn_off_occupancy_notifications'. CONDITIONS: None. ACTIONS: Turn off occupancy notifications [input_boolean.occupancy_notifications] AND send a notification to jason medication notification [notify.jason] with message 'clear_notification' and tag 'occupancy_notification'.",
"natural_language": {
"trigger": "When a specific action, 'turn_off_occupancy_notifications', is selected from a notification on a mobile app.",
"conditions": "There are no conditions for this automation.",
"action": "Turns off the occupancy notifications [input_boolean.occupancy_notifications] and sends a 'clear_notification' message to the jason medication notification [notify.jason] service, tagged to clear any existing occupancy notifications."
},
"human_like": "Disables occupancy notifications and clears any related notification alerts when requested from a mobile device.",
"complexity": "low"
}
},
{
"id": "occupancy_mode_notification",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Home, Guest, Night, Away, or Vacation AND remains for 1 second OR When house alarm [alarm_control_panel.house] changes to armed_home, armed_night, armed_away, or armed_vacation OR When house alarm [alarm_control_panel.house] changes to disarmed from armed_home, armed_night, armed_away, armed_vacation, pending, or triggered. CONDITIONS: (IF trigger.id is 'armed' OR 'disarmed' THEN alarm enabled [input_boolean.alarm_enabled] must be on, ELSE true) AND (house alarm [alarm_control_panel.house] is NOT triggered, pending, or arming). ACTIONS: Wait for run_delay (10 seconds). Verify house alarm [alarm_control_panel.house] is still NOT triggered, pending, or arming. Then, execute two parallel sequences: 1. IF (trigger.id is 'occupancy' AND occupancy announcements [input_boolean.occupancy_announcements] is on) OR (trigger.id is 'armed' OR 'disarmed' AND alarm announcements [input_boolean.alarm_announcements] is on) THEN run tts play script [script.tts_play] with a message that includes the new occupancy mode and alarm status if they changed within the delay, and a note about disabled automations if mode is Guest. Wait until tts input boolean [input_boolean.tts] is off. Fire event occupancy_notification_done. 2. IF occupancy notifications [input_boolean.occupancy_notifications] is on THEN send a notification to jason medication notification [notify.jason] with details about the occupancy mode, alarm status, alarm trigger (if alarm triggered [input_boolean.alarm_triggered] is on), who armed/disarmed the alarm, and a list of people home (from someone home [binary_sensor.someone_home] and charlie home binary sensor [binary_sensor.charlie_home]).",
"natural_language": {
"trigger": "The automation triggers when the occupancy mode [input_select.occupancy_mode] changes to Home, Guest, Night, Away, or Vacation and stays in that new state for at least one second. It also triggers when the house alarm [alarm_control_panel.house] becomes armed (to armed_home, armed_night, armed_away, or armed_vacation) or when it is disarmed from an armed, pending, or triggered state.",
"conditions": "If the trigger was related to the alarm (arming or disarming), the alarm enabled [input_boolean.alarm_enabled] must be turned on. Additionally, the house alarm [alarm_control_panel.house] must not currently be in a triggered, pending, or arming state.",
"action": "After a short 10-second delay, the automation checks again that the alarm is not in an active state. It then performs two actions in parallel. First, if the relevant announcements are enabled, it uses a text-to-speech script [script.tts_play] to announce the new house mode and alarm status, provided they changed very recently. It waits for the speech to finish. Second, if occupancy notifications [input_boolean.occupancy_notifications] are on, it sends a detailed notification to a specific user [notify.jason] containing the current house mode, alarm status, details about any alarm trigger, who changed the alarm state, and a list of who is currently home."
},
"human_like": "Announces changes to the house's occupancy mode or alarm state via voice and sends a detailed notification, ensuring announcements are only made when appropriate settings are enabled.",
"complexity": "high"
}
},
{
"id": "turn_office_ceiling_fan_on",
"result": {
"structured": "TRIGGER: When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] changes from off to on. OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to on. CONDITIONS: office fan [fan.office_fan] is off. ACTIONS: Execute turn fan on script [script.turn_fan_on] with parameters: entity_id fan.office_fan, speed 50, and override set to true if the trigger was an alert, otherwise false.",
"natural_language": {
"trigger": "The automation triggers when either the climate fan [binary_sensor.climate_fan] or the schedule fan [binary_sensor.schedule_fan] binary sensors turn on from an off state. Alternatively, it also triggers when either the indoor low temperature alert [alert.indoor_low_temperature] or the indoor high temperature alert [alert.indoor_high_temperature] becomes active.",
"conditions": "The automation only proceeds if the office fan [fan.office_fan] is currently off.",
"action": "It runs the turn fan on script [script.turn_fan_on] to turn on the office fan [fan.office_fan] at 50% speed. If the trigger was one of the temperature alerts, an override flag is passed to the script."
},
"human_like": "Turns on the office ceiling fan when a climate schedule activates or a temperature alert occurs, but only if the fan is currently off.",
"complexity": "medium"
}
},
{
"id": "turn_office_ceiling_fan_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation AND remains for 1 minute OR When climate fan [binary_sensor.climate_fan] OR schedule fan [binary_sensor.schedule_fan] changes from on to off OR When indoor low temperature alert [alert.indoor_low_temperature] OR indoor high temperature alert [alert.indoor_high_temperature] changes to idle. CONDITIONS: office fan [fan.office_fan] is on AND schedule fan [binary_sensor.schedule_fan] is off AND (indoor low temperature alert [alert.indoor_low_temperature] is idle AND indoor high temperature alert [alert.indoor_high_temperature] is idle). ACTIONS: Execute turn fan off script [script.turn_fan_off] with entity_id fan.office_fan and override parameter set to true if the trigger was occupancy mode change, otherwise false.",
"natural_language": {
"trigger": "The automation triggers in three scenarios: first, when the occupancy mode [input_select.occupancy_mode] is set to either 'Away' or 'Vacation' and stays that way for at least one minute; second, when either the climate fan [binary_sensor.climate_fan] or the schedule fan [binary_sensor.schedule_fan] turns from on to off; third, when either the indoor low temperature alert [alert.indoor_low_temperature] or the indoor high temperature alert [alert.indoor_high_temperature] becomes idle.",
"conditions": "All conditions must be met: the office fan [fan.office_fan] must be currently on, the schedule fan [binary_sensor.schedule_fan] must be off, and both the indoor low temperature alert [alert.indoor_low_temperature] and indoor high temperature alert [alert.indoor_high_temperature] must be in the idle state.",
"action": "Runs the turn fan off script [script.turn_fan_off] to turn off the office fan [fan.office_fan], passing an override parameter that is true only if the trigger was the occupancy mode change."
},
"human_like": "Turns off the office ceiling fan when the house is unoccupied, the fan schedule is off, and there are no active temperature alerts.",
"complexity": "medium"
}
},
{
"id": "turn_office_tv_on",
"result": {
"structured": "TRIGGER: When office chromecast [media_player.office_chromecast] changes state to idle, playing, buffering, or paused from off, idle, unknown, or unavailable OR When office chromecast [media_player.office_chromecast] changes state from paused to playing. CONDITIONS: (office tv [media_player.office_tv] is off OR standby) OR (office tv [media_player.office_tv] source attribute is NOT Chromecast). ACTIONS: If office tv [media_player.office_tv] is off OR standby, then turn on office tv [media_player.office_tv]. Wait for office tv [media_player.office_tv] to become 'on' (timeout 30 seconds). Wait for office tv [media_player.office_tv] source attribute to be not none (timeout 30 seconds). If office tv [media_player.office_tv] source attribute is NOT Chromecast, then select source Chromecast on office tv [media_player.office_tv].",
"natural_language": {
"trigger": "The automation triggers when the office chromecast [media_player.office_chromecast] becomes active, either by transitioning from an inactive state (off, idle, unknown, or unavailable) to an active state (idle, playing, buffering, or paused), or when it resumes playback by changing from paused to playing.",
"conditions": "The automation runs only if the office tv [media_player.office_tv] is either turned off or in standby mode, or if the TV is on but its current input source is not set to Chromecast.",
"action": "If the TV is off or in standby, it is first turned on. The automation then waits for the TV to fully power on and for a valid source list to be available. Finally, if the TV's input source is not already set to Chromecast, it changes the source to Chromecast."
},
"human_like": "Automatically turns on the office TV and switches it to the Chromecast input whenever the Chromecast becomes active.",
"complexity": "medium"
}
},
{
"id": "turn_office_tv_off",
"result": {
"structured": "TRIGGER: When office chromecast [media_player.office_chromecast] turns off. CONDITIONS: office tv [media_player.office_tv] source attribute is Chromecast. ACTIONS: Turn off office tv [media_player.office_tv].",
"natural_language": {
"trigger": "When the office chromecast [media_player.office_chromecast] is turned off.",
"conditions": "The office tv [media_player.office_tv] must currently have its source set to 'Chromecast'.",
"action": "Turn off the office tv [media_player.office_tv]."
},
"human_like": "Turns off the office TV when the Chromecast is turned off, but only if the TV is currently set to the Chromecast input.",
"complexity": "low"
}
},
{
"id": "turn_office_chromecast_on",
"result": {
"structured": "TRIGGER: When office tv [media_player.office_tv] attribute 'source' changes to 'Chromecast' AND remains for 5 seconds. CONDITIONS: office chromecast [media_player.office_chromecast] is off OR unknown OR unavailable. ACTIONS: Turn on office chromecast [media_player.office_chromecast].",
"natural_language": {
"trigger": "When the office TV [media_player.office_tv] is switched to the 'Chromecast' source and stays on that source for at least 5 seconds.",
"conditions": "The office Chromecast [media_player.office_chromecast] must be off, in an unknown state, or unavailable.",
"action": "Turn on the office Chromecast [media_player.office_chromecast]."
},
"human_like": "Automatically turns on the office Chromecast when the TV is switched to the Chromecast source.",
"complexity": "low"
}
},
{
"id": "turn_office_chromecast_off",
"result": {
"structured": "TRIGGER: When office tv [media_player.office_tv] turns off. CONDITIONS: NOT (office chromecast [media_player.office_chromecast] is off OR unknown OR unavailable). ACTIONS: Turn off office chromecast [media_player.office_chromecast].",
"natural_language": {
"trigger": "When the office tv [media_player.office_tv] is turned off.",
"conditions": "The office chromecast [media_player.office_chromecast] is not already off, unknown, or unavailable.",
"action": "Turn off the office chromecast [media_player.office_chromecast]."
},
"human_like": "Turns off the Chromecast in the office when the TV is turned off, but only if the Chromecast is currently on.",
"complexity": "low"
}
},
{
"id": "turn_office_fan_light_on",
"result": {
"structured": "TRIGGER: When office motion binary sensor [binary_sensor.office_motion] detects motion (on). CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND office illuminance binary sensor [binary_sensor.office_illuminance] is on. ACTIONS: Execute turn light on script [script.turn_light_on] with parameters: entity_id light.office_fan_light, activate_timer false, reset true.",
"natural_language": {
"trigger": "When motion is detected in the office by the office motion binary sensor [binary_sensor.office_motion].",
"conditions": "The alarm must not be triggered, meaning the alarm triggered [input_boolean.alarm_triggered] is off, and the office must be dark enough, indicated by the office illuminance binary sensor [binary_sensor.office_illuminance] being on.",
"action": "Runs the turn light on script [script.turn_light_on] to turn on the office fan light [light.office_fan_light], with the specific settings to not activate a timer and to reset any existing timer."
},
"human_like": "Turns on the office fan light when motion is detected, but only if the alarm is off and the room is dark.",
"complexity": "low"
}
},
{
"id": "turn_office_fan_light_off",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When office motion binary sensor [binary_sensor.office_motion] stops detecting motion (off) for 10 minutes OR When timer office fan light [timer.office_fan_light] finishes. CONDITIONS: office fan light [light.office_fan_light] is on AND alarm triggered [input_boolean.alarm_triggered] is off AND office motion binary sensor [binary_sensor.office_motion] is off for 10 minutes AND timer office fan light [timer.office_fan_light] is idle. ACTIONS: Turn off office fan light [light.office_fan_light].",
"natural_language": {
"trigger": "The automation can start when Home Assistant first boots up, when the office motion binary sensor [binary_sensor.office_motion] reports no motion for a continuous period of 10 minutes, or when the office fan light timer [timer.office_fan_light] completes its countdown.",
"conditions": "All of the following must be true: the office fan light [light.office_fan_light] must be on, the alarm triggered [input_boolean.alarm_triggered] must be off, the office motion binary sensor [binary_sensor.office_motion] must have been reporting no motion for at least 10 minutes, and the office fan light timer [timer.office_fan_light] must be in an idle state.",
"action": "Turns off the office fan light [light.office_fan_light]."
},
"human_like": "Automatically turns off the office fan light when there has been no motion for 10 minutes and the alarm is not active, or when a timer finishes.",
"complexity": "medium"
}
},
{
"id": "turn_office_potlights_on",
"result": {
"structured": "TRIGGER: When office motion binary sensor [binary_sensor.office_motion] changes to on. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND nighttime illuminance [binary_sensor.nighttime_illuminance] is off. ACTIONS: Execute turn light on script [script.turn_light_on] with parameters entity_id: light.office_potlights, activate_timer: false, reset: true.",
"natural_language": {
"trigger": "When motion is detected in the office, as reported by the office motion binary sensor [binary_sensor.office_motion].",
"conditions": "The alarm system is not triggered, meaning alarm triggered [input_boolean.alarm_triggered] is off, and it is dark enough to need light, meaning nighttime illuminance [binary_sensor.nighttime_illuminance] is off.",
"action": "Runs a script to turn on the office potlights [light.office_potlights], ensuring the light is activated without a timer and any existing timers are reset."
},
"human_like": "Automatically turns on the office lights when motion is detected, but only if the alarm is off and it's dark.",
"complexity": "low"
}
},
{
"id": "turn_office_potlights_off",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When office motion binary sensor [binary_sensor.office_motion] remains off for 10 minutes OR When timer office potlights [timer.office_potlights] finishes. CONDITIONS: office potlights [light.office_potlights] is on AND alarm triggered [input_boolean.alarm_triggered] is off AND office motion binary sensor [binary_sensor.office_motion] is off AND remains off for 10 minutes AND timer office potlights [timer.office_potlights] is idle. ACTIONS: Turn off office potlights [light.office_potlights].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when Home Assistant first starts up, when the office motion binary sensor [binary_sensor.office_motion] has not detected motion for 10 minutes, or when the office potlights timer [timer.office_potlights] finishes its countdown.",
"conditions": "For the action to run, the office potlights [light.office_potlights] must be on, the alarm triggered [input_boolean.alarm_triggered] must be off, the office motion binary sensor [binary_sensor.office_motion] must be off and have been off for 10 minutes, and the office potlights timer [timer.office_potlights] must be idle.",
"action": "Turns off the office potlights [light.office_potlights]."
},
"human_like": "Automatically turns off the office lights when no motion is detected for a set time, the alarm is not triggered, and a timer is not running.",
"complexity": "medium"
}
},
{
"id": "update_openuv",
"result": {
"structured": "TRIGGER: Every 10 minutes. CONDITIONS: wan binary sensor [binary_sensor.wan] is on AND the current time is after sunrise AND the current time is before sunset. ACTIONS: Update the current uv index sensor [sensor.current_uv_index].",
"natural_language": {
"trigger": "The automation runs every 10 minutes.",
"conditions": "The wan binary sensor [binary_sensor.wan] must be in the 'on' state, and the current time must be between sunrise and sunset.",
"action": "It refreshes the data for the current uv index sensor [sensor.current_uv_index]."
},
"human_like": "Updates the UV index sensor every 10 minutes during daylight hours, but only if the internet connection is active.",
"complexity": "low"
}
},
{
"id": "open_garage_door",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'arriving_home_garage_jason' is received. CONDITIONS: (Trigger ID is 'arriving'). ACTIONS: Wait for house alarm [alarm_control_panel.house] to be in state 'disarmed' for up to 600 seconds. If the condition is met within the timeout, then execute garage door script [script.garage_door] with action 'open' and person variable derived from the trigger.",
"natural_language": {
"trigger": "When a specific action ('arriving_home_garage_jason') is tapped on a mobile app notification.",
"conditions": "The automation checks that the specific trigger that fired is the 'arriving' trigger.",
"action": "First, it waits for the house alarm [alarm_control_panel.house] to be disarmed, with a maximum wait time of 10 minutes. If the alarm is disarmed within that time, it then runs the garage door script [script.garage_door] to open the garage door, passing along information about the person who triggered the notification."
},
"human_like": "Opens the garage door when a specific 'arriving home' notification is tapped, but only after the house alarm has been disarmed.",
"complexity": "medium"
}
},
{
"id": "garage_door_opened",
"result": {
"structured": "TRIGGER: When garage door cover [cover.garage_door] attribute current_position changes to 100. CONDITIONS: garage door announcements input boolean [input_boolean.garage_door_announcements] is on. ACTIONS: Execute script tts play script [script.tts_play] with parameters: message 'The garage door is open.', provider 'HASS', language 'English (USA)', voice 'Guy:newscast', ignore_away true.",
"natural_language": {
"trigger": "When the garage door cover [cover.garage_door] reaches the fully open position (current_position becomes 100).",
"conditions": "If the garage door announcements input boolean [input_boolean.garage_door_announcements] is switched on.",
"action": "Plays a text-to-speech announcement saying 'The garage door is open.' using the specified provider, language, and voice, even if the system is in away mode."
},
"human_like": "Announces when the garage door is fully opened, provided announcements are enabled.",
"complexity": "low"
}
},
{
"id": "phone_in_use",
"result": {
"structured": "TRIGGER: When mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] changes state to on OR off. CONDITIONS: None. ACTIONS: IF mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] is on THEN execute media player set volumes script [script.media_player_set_volumes] with source 'phone_all'. ELSE wait until mute media players [automation.mute_media_players] attribute 'current' equals 0, THEN execute media player set volumes script [script.media_player_set_volumes] with source 'phone_off'.",
"natural_language": {
"trigger": "Whenever the mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use] changes its state, either turning on or off.",
"conditions": "There are no additional conditions that must be met for this automation to run.",
"action": "If the phone is detected as being in use, the automation runs the media player set volumes script [script.media_player_set_volumes] with the 'phone_all' preset. If the phone is no longer in use, the automation first waits for the mute media players [automation.mute_media_players] automation to finish (indicated by its 'current' attribute being 0) and then runs the same script with the 'phone_off' preset."
},
"human_like": "Adjusts the volume of media players based on whether the phone is in use, waiting for other muting actions to finish before restoring volume.",
"complexity": "medium"
}
},
{
"id": "ping_dead_zwave_node",
"result": {
"structured": "TRIGGER: When offline zwave devices sensor [sensor.offline_zwave_devices] changes to a null state OR when a mobile app notification action with action 'ping_offline_zwave_devices' is received. CONDITIONS: (The automation has never been triggered OR the time since its last trigger is greater than 60 seconds) AND (offline zwave devices sensor [sensor.offline_zwave_devices] has a numeric value greater than 0). ACTIONS: Repeat the following sequence up to 5 times or until offline zwave devices sensor [sensor.offline_zwave_devices] equals 0: 1. Press the button(s) referenced by the 'ping_buttons' attribute of offline zwave devices sensor [sensor.offline_zwave_devices]. 2. Wait until offline zwave devices sensor [sensor.offline_zwave_devices] equals 0, with a timeout of 300 seconds.",
"natural_language": {
"trigger": "The automation can be triggered in two ways: either when the offline zwave devices sensor [sensor.offline_zwave_devices] changes to a null state, or when a specific notification action named 'ping_offline_zwave_devices' is received from a mobile app.",
"conditions": "For the automation to run, it must have either never been triggered before, or at least 60 seconds must have passed since it was last triggered. Additionally, the offline zwave devices sensor [sensor.offline_zwave_devices] must report a number greater than zero, indicating there are devices to ping.",
"action": "The automation will repeatedly attempt to ping the offline devices. It will press the button(s) listed in the sensor's 'ping_buttons' attribute, then wait for the sensor's value to drop to zero, indicating all devices are back online. This sequence will repeat up to five times, or will stop early if all devices are online. The wait for the sensor to reach zero will time out after 300 seconds."
},
"human_like": "This automation attempts to reconnect offline Z-Wave devices by triggering ping commands, either automatically when devices go offline or manually via a mobile notification, with safeguards to prevent excessive retries.",
"complexity": "medium"
}
},
{
"id": "precipitation_alert",
"result": {
"structured": "TRIGGER: When Precipitation Alert [alert.precipitation] changes to a state that is not null OR When Precipitation Type Change Alert Binary Sensor [binary_sensor.precipitation_type_change_alert] turns on from off OR When a template evaluates to true at 15:50 if (Precipitation Likely Next 24 Hours Binary Sensor [binary_sensor.precipitation_likely_next_24_hours] is on OR Precipitation Likely Soon Binary Sensor [binary_sensor.precipitation_likely_soon] is on) AND Work Today Binary Sensor [binary_sensor.work_today] is on AND scheduled shift today sensor [sensor.scheduled_shift_today] is 'Days' OR When a template evaluates to true at 10:45 if (Precipitation Likely Next 24 Hours Binary Sensor [binary_sensor.precipitation_likely_next_24_hours] is on OR Precipitation Likely Soon Binary Sensor [binary_sensor.precipitation_likely_soon] is on) AND ((Work Today Binary Sensor [binary_sensor.work_today] is on AND scheduled shift today sensor [sensor.scheduled_shift_today] is 'Afternoons') OR Work Today Binary Sensor [binary_sensor.work_today] is off). CONDITIONS: (Precipitation Alert [alert.precipitation] is idle OR off) OR ((Precipitation Alert [alert.precipitation] is on OR Precipitation Type Change Alert Binary Sensor [binary_sensor.precipitation_type_change_alert] is on OR trigger.id is 'days' OR 'afternoons') AND current time is between 08:00:00 and 22:00:00 AND (trigger.id is 'change' OR (if the automation was never triggered before OR if more than 2 hours have passed since the last trigger))). ACTIONS: IF Precipitation Alert [alert.precipitation] is idle OR off AND Precipitation Type Change Alert Binary Sensor [binary_sensor.precipitation_type_change_alert] is off AND the trigger.id is NOT 'days' or 'afternoons' THEN send a clear_notification message to jason medication notification [notify.jason] with tag windsor_radar. ELSE set a variable 'file' to a generated snapshot filename, take a snapshot from Windsor Radar Camera [camera.windsor_radar] saving to that file (continue on error), then send a notification to jason medication notification [notify.jason] with a dynamically generated precipitation message, tag windsor_radar, group Weather, and other metadata including the snapshot image and a pause action.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: 1) When the Precipitation Alert [alert.precipitation] changes to any state. 2) When the Precipitation Type Change Alert Binary Sensor [binary_sensor.precipitation_type_change_alert] turns on from being off. 3) At 15:50, if precipitation is likely soon or in the next 24 hours, you are scheduled to work a 'Days' shift today. 4) At 10:45, if precipitation is likely soon or in the next 24 hours, and either you are not working today or you are working an 'Afternoons' shift.",
"conditions": "For the automation to proceed, either the Precipitation Alert [alert.precipitation] must be idle or off. Alternatively, if the alert is on, the type change sensor is on, or the trigger was a scheduled time check, then the current time must be between 8 AM and 10 PM, and if the trigger was not the type change, at least two hours must have passed since the last time this automation ran.",
"action": "If the precipitation alert is idle or off, the type change alert is off, and the trigger was not one of the scheduled time checks, a clear notification is sent to Jason's device. Otherwise, the system takes a snapshot from the Windsor radar camera, saves it, and sends Jason a detailed weather notification with the radar image and an option to pause future alerts."
},
"human_like": "Sends timely precipitation alerts and radar images to Jason's phone, with logic to avoid nighttime notifications and prevent spam, and can clear the alert when conditions improve.",
"complexity": "high"
}
},
{
"id": "turn_presence_override_on",
"result": {
"structured": "TRIGGER: When jason phone connected binary sensor [binary_sensor.jason_phone_connected] changes from on to off OR When any of the door lock sensors (side door lock status [sensor.side_door_lock_status], front door lock status [sensor.front_door_lock_status], back door lock status [sensor.back_door_lock_status], garage side door lock status [sensor.garage_side_door_lock_status]) changes to Unlocked (Jason) or Unlocked (Guest) (excluding changes from unknown or unavailable) OR When any of the same door lock sensors changes to Locked (Jason) or Locked (Guest) (excluding changes from unknown or unavailable). CONDITIONS: If the trigger is the phone, then the person (determined by the trigger_person variable) must be home. If the trigger is an unlock, then the person (determined by the trigger_person variable) must NOT be home. ACTIONS: Call the turn presence override on script [script.turn_presence_override_on] with the person variable and a home parameter set to 'turn_on' if the trigger is phone or unlocked, otherwise 'turn_off'.",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when Jason's phone disconnects, when any of the specified door locks (side, front, back, or garage side door) become unlocked by Jason or a guest, or when any of those same door locks become locked by Jason or a guest.",
"conditions": "The automation checks different conditions based on what triggered it. If the trigger was the phone disconnecting, it verifies that the person associated with the trigger is currently at home. If the trigger was a door unlocking, it verifies that the person associated with the trigger is currently not at home. There is no additional condition for the door locking trigger.",
"action": "It runs a script called 'turn presence override on', passing it the name of the person involved and an instruction to either turn the override on or off, depending on the trigger."
},
"human_like": "This automation manages presence overrides, turning them on when a phone disconnects or a door is unlocked, and off when a door is locked, but only if the person's current home state matches the expected condition.",
"complexity": "medium"
}
},
{
"id": "turn_presence_override_off",
"result": {
"structured": "TRIGGER: When jason person [person.jason] remains at home for 5 minutes OR When jason person [person.jason] remains away from home for 5 minutes OR When a mobile app notification action with action 'turn_off_presence_override_jason' occurs OR When jason phone connected binary sensor [binary_sensor.jason_phone_connected] changes from off to on. CONDITIONS: (The trigger ID is 'occupancy' OR input_boolean.[person]_presence_override is on). ACTIONS: Set variable 'home' to a list of person object_ids whose state is 'home'. Then run script.turn_presence_override_off with data 'people' set to the 'home' list if the trigger ID is 'occupancy', otherwise set to the variable 'person'.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: when jason person [person.jason] has been at home for five minutes, when jason person [person.jason] has been away from home for five minutes, when a mobile app notification action named 'turn_off_presence_override_jason' is received, or when jason phone connected binary sensor [binary_sensor.jason_phone_connected] changes from disconnected (off) to connected (on).",
"conditions": "The automation only proceeds if either the trigger that started it was an 'occupancy' trigger (which is not defined in the provided triggers, but the condition checks for it) or if the input boolean for the person's presence override (derived from the variable 'person') is currently turned on.",
"action": "First, it creates a list of all people currently at home. Then, it runs a script called 'turn_presence_override_off'. The script is told to act on either the list of people at home (if the trigger was 'occupancy') or on the specific person identified by the trigger (for all other triggers)."
},
"human_like": "Turns off a person's presence override when they arrive home, leave home, reconnect their phone, or via a mobile app button, ensuring the home's occupancy tracking is accurate.",
"complexity": "medium"
}
},
{
"id": "purge_alarm_snapshots",
"result": {
"structured": "TRIGGER: At 02:00:00 daily. CONDITIONS: None. ACTIONS: Execute shell command alarm_snapshots_purge_old [shell_command.alarm_snapshots_purge_old].",
"natural_language": {
"trigger": "Every day at 2:00 AM.",
"conditions": "There are no conditions that need to be met.",
"action": "Runs the shell command named alarm_snapshots_purge_old [shell_command.alarm_snapshots_purge_old] to delete old alarm snapshot images."
},
"human_like": "Deletes old alarm camera snapshots every night at 2 AM to free up storage space.",
"complexity": "low"
}
},
{
"id": "reboot_router",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'reboot_router' is received. CONDITIONS: None. ACTIONS: Press the RT AX58U Reboot Button [button.rt_ax58u_reboot].",
"natural_language": {
"trigger": "When a notification action named 'reboot_router' is received from the mobile app.",
"conditions": "There are no conditions to check.",
"action": "Presses the RT AX58U Reboot Button [button.rt_ax58u_reboot] to initiate a router reboot."
},
"human_like": "Reboots the router when a specific notification action is tapped on a mobile device.",
"complexity": "low"
}
},
{
"id": "reload_google_home",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR When any of the listed device sensors (Bathroom Speaker Device Sensor [sensor.bathroom_speaker_device], Kitchen Hub Device Sensor [sensor.kitchen_hub_device], Bedroom Chromecast Device Sensor [sensor.bedroom_chromecast_device], Dining Room Hub Device Sensor [sensor.dining_room_hub_device], Bedroom Hub Device Sensor [sensor.bedroom_hub_device], Office Speaker Device Sensor [sensor.office_speaker_device], Laundry Room Speaker Device Sensor [sensor.laundry_room_speaker_device], Living Room Chromecast Device Sensor [sensor.living_room_chromecast_device], Living Room Speaker Device Sensor [sensor.living_room_speaker_device], Office Chromecast Device Sensor [sensor.office_chromecast_device]) becomes unknown or unavailable for 120 seconds OR When any of the listed do not disturb switches (Bathroom Speaker Do Not Disturb Switch [switch.bathroom_speaker_do_not_disturb], Kitchen Hub Do Not Disturb Switch [switch.kitchen_hub_do_not_disturb], Dining Room Hub Do Not Disturb Switch [switch.dining_room_hub_do_not_disturb], Bedroom Hub Do Not Disturb Switch [switch.bedroom_hub_do_not_disturb], Office Speaker Do Not Disturb Switch [switch.office_speaker_do_not_disturb], Laundry Room Speaker Do Not Disturb Switch [switch.laundry_room_speaker_do_not_disturb], Living Room Speaker Do Not Disturb Switch [switch.living_room_speaker_do_not_disturb]) becomes unknown or unavailable for 120 seconds OR When any of the listed media players (Bathroom Speaker Media Player [media_player.bathroom_speaker], Bedroom Hub [media_player.bedroom_hub], Dining Room Hub [media_player.dining_room_hub], Kitchen Hub [media_player.kitchen_hub], Laundry Room Speaker Media Player [media_player.laundry_room_speaker], Living Room Speaker Media Player [media_player.living_room_speaker], living room tv [media_player.living_room_tv], office speaker media player [media_player.office_speaker]) becomes unknown or unavailable for 120 seconds OR When any of the same listed media players transitions from unknown or unavailable to another state for 120 seconds. CONDITIONS: startup pending [input_boolean.startup_pending] is off. ACTIONS: IF the trigger is the startup trigger THEN wait up to 5 minutes for Unavailable Speaker Players Binary Sensor [binary_sensor.unavailable_speaker_players] to be off, then IF any of the listed device sensors or do not disturb switches is unknown or unavailable, reload the Google Home config entry for the device associated with office speaker media player [media_player.office_speaker]. ELSE (for sensor, switch, or player triggers) set variables to identify the related media player, sensor, and switch entities, wait up to 24 hours for the media player to no longer be unknown or unavailable, delay 30 seconds, then IF the derived sensor or switch is still unknown or unavailable, reload the Google Home config entry for the device associated with office speaker media player [media_player.office_speaker] and create a persistent notification with details.",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when the startup pending [input_boolean.startup_pending] flag turns off, or when any of the many Google Home device sensors, do-not-disturb switches, or media players become 'unknown' or 'unavailable' for two minutes. It can also trigger when a media player that was 'unknown' or 'unavailable' returns to a normal state for two minutes.",
"conditions": "The automation only runs if the startup pending [input_boolean.startup_pending] flag is already off.",
"action": "The actions differ based on what triggered the automation. If it was triggered by the startup flag turning off, the system first waits up to five minutes for a binary sensor indicating unavailable speakers to be off. Then, if any of the device sensors or do-not-disturb switches are still 'unknown' or 'unavailable', it reloads the Google Home integration configuration for the office speaker. For all other triggers (like a specific sensor, switch, or media player becoming unavailable), the automation identifies the specific media player involved, waits up to 24 hours for it to recover, pauses for 30 seconds, and then checks if the related sensor or switch is still problematic. If it is, it reloads the Google Home integration and creates a notification to inform the user."
},
"human_like": "Automatically reloads the Google Home integration when devices become unavailable, with different recovery logic for startup issues versus runtime failures.",
"complexity": "high"
}
},
{
"id": "reload_music_assistant",
"result": {
"structured": "TRIGGER: When any entity included from the file /config/include/media_player_entities_mass.yaml changes its state to unknown OR unavailable AND remains in that state for 120 seconds. CONDITIONS: The corresponding Home Assistant media player entity (derived by removing '_mass' suffix from the triggering entity's ID) is NOT in a state of unknown OR unavailable. ACTIONS: Reload the configuration entry for device 123cf9306dd25382e7398c7b319505c5 AND create a persistent notification with title 'Music Assistant' and a message indicating the integration was reloaded, including the triggering entity ID.",
"natural_language": {
"trigger": "When any Music Assistant media player entity (as defined in the included file) becomes unavailable or enters an unknown state and stays that way for two minutes.",
"conditions": "The corresponding standard Home Assistant media player (the same player without the '_mass' suffix in its name) must be available, meaning its state is not 'unknown' or 'unavailable'.",
"action": "Reloads the Music Assistant integration configuration for the specific device and creates a notification to inform the user that the reload was triggered by the specified player."
},
"human_like": "Automatically reloads the Music Assistant integration when its players become unavailable, but only if the standard Home Assistant versions of those players are still online.",
"complexity": "medium"
}
},
{
"id": "reset_door_locks",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'reset_intrusion_locks' OR When a mobile app notification action event occurs with action 'reset_jammed_locks' OR When a mobile app notification action event occurs with action 'reset_failed_locks' OR When a mobile app notification action event occurs with action 'reset_keypad_disabled_locks'. CONDITIONS: None. ACTIONS: Execute the reset door locks script [script.reset_door_locks].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects an action to reset intrusion locks, jammed locks, failed locks, or keypad disabled locks.",
"conditions": "There are no conditions that must be met.",
"action": "Runs the reset door locks script [script.reset_door_locks] to clear the alert states for the door locks."
},
"human_like": "Resets various door lock alerts when the user taps a corresponding action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_media_preset_enqueue_options",
"result": {
"structured": "TRIGGER: When media type play input select [input_select.media_type_play] OR media type charlie input select [input_select.media_type_charlie] OR Media Type Chill Input Select [input_select.media_type_chill] OR Media Type Company Input Select [input_select.media_type_company] OR Media Type Guest Input Select [input_select.media_type_guest] OR Media Type Jason Input Select [input_select.media_type_jason] OR Media Type Morning Input Select [input_select.media_type_morning] OR Media Type Shower Input Select [input_select.media_type_shower] OR Media Type Sleep Input Select [input_select.media_type_sleep] OR Media Type Wake Input Select [input_select.media_type_wake] changes state to Video OR When any of the same entities changes state from Video. CONDITIONS: None. ACTIONS: If the trigger was a change to Video AND the corresponding Enqueue Mode Input Select [input_select.enqueue_mode_<preset>] is currently set to Replace Next, then set that input select to Play. Then, update the options for the corresponding Enqueue Mode Input Select [input_select.enqueue_mode_<preset>] to ['Play', 'Replace', 'Next', 'Add'] if the triggering media type is set to Video, otherwise to ['Play', 'Replace', 'Next', 'Replace Next', 'Add'].",
"natural_language": {
"trigger": "The automation triggers when any of the ten media type input selects (media type play input select [input_select.media_type_play], media type charlie input select [input_select.media_type_charlie], Media Type Chill Input Select [input_select.media_type_chill], Media Type Company Input Select [input_select.media_type_company], Media Type Guest Input Select [input_select.media_type_guest], Media Type Jason Input Select [input_select.media_type_jason], Media Type Morning Input Select [input_select.media_type_morning], Media Type Shower Input Select [input_select.media_type_shower], Media Type Sleep Input Select [input_select.media_type_sleep], Media Type Wake Input Select [input_select.media_type_wake]) changes its state to 'Video', or when any of them changes its state away from 'Video'.",
"conditions": "There are no explicit conditions.",
"action": "First, if the trigger was a change to 'Video' and the corresponding enqueue mode input select (identified by the preset name) is currently set to 'Replace Next', then change that enqueue mode to 'Play'. Then, regardless of the previous check, the automation updates the list of available options for that same enqueue mode input select. If the triggering media type is set to 'Video', the new options are 'Play', 'Replace', 'Next', and 'Add'. If the media type is not 'Video', the options are 'Play', 'Replace', 'Next', 'Replace Next', and 'Add'."
},
"human_like": "Manages the available playback queue options for media presets, removing the 'Replace Next' option when a preset is set to Video mode.",
"complexity": "medium"
}
},
{
"id": "reset_media_player_volumes",
"result": {
"structured": "TRIGGER: When any media player entity from /config/include/media_player_entities_single.yaml changes to idle OR off (but not from unknown OR unavailable) AND remains in that state for 60 seconds OR When startup pending [input_boolean.startup_pending] changes to off OR When quiet time binary sensor [binary_sensor.quiet_time] changes to on OR off (from on OR off) OR At the time specified by day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: If the trigger is startup OR quiet, wait until tts input boolean [input_boolean.tts] is off (timeout 120 seconds). If the trigger is player, run media player set volumes script [script.media_player_set_volumes] with source: reset for the triggering entity. Otherwise (for triggers startup, quiet, or time), run media player reset volumes script [script.media_player_reset_volumes] with force_reset: true for triggers startup OR time.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: 1) When any media player included in the list becomes idle or turns off (but not from an unknown or unavailable state) and stays that way for one minute. 2) When the startup pending [input_boolean.startup_pending] switch turns off. 3) When the quiet time binary sensor [binary_sensor.quiet_time] turns on or off. 4) At a specific daily reset time defined by day reset [input_datetime.day_reset].",
"conditions": "There are no explicit conditions that must be met for the automation to run; the triggers alone initiate the process.",
"action": "Depending on what triggered the automation, different actions occur. If the trigger was the startup pending turning off or the quiet time sensor changing state, the automation first waits for the tts input boolean [input_boolean.tts] to be off, with a maximum wait of two minutes. If the trigger was a media player becoming idle or off, it runs the media player set volumes script [script.media_player_set_volumes] specifically for that player to reset its volume. For any other trigger (startup, quiet time change, or the scheduled time), it runs the media player reset volumes script [script.media_player_reset_volumes] for all players, forcing a full reset if triggered by startup or the scheduled time."
},
"human_like": "Resets the volume levels of media players at specific times, when they become inactive, or when the system starts up or quiet time changes.",
"complexity": "high"
}
},
{
"id": "restart_zwave",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'restart_zwave_network' is received. CONDITIONS: None. ACTIONS: Restart the Z-Wave JS addon via hassio.addon_restart service, then wait for z wave js running binary sensor [binary_sensor.z_wave_js_running] to report 'on' with a timeout of 300 seconds, and finally reload the configuration entry for device 8d81bd72be4f34f5d639ad396db18747 via homeassistant.reload_config_entry service.",
"natural_language": {
"trigger": "When a notification action named 'restart_zwave_network' is tapped in the mobile app.",
"conditions": "There are no conditions for this automation.",
"action": "First, it restarts the Z-Wave JS addon. Then, it waits for the z wave js running binary sensor [binary_sensor.z_wave_js_running] to indicate it is running, waiting up to 5 minutes. Finally, it reloads the configuration entry for the Z-Wave device identified as 8d81bd72be4f34f5d639ad396db18747."
},
"human_like": "Restarts the Z-Wave network and reloads its integration when triggered by a mobile app notification, ensuring the service is running before proceeding.",
"complexity": "medium"
}
},
{
"id": "rgb_light_media_color_sync",
"result": {
"structured": "TRIGGER: When the entity_picture attribute changes for either living room chromecast [media_player.living_room_chromecast] OR living room tv [media_player.living_room_tv] OR when dining room light rgb [light.dining_room_light_rgb] turns on. CONDITIONS: (media color light sync input boolean [input_boolean.media_color_light_sync] is on AND dining room light rgb [light.dining_room_light_rgb] is on) AND (the triggering media player's entity_picture attribute is not none) AND (dining room hub [media_player.dining_room_hub] is not an active TTS player). ACTIONS: Call color_extractor.turn_on service on dining room light rgb [light.dining_room_light_rgb] with the entity_picture URL from the relevant media player (living room tv if chromecast is off, otherwise chromecast), set brightness to 80%, and a transition time of 5 seconds.",
"natural_language": {
"trigger": "This automation is triggered either when the media picture (entity_picture) changes on the living room chromecast [media_player.living_room_chromecast] or the living room tv [media_player.living_room_tv], or when the dining room light rgb [light.dining_room_light_rgb] is turned on.",
"conditions": "For the automation to run, the media color light sync input boolean [input_boolean.media_color_light_sync] must be switched on, and the dining room light rgb [light.dining_room_light_rgb] must also be on. Additionally, the media player that triggered the automation must have a valid picture (entity_picture is not empty). Finally, the dining room hub [media_player.dining_room_hub] must not be currently acting as an active text-to-speech player.",
"action": "The automation extracts the dominant color from the media player's current picture and applies it to the dining room light rgb [light.dining_room_light_rgb]. It sets the light's brightness to 80% and smoothly transitions to the new color over 5 seconds."
},
"human_like": "Syncs the color of the dining room RGB light to the currently playing media's artwork, creating an ambient lighting effect.",
"complexity": "medium"
}
},
{
"id": "save_media_player_volume",
"result": {
"structured": "TRIGGER: When the volume_level attribute of any media player entity included from /config/include/media_player_entities_single.yaml changes and remains stable for 5 seconds. CONDITIONS: (alarm triggered [input_boolean.alarm_triggered] is off) AND (the captured volume_level variable is greater than or equal to 0) AND (the triggering media player is not currently designated as an active alarm_clock player AND is not currently designated as an active tts player). ACTIONS: Set the value of the input_number entity named {{ states[trigger.entity_id].object_id }}_current_volume to the captured volume_level.",
"natural_language": {
"trigger": "When the volume level attribute of any media player defined in the included list changes and stays at the new level for five seconds.",
"conditions": "The alarm triggered [input_boolean.alarm_triggered] must be off. The new volume level must be a valid number (zero or greater). The media player whose volume changed must not be the one currently used for alarm clock announcements or text-to-speech messages.",
"action": "Saves the new volume level by updating a corresponding input_number helper. The helper's name is derived from the media player's entity ID, with '_current_volume' appended."
},
"human_like": "Saves the volume level of media players when it changes, but only if the system alarm is not active and the player is not being used for alarms or announcements.",
"complexity": "medium"
}
},
{
"id": "play_saved_tts_messages",
"result": {
"structured": "TRIGGER: When someone home [binary_sensor.someone_home] changes from off to on AND remains on for 5 minutes OR When occupancy mode [input_select.occupancy_mode] changes from Night to Home OR Guest AND remains in the new state for 5 minutes OR When any of the following entities changes from on to off AND remains off for 1 minute: alarm triggered [input_boolean.alarm_triggered], media mute switch [switch.media_mute], scene active binary sensor [binary_sensor.scene_active], mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use], quiet time binary sensor [binary_sensor.quiet_time]. CONDITIONS: saved tts messages sensor [sensor.saved_tts_messages] is above 0 AND someone home [binary_sensor.someone_home] is on AND all of the following entities are off: mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use], scene active binary sensor [binary_sensor.scene_active], media mute switch [switch.media_mute] AND occupancy mode [input_select.occupancy_mode] is either Home OR Guest. ACTIONS: Execute script play saved tts messages [script.play_saved_tts_messages] with the parameter skip_none set to true.",
"natural_language": {
"trigger": "The automation can be triggered in three ways. First, when the system detects that someone has arrived home, indicated by the someone home [binary_sensor.someone_home] sensor turning on and staying on for five minutes. Second, when the occupancy mode [input_select.occupancy_mode] changes from 'Night' to either 'Home' or 'Guest' and stays in that new mode for five minutes. Third, when any one of several 'disturbance' states ends, specifically when the alarm triggered [input_boolean.alarm_triggered], media mute switch [switch.media_mute], scene active binary sensor [binary_sensor.scene_active], mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use], or quiet time binary sensor [binary_sensor.quiet_time] turns off and remains off for one minute.",
"conditions": "For the automation to run, several conditions must be met. There must be at least one saved message to play, meaning the saved tts messages sensor [sensor.saved_tts_messages] must show a value greater than zero. Someone must be home, so the someone home [binary_sensor.someone_home] sensor must be on. The environment must be suitable for playback, so the mobile phone in use binary sensor [binary_sensor.mobile_phone_in_use], scene active binary sensor [binary_sensor.scene_active], and media mute switch [switch.media_mute] must all be off. Finally, the house must be in an active mode, meaning the occupancy mode [input_select.occupancy_mode] must be set to either 'Home' or 'Guest'.",
"action": "The automation plays back any saved text-to-speech messages by running the play saved tts messages [script.play_saved_tts_messages] script, ensuring it skips any empty messages."
},
"human_like": "This automation plays back any saved announcements when the house becomes occupied or exits a quiet state, ensuring it only plays when it won't be disruptive.",
"complexity": "medium"
}
},
{
"id": "scene_lighting",
"result": {
"structured": "TRIGGER: When chill scene switch [switch.chill_scene] OR company scene switch [switch.company_scene] OR movie scene switch [switch.movie_scene] turns on (from off) AND remains on for 2 seconds. OR When chill scene switch [switch.chill_scene] OR company scene switch [switch.company_scene] OR movie scene switch [switch.movie_scene] turns off (from on). CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND occupancy mode [input_select.occupancy_mode] is Home OR Guest. ACTIONS: IF trigger is scene_on THEN call adaptive_lighting.set_manual_control on adaptive lighting main lights switch [switch.adaptive_lighting_main_lights] for lights in adaptive_lights variable AND run light scene on script [script.light_scene_on] with scene variable. ELSE (trigger is scene_off) WAIT until scene active binary sensor [binary_sensor.scene_active] is off (timeout 15 seconds) THEN run reset rgb lights script [script.reset_rgb_lights] with rgb_lights variable. THEN IF nighttime illuminance [binary_sensor.nighttime_illuminance] is on THEN IF waketime active [binary_sensor.waketime_active] is on THEN run light scene on script [script.light_scene_on] with scene 'morning'. ELSE run turn light on script [script.turn_light_on] with night_lights variable (activate_timer false, override true, reset true) AND run turn light off script [script.turn_light_off] with symmetric_difference(scene_lights, night_lights) variable (reset false). ELSE (nighttime illuminance is off) run turn light off script [script.turn_light_off] with scene_lights variable.",
"natural_language": {
"trigger": "The automation triggers when any of the scene switches (chill scene switch [switch.chill_scene], company scene switch [switch.company_scene], or movie scene switch [switch.movie_scene]) is turned on and stays on for at least 2 seconds, or when any of these switches is turned off.",
"conditions": "The automation only runs if the alarm triggered [input_boolean.alarm_triggered] is off, and the occupancy mode [input_select.occupancy_mode] is set to either 'Home' or 'Guest'.",
"action": "If a scene switch was turned on, the automation puts the adaptive lighting system into manual control for the relevant lights and then activates the corresponding lighting scene. If a scene switch was turned off, it waits for the scene to become inactive, resets any RGB lights that were part of the scene, and then sets the lights based on the time of day. At night, if it's waketime, it activates a morning scene; otherwise, it turns on only the designated night lights and turns off the other scene lights. During the day, it simply turns off all the lights that were part of the scene."
},
"human_like": "This automation manages lighting scenes, turning lights on or off based on which scene is activated or deactivated, while respecting the alarm status, occupancy mode, and time of day.",
"complexity": "high"
}
},
{
"id": "scene_light_color",
"result": {
"structured": "TRIGGER: When any of the sensors rgb company scene sensor [sensor.rgb_company_scene], rgb chill scene sensor [sensor.rgb_chill_scene], or rgb movie scene sensor [sensor.rgb_movie_scene] changes to a state that is NOT 'unknown' AND NOT 'unavailable' AND remains stable for 5 seconds. OR When any of the switches chill scene switch [switch.chill_scene], company scene switch [switch.company_scene], or movie scene switch [switch.movie_scene] turns on from off AND remains on for 5 seconds. CONDITIONS: The corresponding RGB color sensor (derived from the trigger) has a valid value. AND The corresponding scene switch (derived from the trigger) is in the 'on' state. ACTIONS: Execute the turn light on script [script.turn_light_on] on the dining room light rgb [light.dining_room_light_rgb] with the RGB color value from the corresponding sensor, a 5-second transition, and flags to not activate a timer and to override any existing settings.",
"natural_language": {
"trigger": "The automation triggers in two ways. First, when any of the scene color sensors (rgb company scene sensor [sensor.rgb_company_scene], rgb chill scene sensor [sensor.rgb_chill_scene], or rgb movie scene sensor [sensor.rgb_movie_scene]) changes to a valid state (not 'unknown' or 'unavailable') and stays that way for 5 seconds. Second, when any of the scene switches (chill scene switch [switch.chill_scene], company scene switch [switch.company_scene], or movie scene switch [switch.movie_scene]) is turned on from an off state and remains on for 5 seconds.",
"conditions": "The automation checks two template conditions. First, it verifies that the specific RGB color sensor associated with the triggered scene (like sensor.rgb_chill_scene) has a valid value. Second, it confirms that the corresponding scene switch (like switch.chill_scene) is currently switched on.",
"action": "It runs the turn light on script [script.turn_light_on] to turn on the dining room light rgb [light.dining_room_light_rgb]. The script uses the RGB color value stored in the corresponding scene sensor, sets a 5-second transition time for the light change, and applies settings to not start a timer and to override any current light state."
},
"human_like": "Sets the dining room light to a specific color when a scene is activated, either by a sensor update or by turning on a scene switch.",
"complexity": "medium"
}
},
{
"id": "security_lighting",
"result": {
"structured": "TRIGGER: When security occupancy sensors group [group.security_occupancy_sensors] changes from off to on AND remains on for 5 seconds. CONDITIONS: security occupancy sensors group [group.security_occupancy_sensors] is off AND house alarm [alarm_control_panel.house] is armed_home OR armed_night OR armed_away OR armed_vacation AND nighttime illuminance [binary_sensor.nighttime_illuminance] is on. ACTIONS: Create a snapshot scene named security_lights_restore for back house potlights [light.back_house_potlights], outside garage lights [light.outside_garage_lights], front house potlights [light.front_house_potlights], front porch light [light.front_porch_light], side entrance light [light.side_entrance_light], kitchen sink light [light.kitchen_sink_light], and adaptive lighting outside lights switch [switch.adaptive_lighting_outside_lights]. Execute turn light on script [script.turn_light_on] on the same list of lights with profile default_max, override true, and activate_timer false. Wait for 2 minutes. Wait until security occupancy sensors group [group.security_occupancy_sensors] is off. Execute light scene on script [script.light_scene_on] to restore the security_lights_restore scene.",
"natural_language": {
"trigger": "When any sensor in the security occupancy sensors group [group.security_occupancy_sensors] detects occupancy, changing its state from off to on, and this state persists for at least 5 seconds.",
"conditions": "The security occupancy sensors group [group.security_occupancy_sensors] must currently be off, indicating no recent motion. The house alarm [alarm_control_panel.house] must be armed in any mode (home, night, away, or vacation). Additionally, it must be dark enough, as indicated by the nighttime illuminance sensor [binary_sensor.nighttime_illuminance] being on.",
"action": "First, a snapshot of the current state of several outside and entryway lights is saved as a scene named 'security_lights_restore'. Then, those same lights are turned on to their maximum brightness using a script. After a 2-minute delay, the automation waits until all security sensors report no motion. Finally, the original light states are restored by activating the saved scene."
},
"human_like": "Turns on security lights when motion is detected at night while the alarm is armed, and restores them to their previous state after the area is clear.",
"complexity": "medium"
}
},
{
"id": "select_other_alarm_clock",
"result": {
"structured": "TRIGGER: When alarm clock other sensor [sensor.alarm_clock_other] attribute 'source' changes to null OR when alarm clock launcher other [input_boolean.alarm_clock_launcher_other] turns on. CONDITIONS: None. ACTIONS: Set alarm clock selection [input_select.alarm_clock_selection] to the value of alarm clock other sensor [sensor.alarm_clock_other] attribute 'source'. If the attribute value is null, set the selection to 'Jason Phone'.",
"natural_language": {
"trigger": "The automation runs when the 'source' attribute of the alarm clock other sensor [sensor.alarm_clock_other] changes to a null value, or when the alarm clock launcher other [input_boolean.alarm_clock_launcher_other] is turned on.",
"conditions": "There are no conditions that must be met for the action to execute.",
"action": "The automation updates the alarm clock selection [input_select.alarm_clock_selection] dropdown. It sets the selected option to the current value of the 'source' attribute from the alarm clock other sensor [sensor.alarm_clock_other]. If that attribute value is null, it instead selects the option 'Jason Phone'."
},
"human_like": "Updates the alarm clock display selection when a specific sensor attribute changes or a launcher is activated, defaulting to 'Jason Phone' if no source is available.",
"complexity": "medium"
}
},
{
"id": "lock_set_vacation_mode",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes to armed_vacation AND remains in that state for 5 minutes OR When house alarm [alarm_control_panel.house] changes from armed_vacation to any other state. CONDITIONS: None. ACTIONS: For all door lock vacation mode selects (back door lock vacation mode select [select.back_door_lock_vacation_mode], front door lock vacation mode select [select.front_door_lock_vacation_mode], garage side door lock vacation mode select [select.garage_side_door_lock_vacation_mode], side door lock vacation mode select [select.side_door_lock_vacation_mode]), set the selected option to 'Enable' if the trigger was the alarm changing to armed_vacation, otherwise set the option to 'Disable'.",
"natural_language": {
"trigger": "This automation is triggered in two scenarios: first, when the house alarm [alarm_control_panel.house] is set to vacation mode (armed_vacation) and stays in that state for five minutes. Second, when the house alarm [alarm_control_panel.house] changes away from vacation mode (armed_vacation) to any other state.",
"conditions": "There are no conditions that must be checked for this automation to run.",
"action": "The automation will set the vacation mode for all configured door locks. It targets the vacation mode select entities for the back door, front door, garage side door, and side door. If the alarm was triggered by entering vacation mode, it sets the option to 'Enable'. If the alarm was triggered by leaving vacation mode, it sets the option to 'Disable'."
},
"human_like": "Automatically enables or disables vacation mode for all door locks when the house alarm is set to or taken off vacation mode.",
"complexity": "medium"
}
},
{
"id": "set_lock_alarm_mode",
"result": {
"structured": "TRIGGER: When house alarm [alarm_control_panel.house] changes state to armed_home, armed_night, armed_away, armed_vacation, or disarmed. CONDITIONS: None. ACTIONS: Choose based on the new state of house alarm [alarm_control_panel.house]. IF state is disarmed THEN set back door lock alarm mode select [select.back_door_lock_alarm_mode], front door lock alarm mode select [select.front_door_lock_alarm_mode], garage side door lock alarm mode select [select.garage_side_door_lock_alarm_mode], and side door lock alarm mode select [select.side_door_lock_alarm_mode] to 'Alarm off'. IF state is armed_home THEN set the same four alarm mode selects to 'Alert' AND set back door lock alarm alert sensitivity select [select.back_door_lock_alarm_alert_sensitivity], front door lock alarm alert sensitivity select [select.front_door_lock_alarm_alert_sensitivity], garage side door lock alarm alert sensitivity select [select.garage_side_door_lock_alarm_alert_sensitivity], and side door lock alarm alert sensitivity select [select.side_door_lock_alarm_alert_sensitivity] to 'Less sensitive'. IF state is armed_night THEN set the four alarm mode selects to 'Forced entry' AND set back door lock alarm kick sensitivity select [select.back_door_lock_alarm_kick_sensitivity], front door lock alarm kick sensitivity select [select.front_door_lock_alarm_kick_sensitivity], garage side door lock alarm kick sensitivity select [select.garage_side_door_lock_alarm_kick_sensitivity], and side door lock alarm kick sensitivity select [select.side_door_lock_alarm_kick_sensitivity] to 'Most sensitive'. IF state is armed_away THEN set the four alarm mode selects to 'Forced entry' AND set the four alarm kick sensitivity selects to 'Most sensitive'. IF state is armed_vacation THEN set the four alarm mode selects to 'Forced entry' AND set the four alarm kick sensitivity selects to 'Most sensitive'.",
"natural_language": {
"trigger": "Whenever the house alarm [alarm_control_panel.house] changes to any of its armed states (armed_home, armed_night, armed_away, armed_vacation) or to the disarmed state.",
"conditions": "There are no additional conditions that must be met for the actions to run.",
"action": "The automation sets the alarm mode and sensitivity for all door locks based on the new alarm state. When the alarm is disarmed, it sets all door lock alarm modes to 'Alarm off'. When the alarm is set to armed_home, it sets the lock alarm modes to 'Alert' and reduces the alert sensitivity to 'Less sensitive'. For armed_night, armed_away, and armed_vacation modes, it sets the lock alarm modes to 'Forced entry' and increases the kick-in sensitivity to 'Most sensitive'."
},
"human_like": "Automatically adjusts the alarm mode and sensitivity settings on all door locks to match the current state of the house alarm system.",
"complexity": "medium"
}
},
{
"id": "set_thermostat",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR When occupancy mode [input_select.occupancy_mode] remains in any state for 15 seconds OR When climate presence override input boolean [input_boolean.climate_presence_override] changes to any state OR When climate manual mode input boolean [input_boolean.climate_manual_mode] turns off OR When home heat temperature input number [input_number.home_heat_temperature] OR home cool temperature input number [input_number.home_cool_temperature] remains in any state for 5 seconds OR When night heat temperature input number [input_number.night_heat_temperature] OR night cool temperature input number [input_number.night_cool_temperature] remains in any state for 5 seconds OR When guest heat temperature input number [input_number.guest_heat_temperature] OR guest cool temperature input number [input_number.guest_cool_temperature] remains in any state for 5 seconds OR When climate mode input select [input_select.climate_mode] changes to any state OR When climate temperature boost sensor [sensor.climate_temperature_boost] changes to any state (not from unknown or unavailable) for 0 seconds. CONDITIONS: climate manual mode input boolean [input_boolean.climate_manual_mode] is off AND ( (NOT (climate house climate [climate.house] is off) AND NOT (climate window door open alert [alert.climate_window_door_open] is on)) OR (trigger.id is 'startup') ) AND (IF trigger.id is 'boost' THEN climate temperature boost sensor [sensor.climate_temperature_boost] state is a numeric value ELSE true) AND (IF trigger.id is 'home' THEN occupancy mode [input_select.occupancy_mode] is 'Home' ELSE IF trigger.id is 'night' THEN occupancy mode [input_select.occupancy_mode] is 'Night' ELSE IF trigger.id is 'guest' THEN occupancy mode [input_select.occupancy_mode] is 'Guest' ELSE true). ACTIONS: Wait 60 seconds THEN run set thermostat script [script.set_thermostat].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when the system finishes starting up (startup pending turns off), when the occupancy mode remains stable for 15 seconds, when the climate presence override is toggled, when the climate manual mode is turned off, when any of the home, night, or guest temperature settings remain stable for 5 seconds, when the general climate mode changes, or when the climate temperature boost sensor changes to a valid, non-unknown state.",
"conditions": "For the automation to proceed, the climate manual mode must be off. Additionally, either the house climate system must not be off and there must be no window/door open alert, or the trigger must be the system startup. If the trigger is a change to the temperature boost sensor, the sensor's value must be a valid number. Finally, if the trigger is related to a specific temperature preset (home, night, or guest), the current occupancy mode must match that preset (e.g., 'Home' mode for home temperature triggers).",
"action": "After a 60-second delay, the automation runs the 'set thermostat' script, which adjusts the thermostat settings based on the current conditions and triggers."
},
"human_like": "This automation updates the thermostat settings automatically when various system states change, such as occupancy mode, temperature presets, or manual overrides, ensuring comfort while respecting energy-saving rules.",
"complexity": "high"
}
},
{
"id": "set_utility_peak_period",
"result": {
"structured": "TRIGGER: When sensor.enwin_utilities_ltd_residential_electricity_rate [sensor.enwin_utilities_ltd_residential_electricity_rate] attribute 'active_peak' changes. CONDITIONS: The attribute 'active_peak' of sensor.enwin_utilities_ltd_residential_electricity_rate [sensor.enwin_utilities_ltd_residential_electricity_rate] is not 'none'. ACTIONS: Set the selected option for both daily energy consumption select [select.daily_energy_consumption] and monthly energy consumption select [select.monthly_energy_consumption] to the current value of the 'active_peak' attribute.",
"natural_language": {
"trigger": "Whenever the 'active_peak' attribute of the enwin utilities ltd residential electricity rate sensor [sensor.enwin_utilities_ltd_residential_electricity_rate] changes.",
"conditions": "The 'active_peak' attribute of the enwin utilities ltd residential electricity rate sensor [sensor.enwin_utilities_ltd_residential_electricity_rate] must have a value and not be 'none'.",
"action": "Sets the selected option for both the daily energy consumption select [select.daily_energy_consumption] and the monthly energy consumption select [select.monthly_energy_consumption] to match the current value of the 'active_peak' attribute."
},
"human_like": "Updates the selected tariff period for daily and monthly energy consumption based on the current electricity rate's peak status.",
"complexity": "medium"
}
},
{
"id": "turn_shower_scene_off",
"result": {
"structured": "TRIGGER: When timer shower scene [timer.shower_scene] finishes. ACTIONS: Turn off shower scene [switch.shower_scene].",
"natural_language": {
"trigger": "When the shower scene timer [timer.shower_scene] finishes.",
"conditions": "There are no conditions for this automation.",
"action": "Turns off the shower scene [switch.shower_scene]."
},
"human_like": "Automatically turns off the shower scene when its timer finishes.",
"complexity": "low"
}
},
{
"id": "turn_side_entrance_light_on",
"result": {
"structured": "TRIGGER: When side door lock [lock.side_door_lock] becomes unlocked OR When side entrance motion binary sensor [binary_sensor.side_entrance_motion] detects motion (on). CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND side entrance illuminance binary sensor [binary_sensor.side_entrance_illuminance] is on. ACTIONS: Execute turn light on script [script.turn_light_on] with parameters to turn on side entrance light [light.side_entrance_light], deactivate timer, and reset.",
"natural_language": {
"trigger": "When the side door lock [lock.side_door_lock] is unlocked, or when motion is detected by the side entrance motion binary sensor [binary_sensor.side_entrance_motion].",
"conditions": "The alarm triggered [input_boolean.alarm_triggered] must be off, and the side entrance illuminance binary sensor [binary_sensor.side_entrance_illuminance] must report that it is on, indicating sufficient ambient light is needed.",
"action": "Runs the turn light on script [script.turn_light_on] to turn on the side entrance light [light.side_entrance_light], with the timer deactivated and the script reset."
},
"human_like": "Turns on the side entrance light when the door is unlocked or motion is detected, but only if the alarm is not triggered and there is enough ambient light.",
"complexity": "medium"
}
},
{
"id": "turn_side_entrance_light_off",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When side entrance motion binary sensor [binary_sensor.side_entrance_motion] remains not detecting motion (off) for 10 minutes OR When timer side entrance light [timer.side_entrance_light] finishes. CONDITIONS: alarm triggered [input_boolean.alarm_triggered] is off AND side entrance motion binary sensor [binary_sensor.side_entrance_motion] remains not detecting motion (off) for 10 minutes AND timer side entrance light [timer.side_entrance_light] is idle. ACTIONS: Turn off side entrance light [light.side_entrance_light].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when Home Assistant first starts up, when the side entrance motion binary sensor [binary_sensor.side_entrance_motion] has not detected any motion for 10 minutes, or when the side entrance light timer [timer.side_entrance_light] finishes its countdown.",
"conditions": "For the action to run, the alarm triggered [input_boolean.alarm_triggered] must be off, the side entrance motion binary sensor [binary_sensor.side_entrance_motion] must have been inactive for at least 10 minutes, and the side entrance light timer [timer.side_entrance_light] must be in the idle state.",
"action": "Turns off the side entrance light [light.side_entrance_light]."
},
"human_like": "Turns off the side entrance light when there has been no motion for a while and the system is not in an alarm state.",
"complexity": "medium"
}
},
{
"id": "play_sleep_media_preset",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes from Home OR Guest to Night AND remains in Night for 60 seconds. CONDITIONS: (media enabled sleep input boolean [input_boolean.media_enabled_sleep] is on) AND (Within an hour of bedtime: The current time is within one hour before OR after the time value from bedtime today sensor [sensor.bedtime_today]). ACTIONS: Execute media play script [script.media_play] with preset 'sleep'.",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] changes from either 'Home' or 'Guest' to 'Night' and stays on 'Night' for at least 60 seconds.",
"conditions": "The media enabled sleep input boolean [input_boolean.media_enabled_sleep] must be turned on. Additionally, the current time must be within one hour before or after the scheduled bedtime, as indicated by the bedtime today sensor [sensor.bedtime_today].",
"action": "Starts the sleep media preset by running the media play script [script.media_play] with the preset set to 'sleep'."
},
"human_like": "Automatically plays a sleep media preset when the house switches to Night mode near bedtime, provided the sleep media feature is enabled.",
"complexity": "medium"
}
},
{
"id": "stop_sleep_media_preset",
"result": {
"structured": "TRIGGER: When media sleep timer [timer.media_sleep] finishes. CONDITIONS: None. ACTIONS: Execute turn media player off script [script.turn_media_player_off] on the media player whose name matches the current state of media speaker sleep select [select.media_speaker_sleep] from the media players group [group.media_players].",
"natural_language": {
"trigger": "When the media sleep timer [timer.media_sleep] finishes.",
"conditions": "There are no conditions for this automation.",
"action": "Runs the turn media player off script [script.turn_media_player_off] on the specific media player that is currently selected by the media speaker sleep select [select.media_speaker_sleep] from the group of all media players."
},
"human_like": "Stops the media player that was set for a sleep timer when the timer runs out.",
"complexity": "low"
}
},
{
"id": "sleep_media_preset_restart_timer",
"result": {
"structured": "TRIGGER: When media sleep time input [input_number.media_sleep_time] changes state. CONDITIONS: media sleep timer [timer.media_sleep] is active OR paused. ACTIONS: Start media sleep timer [timer.media_sleep] with a duration equal to the current value (in minutes) of media sleep time input [input_number.media_sleep_time].",
"natural_language": {
"trigger": "Whenever the value of the media sleep time input [input_number.media_sleep_time] is adjusted.",
"conditions": "The media sleep timer [timer.media_sleep] must already be running or paused.",
"action": "Restarts the media sleep timer [timer.media_sleep], setting its duration to the new number of minutes specified in the media sleep time input [input_number.media_sleep_time]."
},
"human_like": "Restarts the sleep media timer whenever the timer duration is adjusted, as long as the timer is already active.",
"complexity": "low"
}
},
{
"id": "sleep_media_preset_cancel_timer",
"result": {
"structured": "TRIGGER: When the template condition is true for 5 seconds. The template condition is true when the media player selected by media speaker sleep select [select.media_speaker_sleep] is not in the states 'playing', 'paused', 'buffering', or 'on', AND media sleep timer [timer.media_sleep] is in the state 'active' or 'paused'. CONDITIONS: media sleep timer [timer.media_sleep] is active OR paused. ACTIONS: Cancel media sleep timer [timer.media_sleep].",
"natural_language": {
"trigger": "When the selected sleep media player is not active (not playing, paused, buffering, or on) and the media sleep timer is either active or paused, and this situation persists for 5 seconds.",
"conditions": "The media sleep timer must be in an active or paused state.",
"action": "Cancels the media sleep timer."
},
"human_like": "Cancels the sleep timer for media if the selected speaker is turned off.",
"complexity": "medium"
}
},
{
"id": "someone_arrives_home",
"result": {
"structured": "TRIGGER: When jason home [binary_sensor.jason_home] changes from off to on and remains on for 5 seconds OR When guest home [binary_sensor.guest_home] changes from off to on and remains on for 5 seconds. CONDITIONS: None. ACTIONS: Set last person to arrive [input_select.last_person_to_arrive] to the person who triggered the automation. Set variable 'last_to_arrive' to the current time. Set variable 'last_arrived_<person>' to the current time. If occupancy announcements [input_boolean.occupancy_announcements] is on, then play a TTS announcement welcoming the person. If the person is Jason, wait for side entrance motion [binary_sensor.side_entrance_motion] to be on for up to 300 seconds. Wait for 60 seconds. If the person's home sensor is still on, then: If occupancy announcements [input_boolean.occupancy_announcements] is on, generate and play a personalized TTS welcome message. If the person was the first to arrive home (determined by variable 'first_home'), then: If saved tts messages sensor [sensor.saved_tts_messages] is above 0, run play saved tts messages script [script.play_saved_tts_messages] and wait for it to finish. If the person's media enabled input boolean [input_boolean.media_enabled_<person>] is on, run media play script [script.media_play] with the person's preset.",
"natural_language": {
"trigger": "When either the jason home [binary_sensor.jason_home] or the guest home [binary_sensor.guest_home] sensor changes from 'off' to 'on' and stays that way for at least 5 seconds.",
"conditions": "There are no conditions that must be checked before the actions start running.",
"action": "The automation first records who arrived by updating the last person to arrive [input_select.last_person_to_arrive] and setting timestamp variables. If occupancy announcements [input_boolean.occupancy_announcements] are enabled, it plays a simple arrival announcement. If the person is Jason, it waits for motion to be detected at the side entrance [binary_sensor.side_entrance_motion]. After a 60-second delay, if the person is still home, it plays a personalized, flirty or funny welcome message using AI. If this person was the first to arrive home, it will play any saved TTS messages and, if the person's media is enabled, start playing their media preset."
},
"human_like": "Welcomes people home with announcements and personalized messages, and starts their media if they are the first one back.",
"complexity": "high"
}
},
{
"id": "someone_leaves_home",
"result": {
"structured": "TRIGGER: When jason home [binary_sensor.jason_home] changes from on to off AND remains off for 1 minute OR When guest home [binary_sensor.guest_home] changes from on to off AND remains off for 1 minute. CONDITIONS: None. ACTIONS: If last person to arrive select [input_select.last_person_to_arrive] changed within the last 2 minutes, then wait for the triggering entity to return to on for up to 1 minute, and if it is still off, proceed. Then, set Last Person To Leave Input Select [input_select.last_person_to_leave] to the name of the person who left (derived from the trigger). Then, set the variable 'last_to_leave' to the current time. Then, set the variable 'last_left_<person>' (where <person> is the derived name) to the current time.",
"natural_language": {
"trigger": "When either the jason home [binary_sensor.jason_home] or the guest home [binary_sensor.guest_home] sensor changes from 'home' (on) to 'away' (off) and stays in the 'away' state for one minute.",
"conditions": "There are no explicit conditions that must be met before the actions run, but the actions include a conditional check.",
"action": "The automation first checks if someone just arrived home within the last two minutes. If so, it waits for up to one minute to see if the person who triggered the automation returns home. If they do not return, it proceeds. It then records the name of the person who left in the Last Person To Leave Input Select [input_select.last_person_to_leave], and updates two internal variables with the current timestamp: one for the general 'last_to_leave' event and one specific to the person who left."
},
"human_like": "Updates the home's departure tracking when someone leaves, including a brief waiting period to confirm they are really gone if they just arrived.",
"complexity": "medium"
}
},
{
"id": "turn_spa_maintenance_on",
"result": {
"structured": "TRIGGER: When the template evaluates to true, which requires: spa maintenance enabled [input_boolean.spa_maintenance_enabled] is on AND occupancy mode [input_select.occupancy_mode] is not 'Vacation' AND ( (work status sensor [sensor.work_status] shift attribute equals 'Days' AND time sensor [sensor.time] matches the first 5 characters of spa maintenance days datetime [input_datetime.spa_maintenance_days]) OR (work status sensor [sensor.work_status] shift attribute equals 'Afternoons' AND time sensor [sensor.time] matches the first 5 characters of spa maintenance afternoons datetime [input_datetime.spa_maintenance_afternoons]) OR (work status sensor [sensor.work_status] shift attribute equals 'Off' AND time sensor [sensor.time] matches the first 5 characters of spa maintenance weekends datetime [input_datetime.spa_maintenance_weekends]) ) AND ( spa maintenance done button [button.spa_maintenance_done] state is 'unknown' OR the number of days between the current date and the date of the last run (from spa maintenance done button [button.spa_maintenance_done]) is greater than or equal to the integer value of spa maintenance day interval [input_number.spa_maintenance_day_interval] ). CONDITIONS: None. ACTIONS: If spa maintenance active [input_boolean.spa_maintenance_active] is on, turn it off. If spa maintenance paused [input_boolean.spa_maintenance_paused] is on, turn it off (action is duplicated in YAML). If spa maintenance skipped [input_boolean.spa_maintenance_skipped] is on, turn it off; otherwise, turn on spa maintenance active [input_boolean.spa_maintenance_active].",
"natural_language": {
"trigger": "The automation triggers when a complex set of conditions are met. First, the spa maintenance feature must be enabled, and the house must not be in 'Vacation' mode. Then, the current time must match a scheduled maintenance time based on the work shift status. If the work shift is 'Days', the time must match the 'Days' schedule. If the shift is 'Afternoons', it must match the 'Afternoons' schedule. If the shift is 'Off', it must match the 'Weekends' schedule. Finally, maintenance is only due if the last time it was done is unknown, or if enough days have passed since the last maintenance, as defined by the configured day interval.",
"conditions": "There are no separate conditions block; all logic is contained within the template trigger.",
"action": "The automation performs a series of checks and actions on maintenance status indicators. First, it turns off the 'active' status if it is already on. Then, if the maintenance is currently 'paused', it turns off the 'paused' status (this action is listed twice in the code). Finally, it checks the 'skipped' status. If maintenance was skipped, it turns off the 'skipped' status. If it was not skipped, it turns on the 'active' status to indicate that maintenance is now due."
},
"human_like": "Activates a spa maintenance reminder at scheduled times, based on work shifts and the last time maintenance was performed.",
"complexity": "high"
}
},
{
"id": "spa_maintenance_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'spa_maintenance_done' is received. CONDITIONS: spa maintenance active [input_boolean.spa_maintenance_active] is on. ACTIONS: Press spa maintenance done button [button.spa_maintenance_done].",
"natural_language": {
"trigger": "When you tap the 'spa_maintenance_done' action on a notification sent to your mobile app.",
"conditions": "The spa maintenance active [input_boolean.spa_maintenance_active] toggle must be in the 'on' state.",
"action": "Presses the virtual spa maintenance done button [button.spa_maintenance_done]."
},
"human_like": "Completes a spa maintenance reminder when you tap the notification action, provided the maintenance mode is active.",
"complexity": "low"
}
},
{
"id": "skip_spa_maintenance",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_spa_maintenance'. CONDITIONS: None. ACTIONS: Press skip spa maintenance button [button.skip_spa_maintenance].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the 'skip_spa maintenance' action.",
"conditions": "There are no additional conditions that must be met.",
"action": "Presses the skip spa maintenance button [button.skip_spa_maintenance]."
},
"human_like": "Skips the spa maintenance reminder when the user taps the 'skip' action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "pause_spa_maintenance",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'pause_spa_maintenance' occurs. CONDITIONS: None. ACTIONS: Turn on spa maintenance paused [input_boolean.spa_maintenance_paused].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the 'pause_spa_maintenance' action.",
"conditions": "There are no conditions that must be met.",
"action": "Sets the spa maintenance paused [input_boolean.spa_maintenance_paused] status to on."
},
"human_like": "Pauses spa maintenance reminders when the user taps the pause action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_spa_maintenance",
"result": {
"structured": "TRIGGER: When spa maintenance skipped [input_boolean.spa_maintenance_skipped] turns on OR When spa maintenance paused [input_boolean.spa_maintenance_paused] remains on for 24 hours OR When owner home [binary_sensor.owner_home] remains on for 15 minutes. CONDITIONS: spa maintenance paused [input_boolean.spa_maintenance_paused] is on. ACTIONS: Turn off spa maintenance paused [input_boolean.spa_maintenance_paused].",
"natural_language": {
"trigger": "The automation triggers if the spa maintenance skipped [input_boolean.spa_maintenance_skipped] is turned on, or if the spa maintenance paused [input_boolean.spa_maintenance_paused] has been on for 24 hours, or if the owner home [binary_sensor.owner_home] sensor has been on for 15 minutes.",
"conditions": "The automation only runs if the spa maintenance paused [input_boolean.spa_maintenance_paused] is currently on.",
"action": "It turns off the spa maintenance paused [input_boolean.spa_maintenance_paused] input boolean."
},
"human_like": "Resets the spa maintenance pause status when a skip is requested, after a 24-hour pause, or when the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_spa_maintenance_booleans",
"result": {
"structured": "TRIGGER: When spa maintenance enabled [input_boolean.spa_maintenance_enabled] turns off OR When spa maintenance active [input_boolean.spa_maintenance_active] turns off OR When any of the following entities turns on: spa maintenance active [input_boolean.spa_maintenance_active], spa maintenance paused [input_boolean.spa_maintenance_paused], or spa maintenance skipped [input_boolean.spa_maintenance_skipped]. CONDITIONS: (spa maintenance enabled [input_boolean.spa_maintenance_enabled] is off) OR (the triggered entity is spa maintenance paused [input_boolean.spa_maintenance_paused] AND (spa maintenance active [input_boolean.spa_maintenance_active] is off OR spa maintenance skipped [input_boolean.spa_maintenance_skipped] is on)) OR (the trigger ID is 'done'). ACTIONS: If the trigger ID is 'entity', turn off the specific entity that triggered the automation. Otherwise, turn off all three entities: spa maintenance active [input_boolean.spa_maintenance_active], spa maintenance paused [input_boolean.spa_maintenance_paused], and spa maintenance skipped [input_boolean.spa_maintenance_skipped].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the spa maintenance enabled [input_boolean.spa_maintenance_enabled] is turned off, when the spa maintenance active [input_boolean.spa_maintenance_active] is turned off, or when any of the three maintenance-related booleans (spa maintenance active [input_boolean.spa_maintenance_active], spa maintenance paused [input_boolean.spa_maintenance_paused], or spa maintenance skipped [input_boolean.spa_maintenance_skipped]) turns on.",
"conditions": "The automation proceeds only if at least one of the following is true: the spa maintenance enabled [input_boolean.spa_maintenance_enabled] is already off, the trigger was the spa maintenance paused [input_boolean.spa_maintenance_paused] turning on while the spa maintenance active [input_boolean.spa_maintenance_active] is off or the spa maintenance skipped [input_boolean.spa_maintenance_skipped] is on, or the trigger was specifically the spa maintenance active [input_boolean.spa_maintenance_active] turning off (identified by the trigger ID 'done').",
"action": "Depending on the trigger, the automation will either turn off the specific boolean that just turned on (if the trigger was from the list of three entities), or it will turn off all three maintenance booleans (spa maintenance active [input_boolean.spa_maintenance_active], spa maintenance paused [input_boolean.spa_maintenance_paused], and spa maintenance skipped [input_boolean.spa_maintenance_skipped]) if the trigger was the disabling of the main enabled or active states."
},
"human_like": "Resets spa maintenance reminder status flags when the reminder is disabled, completed, or paused under invalid conditions.",
"complexity": "medium"
}
},
{
"id": "spa_maintenance_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When spa maintenance active [input_boolean.spa_maintenance_active] turns on OR When spa maintenance paused [input_boolean.spa_maintenance_paused] turns off. CONDITIONS: spa maintenance active [input_boolean.spa_maintenance_active] is on AND spa maintenance paused [input_boolean.spa_maintenance_paused] is off. ACTIONS: REPEAT sequence UNTIL spa maintenance active [input_boolean.spa_maintenance_active] is off OR spa maintenance paused [input_boolean.spa_maintenance_paused] is on. Each iteration: IF occupancy mode [input_select.occupancy_mode] is NOT 'Night' THEN send a persistent notification to jason medication notification [notify.jason] with actions Pause, Skip, Done AND WAIT for spa maintenance active [input_boolean.spa_maintenance_active] to be off OR spa maintenance paused [input_boolean.spa_maintenance_paused] to be on (timeout 2 minutes). IF after waiting spa maintenance active [input_boolean.spa_maintenance_active] is on AND spa maintenance paused [input_boolean.spa_maintenance_paused] is off THEN run tts play script [script.tts_play] with a TTS message. THEN WAIT for spa maintenance active [input_boolean.spa_maintenance_active] to be off OR spa maintenance paused [input_boolean.spa_maintenance_paused] to be on (timeout defined by spa maintenance notification interval [input_number.spa_maintenance_notification_interval] minutes).",
"natural_language": {
"trigger": "The automation triggers when Home Assistant starts, when the spa maintenance active [input_boolean.spa_maintenance_active] is turned on, or when the spa maintenance paused [input_boolean.spa_maintenance_paused] is turned off.",
"conditions": "The automation only runs if the spa maintenance active [input_boolean.spa_maintenance_active] is currently on and the spa maintenance paused [input_boolean.spa_maintenance_paused] is currently off.",
"action": "The automation enters a repeating loop that continues until the spa maintenance is either deactivated or paused. In each loop, if the house is not in 'Night' occupancy mode, it sends a persistent notification to jason medication notification [notify.jason] with options to Pause, Skip, or mark the task as Done. It then waits for up to two minutes for the maintenance to be deactivated or paused. If after waiting the maintenance is still active and not paused, it plays a text-to-speech reminder using the tts play script [script.tts_play]. Finally, it waits for a longer period, defined by the spa maintenance notification interval [input_number.spa_maintenance_notification_interval], for the maintenance to be deactivated or paused before the loop repeats."
},
"human_like": "Sends recurring notifications and voice reminders to check the spa until the maintenance task is either completed or paused, avoiding the night time.",
"complexity": "high"
}
},
{
"id": "clear_spa_maintenance_notification",
"result": {
"structured": "TRIGGER: When spa maintenance active [input_boolean.spa_maintenance_active] turns off OR When spa maintenance paused [input_boolean.spa_maintenance_paused] turns on OR When spa maintenance skipped [input_boolean.spa_maintenance_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with the message 'clear_notification' and tag 'spa_maintenance_reminder'.",
"natural_language": {
"trigger": "When the spa maintenance active [input_boolean.spa_maintenance_active] is turned off, or when either the spa maintenance paused [input_boolean.spa_maintenance_paused] or spa maintenance skipped [input_boolean.spa_maintenance_skipped] is turned on.",
"conditions": "There are no additional conditions that must be met.",
"action": "Sends a notification to jason medication notification [notify.jason] to clear a previous reminder notification tagged as 'spa_maintenance_reminder'."
},
"human_like": "Clears the spa maintenance reminder notification when maintenance is deactivated, paused, or skipped.",
"complexity": "low"
}
},
{
"id": "spa_temperature_selection",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes from Vacation AND remains in the new state for 1 second OR when occupancy mode [input_select.occupancy_mode] changes to Vacation AND remains in Vacation for 1 second. CONDITIONS: None. ACTIONS: If occupancy mode [input_select.occupancy_mode] is Vacation, then repeatedly set spa temperature range select [select.spa_temperature_range] to 'low' and wait for the state to become 'low' (with a 30-minute timeout per attempt) until it is 'low'. Otherwise, repeatedly set spa temperature range select [select.spa_temperature_range] to 'high' and wait for the state to become 'high' (with a 30-minute timeout per attempt) until it is 'high'.",
"natural_language": {
"trigger": "The automation triggers when the occupancy mode [input_select.occupancy_mode] either leaves the Vacation state (changes from Vacation) or enters the Vacation state (changes to Vacation), and the new state remains stable for one second.",
"conditions": "There are no additional conditions.",
"action": "If the occupancy mode is Vacation, the automation will attempt to set the spa temperature range select [select.spa_temperature_range] to 'low'. It will keep trying, waiting up to 30 minutes for the setting to take effect, until it successfully confirms the spa temperature is set to 'low'. If the occupancy mode is not Vacation, it will instead attempt to set the spa temperature range to 'high', also retrying with a 30-minute timeout until it confirms the setting is 'high'."
},
"human_like": "Sets the spa temperature to a low range when the house is in Vacation mode, and to a high range otherwise, ensuring the setting is applied reliably.",
"complexity": "medium"
}
},
{
"id": "turn_spa_water_on",
"result": {
"structured": "TRIGGER: When the template evaluates to true, which requires spa water enabled [input_boolean.spa_water_enabled] is on AND the current time (from time sensor [sensor.time]) matches a scheduled time based on the work status sensor [sensor.work_status] shift attribute AND the time elapsed since the last press of spa water done button [button.spa_water_done] exceeds the number of days set in spa water day interval [input_number.spa_water_day_interval]. Specifically, the schedule is: (work status sensor shift is 'Days' AND time matches the first 5 characters of spa water days datetime [input_datetime.spa_water_days]) OR (work status sensor shift is 'Afternoons' AND time matches the first 5 characters of spa water afternoons datetime [input_datetime.spa_water_afternoons]) OR (work status sensor shift is 'Off' AND time matches the first 5 characters of spa water weekends datetime [input_datetime.spa_water_weekends]). CONDITIONS: None. ACTIONS: If spa water active [input_boolean.spa_water_active] is on, turn it off. If spa water paused [input_boolean.spa_water_paused] is on, turn it off (action is listed twice). If spa water skipped [input_boolean.spa_water_skipped] is on, turn it off; otherwise, turn on spa water active [input_boolean.spa_water_active].",
"natural_language": {
"trigger": "The automation triggers based on a complex template condition. First, the spa water enabled [input_boolean.spa_water_enabled] must be turned on. Then, it checks if the current time from the time sensor [sensor.time] matches a specific schedule. The schedule depends on the current work shift, which is read from the shift attribute of the work status sensor [sensor.work_status]. If the shift is 'Days', the time must match the time set in spa water days datetime [input_datetime.spa_water_days]. If the shift is 'Afternoons', it must match spa water afternoons datetime [input_datetime.spa_water_afternoons]. If the shift is 'Off', it must match spa water weekends datetime [input_datetime.spa_water_weekends]. Furthermore, the automation only triggers if enough days have passed since the last time the spa water done button [button.spa_water_done] was pressed, as defined by the spa water day interval [input_number.spa_water_day_interval].",
"conditions": "There are no separate conditions defined in the automation; all logic is contained within the trigger template.",
"action": "The automation performs a series of checks and actions on several status booleans. First, if the spa water active [input_boolean.spa_water_active] is on, it turns it off. Then, if the spa water paused [input_boolean.spa_water_paused] is on, it turns it off (this action is performed twice in the YAML). Next, it checks the status of spa water skipped [input_boolean.spa_water_skipped]. If it is on, it turns it off. If it is off, it turns on the spa water active [input_boolean.spa_water_active] boolean, effectively activating the reminder."
},
"human_like": "Activates a reminder for spa water maintenance on a scheduled time, depending on your work shift, but only if the task hasn't been done recently.",
"complexity": "high"
}
},
{
"id": "spa_water_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'spa_water_done' is received. CONDITIONS: spa water active [input_boolean.spa_water_active] is on. ACTIONS: Press spa water done button [button.spa_water_done].",
"natural_language": {
"trigger": "When you tap the 'spa_water_done' action on a notification sent to your mobile app.",
"conditions": "The spa water active [input_boolean.spa_water_active] status must be on.",
"action": "Presses the spa water done button [button.spa_water_done]."
},
"human_like": "Marks a spa water reminder as completed when you tap the notification action, provided the reminder is currently active.",
"complexity": "low"
}
},
{
"id": "skip_spa_water",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_spa_water'. CONDITIONS: None. ACTIONS: Press the skip spa water button [button.skip_spa_water].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the 'skip_spa_water' action.",
"conditions": "There are no conditions that must be met.",
"action": "Presses the skip spa water button [button.skip_spa_water]."
},
"human_like": "Allows a user to skip a spa water reminder by pressing a button from a mobile notification.",
"complexity": "low"
}
},
{
"id": "pause_spa_water",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'pause_spa_water'. CONDITIONS: None. ACTIONS: Turn on spa water paused [input_boolean.spa_water_paused].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification by selecting the 'pause_spa_water' action.",
"conditions": "There are no conditions that must be met.",
"action": "Sets the reminder to a paused state by turning on the spa water paused [input_boolean.spa_water_paused] input boolean."
},
"human_like": "Pauses a spa water reminder when the user taps the corresponding action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_spa_water",
"result": {
"structured": "TRIGGER: When spa water skipped [input_boolean.spa_water_skipped] turns on OR When spa water paused [input_boolean.spa_water_paused] remains on for 24 hours OR When owner home [binary_sensor.owner_home] remains on for 15 minutes. CONDITIONS: spa water paused [input_boolean.spa_water_paused] is on. ACTIONS: Turn off spa water paused [input_boolean.spa_water_paused].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when the spa water skipped [input_boolean.spa_water_skipped] is turned on, when the spa water paused [input_boolean.spa_water_paused] has been on for 24 hours, or when the owner home [binary_sensor.owner_home] sensor has been on for 15 minutes.",
"conditions": "The automation only proceeds if the spa water paused [input_boolean.spa_water_paused] is currently on.",
"action": "Resets the paused reminder by turning off the spa water paused [input_boolean.spa_water_paused] input boolean."
},
"human_like": "Resets the spa water reminder pause when it's manually skipped, after 24 hours, or when the owner returns home.",
"complexity": "medium"
}
},
{
"id": "reset_spa_water_booleans",
"result": {
"structured": "TRIGGER: When spa water enabled [input_boolean.spa_water_enabled] turns off OR When spa water active [input_boolean.spa_water_active] turns off OR When spa water active [input_boolean.spa_water_active] OR spa water paused [input_boolean.spa_water_paused] OR spa water skipped [input_boolean.spa_water_skipped] turns on. CONDITIONS: (spa water enabled [input_boolean.spa_water_enabled] is off) OR (spa water paused [input_boolean.spa_water_paused] is turned on when reminder is skipped or isn't active) OR (the trigger id is 'done'). ACTIONS: If the trigger id is 'entity', then turn off the specific entity that triggered. Otherwise, turn off spa water active [input_boolean.spa_water_active], spa water paused [input_boolean.spa_water_paused], and spa water skipped [input_boolean.spa_water_skipped].",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when the spa water enabled [input_boolean.spa_water_enabled] reminder is disabled, when the spa water active [input_boolean.spa_water_active] reminder is marked as completed, or when any of the three reminder state booleans (spa water active [input_boolean.spa_water_active], spa water paused [input_boolean.spa_water_paused], or spa water skipped [input_boolean.spa_water_skipped]) are turned on.",
"conditions": "For the automation to proceed, at least one of the following must be true: the spa water enabled [input_boolean.spa_water_enabled] is off, the trigger is the spa water paused [input_boolean.spa_water_paused] being turned on while the reminder is either not active or has been skipped, or the trigger is specifically the completion of the reminder (trigger id 'done').",
"action": "Depending on what triggered the automation, it will either turn off the specific boolean that was just turned on, or it will turn off all three reminder state booleans (spa water active [input_boolean.spa_water_active], spa water paused [input_boolean.spa_water_paused], and spa water skipped [input_boolean.spa_water_skipped]) to reset the system."
},
"human_like": "Resets the spa water reminder status booleans when the reminder is disabled, completed, or when an invalid state change occurs.",
"complexity": "medium"
}
},
{
"id": "spa_water_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When spa water active [input_boolean.spa_water_active] turns on OR When spa water paused [input_boolean.spa_water_paused] turns off. CONDITIONS: spa water active [input_boolean.spa_water_active] is on AND spa water paused [input_boolean.spa_water_paused] is off. ACTIONS: REPEAT the following sequence UNTIL spa water active [input_boolean.spa_water_active] is off OR spa water paused [input_boolean.spa_water_paused] is on: 1. IF occupancy mode [input_select.occupancy_mode] is NOT 'Night' THEN send a notification to jason medication notification [notify.jason] with a reminder message and action buttons (Pause, Skip, Done), THEN wait up to 2 minutes for spa water active [input_boolean.spa_water_active] to be off OR spa water paused [input_boolean.spa_water_paused] to be on. 2. IF after the wait spa water active [input_boolean.spa_water_active] is still on AND spa water paused [input_boolean.spa_water_paused] is still off THEN activate tts play script [script.tts_play] with a TTS message. 3. Wait up to spa water notification interval [input_number.spa_water_notification_interval] minutes for spa water active [input_boolean.spa_water_active] to be off OR spa water paused [input_boolean.spa_water_paused] to be on.",
"natural_language": {
"trigger": "The automation starts when Home Assistant first boots up, when the spa water active [input_boolean.spa_water_active] switch is turned on, or when the spa water paused [input_boolean.spa_water_paused] switch is turned off.",
"conditions": "For the automation to proceed, the spa water active [input_boolean.spa_water_active] must be on and the spa water paused [input_boolean.spa_water_paused] must be off.",
"action": "The automation enters a repeating loop that continues until the spa water active [input_boolean.spa_water_active] is turned off or the spa water paused [input_boolean.spa_water_paused] is turned on. In each loop cycle, if the occupancy mode [input_select.occupancy_mode] is not set to 'Night', it sends a persistent notification to jason medication notification [notify.jason] reminding Jason to change the spa water and provides action buttons. It then waits for up to 2 minutes for the spa water to be marked as inactive or paused. If after that wait the spa water is still active and not paused, it triggers a text-to-speech announcement via the tts play script [script.tts_play]. Finally, it waits for a longer period defined by the spa water notification interval [input_number.spa_water_notification_interval] before starting the next loop cycle, again checking if the spa water is still active and not paused."
},
"human_like": "Sends recurring notifications and voice reminders to change the spa water, with options to pause, skip, or mark it as done, until the reminder is manually stopped.",
"complexity": "high"
}
},
{
"id": "clear_spa_water_notification",
"result": {
"structured": "TRIGGER: When spa water active [input_boolean.spa_water_active] turns off OR When spa water paused [input_boolean.spa_water_paused] turns on OR When spa water skipped [input_boolean.spa_water_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with a message to clear the notification tagged 'spa_water_reminder'.",
"natural_language": {
"trigger": "The automation triggers if the spa water active [input_boolean.spa_water_active] is turned off, or if either the spa water paused [input_boolean.spa_water_paused] or spa water skipped [input_boolean.spa_water_skipped] is turned on.",
"conditions": "There are no additional conditions that must be met.",
"action": "It sends a notification to jason medication notification [notify.jason] with a specific command to clear any existing notification that has the tag 'spa_water_reminder'."
},
"human_like": "Clears the spa water reminder notification when the water task is deactivated, paused, or skipped.",
"complexity": "low"
}
},
{
"id": "start_car_reminder",
"result": {
"structured": "TRIGGER: When the time matches the value from car start time sensor [sensor.car_start_time]. CONDITIONS: outdoor temperature sensor [sensor.outdoor_temperature] is below 5 degrees. ACTIONS: Execute tts play script [script.tts_play] with parameters: message containing the current outdoor temperature, target media player inside speakers media player [media_player.inside_speakers], provider HASS, language English (USA), voice Luna, minimum volume 60%, and quiet play enabled.",
"natural_language": {
"trigger": "The automation triggers at a specific time, which is determined by the car start time sensor [sensor.car_start_time].",
"conditions": "The automation only proceeds if the outdoor temperature sensor [sensor.outdoor_temperature] reports a temperature below 5 degrees.",
"action": "It plays a text-to-speech announcement on the inside speakers media player [media_player.inside_speakers]. The message states the current outdoor temperature and reminds the user to start their car to avoid the cold on the way to work. The announcement uses a specific voice and volume settings."
},
"human_like": "Reminds you to start your car when it's cold outside, based on your scheduled departure time.",
"complexity": "low"
}
},
{
"id": "turn_indoor_sump_on",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When a mobile app notification action with event_data.action equal to 'turn_indoor_sump_on' is received. ACTIONS: Wait for up to 10 minutes for indoor sump switch [switch.indoor_sump] to have a valid state value. IF the wait completes successfully THEN turn on indoor sump switch [switch.indoor_sump]. ELSE run the sump error notification script [script.sump_error_notification] with data { sump: indoor }.",
"natural_language": {
"trigger": "The automation runs either when Home Assistant first starts up, or when a specific notification action named 'turn_indoor_sump_on' is received from a mobile app.",
"conditions": "There are no explicit conditions for this automation.",
"action": "The automation first waits for up to 10 minutes for the indoor sump switch [switch.indoor_sump] to be available and report a valid state. If the switch becomes available within that time, it is turned on. If the wait times out after 10 minutes, an error notification is sent by running the sump error notification script [script.sump_error_notification] with the parameter specifying the 'indoor' sump."
},
"human_like": "Turns on the indoor sump pump when Home Assistant starts or when requested via a mobile notification, and sends an error alert if the pump switch is unavailable.",
"complexity": "medium"
}
},
{
"id": "turn_outdoor_sump_on",
"result": {
"structured": "TRIGGER: When outdoor temperature sensor [sensor.outdoor_temperature] remains above 1°C for 1 day OR when a mobile app notification action with event data action 'turn_outdoor_sump_on' is received. ACTIONS: Wait up to 10 minutes for outdoor sump switch [switch.outdoor_sump] to have a valid state. IF the wait completes successfully, THEN turn on outdoor sump switch [switch.outdoor_sump]. ELSE run sump error notification script [script.sump_error_notification] with data sump: outdoor.",
"natural_language": {
"trigger": "The automation starts either when the outdoor temperature sensor [sensor.outdoor_temperature] stays above 1°C for a full day, or when a specific notification action named 'turn_outdoor_sump_on' is received from the mobile app.",
"conditions": "There are no explicit conditions to check before proceeding with the actions.",
"action": "First, the automation waits for up to 10 minutes for the outdoor sump switch [switch.outdoor_sump] to become available. If the switch becomes available within that time, it is turned on. If the wait times out, an error notification is sent by running the sump error notification script [script.sump_error_notification] with the parameter 'outdoor'."
},
"human_like": "Turns on the outdoor sump pump when it's been warm enough for a day or when manually triggered via a phone notification, and sends an alert if the pump isn't available.",
"complexity": "medium"
}
},
{
"id": "turn_outodoor_sump_off",
"result": {
"structured": "TRIGGER: When outdoor temperature sensor [sensor.outdoor_temperature] remains below 1 for 12 hours OR When a mobile app notification action event with action 'turn_outdoor_sump_off' occurs. ACTIONS: Wait up to 10 minutes for outdoor sump switch [switch.outdoor_sump] to have a valid state. IF the wait completes successfully THEN turn off outdoor sump switch [switch.outdoor_sump]. ELSE run sump error notification script [script.sump_error_notification] with data sump: outdoor.",
"natural_language": {
"trigger": "When the outdoor temperature sensor [sensor.outdoor_temperature] stays below 1 degree for 12 consecutive hours, or when a specific notification action ('turn_outdoor_sump_off') is received from the mobile app.",
"conditions": "There are no explicit conditions defined in this automation.",
"action": "The automation first waits for up to 10 minutes for the outdoor sump switch [switch.outdoor_sump] to become available. If the switch becomes available within that time, it is turned off. If the switch does not become available, an error notification is sent via the sump error notification script [script.sump_error_notification]."
},
"human_like": "Turns off the outdoor sump pump when temperatures are low for an extended period or when manually triggered via a mobile notification, with a safety check to handle an unavailable switch.",
"complexity": "medium"
}
},
{
"id": "outdoor_sump_restart",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR when outdoor sump switch [switch.outdoor_sump] changes from unknown or unavailable to any other state. CONDITIONS: startup pending [input_boolean.startup_pending] is off. ACTIONS: Wait up to 10 minutes for outdoor sump switch [switch.outdoor_sump] to have a value AND outdoor temperature sensor [sensor.outdoor_temperature] to have a numeric value. IF wait completes successfully: IF outdoor temperature sensor [sensor.outdoor_temperature] is below 1, THEN turn off outdoor sump switch [switch.outdoor_sump]. ELSE turn on outdoor sump switch [switch.outdoor_sump]. IF wait times out (does not complete): Run sump error notification script [script.sump_error_notification] with data sump: outdoor.",
"natural_language": {
"trigger": "The automation triggers either when the startup pending [input_boolean.startup_pending] flag is turned off, or when the outdoor sump switch [switch.outdoor_sump] becomes available (changing from an unknown or unavailable state).",
"conditions": "The automation only proceeds if the startup pending [input_boolean.startup_pending] is still off at the time of evaluation.",
"action": "The system first waits for up to 10 minutes for the outdoor sump switch [switch.outdoor_sump] to report a valid state and for the outdoor temperature sensor [sensor.outdoor_temperature] to provide a numeric reading. If both conditions are met within the timeout, it checks the temperature: if it's below 1 degree, the sump is turned off; otherwise, it's turned on. If the wait times out before both entities are ready, an error notification script [script.sump_error_notification] is run to alert about the outdoor sump."
},
"human_like": "This automation ensures the outdoor sump pump is correctly turned on or off based on the outside temperature after the system starts up or the pump becomes available, and sends an alert if it cannot determine the state.",
"complexity": "medium"
}
},
{
"id": "sync_home_away",
"result": {
"structured": "TRIGGER: When jason person [person.jason] changes to home OR When jason person [person.jason] changes from home OR When jason home input boolean [input_boolean.jason_home] changes to on OR off OR When jason presence override [input_boolean.jason_presence_override] changes to off. CONDITIONS: jason presence override [input_boolean.jason_presence_override] is off. ACTIONS: Turn off this automation [this.entity_id] (without stopping running actions), then turn on or off jason home input boolean [input_boolean.jason_home] to match the state of jason person [person.jason] (on if home, off otherwise), then turn this automation [this.entity_id] back on.",
"natural_language": {
"trigger": "The automation triggers when the state of jason person [person.jason] changes to or from home, when the jason home input boolean [input_boolean.jason_home] is turned on or off, or when the jason presence override [input_boolean.jason_presence_override] is turned off.",
"conditions": "The automation only proceeds if the jason presence override [input_boolean.jason_presence_override] is currently off.",
"action": "First, the automation temporarily turns itself off, but allows any currently running actions to finish. Then, it sets the jason home input boolean [input_boolean.jason_home] to 'on' if jason person [person.jason] is home, or to 'off' if not. Finally, it turns itself back on."
},
"human_like": "Keeps the 'Jason Home' status indicator in sync with Jason's actual location, unless a manual override is active.",
"complexity": "medium"
}
},
{
"id": "thermostat_mode_changed",
"result": {
"structured": "TRIGGER: When climate house climate [climate.house] changes state to heat, cool, heat_cool, fan_only, or off. CONDITIONS: set thermostat script [script.set_thermostat] is off AND climate window door open alert [alert.climate_window_door_open] is idle. ACTIONS: Set climate mode input select [input_select.climate_mode] to the current state of climate house climate [climate.house].",
"natural_language": {
"trigger": "Whenever the climate house climate [climate.house] changes its mode to heat, cool, heat_cool, fan_only, or off.",
"conditions": "The set thermostat script [script.set_thermostat] must not be running (it must be off), and the climate window door open alert [alert.climate_window_door_open] must not be active (it must be idle).",
"action": "Updates the stored climate mode by setting the climate mode input select [input_select.climate_mode] to match the current mode of the climate house climate [climate.house]."
},
"human_like": "Keeps a record of the thermostat's current mode, updating it whenever the mode changes, provided no related scripts or alerts are active.",
"complexity": "low"
}
},
{
"id": "tts_queue_finished",
"result": {
"structured": "TRIGGER: When tts play script [script.tts_play] changes from on to off and remains off for 1 second OR when tts input boolean [input_boolean.tts] remains on for 2 minutes. CONDITIONS: tts enabled input boolean [input_boolean.tts_enabled] is on. ACTIONS: Run tts finished script [script.tts_finished] with a variable 'reset' set to true if the trigger was the reset trigger (input_boolean.tts), otherwise false.",
"natural_language": {
"trigger": "The automation triggers in two ways: either when the tts play script [script.tts_play] finishes running (changes from on to off and stays off for one second), or when the tts input boolean [input_boolean.tts] is left in the on state for two minutes.",
"conditions": "The automation only proceeds if the tts enabled input boolean [input_boolean.tts_enabled] is switched on.",
"action": "It runs the tts finished script [script.tts_finished]. It also passes a variable to this script: the 'reset' variable is set to true if the automation was triggered by the two-minute timer on the tts input boolean, otherwise it is set to false."
},
"human_like": "Resets the TTS (Text-to-Speech) queue when the playback finishes or if the queue is manually held active for too long.",
"complexity": "medium"
}
},
{
"id": "turn_alarm_clock_off",
"result": {
"structured": "TRIGGER: When shelly click event [shelly.click] occurs on shelly button device [shellybutton1-E8DB84AA2E96] with click_type long OR When timer.cancelled event occurs for alarm clock nap timer [timer.alarm_clock_nap] OR When timer.paused event occurs for alarm clock nap timer [timer.alarm_clock_nap] OR When timer.cancelled event occurs for alarm clock snooze timer [timer.alarm_clock_snooze] OR When timer.paused event occurs for alarm clock snooze timer [timer.alarm_clock_snooze] OR When mobile_app_notification_action event occurs with action turn_off_alarm_clock OR When alarm clock [binary_sensor.alarm_clock] turns on and remains on for 60 minutes. CONDITIONS: alarm clock [binary_sensor.alarm_clock] is on AND alarm clock type [input_select.alarm_clock_type] is not 'off'. ACTIONS: Turn off Alarm Clock Switch [switch.alarm_clock_{{ alarm_type }}] AND IF alarm clock failed [input_boolean.alarm_clock_failed] is on THEN run silence mobile alarm script [script.silence_mobile_alarm].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: by a long press on the shelly button device [shellybutton1-E8DB84AA2E96]; by the cancellation or pausing of either the alarm clock nap timer [timer.alarm_clock_nap] or the alarm clock snooze timer [timer.alarm_clock_snooze]; by a specific action ('turn_off_alarm_clock') from a mobile app notification; or if the alarm clock [binary_sensor.alarm_clock] has been active for a full hour.",
"conditions": "For the automation to proceed, the alarm clock [binary_sensor.alarm_clock] must be in the 'on' state, and the currently selected alarm clock type [input_select.alarm_clock_type] must not be set to 'off'.",
"action": "The primary action is to turn off the specific alarm clock switch corresponding to the current alarm type [switch.alarm_clock_{{ alarm_type }}]. Additionally, if the alarm clock failed [input_boolean.alarm_clock_failed] indicator is on, the system will also run the silence mobile alarm script [script.silence_mobile_alarm]."
},
"human_like": "Turns off the active alarm clock in response to various user interactions or after a timeout, and silences a mobile alarm if a failure is indicated.",
"complexity": "medium"
}
},
{
"id": "reset_alarm_clock_switch",
"result": {
"structured": "TRIGGER: When alarm clock daily [switch.alarm_clock_daily] OR alarm clock manual [switch.alarm_clock_manual] OR alarm clock nap [switch.alarm_clock_nap] turns on from off. CONDITIONS: alarm clock [binary_sensor.alarm_clock] is on. ACTIONS: Turn off the specific switch that triggered the automation.",
"natural_language": {
"trigger": "When any of the alarm clock switches—alarm clock daily [switch.alarm_clock_daily], alarm clock manual [switch.alarm_clock_manual], or alarm clock nap [switch.alarm_clock_nap]—is turned on from an off state.",
"conditions": "The alarm clock [binary_sensor.alarm_clock] must already be in the on state.",
"action": "Turns off the specific alarm clock switch that was just turned on."
},
"human_like": "Ensures only one alarm clock switch can be active at a time by automatically turning off any newly activated switch if the main alarm clock is already on.",
"complexity": "low"
}
},
{
"id": "turn_alarm_clock_on",
"result": {
"structured": "TRIGGER: When the time reaches the value of alarm clock daily next alarm [sensor.alarm_clock_daily_next_alarm] OR when the time reaches the value of alarm clock manual next alarm [sensor.alarm_clock_manual_next_alarm] OR when the timer alarm clock nap timer [timer.alarm_clock_nap] finishes. CONDITIONS: The specific alarm clock switch (switch.alarm_clock_{{ trigger.id }}) is off AND if the trigger is the nap timer, then alarm clock nap input boolean [input_boolean.alarm_clock_nap] must be on. ACTIONS: If alarm clock skip next [input_boolean.alarm_clock_skip_next] is on, turn it off. If the trigger was manual AND alarm clock manual repeat [input_boolean.alarm_clock_manual_repeat] is off, also turn off Alarm Clock Manual Input Boolean [input_boolean.alarm_clock_manual]. Otherwise, if occupancy mode [input_select.occupancy_mode] is Home, Guest, or Night, then: If the trigger is daily AND occupancy mode [input_select.occupancy_mode] is Night, turn on the specific alarm clock switch (switch.alarm_clock_{{ trigger.id }}). If the trigger is daily but occupancy mode [input_select.occupancy_mode] is NOT Night, send a notification to jason medication notification [notify.jason] saying the daily alarm was scheduled but the house is awake and clear the upcoming alarm notification. If occupancy mode [input_select.occupancy_mode] is NOT Home, Guest, or Night, send a notification to jason medication notification [notify.jason] saying the alarm was scheduled but nobody is home and clear the upcoming alarm notification.",
"natural_language": {
"trigger": "The automation can be triggered in three ways: at a specific daily alarm time provided by the sensor alarm clock daily next alarm [sensor.alarm_clock_daily_next_alarm], at a specific manual alarm time provided by the sensor alarm clock manual next alarm [sensor.alarm_clock_manual_next_alarm], or when the nap timer alarm clock nap timer [timer.alarm_clock_nap] finishes.",
"conditions": "For the automation to proceed, the specific alarm clock switch associated with the trigger must be off. Additionally, if the trigger was the nap timer finishing, the alarm clock nap input boolean [input_boolean.alarm_clock_nap] must be turned on.",
"action": "The automation first checks if the alarm clock skip next [input_boolean.alarm_clock_skip_next] is on. If it is, it turns it off. If the trigger was a manual alarm and the alarm clock manual repeat [input_boolean.alarm_clock_manual_repeat] is off, it also turns off the Alarm Clock Manual Input Boolean [input_boolean.alarm_clock_manual]. If the skip next flag was not set, it then checks the occupancy mode [input_select.occupancy_mode]. If the house is in Home, Guest, or Night mode, it proceeds. For a daily alarm trigger, it only activates the alarm clock if the house is in Night mode; otherwise, it sends a notification to Jason saying the daily alarm was scheduled but the house is already awake. If the house is not in Home, Guest, or Night mode, it sends a notification to Jason saying the alarm was scheduled but nobody is home. In both notification cases, it also clears any existing 'upcoming alarm clock' notification."
},
"human_like": "Manages alarm clock activation for daily, manual, and nap timers, checking occupancy and skip settings to decide whether to sound the alarm or send a notification.",
"complexity": "high"
}
},
{
"id": "play_daily_alarm_clock",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'play_daily_alarm' occurs. CONDITIONS: None. ACTIONS: Turn on alarm clock daily [switch.alarm_clock_daily].",
"natural_language": {
"trigger": "When a specific action ('play_daily_alarm') is received from a mobile app notification.",
"conditions": "There are no conditions that must be met.",
"action": "Turns on the alarm clock daily switch [switch.alarm_clock_daily]."
},
"human_like": "Starts the daily alarm clock when a notification action is tapped on a mobile device.",
"complexity": "low"
}
},
{
"id": "turn_climate_presence_override_on",
"result": {
"structured": "TRIGGER: When jason person [person.jason] leaves work zone [zone.work] OR When home commute active binary sensor [binary_sensor.home_commute_active] turns on and remains on for 1 minute OR When jason almost home [binary_sensor.jason_almost_home] OR jason heading home binary sensor [binary_sensor.jason_heading_home] turns on. CONDITIONS: (someone home [binary_sensor.someone_home] is off AND climate manual mode input boolean [input_boolean.climate_manual_mode] is off) AND (IF the trigger is 'work' THEN jason person [person.jason] was in the work zone for at least 15 minutes, OTHERWISE true). ACTIONS: Turn on climate presence override input boolean [input_boolean.climate_presence_override].",
"natural_language": {
"trigger": "The automation can be triggered in three ways: when Jason leaves the work zone, when the home commute active sensor turns on and stays on for one minute, or when either the 'Jason almost home' or 'Jason heading home' sensor turns on.",
"conditions": "The automation only runs if the 'someone home' sensor is off, indicating no one is home, and the 'climate manual mode' is also off. Additionally, if the trigger was Jason leaving work, it requires that he had been at work for at least 15 minutes before leaving.",
"action": "Turns on the 'climate presence override' input boolean."
},
"human_like": "Activates a climate override when Jason is on his way home or has left work, provided the home is empty and the system is not in manual mode.",
"complexity": "medium"
}
},
{
"id": "turn_climate_presence_override_off",
"result": {
"structured": "TRIGGER: When someone home [binary_sensor.someone_home] becomes on OR when climate manual mode input boolean [input_boolean.climate_manual_mode] becomes on OR when occupancy mode [input_select.occupancy_mode] changes from Night, Away, or Vacation to Home or Guest AND remains for 1 minute OR when climate presence override input boolean [input_boolean.climate_presence_override] becomes on AND remains for 60 minutes. CONDITIONS: climate presence override input boolean [input_boolean.climate_presence_override] is on AND climate manual mode input boolean [input_boolean.climate_manual_mode] is off. ACTIONS: Turn off climate presence override input boolean [input_boolean.climate_presence_override].",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when the system detects that someone is home [binary_sensor.someone_home], when the climate manual mode is activated [input_boolean.climate_manual_mode], when the occupancy mode [input_select.occupancy_mode] changes from being away (Night, Away, or Vacation) to being present (Home or Guest) and stays that way for one minute, or when the climate presence override [input_boolean.climate_presence_override] has been active for a full hour.",
"conditions": "For the automation to run, the climate presence override [input_boolean.climate_presence_override] must currently be on, and the climate manual mode [input_boolean.climate_manual_mode] must be off.",
"action": "Turns off the climate presence override [input_boolean.climate_presence_override]."
},
"human_like": "Automatically turns off the climate presence override when someone is home, manual mode is activated, the house occupancy changes to 'Home' or 'Guest', or after the override has been on for an hour, but only if manual climate control is not active.",
"complexity": "medium"
}
},
{
"id": "turn_jason_phone_ringer_on",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'turn_jason_phone_ringer_on'. CONDITIONS: None. ACTIONS: Set jason phone ringer mode select [select.jason_phone_ringer_mode] to option 'normal'.",
"natural_language": {
"trigger": "When a specific notification action named 'turn_jason_phone_ringer_on' is received from the mobile app.",
"conditions": "There are no conditions that must be met.",
"action": "Changes the ringer mode for Jason's phone to 'normal' by setting the jason phone ringer mode select [select.jason_phone_ringer_mode] to that option."
},
"human_like": "Sets Jason's phone ringer to normal mode when a specific notification action is tapped.",
"complexity": "low"
}
},
{
"id": "turn_media_player_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night AND remains for 1 second OR When occupancy mode [input_select.occupancy_mode] changes to Away OR Vacation AND remains for 1 second OR When alarm triggered [input_boolean.alarm_triggered] turns on OR When media mute switch [switch.media_mute] turns on from off AND remains for 15 minutes. CONDITIONS: None (conditions are embedded within the choose action). ACTIONS: Choose based on trigger: If triggered by 'night', run turn media player off script [script.turn_media_player_off] on speaker media players group [group.speaker_media_players], then wait up to 60 minutes for occupancy mode [input_select.occupancy_mode] to NOT be Night OR tv media players group [group.tv_media_players] to be off; if after waiting, occupancy mode [input_select.occupancy_mode] is Night AND tv media players group [group.tv_media_players] is on, run turn media player off script [script.turn_media_player_off] on tv media players group [group.tv_media_players]. If triggered by 'mute' OR 'alarm', run turn media player off script [script.turn_media_player_off] on speaker media players group [group.speaker_media_players]. For any other trigger, run turn media player off script [script.turn_media_player_off].",
"natural_language": {
"trigger": "The automation can start in four ways: when the occupancy mode [input_select.occupancy_mode] is set to 'Night' and stays that way for one second; when the occupancy mode [input_select.occupancy_mode] is set to either 'Away' or 'Vacation' and stays that way for one second; when the alarm triggered [input_boolean.alarm_triggered] is turned on; or when the media mute switch [switch.media_mute] is turned on from off and remains on for 15 minutes.",
"conditions": "There are no separate global conditions. The specific actions taken depend on which trigger started the automation, with logic defined in the 'choose' block.",
"action": "The actions vary based on the trigger. If the trigger was the mode changing to 'Night', the automation first turns off the speaker media players group [group.speaker_media_players]. It then waits for up to an hour for either the occupancy mode to change from 'Night' or for the tv media players group [group.tv_media_players] to be off. If, after waiting, the mode is still 'Night' and the TV players are on, it turns off the tv media players group [group.tv_media_players]. If the trigger was the alarm being activated or the media mute switch being on for 15 minutes, it turns off the speaker media players group [group.speaker_media_players]. For any other trigger, it runs the turn off script without specifying a target."
},
"human_like": "Automatically turns off media players when the house is set to Night, Away, or Vacation mode, when the alarm is triggered, or when media has been muted for a while, with a delayed check for TVs during Night mode.",
"complexity": "high"
}
},
{
"id": "turn_room_off",
"result": {
"structured": "TRIGGER: When a shelly.click event occurs from device shellybutton1-E8DB84AA2E96 with click_type double. ACTIONS: Execute script turn room off [script.turn_room_off] with data: room set to the trigger id 'bedroom'.",
"natural_language": {
"trigger": "When the shelly button device [device: shellybutton1-E8DB84AA2E96] located in the bedroom is double-clicked, generating a shelly click event.",
"conditions": "There are no conditions for this automation.",
"action": "Runs the turn room off script [script.turn_room_off], passing the room name 'bedroom' as a parameter."
},
"human_like": "Double-clicking the bedroom Shelly button turns off the room by running a script.",
"complexity": "low"
}
},
{
"id": "turn_scene_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night, Away, or Vacation AND remains for 1 second OR When alarm triggered [input_boolean.alarm_triggered] turns on. CONDITIONS: None. ACTIONS: Turn off scene switches group [group.scene_switches].",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] is set to 'Night', 'Away', or 'Vacation' and stays in that state for at least one second, or when the alarm triggered [input_boolean.alarm_triggered] is turned on.",
"conditions": "There are no conditions that must be checked.",
"action": "Turns off all switches in the scene switches group [group.scene_switches]."
},
"human_like": "Turns off all scene lights when the house is set to a non-occupied mode like Night or Away, or when the alarm is triggered.",
"complexity": "low"
}
},
{
"id": "turn_schedule_routine_off",
"result": {
"structured": "TRIGGER: When occupancy mode [input_select.occupancy_mode] changes to Night OR Away OR Vacation AND remains for 1 second OR When chill scene switch [switch.chill_scene] OR company scene switch [switch.company_scene] OR movie scene switch [switch.movie_scene] changes from off to on. CONDITIONS: None. ACTIONS: Turn off waketime script [script.waketime] AND bedtime script [script.bedtime].",
"natural_language": {
"trigger": "When the occupancy mode [input_select.occupancy_mode] changes to 'Night', 'Away', or 'Vacation' and stays in that state for one second, or when any of the scene switches—chill scene switch [switch.chill_scene], company scene switch [switch.company_scene], or movie scene switch [switch.movie_scene]—are turned on from an off state.",
"conditions": "There are no conditions that must be met for the action to run.",
"action": "Stops the scheduled routines by turning off both the waketime script [script.waketime] and the bedtime script [script.bedtime]."
},
"human_like": "Turns off scheduled daily routines when the house is set to a non-occupancy mode or when a specific scene is activated.",
"complexity": "medium"
}
},
{
"id": "turn_thermostat_off",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'turn_thermostat_off'. CONDITIONS: NOT (climate house climate [climate.house] is off). ACTIONS: Turn off climate house climate [climate.house].",
"natural_language": {
"trigger": "When a notification action from the mobile app is received, specifically the action named 'turn_thermostat_off'.",
"conditions": "Only if the climate house climate [climate.house] is not already in the 'off' state.",
"action": "Turns off the climate house climate [climate.house]."
},
"human_like": "Turns off the house thermostat when a specific notification action is tapped on the mobile app, but only if it's not already off.",
"complexity": "low"
}
},
{
"id": "tv_picture_mode",
"result": {
"structured": "TRIGGER: When living room tv [media_player.living_room_tv] OR bedroom tv [media_player.bedroom_tv] OR deck tv media player [media_player.deck_tv] turns on and remains on for 5 seconds. CONDITIONS: The triggered TV is not in the state 'off', 'standby', 'unknown', or 'unavailable'. ACTIONS: Run the tv picture mode script [script.tv_picture_mode] with the triggered TV as the target, setting the picture mode to 'expert2' if occupancy mode [input_select.occupancy_mode] is 'Night', otherwise 'cinema'.",
"natural_language": {
"trigger": "When any of the TVs (living room tv [media_player.living_room_tv], bedroom tv [media_player.bedroom_tv], or deck tv media player [media_player.deck_tv]) turns on and stays on for 5 seconds.",
"conditions": "The specific TV that triggered the automation must not be in an 'off', 'standby', 'unknown', or 'unavailable' state.",
"action": "Runs the tv picture mode script [script.tv_picture_mode] for the TV that triggered the automation. The script sets the TV's picture mode to 'expert2' if the house occupancy mode [input_select.occupancy_mode] is set to 'Night', otherwise it sets it to 'cinema'."
},
"human_like": "Automatically sets the picture mode on any TV when it's turned on, choosing a night-friendly mode or a standard cinema mode based on the current house occupancy setting.",
"complexity": "medium"
}
},
{
"id": "tv_sound_mode",
"result": {
"structured": "TRIGGER: When the source attribute of any of the TVs (bedroom tv [media_player.bedroom_tv], deck tv media player [media_player.deck_tv], or living room tv [media_player.living_room_tv]) changes to 'HDMI 2' or 'Spotify - Music and Podcasts' from a different source OR when the source attribute of any of the same TVs changes away from 'HDMI 2' or 'Spotify - Music and Podcasts' to a different source. CONDITIONS: The triggering TV is not in the state 'off', 'standby', 'unknown', or 'unavailable'. ACTIONS: Execute the tv sound mode script [script.tv_sound_mode] with the entity_id set to the triggering TV and the sound_mode parameter set to the ID of the trigger that fired ('music' or 'aiSoundPlus').",
"natural_language": {
"trigger": "This automation triggers in two scenarios. First, when the source on any of the specified TVs (bedroom tv [media_player.bedroom_tv], deck tv media player [media_player.deck_tv], or living room tv [media_player.living_room_tv]) switches to either 'HDMI 2' or 'Spotify - Music and Podcasts' from any other source. Second, when the source on any of those TVs switches away from 'HDMI 2' or 'Spotify - Music and Podcasts' to a different source.",
"conditions": "The automation only proceeds if the specific TV that triggered the event is not turned off, in standby mode, or in an unknown or unavailable state.",
"action": "It runs the tv sound mode script [script.tv_sound_mode], passing along which TV triggered it and a parameter indicating which sound mode scenario occurred."
},
"human_like": "Automatically adjusts the sound mode on the TVs when you start or stop playing music or a specific HDMI source.",
"complexity": "medium"
}
},
{
"id": "update_unavailable_entities_group",
"result": {
"structured": "TRIGGER: When a service call to the group domain with service 'reload' occurs OR every minute (time pattern minutes: /1). CONDITIONS: None. ACTIONS: Update group.unavailable_entities by setting its entities list to the result of a template. The template filters all states to include only entities whose state is 'unknown' or 'unavailable' AND whose last_changed timestamp is older than 60 seconds ago AND whose domain is not in ['button', 'conversation', 'event', 'group', 'image', 'input_button', 'input_text', 'remote', 'tts', 'scene', 'stt', 'update'] AND whose entity_id is not in the list from sensor.disabled_device_entities AND whose entity_id is not in the entity_id attribute of group.ignored_entities AND whose entity_id is not 'group.unavailable_entities' or 'group.ignored_entities' AND whose entity_id is not in the list of entities from devices labeled 'ignored' AND whose entity_id is not in the list of entities labeled 'ignored'. The final list is sorted.",
"natural_language": {
"trigger": "The automation runs either when a service call to reload the group domain is made, or automatically every minute.",
"conditions": "There are no conditions for this automation.",
"action": "Updates the unavailable entities group [group.unavailable_entities] by populating it with a filtered list of entities. It includes entities that are currently in an 'unknown' or 'unavailable' state, have been in that state for more than 60 seconds, and are not part of specific ignored domains, devices, or manually excluded lists."
},
"human_like": "Automatically maintains a list of unavailable or unknown entities, excluding those that are intentionally ignored or recently changed, to help monitor system health.",
"complexity": "high"
}
},
{
"id": "unavailable_entities_notification",
"result": {
"structured": "TRIGGER: When the entity list of unavailable entities group [group.unavailable_entities] changes (to null) AND remains stable for 5 seconds. CONDITIONS: The state of unavailable entities sensor [sensor.unavailable_entities] is a valid numerical value. ACTIONS: IF unavailable entities sensor [sensor.unavailable_entities] is below 1, THEN dismiss the persistent notification with ID 'unavailable_entities'. ELSE create a persistent notification with ID 'unavailable_entities', title 'Unavailable Entities', and a message listing the entity IDs from unavailable entities group [group.unavailable_entities].",
"natural_language": {
"trigger": "When the list of entities in the unavailable entities group [group.unavailable_entities] changes and then stays the same for at least 5 seconds.",
"conditions": "The automation only runs if the state of the unavailable entities sensor [sensor.unavailable_entities] is a valid number.",
"action": "If the number of unavailable entities is less than one, it dismisses any existing notification about unavailable entities. Otherwise, it creates a new persistent notification showing the list of all unavailable entities."
},
"human_like": "Shows a persistent notification listing any unavailable entities, and clears it when all entities become available again.",
"complexity": "medium"
}
},
{
"id": "unlock_door_locks",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'arriving_home_jason' occurs OR when a mobile app notification action event with action 'arriving_home_garage_jason' occurs OR when a mobile app notification action event with action 'doorbell_unlock_door' occurs OR when danger alarm [binary_sensor.danger_alarm] turns on. CONDITIONS: The computed list of locks to unlock contains at least one lock. ACTIONS: If the trigger is 'arriving', wait for house alarm [alarm_control_panel.house] to be disarmed, with a timeout of 60 seconds, and stop if the timeout is reached. Then, if the person associated with the trigger is 'jason', run the unlock door locks script [script.unlock_door_locks] on the target locks using the code 'secret LOCK_JASON'; otherwise, run the same script on the target locks using the code 'secret LOCK_HASS'.",
"natural_language": {
"trigger": "The automation can be triggered in four ways: by receiving a mobile app notification action named 'arriving_home_jason', by receiving a mobile app notification action named 'arriving_home_garage_jason', by receiving a mobile app notification action named 'doorbell_unlock_door', or when the danger alarm [binary_sensor.danger_alarm] turns on.",
"conditions": "The automation only proceeds if the system has determined there is at least one lock that is currently locked and needs to be unlocked.",
"action": "If the trigger was one of the 'arriving' actions, the automation first waits for up to 60 seconds for the house alarm [alarm_control_panel.house] to be disarmed. If the alarm is not disarmed in time, the automation stops. Then, depending on which person triggered the automation, it runs the unlock door locks script [script.unlock_door_locks] on the selected locks. If the person is 'jason', it uses the code 'secret LOCK_JASON'. For any other person, it uses the code 'secret LOCK_HASS'."
},
"human_like": "Unlocks specific door locks when someone arrives home, requests entry via the doorbell, or in case of a danger alarm, using personalized codes.",
"complexity": "high"
}
},
{
"id": "update_alarm_group_entities",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call to the group domain with service 'reload' occurs OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: Set group 'entry_doors' to a sorted list of binary_sensor entities where device_class is 'door', attribute 'type' is 'entry', and entity_id does not contain 'open_alert'. Set group 'door_alert_sensors' to a sorted list of binary_sensor entities where entity_id contains '_door_open_alert' but is not climate window door open alert [binary_sensor.climate_window_door_open_alert]. Set group 'windows' to a sorted list of binary_sensor entities where device_class is 'window' and entity_id does not contain '_open_alert'. Set group 'window_alert_sensors' to a sorted list of binary_sensor entities where entity_id contains '_window_open_alert'. Set group 'motion_sensors' to a sorted list of binary_sensor entities where device_class is 'motion', entity_id does not match the regex '(jphone|jlaptop|jtablet|jwork)', and entity_id does not contain 'object_detected'. Set group 'door_locks' to a sorted list of lock entities where attribute 'type' is 'door'. Set group 'leak_sensors' to a sorted list of binary_sensor entities where attribute 'type' is 'leak'.",
"natural_language": {
"trigger": "The automation triggers in three situations: when Home Assistant first starts up, when a service call is made to reload the group configuration, or at a specific time of day defined by the day reset [input_datetime.day_reset] entity.",
"conditions": "There are no specific conditions that must be met for the actions to run.",
"action": "The automation updates several groups of entities. It populates the 'entry_doors' group with all door sensors marked as entry points, excluding any alert sensors. It creates a 'door_alert_sensors' group from sensors with '_door_open_alert' in their name, but excludes the climate window door open alert [binary_sensor.climate_window_door_open_alert]. The 'windows' group is filled with window sensors, excluding alert sensors, while the 'window_alert_sensors' group includes all sensors with '_window_open_alert' in their name. The 'motion_sensors' group is populated with motion sensors, filtering out those related to personal devices or object detection. The 'door_locks' group is built from all lock entities of type 'door'. Finally, the 'leak_sensors' group is created from all leak detection sensors."
},
"human_like": "This automation dynamically updates groups of security and monitoring sensors (like doors, windows, motion, and leaks) whenever Home Assistant starts, the groups are reloaded, or at a daily reset time.",
"complexity": "medium"
}
},
{
"id": "update_camera_group_entities",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to the group domain with service reload OR When any of the listed cameras (Side Driveway Camera [camera.side_driveway], Side Door Camera [camera.side_door], Front Driveway Camera [camera.front_driveway], front door camera [camera.front_door], Front Yard Camera [camera.front_yard], Side Gate Front Camera [camera.side_gate_front], Side Gate Back Camera [camera.side_gate_back], Back Yard Camera [camera.back_yard], Back Door Camera [camera.back_door], Patio Door Camera [camera.patio_door], Back House Camera [camera.back_house], Garage Inside Camera [camera.garage_inside], Charlie Cam [camera.charlie_cam], Living Room Camera [camera.living_room]) changes state to unknown or unavailable OR When any of the same listed cameras changes state from unknown or unavailable. CONDITIONS: None. ACTIONS: Set the entities of group indoor_cameras to all camera entities with a defined location attribute equal to 'indoor', sorted. Set the entities of group outdoor_cameras to all camera entities with a defined location attribute equal to 'outdoor', sorted. Set the entities of group wyze_cameras to all camera entities with a defined source attribute equal to 'wyze', sorted. Set the entities of group frigate_cameras to all camera entities with a defined frigate attribute equal to true, sorted. Set the entities of group frigate_all_count_sensors to all entities from the Frigate integration containing '_all_count' in their entity_id, sorted. Set the entities of group camera_detection_switches to all switch entities from the Frigate integration containing '_detect' in their entity_id, sorted. Set the entities of group camera_recording_switches to all switch entities from the Frigate integration containing '_recordings' in their entity_id, sorted. Set the entities of group camera_motion_switches to all switch entities from the Frigate integration containing '_motion' in their entity_id, sorted. Set the entities of group camera_snapshot_switches to all switch entities from the Frigate integration containing '_snapshots' in their entity_id, sorted. Set the entities of group camera_motion_switches (duplicate action) to all switch entities from the Frigate integration containing '_motion' in their entity_id, sorted. Set the entities of group security_occupancy_sensors to the specified list of binary sensor entities. Set the entities of group offline_cameras to a filtered list of camera entities from the combined indoor and outdoor groups, excluding entities from ignored devices or with the label 'ignored', but only if someone home [binary_sensor.someone_home] is off for indoor cameras. Set the entities of group indoor_camera_power_switches to a list derived from camera entities that are in both the wyze_cameras and indoor_cameras groups, transforming their entity_id by replacing 'camera.' with 'switch.' and appending '_camera_power', sorted. Set the entities of group indoor_camera_stream_switches to a list derived from camera entities that are in both the wyze_cameras and indoor_cameras groups, transforming their entity_id by replacing 'camera.' with 'switch.' and appending '_camera_stream', sorted. Set the entities of group last_detected_object_sensors to all image entities from the Frigate integration. Wait for 1 second.",
"natural_language": {
"trigger": "This automation runs when Home Assistant starts, when the group service is reloaded, or when any of the listed cameras (such as Side Driveway Camera [camera.side_driveway], Side Door Camera [camera.side_door], and others) becomes unknown or unavailable, or when any of those cameras recovers from an unknown or unavailable state.",
"conditions": "There are no specific conditions that must be met for the actions to run.",
"action": "The automation updates multiple groups of entities. It creates groups for indoor and outdoor cameras based on their location attribute, groups for Wyze and Frigate cameras based on their source and frigate attributes, and groups for various Frigate-related sensors and switches (like count sensors, detection switches, recording switches, motion switches, and snapshot switches). It also creates a group for security occupancy sensors. A group for offline cameras is created by filtering cameras from the indoor and outdoor groups, excluding ignored devices, but only including indoor cameras when someone home [binary_sensor.someone_home] is off. Groups for indoor camera power and stream switches are created by transforming the entity IDs of Wyze cameras that are also indoor cameras. Finally, a group for last detected object sensors is created from Frigate image entities, and a one-second delay is added."
},
"human_like": "This automation organizes camera and related entities into dynamic groups, updating them when the system starts, groups are reloaded, or camera availability changes.",
"complexity": "high"
}
},
{
"id": "update_energy_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to reload groups OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: If the trigger is startup, wait up to 300 seconds for at least one Shelly integration entity to exist, then if the wait did not complete, send a notification 'Startup Error' and stop the automation; after that (or if the trigger was not startup or the wait completed), create or update a group named 'overpowering_sensors' containing all Shelly integration entities whose entity_id contains '_overpowering', sorted alphabetically.",
"natural_language": {
"trigger": "The automation runs when Home Assistant first starts, when any service call is made to reload groups, or at the specific time set by day reset [input_datetime.day_reset].",
"conditions": "There are no explicit conditions for the main action, but a conditional check is performed within the actions based on which trigger occurred.",
"action": "If the automation was triggered by Home Assistant startup, it waits for up to five minutes for Shelly devices to be available. If they don't appear in time, it sends a persistent notification about a startup error and stops. Otherwise, or if triggered by a group reload or the scheduled time, it creates or updates a group called 'overpowering_sensors' with all Shelly entities that have '_overpowering' in their name, sorted in order."
},
"human_like": "Ensures a group of Shelly overpowering sensors is created and updated, with a safety check on startup to warn if devices are missing.",
"complexity": "medium"
}
},
{
"id": "update_fan_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call to the group domain with service 'reload' occurs OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: Set group 'fans' to contain all fan entities with a defined 'type' attribute equal to 'ceiling' or 'vent', sorted alphabetically. Set group 'ceiling_fans' to contain all fan entities with a defined 'type' attribute equal to 'ceiling', sorted alphabetically. Set group 'vent_fans' to contain all fan entities with a defined 'type' attribute equal to 'vent', sorted alphabetically. Set group 'fan_timers' to contain all timer entities with a defined 'type' attribute equal to 'fan', sorted alphabetically.",
"natural_language": {
"trigger": "The automation runs when Home Assistant first starts, when any service call to reload groups is made, or at a specific time of day set by the day reset [input_datetime.day_reset].",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "It creates or updates four groups. The 'fans' group includes all ceiling and vent fans. The 'ceiling_fans' group includes only ceiling fans. The 'vent_fans' group includes only vent fans. The 'fan_timers' group includes all timers associated with fans. All groups are populated by finding entities with the correct 'type' attribute and sorting their IDs."
},
"human_like": "This automation organizes fans and their related timers into groups for easier management, updating them at startup, when groups are reloaded, or at a reset time each day.",
"complexity": "medium"
}
},
{
"id": "update_hass_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call to the group domain with service reload occurs OR Every minute (time pattern). CONDITIONS: None. ACTIONS: Set group.unknown_browsers to entities from group.connected_browsers that are not labeled 'Authorized Browser'. Set group.offline_integrations to entities from group.integration_connected_sensors with state 'off', 'unknown', or 'unavailable'. Set group.hass_alerts to alert entities with category 'hass', 'network', 'system', 'zwave', or 'bluetooth'. Set group.low_batteries to battery sensors from the battery_notes integration where state is 'on' or numeric state is less than the value of Battery Alert Threshold Input Number [input_number.battery_alert_threshold]. Set group.available_updates to update entities with state 'on'. Set group.connected_browsers to sensor entities with '_browser_user' in entity_id but not '_browser_useragent'. Set group.integration_connected_sensors to binary_sensor entities with '_integration_connected' in entity_id, excluding those labeled 'ignored'. Set group.add_on_memory_sensors to entities from the hassio integration containing '_memory_percent', excluding 'sensor.home_assistant_core_memory_percent' and 'sensor.home_assistant_supervisor_memory_percent'. Set group.add_on_cpu_sensors to entities from the hassio integration containing '_cpu_percent', excluding 'sensor.home_assistant_core_cpu_percent' and 'sensor.home_assistant_supervisor_cpu_percent'. Set group.google_home_timers to sensor entities with integration attribute 'google_home' and containing 'timer' in entity_id. Set group.occupancy_automations to automation entities labeled 'Occupancy'. Set group.presence_sensors to jason home [binary_sensor.jason_home] AND guest home [binary_sensor.guest_home]. Set group.presence_override_controls to jason presence override [input_boolean.jason_presence_override]. Set group.indoor_humidity_sensors to sensor.thermostat_humidity, sensor.bathroom_sensor_humidity, sensor.living_room_sensor_humidity, AND sensor.bedroom_sensor_humidity. Set group.indoor_temperature_sensors to sensor.thermostat_temperature, sensor.living_room_sensor_temperature, AND sensor.bedroom_sensor_temperature.",
"natural_language": {
"trigger": "The automation runs when Home Assistant starts up, when a service call to reload groups is made, or every minute.",
"conditions": "There are no conditions for this automation.",
"action": "The automation updates multiple groups. It creates a group of unknown browsers by filtering out authorized ones from connected browsers. It groups offline integrations based on their connection status. It collects alerts related to Home Assistant, network, system, Z-Wave, and Bluetooth. It identifies low battery devices by comparing battery levels against a configurable threshold. It lists available updates, connected browser users, integration connection sensors, add-on memory and CPU usage sensors, Google Home timers, occupancy-related automations, presence sensors for Jason and guests, presence override controls, and indoor humidity and temperature sensors."
},
"human_like": "This automation maintains various dynamic groups in Home Assistant, such as device statuses, alerts, and sensor collections, updating them on startup, when groups are reloaded, or every minute.",
"complexity": "high"
}
},
{
"id": "update_notification_led_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to the group domain with service reload OR When the time reaches the value of day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: If the trigger was startup, delay for 60 seconds. Then, set the group notify_led to contain all light and switch entities that have the attribute notify_led defined and equal to true. Delay for 1 second. Then, if the group notify_led has any entity members, set the group dimmer_led to contain all light entities from group notify_led. Set the group switch_led to contain all switch entities from group notify_led. Set the group alarm_led to contain all entities from group notify_led that have the attribute alarm_led defined and equal to true. Set the group presence_led to contain all entities from group notify_led that have the attribute presence_led defined and equal to true. Set the group scene_led to contain all entities from group notify_led that have the attribute scene_led defined and equal to true. Set the group reminder_led to contain all entities from group notify_led that have the attribute reminder_led defined and equal to true. Set the group garage_led to contain all entities from group notify_led that have the attribute garage_led defined and equal to true. Set the group alarm_clock_led to contain all entities from group notify_led that have the attribute alarm_clock_led defined and equal to true. Set the group hass_led to contain all entities from group notify_led that have the attribute hass_led defined and equal to true. Set the group shower_led to contain all entities from group notify_led that have the attribute shower_led defined and equal to true. Set the group media_led to contain all entities from group notify_led that have the attribute media_led defined and equal to true. Set the group weather_led to contain all entities from group notify_led that have the attribute weather_led defined and equal to true. Set the group commute_led to contain all entities from group notify_led that have the attribute commute_led defined and equal to true.",
"natural_language": {
"trigger": "The automation runs when Home Assistant starts up, when the group service is reloaded, or at the time specified by the day reset [input_datetime.day_reset] input.",
"conditions": "There are no conditions that must be met for the actions to run, only the triggers.",
"action": "If the trigger was the Home Assistant startup, the automation first waits for 60 seconds. It then updates the notify_led group to include all light and switch devices that are marked for LED notifications. After a brief one-second delay, it checks if the notify_led group has any members. If it does, it proceeds to create or update several specialized LED groups: dimmer_led (lights from notify_led), switch_led (switches from notify_led), alarm_led, presence_led, scene_led, reminder_led, garage_led, alarm_clock_led, hass_led, shower_led, media_led, weather_led, and commute_led. Each of these groups is populated with entities from the notify_led group that have the corresponding specific attribute (like alarm_led, presence_led, etc.) set to true."
},
"human_like": "This automation organizes LED notification devices into specific groups based on their purpose (like alarms, reminders, or weather) whenever the system starts, groups are reloaded, or at a daily reset time.",
"complexity": "medium"
}
},
{
"id": "update_light_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call to the group domain with service 'reload' occurs OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: Set group 'lights' to contain all light entities with attribute 'type' defined and equal to 'dimmer', 'switch', or 'group', excluding those with attribute 'master' equal to true, sorted alphabetically. Set group 'rgb_lights' to contain all light entities with attribute 'rgb' equal to true, sorted alphabetically. Set group 'day_lux_lights' to contain all light entities with attribute 'day_lux' defined and equal to true. Set group 'night_lux_lights' to contain all light entities with attribute 'night_lux' defined and equal to true. Set group 'night_lights' to contain all light entities with attribute 'night' defined and equal to true. Set group 'away_lights' to contain all light entities with attribute 'away' equal to true. Set group 'night_away_lights' to contain all light entities with attributes 'night' defined and equal to true AND 'away' equal to true. Set group 'timed_lights' to contain all light entities with attribute 'timed' equal to true. Set group 'light_timers' to contain all timer entities with attribute 'type' defined and equal to 'light', sorted alphabetically.",
"natural_language": {
"trigger": "This automation runs when Home Assistant first starts up, whenever a service call is made to reload the group configuration, or at a specific daily time defined by day reset [input_datetime.day_reset].",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "The automation creates or updates several groups based on the attributes of existing light and timer entities. It builds a 'lights' group from lights that are dimmers, switches, or groups, but not master lights. It creates a 'rgb_lights' group for lights capable of RGB color. It creates groups for lights with specific functional attributes: 'day_lux_lights', 'night_lux_lights', 'night_lights', 'away_lights', 'night_away_lights', and 'timed_lights'. Finally, it creates a 'light_timers' group for timer entities specifically related to lights."
},
"human_like": "This automation dynamically builds and updates groups of lights and timers based on their capabilities and assigned roles, ensuring the groups are current whenever Home Assistant starts, groups are reloaded, or at a set daily time.",
"complexity": "medium"
}
},
{
"id": "update_media_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to the group domain with service 'reload' OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: Set the group 'media_launchers' to contain all input_boolean entities whose entity_id contains 'input_boolean.media_launcher_', sorted. Set the group 'alarm_clock_launchers' to contain all input_boolean entities whose entity_id contains 'input_boolean.alarm_clock_launcher_', sorted. Set the group 'alarm_clock_other_alarms' to contain the entities: bathroom_speaker_next_alarm [sensor.bathroom_speaker_next_alarm], bedroom_hub_next_alarm [sensor.bedroom_hub_next_alarm], dining_room_hub_next_alarm [sensor.dining_room_hub_next_alarm], jason_phone_next_alarm [sensor.jason_phone_next_alarm], kitchen_hub_next_alarm [sensor.kitchen_hub_next_alarm], laundry_room_speaker_next_alarm [sensor.laundry_room_speaker_next_alarm], living_room_speaker_next_alarm [sensor.living_room_speaker_next_alarm], office_speaker_next_alarm [sensor.office_speaker_next_alarm].",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when Home Assistant first starts up, when a service call is made to reload the group configuration, or when the scheduled time defined by day reset [input_datetime.day_reset] is reached.",
"conditions": "There are no conditions that must be met for the actions to run.",
"action": "The automation performs three group updates. First, it creates or updates a group named 'media_launchers' to include all input_boolean entities that have 'media_launcher_' in their entity ID, sorted alphabetically. Second, it creates or updates a group named 'alarm_clock_launchers' to include all input_boolean entities that have 'alarm_clock_launcher_' in their entity ID, sorted alphabetically. Third, it creates or updates a group named 'alarm_clock_other_alarms' to include a fixed list of eight sensor entities that report next alarm times from various speakers, hubs, and a phone."
},
"human_like": "This automation updates three media and alarm-related groups at startup, when groups are reloaded, or at a scheduled daily reset time.",
"complexity": "medium"
}
},
{
"id": "update_sprinkler_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to the group domain with service reload OR When the time reaches the value of day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: If the trigger is startup, wait up to 300 seconds for at least one Hydrawise entity to be available. If the wait times out, send a persistent notification with title 'Startup Error' and a message about groups not loading. Then, set the group sprinkler_next_cycle to contain all sensor entities from the Hydrawise integration whose entity_id contains '_next_cycle'. Set the group sprinkler_current_cycle to contain all binary_sensor entities from the Hydrawise integration whose entity_id contains '_watering'. Set the group sprinkler_automatic_watering to contain all switch entities from the Hydrawise integration whose entity_id contains '_automatic_watering'. Set the group sprinkler_remaining_time to contain all sensor entities from the Hydrawise integration whose entity_id contains '_remaining_watering_time'.",
"natural_language": {
"trigger": "The automation runs when Home Assistant starts up, when the group service is reloaded, or at a specific time of day set by the day reset [input_datetime.day_reset] input.",
"conditions": "There are no conditions that must be met after the trigger occurs.",
"action": "If the automation was triggered by Home Assistant starting, it first waits for up to five minutes for Hydrawise entities to become available. If they do not load in time, it sends an error notification. Then, it creates or updates four groups: one for sensors showing the next watering cycle, one for binary sensors showing current watering activity, one for switches controlling automatic watering, and one for sensors showing remaining watering time. Each group is populated by finding all relevant entities from the Hydrawise integration based on patterns in their entity IDs."
},
"human_like": "This automation organizes Hydrawise sprinkler entities into groups for easier management, running at startup, when groups are reloaded, or at a daily reset time.",
"complexity": "medium"
}
},
{
"id": "update_time_to_home",
"result": {
"structured": "TRIGGER: Every 2 minutes (time pattern). CONDITIONS: (home commute active binary sensor [binary_sensor.home_commute_active] is on) AND (wan binary sensor [binary_sensor.wan] is on). ACTIONS: IF (jason phone connected binary sensor [binary_sensor.jason_phone_connected] is on) AND NOT ((jason home [binary_sensor.jason_home] is on) OR (jason time to home sensor [sensor.jason_time_to_home] is unknown OR unavailable)) THEN call homeassistant.update_entity service on jason time to home sensor [sensor.jason_time_to_home].",
"natural_language": {
"trigger": "The automation runs every two minutes.",
"conditions": "The home commute active binary sensor [binary_sensor.home_commute_active] must be on, and the wan binary sensor [binary_sensor.wan] must also be on.",
"action": "If the jason phone connected binary sensor [binary_sensor.jason_phone_connected] is on, and it is not the case that either the jason home [binary_sensor.jason_home] is on or the jason time to home sensor [sensor.jason_time_to_home] is in a state of 'unknown' or 'unavailable', then the automation will trigger an update for the jason time to home sensor [sensor.jason_time_to_home]."
},
"human_like": "Updates the estimated time to home for Jason more frequently during commute times, but only when he is not already home and his phone is connected.",
"complexity": "medium"
}
},
{
"id": "update_time_to_home_not_commute",
"result": {
"structured": "TRIGGER: Every 5 minutes (time pattern). CONDITIONS: commute active binary sensor [binary_sensor.commute_active] is off AND wan binary sensor [binary_sensor.wan] is on AND jason home [binary_sensor.jason_home] is off AND occupancy mode [input_select.occupancy_mode] is NOT Vacation. ACTIONS: If (jason home [binary_sensor.jason_home] is NOT on) AND (jason time to home sensor [sensor.jason_time_to_home] is NOT unknown OR unavailable) AND (jason person [person.jason] is NOT Work OR home) THEN call homeassistant.update_entity service [homeassistant.update_entity] for jason time to home sensor [sensor.jason_time_to_home].",
"natural_language": {
"trigger": "The automation runs every five minutes.",
"conditions": "The commute is not active, the WAN connection is online, Jason is not at home, and the occupancy mode is not set to Vacation.",
"action": "If Jason is still not at home, his travel time sensor is reporting a valid state (not 'unknown' or 'unavailable'), and his person state is not 'Work' or 'home', then the automation will update the 'jason time to home' sensor to refresh its data."
},
"human_like": "Updates Jason's estimated travel time home periodically when he is away, but not during his commute or vacation.",
"complexity": "medium"
}
},
{
"id": "update_time_to_work",
"result": {
"structured": "TRIGGER: Every 2 minutes (time pattern). CONDITIONS: (work commute active binary sensor [binary_sensor.work_commute_active] is on) AND (wan binary sensor [binary_sensor.wan] is on). ACTIONS: If (jason phone connected binary sensor [binary_sensor.jason_phone_connected] is on) AND (NOT (person.jason [person.jason] is at Work) AND NOT (jason time to work sensor [sensor.jason_time_to_work] is unknown OR unavailable)), then update jason time to work sensor [sensor.jason_time_to_work].",
"natural_language": {
"trigger": "The automation triggers every two minutes.",
"conditions": "It requires that the work commute active binary sensor [binary_sensor.work_commute_active] is on, indicating a commute is active, and the wan binary sensor [binary_sensor.wan] is on, indicating the internet connection is available.",
"action": "If Jason's phone is connected [binary_sensor.jason_phone_connected] and Jason is not currently at Work [person.jason], and the commute time sensor [sensor.jason_time_to_work] is not in an unknown or unavailable state, then the automation will refresh the data for the jason time to work sensor [sensor.jason_time_to_work]."
},
"human_like": "Updates Jason's commute time to work more frequently during active commute periods, but only when he is not already at work and his phone is connected.",
"complexity": "medium"
}
},
{
"id": "update_zwave_groups",
"result": {
"structured": "TRIGGER: When Home Assistant starts up OR When a service call is made to the group domain with service reload OR When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: None. ACTIONS: Set the group zwave_node_sensors to contain all entity IDs from the zwave_js integration that contain 'node_status' in their ID, sorted alphabetically. Set the group zwave_entities to contain all entity IDs of states that have a defined 'node_id' attribute, sorted alphabetically.",
"natural_language": {
"trigger": "The automation runs when Home Assistant first starts, whenever a service call is made to reload groups, or at a specific time of day set by day reset [input_datetime.day_reset].",
"conditions": "There are no conditions for this automation.",
"action": "It creates or updates two groups. The first group, zwave_node_sensors, is populated with all Z-Wave node status sensor entities. The second group, zwave_entities, is populated with all entities that have a Z-Wave node ID attribute."
},
"human_like": "Automatically updates Z-Wave device groups at startup, when groups are reloaded, or at a scheduled daily reset time.",
"complexity": "medium"
}
},
{
"id": "waketime",
"result": {
"structured": "TRIGGER: When the current time (with seconds and microseconds set to zero) is exactly one minute before the datetime value stored in next waketime sensor [sensor.next_waketime], provided that sensor has a value. CONDITIONS: (someone home [binary_sensor.someone_home] is on) AND (occupancy mode [input_select.occupancy_mode] is Night) AND (alarm triggered [input_boolean.alarm_triggered] is off) AND ((workday morning input boolean [input_boolean.workday_morning] is on AND Work Today Binary Sensor [binary_sensor.work_today] is on) OR (weekend morning input boolean [input_boolean.weekend_morning] is on AND Work Today Binary Sensor [binary_sensor.work_today] is off) OR (guest morning input boolean [input_boolean.guest_morning] is on AND owner home [binary_sensor.owner_home] is off)). ACTIONS: Wait for 60 seconds, then run the waketime script [script.waketime] with the parameter alarm_delay set to true.",
"natural_language": {
"trigger": "The automation triggers precisely one minute before the scheduled wake-up time stored in the next waketime sensor [sensor.next_waketime], but only if that sensor has a valid value.",
"conditions": "The automation checks that someone is home [binary_sensor.someone_home], the occupancy mode [input_select.occupancy_mode] is set to 'Night', and the alarm triggered [input_boolean.alarm_triggered] is off. It also verifies the appropriate morning routine is enabled based on the day and who is home: if it's a workday and the workday morning routine is enabled, or if it's not a workday and the weekend morning routine is enabled, or if the owner is away and the guest morning routine is enabled.",
"action": "After a 60-second delay, the automation runs the waketime script [script.waketime] with an alarm delay parameter."
},
"human_like": "Starts the morning wake-up routine one minute before the scheduled time, but only if someone is home, the house is in night mode, and the correct routine (workday, weekend, or guest) is enabled.",
"complexity": "medium"
}
},
{
"id": "wan_down",
"result": {
"structured": "TRIGGER: When wan offline alert [alert.wan_offline] changes to idle OR on. CONDITIONS: Network Alerts Input Boolean [input_boolean.network_alerts] is on. ACTIONS: IF wan binary sensor [binary_sensor.wan] is off THEN IF piper running binary sensor [binary_sensor.piper_running] is off THEN start the 'core_piper' addon. THEN wait for piper running binary sensor [binary_sensor.piper_running] to be on (timeout 5 minutes). THEN WHILE wan offline alert [alert.wan_offline] is on REPEAT: run tts play script [script.tts_play] with message 'Attention! The internet is offline!' AND wait for wan offline alert [alert.wan_offline] to be idle OR off (timeout 15 minutes). ELSE (i.e., if wan binary sensor [binary_sensor.wan] is on) run tts play script [script.tts_play] with message 'The internet is back online!'.",
"natural_language": {
"trigger": "When the wan offline alert [alert.wan_offline] becomes active (on) or returns to idle.",
"conditions": "The Network Alerts Input Boolean [input_boolean.network_alerts] must be turned on.",
"action": "If the wan binary sensor [binary_sensor.wan] indicates the internet is offline, the automation first ensures the Piper text-to-speech addon is running by starting it if needed. It then waits for Piper to be ready, and while the wan offline alert remains active, it repeatedly announces 'Attention! The internet is offline!' via the tts play script, pausing for up to 15 minutes between announcements until the alert clears. If the wan binary sensor indicates the internet is online when the automation runs, it instead announces 'The internet is back online!' via the tts play script."
},
"human_like": "Announces internet connectivity issues using voice alerts when the network is down, and announces when it comes back online.",
"complexity": "high"
}
},
{
"id": "turn_waste_collection_on",
"result": {
"structured": "TRIGGER: When the 'display' attribute of any of the following sensors changes to 'Tomorrow': next garbage day sensor [sensor.next_garbage_day], next organic waste day sensor [sensor.next_organic_waste_day], next recycle day sensor [sensor.next_recycle_day], next yard waste day sensor [sensor.next_yard_waste_day] OR when the 'display' attribute of any of the same sensors changes from 'Tomorrow'. CONDITIONS: None. ACTIONS: For each waste type in the list ['garbage', 'organic_waste', 'recycle', 'yard_waste'], if that type is in the computed list of active_types (which contains types whose corresponding sensor's 'display' attribute is 'Tomorrow'), then turn on the corresponding input_boolean (e.g., input_boolean.garbage_alert). If the type is not in active_types, turn off the corresponding input_boolean.",
"natural_language": {
"trigger": "The automation triggers when the 'display' attribute of any of the waste collection day sensors (next garbage day sensor [sensor.next_garbage_day], next organic waste day sensor [sensor.next_organic_waste_day], next recycle day sensor [sensor.next_recycle_day], next yard waste day sensor [sensor.next_yard_waste_day]) changes to 'Tomorrow' or changes away from 'Tomorrow'.",
"conditions": "There are no explicit conditions.",
"action": "For each type of waste (garbage, organic waste, recycling, yard waste), the automation checks if that type's next collection day is tomorrow. If it is, it turns on an alert boolean for that waste type (e.g., input_boolean.garbage_alert). If the collection is not tomorrow, it turns the alert boolean off."
},
"human_like": "Turns on waste collection alerts for tomorrow's pickups and turns off alerts for other days whenever a collection schedule updates.",
"complexity": "medium"
}
},
{
"id": "waste_collection_notification",
"result": {
"structured": "TRIGGER: When the time is 11:00 OR 17:00 OR 21:00. CONDITIONS: schedule alerts input boolean [input_boolean.schedule_alerts] is on. ACTIONS: First, set variables: 'waste_types' = ['garbage', 'organic_waste', 'recycle', 'yard_waste']; 'active_types' = a list of waste types where the sensor 'sensor.next_[type]_day' attribute 'display' is 'Tomorrow' AND the input_boolean '[type]_alert' is on. If the count of 'active_types' > 0, then call script.tts_play [script.tts_play] with a TTS message. Then, for each item in 'active_types', if the corresponding input_boolean '[type]_alert' is on, send a notification via notify.jason [notify.jason] with details for that waste type.",
"natural_language": {
"trigger": "The automation runs at three specific times each day: 11:00, 17:00, and 21:00.",
"conditions": "The automation only proceeds if the schedule alerts input boolean [input_boolean.schedule_alerts] is turned on.",
"action": "First, it checks which waste types (garbage, organic_waste, recycle, yard_waste) are scheduled for collection tomorrow and have their specific alert enabled. If any such types are found, it plays a text-to-speech announcement reminding Jason to take them out. Then, for each of those waste types, if its individual alert is on, it sends a detailed notification to Jason with information about the collection."
},
"human_like": "Sends voice and mobile notifications to remind Jason about tomorrow's waste collection, at set times during the day.",
"complexity": "medium"
}
},
{
"id": "yard_waste_warning",
"result": {
"structured": "TRIGGER: When next yard waste day sensor [sensor.next_yard_waste_day] attribute 'warning' changes to true. CONDITIONS: schedule alerts input boolean [input_boolean.schedule_alerts] is on. ACTIONS: Send a notification to jason medication notification [notify.jason] with message 'Yard Waste collection is this week', including custom data (tag, group, channel, visibility, persistence, timeout, icon, image, click action, and an action button 'Yard Waste Done').",
"natural_language": {
"trigger": "When the next yard waste day sensor [sensor.next_yard_waste_day] indicates a warning that yard waste collection is upcoming.",
"conditions": "The schedule alerts input boolean [input_boolean.schedule_alerts] must be turned on.",
"action": "Sends a notification to Jason's device [notify.jason] reminding that yard waste collection is this week. The notification includes a custom icon, image, and a button to mark the task as done."
},
"human_like": "Sends a reminder notification about yard waste collection when it's scheduled for the current week.",
"complexity": "low"
}
},
{
"id": "clear_waste_collection_notification",
"result": {
"structured": "TRIGGER: When any of garbage alert input boolean [input_boolean.garbage_alert], organic waste alert input boolean [input_boolean.organic_waste_alert], recycle alert input boolean [input_boolean.recycle_alert], or yard waste alert input boolean [input_boolean.yard_waste_alert] turns off OR When the display attribute of any of next garbage day sensor [sensor.next_garbage_day], next organic waste day sensor [sensor.next_organic_waste_day], next recycle day sensor [sensor.next_recycle_day], or next yard waste day sensor [sensor.next_yard_waste_day] changes from 'Tomorrow' to any value except 'unknown' or 'unavailable' OR When a mobile app notification action event occurs with action 'garbage_done' OR When a mobile app notification action event occurs with action 'organic_waste_done' OR When a mobile app notification action event occurs with action 'recycle_done' OR When a mobile app notification action event occurs with action 'yard_waste_done'. CONDITIONS: schedule alerts input boolean [input_boolean.schedule_alerts] is on. ACTIONS: If the trigger is 'alert' or 'sensor' or matches a waste type ('garbage', 'organic_waste', 'recycle', 'yard_waste'), then if the trigger is 'alert', turn off the corresponding waste type alert input boolean [input_boolean.{{ waste_type }}_alert] and send a clear_notification message to jason medication notification [notify.jason] with tag '{{ waste_type }}_collection'. Otherwise, for each waste type in the list, if the display attribute of the corresponding next waste day sensor is not 'Tomorrow', then turn off the corresponding waste type alert input boolean and send a clear_notification message to jason medication notification [notify.jason] with tag '{{ waste_type }}_collection'.",
"natural_language": {
"trigger": "The automation can be triggered in several ways: when any of the waste alert input booleans (for garbage, organic waste, recycling, or yard waste) turns off; when the display attribute of any of the next waste day sensors changes from 'Tomorrow' to a value that is not 'unknown' or 'unavailable'; or when a mobile app notification action is received indicating that a specific waste collection task is done (for garbage, organic waste, recycling, or yard waste).",
"conditions": "The automation only runs if the schedule alerts input boolean [input_boolean.schedule_alerts] is switched on.",
"action": "Depending on the trigger, the automation will clear waste collection alerts and notifications. If the trigger is a waste alert turning off or a sensor display changing, it will turn off the specific waste alert and send a clear notification command to the user's mobile app. If the trigger is a mobile app action, it will iterate through all waste types, and for any type where the next collection is no longer 'Tomorrow', it will turn off that alert and clear its notification."
},
"human_like": "Clears waste collection reminders and notifications when alerts are turned off, collection day passes, or the user confirms the task is done via their phone.",
"complexity": "high"
}
},
{
"id": "turn_water_plants_on",
"result": {
"structured": "TRIGGER: When the template evaluates to true. The template condition is: water plants enabled [input_boolean.water_plants_enabled] is on AND occupancy mode [input_select.occupancy_mode] is not 'Vacation' AND the current time [sensor.time] matches the configured time for the current work shift AND the last run [button.water_plants_done] is unknown or the number of days since the last run is greater than or equal to the configured day interval [input_number.water_plants_day_interval]. Specifically, the time match is: (work status sensor [sensor.work_status] shift attribute is 'Days' AND time matches water plants days datetime [input_datetime.water_plants_days] hours:minutes) OR (shift is 'Afternoons' AND time matches water plants afternoons datetime [input_datetime.water_plants_afternoons] hours:minutes) OR (shift is 'Off' AND time matches water plants weekends datetime [input_datetime.water_plants_weekends] hours:minutes). CONDITIONS: None. ACTIONS: If water plants active [input_boolean.water_plants_active] is on, turn it off. If water plants paused [input_boolean.water_plants_paused] is on, turn it off (action is listed twice). If water plants skipped [input_boolean.water_plants_skipped] is on, turn it off; otherwise, turn on water plants active [input_boolean.water_plants_active].",
"natural_language": {
"trigger": "The automation triggers based on a complex template. It checks if the water plants enabled [input_boolean.water_plants_enabled] is on and the occupancy mode [input_select.occupancy_mode] is not set to 'Vacation'. Then, it looks at the current time from the time sensor [sensor.time] and the work shift from the work status sensor [sensor.work_status]. If the current time matches the scheduled time for the current shift (using water plants days datetime [input_datetime.water_plants_days], water plants afternoons datetime [input_datetime.water_plants_afternoons], or water plants weekends datetime [input_datetime.water_plants_weekends]), and if the last time the plants were watered (from water plants done button [button.water_plants_done]) is either unknown or was long enough ago (based on the water plants day interval [input_number.water_plants_day_interval]), the trigger activates.",
"conditions": "There are no separate conditions defined; all logic is contained within the trigger template.",
"action": "When triggered, the automation first checks the status of several reminder booleans. If the water plants active [input_boolean.water_plants_active] reminder is on, it turns it off. If the water plants paused [input_boolean.water_plants_paused] reminder is on, it turns it off. If the water plants skipped [input_boolean.water_plants_skipped] reminder is on, it turns it off. If water plants skipped [input_boolean.water_plants_skipped] is off, then it turns on the water plants active [input_boolean.water_plants_active] reminder."
},
"human_like": "Activates a reminder to water the plants at a scheduled time, based on your work shift, but only if the reminder feature is enabled and you're not on vacation.",
"complexity": "high"
}
},
{
"id": "water_plants_done",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'water_plants_done' is received. CONDITIONS: water plants active [input_boolean.water_plants_active] is on. ACTIONS: Press the water plants done button [button.water_plants_done].",
"natural_language": {
"trigger": "When you tap the 'water_plants_done' action on a notification sent to the mobile app.",
"conditions": "The reminder must be currently active, meaning the water plants active [input_boolean.water_plants_active] switch is turned on.",
"action": "Presses the virtual water plants done button [button.water_plants_done] to mark the task as completed."
},
"human_like": "Marks the 'water plants' reminder as completed when you tap the corresponding action on your phone notification.",
"complexity": "low"
}
},
{
"id": "skip_water_plants",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'skip_water_plants'. CONDITIONS: None. ACTIONS: Press skip water plants button [button.skip_water_plants].",
"natural_language": {
"trigger": "When you tap the 'skip_water_plants' action on a notification sent to the mobile app.",
"conditions": "There are no conditions that must be met.",
"action": "Presses the virtual skip water plants button [button.skip_water_plants]."
},
"human_like": "Skips the current plant watering reminder by pressing a button when you tap the notification action.",
"complexity": "low"
}
},
{
"id": "pause_water_plants",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'pause_water_plants' is received. CONDITIONS: None. ACTIONS: Turn on water plants paused [input_boolean.water_plants_paused].",
"natural_language": {
"trigger": "When a user interacts with a mobile app notification and selects the 'pause_water_plants' action.",
"conditions": "There are no conditions that must be met.",
"action": "Sets the pause state for watering plants by turning on the water plants paused [input_boolean.water_plants_paused] switch."
},
"human_like": "Pauses the plant watering reminder when the user taps the corresponding action in a mobile notification.",
"complexity": "low"
}
},
{
"id": "reset_pause_water_plants",
"result": {
"structured": "TRIGGER: When water plants skipped [input_boolean.water_plants_skipped] turns on OR when water plants paused [input_boolean.water_plants_paused] remains on for 24 hours OR when owner home [binary_sensor.owner_home] remains on for 15 minutes. CONDITIONS: water plants paused [input_boolean.water_plants_paused] is on. ACTIONS: Turn off water plants paused [input_boolean.water_plants_paused].",
"natural_language": {
"trigger": "The automation triggers in three ways: when the 'water plants skipped' [input_boolean.water_plants_skipped] reminder is turned on, when the 'water plants paused' [input_boolean.water_plants_paused] reminder has been active for a full 24 hours, or when the owner has been home [binary_sensor.owner_home] for at least 15 minutes.",
"conditions": "The automation only proceeds if the 'water plants paused' [input_boolean.water_plants_paused] reminder is currently active (set to on).",
"action": "It resets the pause reminder by turning off the 'water plants paused' [input_boolean.water_plants_paused] input boolean."
},
"human_like": "Resets the 'paused' state for plant watering reminders when you skip a watering, after 24 hours, or once you've been home for a while.",
"complexity": "medium"
}
},
{
"id": "reset_water_plants_booleans",
"result": {
"structured": "TRIGGER: When water plants enabled [input_boolean.water_plants_enabled] turns off OR When water plants active [input_boolean.water_plants_active] turns off OR When any of the following entities turns on: water plants active [input_boolean.water_plants_active], water plants paused [input_boolean.water_plants_paused], or water plants skipped [input_boolean.water_plants_skipped]. CONDITIONS: (water plants enabled [input_boolean.water_plants_enabled] is off) OR (water plants paused [input_boolean.water_plants_paused] is turned on AND (water plants active [input_boolean.water_plants_active] is off OR water plants skipped [input_boolean.water_plants_skipped] is on)) OR (the trigger is the one with id 'done'). ACTIONS: If the trigger is the one with id 'entity', then turn off the specific entity that triggered. Otherwise, turn off all entities: water plants active [input_boolean.water_plants_active], water plants paused [input_boolean.water_plants_paused], and water plants skipped [input_boolean.water_plants_skipped].",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when the water plants enabled [input_boolean.water_plants_enabled] switch is turned off, when the water plants active [input_boolean.water_plants_active] switch is turned off, or when any of the three reminder-related switches (water plants active [input_boolean.water_plants_active], water plants paused [input_boolean.water_plants_paused], or water plants skipped [input_boolean.water_plants_skipped]) turns on.",
"conditions": "The automation proceeds only if at least one of the following is true: the water plants enabled [input_boolean.water_plants_enabled] is already off, the trigger is the water plants paused [input_boolean.water_plants_paused] turning on while either the reminder is not active or it has been skipped, or the trigger is specifically the water plants active [input_boolean.water_plants_active] turning off.",
"action": "Depending on the trigger, the action will either turn off the specific switch that just turned on (if the trigger was one of the three reminder booleans turning on) or turn off all three reminder switches (water plants active [input_boolean.water_plants_active], water plants paused [input_boolean.water_plants_paused], and water plants skipped [input_boolean.water_plants_skipped]) if the trigger was the reminder being disabled or completed."
},
"human_like": "Resets the plant watering reminder status switches when the reminder is disabled, completed, or when a status switch is turned on in an invalid state.",
"complexity": "medium"
}
},
{
"id": "water_plants_notification",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When water plants active [input_boolean.water_plants_active] turns on OR When water plants paused [input_boolean.water_plants_paused] turns off. CONDITIONS: water plants active [input_boolean.water_plants_active] is on AND water plants paused [input_boolean.water_plants_paused] is off. ACTIONS: REPEAT the following sequence UNTIL water plants active [input_boolean.water_plants_active] is off OR water plants paused [input_boolean.water_plants_paused] is on: IF occupancy mode [input_select.occupancy_mode] is NOT 'Night', THEN send a notification to jason medication notification [notify.jason] with the message 'Water Your Plants' and action buttons, THEN WAIT for water plants active [input_boolean.water_plants_active] to be off OR water plants paused [input_boolean.water_plants_paused] to be on for up to 2 minutes. IF after the wait water plants active [input_boolean.water_plants_active] is still on AND water plants paused [input_boolean.water_plants_paused] is still off, THEN trigger tts play script [script.tts_play] with a TTS message. THEN WAIT for water plants active [input_boolean.water_plants_active] to be off OR water plants paused [input_boolean.water_plants_paused] to be on for up to the duration defined by water plants notification interval [input_number.water_plants_notification_interval] minutes.",
"natural_language": {
"trigger": "The automation triggers when Home Assistant starts, when the water plants active [input_boolean.water_plants_active] switch is turned on, or when the water plants paused [input_boolean.water_plants_paused] switch is turned off.",
"conditions": "The automation only runs if the water plants active [input_boolean.water_plants_active] is currently on and the water plants paused [input_boolean.water_plants_paused] is currently off.",
"action": "The automation enters a repeating loop that continues until the reminder is turned off or paused. In each loop cycle, if the house is not in 'Night' occupancy mode, it sends a persistent mobile notification to Jason with action buttons to pause, skip, or mark the task as done. It then waits for up to two minutes for the reminder to be turned off or paused. If after this wait the reminder is still active and not paused, it plays a text-to-speech message. Finally, it waits for a longer, configurable interval (set by water plants notification interval [input_number.water_plants_notification_interval]) before starting the loop again, unless the reminder is turned off or paused."
},
"human_like": "Sends recurring reminders to water the plants via notification and voice, with options to pause or complete the task, until the reminder is manually stopped.",
"complexity": "high"
}
},
{
"id": "clear_water_plants_notification",
"result": {
"structured": "TRIGGER: When water plants active [input_boolean.water_plants_active] turns off OR When water plants paused [input_boolean.water_plants_paused] turns on OR When water plants skipped [input_boolean.water_plants_skipped] turns on. CONDITIONS: None. ACTIONS: Send a notification to jason medication notification [notify.jason] with the message 'clear_notification' and tag 'water_plants_reminder'.",
"natural_language": {
"trigger": "When the water plants active [input_boolean.water_plants_active] is turned off, or when either the water plants paused [input_boolean.water_plants_paused] or water plants skipped [input_boolean.water_plants_skipped] is turned on.",
"conditions": "There are no conditions that must be met for the action to run.",
"action": "Sends a notification to jason medication notification [notify.jason] to clear the notification tagged as 'water_plants_reminder'."
},
"human_like": "Clears the water plants reminder notification when the watering task is deactivated, paused, or skipped.",
"complexity": "low"
}
},
{
"id": "work_commute_alert",
"result": {
"structured": "TRIGGER: When work commute jason alert [alert.work_commute_jason] OR late for work jason alert [alert.late_for_work_jason] turns on. CONDITIONS: jason home [binary_sensor.jason_home] is on. ACTIONS: IF the triggering entity is work commute jason alert [alert.work_commute_jason] THEN press jason phone open mobile app button [button.jason_phone_open_mobile_app], wait 10 seconds, AND navigate the kiosk browser to the /ui-kiosk/traffic page. REPEAT the following sequence UNTIL the triggering alert is no longer on: IF this is the first iteration OR dining room light timer [timer.dining_room_light] is idle THEN run work commute lights script [script.work_commute_lights]; THEN run tts play script [script.tts_play] with a custom message (including a special attention phrase if the trigger was late for work jason alert [alert.late_for_work_jason], followed by the scheduled leave time) targeting inside speakers media player [media_player.inside_speakers] with specified voice and volume; THEN WAIT for the triggering alert to turn off, timing out after 5 minutes if the trigger was late for work jason alert [alert.late_for_work_jason] OR 15 minutes if the trigger was work commute jason alert [alert.work_commute_jason]. AFTER the loop, IF kiosk tablet current page sensor [sensor.kiosk_tablet_current_page] shows the traffic page THEN navigate the kiosk browser back to the /ui-kiosk/home page.",
"natural_language": {
"trigger": "When either the work commute jason alert [alert.work_commute_jason] or the late for work jason alert [alert.late_for_work_jason] turns on.",
"conditions": "The condition requires that jason home [binary_sensor.jason_home] is currently on.",
"action": "If the alert that started the automation is the work commute alert, it first presses the jason phone open mobile app button [button.jason_phone_open_mobile_app], waits 10 seconds, and then navigates the kiosk browser to the traffic information page. Then, it enters a repeating sequence that continues until the alert that triggered the automation is no longer active. In each loop, if it's the first time through or if the dining room light timer [timer.dining_room_light] is idle, it runs the work commute lights script [script.work_commute_lights]. It then plays a text-to-speech announcement on the inside speakers media player [media_player.inside_speakers]. The announcement includes a loud, urgent message with the current time if the trigger was the late-for-work alert, followed by the scheduled time Jason should leave home. The automation then waits for the alert to turn off, pausing for up to 5 minutes for the late alert or 15 minutes for the regular commute alert. After the loop finishes, if the kiosk tablet is still showing the traffic page, it navigates the browser back to the home page."
},
"human_like": "Plays an audible commute alert and manages lights when Jason is home and needs to leave for work, with different urgency levels for being on time or running late.",
"complexity": "high"
}
},
{
"id": "set_day_shift",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action value 'set_day_shift'. CONDITIONS: None. ACTIONS: Turn on work shift override input boolean [input_boolean.work_shift_override] AND set current work shift select [input_select.current_work_shift] to option 'Days'.",
"natural_language": {
"trigger": "When a specific action, 'set_day_shift', is performed from a mobile app notification.",
"conditions": "There are no conditions for this automation.",
"action": "It turns on the work shift override input boolean [input_boolean.work_shift_override] and sets the current work shift select [input_select.current_work_shift] to the 'Days' option."
},
"human_like": "Sets the work schedule to the 'Days' shift when a user taps the corresponding notification action on their phone.",
"complexity": "low"
}
},
{
"id": "set_afternoon_shift",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'set_aft_shift' is received. CONDITIONS: None. ACTIONS: Turn on work shift override input boolean [input_boolean.work_shift_override] AND set the option of current work shift select [input_select.current_work_shift] to 'Afternoons'.",
"natural_language": {
"trigger": "When a specific action ('set_aft_shift') is tapped on a notification sent to the mobile app.",
"conditions": "There are no conditions that must be met for the automation to run.",
"action": "Activates the work shift override by turning on the work shift override input boolean [input_boolean.work_shift_override] and changes the current work shift to 'Afternoons' by updating the current work shift select [input_select.current_work_shift]."
},
"human_like": "Sets the work schedule to 'Afternoons' and enables the shift override when a user taps the corresponding notification action on their phone.",
"complexity": "low"
}
},
{
"id": "work_schedule_changed",
"result": {
"structured": "TRIGGER: When startup pending [input_boolean.startup_pending] turns off OR When work schedule input boolean [input_boolean.work_schedule], work holiday binary sensor [binary_sensor.work_holiday], work layoff binary sensor [binary_sensor.work_layoff], or work vacation binary sensor [binary_sensor.work_vacation] changes state (from on to off or off to on) and remains stable for 1 minute OR When work shift today sensor [sensor.work_shift_today] changes state (from Off to Days, Off to Afternoons, Days to Off, Days to Afternoons, Afternoons to Off, or Afternoons to Days) and remains stable for 1 minute. CONDITIONS: startup pending [input_boolean.startup_pending] is off AND (work schedule input boolean [input_boolean.work_schedule] is off OR work schedule lock input boolean [input_boolean.work_schedule_lock] is off). ACTIONS: First, if the trigger was a schedule change OR work schedule input boolean [input_boolean.work_schedule] is off OR any of work holiday binary sensor [binary_sensor.work_holiday], work layoff binary sensor [binary_sensor.work_layoff], or work vacation binary sensor [binary_sensor.work_vacation] are on, then turn off saturday workday input boolean [input_boolean.saturday_workday], sunday workday input boolean [input_boolean.sunday_workday], and holiday workday input boolean [input_boolean.holiday_workday]. If, after that, work schedule input boolean [input_boolean.work_schedule] is off, then turn off work today on input boolean [input_boolean.work_today_on], work today off input boolean [input_boolean.work_today_off], work tomorrow on input boolean [input_boolean.work_tomorrow_on], work tomorrow off input boolean [input_boolean.work_tomorrow_off], work shift override input boolean [input_boolean.work_shift_override], and work schedule lock input boolean [input_boolean.work_schedule_lock]. Then, if the trigger was NOT the startup trigger, wait 15 seconds and send a notification to jason medication notification [notify.jason] with the current status of the work schedule, including work schedule input boolean [input_boolean.work_schedule], Work Today Binary Sensor [binary_sensor.work_today], scheduled shift today sensor [sensor.scheduled_shift_today], work tomorrow [binary_sensor.work_tomorrow], scheduled shift tomorrow sensor [sensor.scheduled_shift_tomorrow], work holiday binary sensor [binary_sensor.work_holiday], work layoff binary sensor [binary_sensor.work_layoff], and work vacation binary sensor [binary_sensor.work_vacation].",
"natural_language": {
"trigger": "The automation triggers in three scenarios: when the system finishes starting up (indicated by the startup pending [input_boolean.startup_pending] turning off), when any of the core work schedule statuses (work schedule input boolean [input_boolean.work_schedule], work holiday binary sensor [binary_sensor.work_holiday], work layoff binary sensor [binary_sensor.work_layoff], or work vacation binary sensor [binary_sensor.work_vacation]) change state and remain stable for one minute, or when the work shift today sensor [sensor.work_shift_today] changes its value (e.g., from Off to Days) and remains stable for one minute.",
"conditions": "For the automation to run, the system must not be in a startup state, meaning startup pending [input_boolean.startup_pending] must be off. Additionally, either the main work schedule must be disabled (work schedule input boolean [input_boolean.work_schedule] is off) or the schedule lock must be disabled (work schedule lock input boolean [input_boolean.work_schedule_lock] is off).",
"action": "The automation performs a series of actions. First, if the trigger was related to a schedule change, or if the work schedule is off, or if any holiday, layoff, or vacation status is active, it resets weekend and holiday workday settings by turning off saturday workday input boolean [input_boolean.saturday_workday], sunday workday input boolean [input_boolean.sunday_workday], and holiday workday input boolean [input_boolean.holiday_workday]. If, after this, the work schedule is still off, it proceeds to clear all daily work flags and overrides by turning off work today on input boolean [input_boolean.work_today_on], work today off input boolean [input_boolean.work_today_off], work tomorrow on input boolean [input_boolean.work_tomorrow_on], work tomorrow off input boolean [input_boolean.work_tomorrow_off], work shift override input boolean [input_boolean.work_shift_override], and work schedule lock input boolean [input_boolean.work_schedule_lock]. Finally, unless the trigger was the initial system startup, the automation waits 15 seconds and sends a detailed notification to jason medication notification [notify.jason] summarizing the current state of the entire work schedule, including today's and tomorrow's work status and shift information."
},
"human_like": "Resets work schedule settings and sends a notification whenever the work schedule, shift, or time-off status changes, ensuring the system reflects the correct work status.",
"complexity": "high"
}
},
{
"id": "work_setting_reset",
"result": {
"structured": "TRIGGER: When saturday workday input boolean [input_boolean.saturday_workday] OR sunday workday input boolean [input_boolean.sunday_workday] OR holiday workday input boolean [input_boolean.holiday_workday] OR work today on input boolean [input_boolean.work_today_on] OR work today off input boolean [input_boolean.work_today_off] OR work tomorrow on input boolean [input_boolean.work_tomorrow_on] OR work tomorrow off input boolean [input_boolean.work_tomorrow_off] turns on. OR When work schedule lock input boolean [input_boolean.work_schedule_lock] OR work shift override input boolean [input_boolean.work_shift_override] turns on. CONDITIONS: (work schedule input boolean [input_boolean.work_schedule] is off) OR (work layoff binary sensor [binary_sensor.work_layoff] is on) OR (work vacation binary sensor [binary_sensor.work_vacation] is on). ACTIONS: Turn off the specific input boolean that triggered the automation [{{ trigger.entity_id }}]. Show a browser notification for 10 seconds stating 'Work setting cannot be enabled. Work schedule is not enabled or work layoff/vacation is on.'.",
"natural_language": {
"trigger": "The automation triggers when any of the work-related day or schedule input booleans (saturday workday, sunday workday, holiday workday, work today on, work today off, work tomorrow on, work tomorrow off) are turned on. It also triggers when either the work schedule lock or the work shift override input booleans are turned on.",
"conditions": "The automation only runs if the overall work schedule is turned off, or if a work layoff is active, or if a work vacation is active.",
"action": "It turns off the specific input boolean that caused the trigger, and displays a browser notification for 10 seconds explaining that the work setting cannot be enabled because the work schedule is off or a layoff/vacation is active."
},
"human_like": "Prevents work-related settings from being enabled when the main work schedule is off or during layoffs/vacations, and notifies the user.",
"complexity": "medium"
}
},
{
"id": "toggle_work_schedule",
"result": {
"structured": "TRIGGER: When a mobile app notification action event occurs with action 'work_schedule_toggle'. CONDITIONS: None. ACTIONS: Toggle work schedule input boolean [input_boolean.work_schedule].",
"natural_language": {
"trigger": "When a notification action from the mobile app is received, specifically the action named 'work_schedule_toggle'.",
"conditions": "There are no conditions that must be met.",
"action": "Toggles the state of the work schedule input boolean [input_boolean.work_schedule]."
},
"human_like": "Toggles the work schedule on or off when a specific button is pressed in a mobile app notification.",
"complexity": "low"
}
},
{
"id": "toggle_work_today",
"result": {
"structured": "TRIGGER: When a mobile app notification action event with action 'work_today_toggle' occurs. CONDITIONS: None. ACTIONS: If Work Today Binary Sensor [binary_sensor.work_today] is on, then turn on work today off input boolean [input_boolean.work_today_off] AND turn off work today on input boolean [input_boolean.work_today_on]. Otherwise, turn on work today on input boolean [input_boolean.work_today_on] AND turn off work today off input boolean [input_boolean.work_today_off].",
"natural_language": {
"trigger": "When a specific action named 'work_today_toggle' is received from a mobile app notification.",
"conditions": "There are no conditions to check.",
"action": "If the Work Today Binary Sensor [binary_sensor.work_today] is currently on, it turns on the 'work today off' toggle [input_boolean.work_today_off] and turns off the 'work today on' toggle [input_boolean.work_today_on]. If the sensor is off, it does the opposite: it turns on the 'work today on' toggle and turns off the 'work today off' toggle."
},
"human_like": "Toggles the 'work today' status when a button is pressed in a mobile app notification, switching between an 'on' and 'off' indicator.",
"complexity": "low"
}
},
{
"id": "reset_work_today_off",
"result": {
"structured": "TRIGGER: When the scheduled time defined by day reset [input_datetime.day_reset] is reached OR When work today on input boolean [input_boolean.work_today_on] turns on. CONDITIONS: (work schedule input boolean [input_boolean.work_schedule] is on OR work today off input boolean [input_boolean.work_today_off] is on) AND work schedule lock input boolean [input_boolean.work_schedule_lock] is off. ACTIONS: Turn off work today off input boolean [input_boolean.work_today_off].",
"natural_language": {
"trigger": "The automation runs either at the scheduled reset time defined by the day reset [input_datetime.day_reset] entity, or whenever the work today on input boolean [input_boolean.work_today_on] is turned on.",
"conditions": "The automation only proceeds if the work schedule input boolean [input_boolean.work_schedule] or the work today off input boolean [input_boolean.work_today_off] is currently on, and the work schedule lock input boolean [input_boolean.work_schedule_lock] is off.",
"action": "Turns off the work today off input boolean [input_boolean.work_today_off]."
},
"human_like": "Resets the 'work today off' status either at the end of the day or when work is turned on, provided the schedule is active and not locked.",
"complexity": "medium"
}
},
{
"id": "reset_work_tomorrow_off",
"result": {
"structured": "TRIGGER: When the time reaches day reset [input_datetime.day_reset] OR when work tomorrow on [input_boolean.work_tomorrow_on] turns on. CONDITIONS: work tomorrow off [input_boolean.work_tomorrow_off] is on AND work schedule lock [input_boolean.work_schedule_lock] is off. ACTIONS: Wait for 5 seconds, then turn on work today off [input_boolean.work_today_off] and turn off work tomorrow off [input_boolean.work_tomorrow_off].",
"natural_language": {
"trigger": "The automation runs either at a specific time defined by day reset [input_datetime.day_reset], or whenever the work tomorrow on [input_boolean.work_tomorrow_on] input boolean is turned on.",
"conditions": "For the automation to proceed, the work tomorrow off [input_boolean.work_tomorrow_off] must be in the 'on' state, and the work schedule lock [input_boolean.work_schedule_lock] must be in the 'off' state, indicating the schedule is not locked.",
"action": "After a short 5-second delay, the automation turns on the work today off [input_boolean.work_today_off] and turns off the work tomorrow off [input_boolean.work_tomorrow_off]."
},
"human_like": "Resets the 'work tomorrow off' flag at the end of the day or when 'work tomorrow' is scheduled, and sets the 'work today off' flag.",
"complexity": "medium"
}
},
{
"id": "reset_work_today_on",
"result": {
"structured": "TRIGGER: When the time reaches the value set in day reset [input_datetime.day_reset] OR When work today off input boolean [input_boolean.work_today_off] turns on. CONDITIONS: work today on input boolean [input_boolean.work_today_on] is on AND work schedule lock input boolean [input_boolean.work_schedule_lock] is off. ACTIONS: Turn off work today on input boolean [input_boolean.work_today_on].",
"natural_language": {
"trigger": "The automation triggers either at a specific time of day defined by the day reset [input_datetime.day_reset] entity, or whenever the work today off input boolean [input_boolean.work_today_off] is turned on.",
"conditions": "For the automation to run, the work today on input boolean [input_boolean.work_today_on] must be in the 'on' state, and the work schedule lock input boolean [input_boolean.work_schedule_lock] must be in the 'off' state.",
"action": "The action turns off the work today on input boolean [input_boolean.work_today_on]."
},
"human_like": "Resets the 'work today on' status either at a scheduled daily reset time or when manually triggered, provided the schedule is not locked.",
"complexity": "low"
}
},
{
"id": "reset_work_tomorrow_on",
"result": {
"structured": "TRIGGER: When the time reaches day reset [input_datetime.day_reset] OR when work tomorrow off [input_boolean.work_tomorrow_off] turns on. CONDITIONS: work tomorrow on [input_boolean.work_tomorrow_on] is on AND work schedule lock [input_boolean.work_schedule_lock] is off. ACTIONS: Wait 5 seconds, then turn on work today on [input_boolean.work_today_on], then turn off work tomorrow on [input_boolean.work_tomorrow_on].",
"natural_language": {
"trigger": "The automation triggers either at a specific reset time defined by day reset [input_datetime.day_reset], or when the work tomorrow off [input_boolean.work_tomorrow_off] switch is turned on.",
"conditions": "For the automation to run, the work tomorrow on [input_boolean.work_tomorrow_on] switch must be on, and the work schedule lock [input_boolean.work_schedule_lock] must be off, indicating the schedule is not locked.",
"action": "After a 5-second delay, the automation turns on the work today on [input_boolean.work_today_on] switch and then turns off the work tomorrow on [input_boolean.work_tomorrow_on] switch."
},
"human_like": "Resets the work schedule at the end of the day or when manually triggered, turning on the 'work today' flag and turning off the 'work tomorrow' flag.",
"complexity": "medium"
}
},
{
"id": "reset_saturday_workday",
"result": {
"structured": "TRIGGER: When the time reaches the scheduled time set in day reset [input_datetime.day_reset]. CONDITIONS: saturday workday input boolean [input_boolean.saturday_workday] is on AND work schedule lock input boolean [input_boolean.work_schedule_lock] is off AND today is Sunday (weekday index 6). ACTIONS: Turn off saturday workday input boolean [input_boolean.saturday_workday].",
"natural_language": {
"trigger": "At the specific time configured in the day reset [input_datetime.day_reset].",
"conditions": "The saturday workday input boolean [input_boolean.saturday_workday] must be on, the work schedule lock input boolean [input_boolean.work_schedule_lock] must be off, and the current day must be Sunday.",
"action": "Turns off the saturday workday input boolean [input_boolean.saturday_workday]."
},
"human_like": "Resets the 'Saturday workday' flag on Sunday morning if the schedule is not locked.",
"complexity": "medium"
}
},
{
"id": "reset_sunday_workday",
"result": {
"structured": "TRIGGER: At the time specified by day reset [input_datetime.day_reset]. CONDITIONS: (sunday workday input boolean [input_boolean.sunday_workday] is on) AND (work schedule lock input boolean [input_boolean.work_schedule_lock] is off) AND (today is Monday). ACTIONS: Turn off sunday workday input boolean [input_boolean.sunday_workday].",
"natural_language": {
"trigger": "When the scheduled time set in day reset [input_datetime.day_reset] is reached.",
"conditions": "If the sunday workday input boolean [input_boolean.sunday_workday] is currently on, the work schedule lock input boolean [input_boolean.work_schedule_lock] is off, and today is Monday.",
"action": "Turns off the sunday workday input boolean [input_boolean.sunday_workday]."
},
"human_like": "Resets the 'Sunday workday' flag on Monday morning if the schedule is not locked.",
"complexity": "medium"
}
},
{
"id": "reset_holiday_workday",
"result": {
"structured": "TRIGGER: When the time reaches day reset [input_datetime.day_reset]. CONDITIONS: holiday workday input boolean [input_boolean.holiday_workday] is on AND work schedule lock input boolean [input_boolean.work_schedule_lock] is off AND work holiday calendar [calendar.work_holiday] is off. ACTIONS: Turn off holiday workday input boolean [input_boolean.holiday_workday].",
"natural_language": {
"trigger": "At the scheduled time set by day reset [input_datetime.day_reset].",
"conditions": "If the holiday workday input boolean [input_boolean.holiday_workday] is currently on, the work schedule lock input boolean [input_boolean.work_schedule_lock] is off, and the work holiday calendar [calendar.work_holiday] is not indicating a holiday.",
"action": "Turns off the holiday workday input boolean [input_boolean.holiday_workday]."
},
"human_like": "Automatically resets the holiday workday flag at a scheduled time if it's not a holiday and the schedule isn't locked.",
"complexity": "low"
}
},
{
"id": "zwave_keypress_events",
"result": {
"structured": "TRIGGER: When a zwave_js_value_notification event occurs with value KeyHeldDown OR KeyPressed OR KeyPressed1x OR KeyPressed2x OR KeyPressed3x OR KeyPressed4x OR KeyPressed5x. CONDITIONS: (The automation first checks if a valid entity is resolved from the group.zwave_entities group based on the node_id in the event. If no entity is found, the automation stops with an error). ACTIONS: Based on the combination of the event's key_value and key_name, and the resolved entity, the automation performs a specific sequence. For KeyHeldDown: If a timer exists for the resolved light, start that timer. For KeyPressed with key_name '001': If the resolved light is off and has been off for more than 1 second, and a timer exists for it, start that timer. For KeyPressed with key_name '002': If the entity is bathroom vanity light [light.bathroom_vanity_light] AND occupancy mode [input_select.occupancy_mode] is Night, turn the light on with the default profile. Otherwise, if the light is on and has been on for more than 1 second, turn it on with the default profile and reset the timer. If not, and a timer exists, start that timer. For KeyPressed2x with key_name '001': If the entity is hallway potlights [light.hallway_potlights], turn off upstairs potlights [light.upstairs_potlights]. If the entity is side entrance light [light.side_entrance_light], toggle charlie home [input_boolean.charlie_home] and run the inovelli LED control script with parameters based on the toggle state. Otherwise, turn off the room associated with the entity. For KeyPressed2x with key_name '002': Turn the light on with the default_max profile, activate its timer, and override other settings. For KeyPressed3x with key_name '001': If the entity is hallway potlights [light.hallway_potlights], activate the evening light scene. If the entity is dining room potlights [light.dining_room_potlights], decrease volume on active speaker media players. If the entity is bathroom shower light [light.bathroom_shower_light], decrease volume on bathroom speaker [media_player.bathroom_speaker]. If the entity is a designated garage door lock light switch (back house potlights, back yard tree lights, or side entrance light), unlock garage side door lock [lock.garage_side_door_lock]. If the entity has the scene_led attribute true, toggle the bedtime script [script.bedtime]. For KeyPressed3x with key_name '002': If the entity is hallway potlights [light.hallway_potlights], turn on upstairs potlights [light.upstairs_potlights] with default_low profile and activate timer. If the entity is dining room potlights [light.dining_room_potlights], increase volume on active speaker media players. If the entity is bathroom shower light [light.bathroom_shower_light], increase volume on bathroom speaker [media_player.bathroom_speaker]. If the entity has the garage_led attribute true, run the toggle garage door script [script.toggle_garage_door] and, if it's also a designated garage door lock light switch, unlock garage side door lock [lock.garage_side_door_lock]. If the entity has the scene_led attribute true, run the waketime script [script.waketime]. For KeyPressed4x with key_name '001': If the entity is hallway potlights [light.hallway_potlights], activate the evening light scene. If the entity is dining room light rgb [light.dining_room_light_rgb], turn off garbage, organic waste, recycle, and yard waste alert input booleans. If the entity is dining room potlights [light.dining_room_potlights], pause all media players. If the entity is bathroom shower light [light.bathroom_shower_light], pause the bathroom speaker. If the entity is back house potlights [light.back_house_potlights] or outside garage lights [light.outside_garage_lights], turn off a group of outside lights. If the entity has the alarm_led attribute true AND someone home [binary_sensor.someone_home] is on, arm the alarm in night mode. For KeyPressed4x with key_name '002': If the entity is hallway potlights [light.hallway_potlights], turn on upstairs potlights [light.upstairs_potlights] with default profile and activate timer. If the entity is dining room potlights [light.dining_room_potlights], resume all media players. If the entity is bathroom shower light [light.bathroom_shower_light], resume the bathroom speaker. If the entity is back house potlights [light.back_house_potlights] or outside garage lights [light.outside_garage_lights], turn on a group of outside lights without activating a timer. If the entity has the alarm_led attribute true AND someone home [binary_sensor.someone_home] is on, arm the alarm in home mode. For KeyPressed5x with key_name '001': If the entity is hallway potlights [light.hallway_potlights], turn the light off. If the entity is dining room potlights [light.dining_room_potlights], toggle media mute [switch.media_mute]. If the entity is bathroom shower light [light.bathroom_shower_light], toggle the mute state of bathroom speaker [media_player.bathroom_speaker]. If the entity has the alarm_led attribute true, arm the alarm in away mode, and if it's side entrance light [light.side_entrance_light], also set jason presence override [input_boolean.jason_presence_override] on and jason home [input_boolean.jason_home] off. If the entity has the alarm_clock_led attribute true, run the alarm clock stop script [script.alarm_clock_stop]. For KeyPressed5x with key_name '002': If the entity is hallway potlights [light.hallway_potlights], turn on upstairs potlights [light.upstairs_potlights] with default_max profile and activate timer. If the entity is dining room light rgb [light.dining_room_light_rgb], run the weather report script [script.weather_report]. If the entity is bathroom shower light [light.bathroom_shower_light], toggle shower scene [switch.shower_scene]. If the entity has the alarm_led attribute true AND someone home [binary_sensor.someone_home] is on, disarm the alarm for a specific zone based on the entity.",
"natural_language": {
"trigger": "The automation is triggered by a Z-Wave keypress event from an Inovelli dimmer or switch. It listens for specific event values: KeyHeldDown, KeyPressed, KeyPressed1x, KeyPressed2x, KeyPressed3x, KeyPressed4x, and KeyPressed5x.",
"conditions": "The automation first determines which light or switch entity corresponds to the Z-Wave device that sent the event by looking up the node_id in the group of Z-Wave entities. If no matching entity is found, the automation stops and logs an error. The subsequent actions depend heavily on which specific key was pressed (the key_value and key_name from the event) and which entity was identified.",
"action": "The actions are extensive and vary per key press and per device. They include starting timers for lights, turning lights on or off with specific brightness profiles, controlling whole rooms, toggling input booleans (like charlie home [input_boolean.charlie_home]), controlling media player volume and playback on speakers, unlocking the garage side door lock [lock.garage_side_door_lock], activating light scenes, running scripts for bedtime [script.bedtime] or waketime [script.waketime], silencing garbage alerts, arming or disarming the security alarm in different modes (night, home, away), toggling the garage door, and providing a weather report. Many actions are specific to individual lights, such as the hallway potlights [light.hallway_potlights], side entrance light [light.side_entrance_light], or bathroom shower light [light.bathroom_shower_light]."
},
"human_like": "This automation maps complex multi-press and hold actions from Z-Wave light switches to control lights, media, security, and other smart home functions throughout the house.",
"complexity": "high"
}
},
{
"id": "zwave_operation_lock_status_update",
"result": {
"structured": "TRIGGER: When side door lock [lock.side_door_lock] OR back door lock [lock.back_door_lock] OR garage side door lock [lock.garage_side_door_lock] OR front door lock [lock.front_door_lock] changes state to locked OR unlocked AND remains in the new state for 1 second. CONDITIONS: None. ACTIONS: If the new state is locked AND (the corresponding sensor.{{ lock }}_status contains 'Unlocked' OR the sensor.{{ lock }}_status has no value), then set input_text.{{ lock }}_status to 'Locked (Hassio)'. If the new state is unlocked AND (the corresponding sensor.{{ lock }}_status contains 'Locked' OR the sensor.{{ lock }}_status has no value), then set input_text.{{ lock }}_status to 'Unlocked (Hassio)'. The variable 'lock' is derived from the triggering entity's object_id.",
"natural_language": {
"trigger": "When any of the monitored door locks (side door lock [lock.side_door_lock], back door lock [lock.back_door_lock], garage side door lock [lock.garage_side_door_lock], or front door lock [lock.front_door_lock]) changes to either a locked or unlocked state and stays in that new state for at least one second.",
"conditions": "There are no explicit conditions that must be met before the actions run.",
"action": "Based on which lock triggered the automation and its new state, the automation updates a corresponding text sensor. If the lock is now locked, and its status sensor currently shows 'Unlocked' or has no value, it sets the text sensor to 'Locked (Hassio)'. If the lock is now unlocked, and its status sensor currently shows 'Locked' or has no value, it sets the text sensor to 'Unlocked (Hassio)'."
},
"human_like": "Keeps a text-based status sensor in sync with the actual locked/unlocked state of the home's doors, ensuring the displayed status is accurate and labeled as set by Home Assistant.",
"complexity": "medium"
}
},
{
"id": "unavailable_entities_notification",
"result": {
"structured": "TRIGGER: When the entity_id attribute of unavailable entities group [group.unavailable_entities] changes to null and remains for 5 seconds. CONDITIONS: Sensor state is a valid numerical value: The state of unavailable entities sensor [sensor.unavailable_entities] is a number. ACTIONS: Create a persistent notification with ID 'unavailable_entities', title 'Unavailable Entities', and a message generated by a template. The template expands the entity_id attribute of unavailable entities group [group.unavailable_entities], fetches device names and IDs for each entity, formats the information, groups entities by device, and sorts the list.",
"natural_language": {
"trigger": "When the list of entities in the 'unavailable entities group' [group.unavailable_entities] changes to an empty state (null) and stays that way for 5 seconds.",
"conditions": "The automation only runs if the 'unavailable entities sensor' [sensor.unavailable_entities] reports a valid numerical value.",
"action": "Creates a persistent notification titled 'Unavailable Entities'. The notification's detailed message lists all entities currently marked as unavailable, organized by their associated device. For each entity, it shows the device name (with a link if available), the entity's friendly name, its entity ID, and its current state."
},
"human_like": "Shows a persistent notification listing all unavailable devices and entities when the system detects they are offline.",
"complexity": "medium"
}
},
{
"id": "update_unavailable_entities_group",
"result": {
"structured": "TRIGGER: When a service call is made to the 'group' domain with service 'reload' OR every minute (time pattern: minutes divisible by 1). CONDITIONS: None. ACTIONS: Set the entities list for the group unavailable entities group [group.unavailable_entities] to a computed list. The list is generated by filtering all states, rejecting entities whose domain is in ['button', 'conversation', 'event', 'group', 'image', 'input_button', 'input_text', 'remote', 'tts', 'scene', 'stt', 'update'], rejecting entities whose entity_id is in the list from sensor.disabled_device_entities, rejecting entities whose entity_id is in the entity_id attribute of group.ignored_entities, rejecting the entities 'group.unavailable_entities' and 'group.ignored_entities' themselves, rejecting entities belonging to devices with the label 'ignored', rejecting entities directly labeled 'ignored', rejecting entities whose last_changed timestamp is within the last 60 seconds, and selecting only entities whose state is 'unknown' or 'unavailable'. The resulting entity IDs are sorted into a list.",
"natural_language": {
"trigger": "The automation triggers either when a service call to reload any group is made, or on a scheduled basis every minute.",
"conditions": "There are no conditions for this automation.",
"action": "Updates the membership of the unavailable entities group [group.unavailable_entities]. It calculates a new list of entities by examining all entities in the system. It excludes entities from specific domains (like buttons, groups, scenes), entities listed in a disabled entities sensor, entities in an ignored entities group, the group entities themselves, entities on devices or with a specific 'ignored' label, and any entity that changed state in the last 60 seconds. From the remaining entities, it includes only those that are currently in an 'unknown' or 'unavailable' state. This filtered and sorted list becomes the new set of members for the group."
},
"human_like": "Automatically maintains a group containing all entities that are currently unavailable or unknown, updating the list every minute or when groups are reloaded.",
"complexity": "high"
}
},
{
"id": "unavailable_entities_notification",
"result": {
"structured": "TRIGGER: When unavailable entities group [group.unavailable_entities] attribute 'entity_id' becomes null for 5 seconds. CONDITIONS: Sensor state is a valid numerical value (unavailable entities sensor [sensor.unavailable_entities] state is a number). ACTIONS: IF unavailable entities sensor [sensor.unavailable_entities] is below 1 THEN dismiss persistent notification with ID 'unavailable_entities'. ELSE create a persistent notification with ID 'unavailable_entities', title 'Unavailable Entities', and message containing the list of entity IDs from unavailable entities group [group.unavailable_entities] attribute 'entity_id'.",
"natural_language": {
"trigger": "When the list of entity IDs tracked by the unavailable entities group [group.unavailable_entities] becomes empty (changes to null) and stays that way for at least 5 seconds.",
"conditions": "The automation only runs if the unavailable entities sensor [sensor.unavailable_entities] reports a valid numerical value.",
"action": "If the count of unavailable entities is less than one, it clears any existing 'unavailable entities' notification. Otherwise, it creates a new persistent notification titled 'Unavailable Entities' that lists all the currently unavailable entity IDs."
},
"human_like": "Shows a persistent notification listing unavailable devices when there are any, and clears the notification when all devices are back online.",
"complexity": "medium"
}
},
{
"id": "unavailable_entities_notification",
"result": {
"structured": "TRIGGER: When the entity_id attribute of unavailable entities sensor [sensor.unavailable_entities] changes to null. CONDITIONS: The previous state AND the new state of unavailable entities sensor [sensor.unavailable_entities] are both valid numerical values. ACTIONS: If the state of unavailable entities sensor [sensor.unavailable_entities] is below 1, then dismiss the persistent notification with ID 'unavailable_entities'. Otherwise, create a persistent notification with ID 'unavailable_entities', title 'Unavailable Entities', and a message listing the entity IDs from the entity_id attribute of unavailable entities sensor [sensor.unavailable_entities].",
"natural_language": {
"trigger": "When the 'entity_id' attribute of the unavailable entities sensor [sensor.unavailable_entities] changes to a null value.",
"conditions": "The state of the unavailable entities sensor [sensor.unavailable_entities] must be a valid number both before and after the change.",
"action": "If the sensor's value is less than 1, the automation dismisses any existing persistent notification with the ID 'unavailable_entities'. If the value is 1 or higher, it creates a new persistent notification with the same ID, titled 'Unavailable Entities', and its message will list all the entity IDs stored in the sensor's attribute."
},
"human_like": "Shows or hides a notification based on how many entities are currently unavailable in the system.",
"complexity": "medium"
}
}
]