[ { "id": "activate_amars_bathroom_fan_timer", "result": { "structured": "TRIGGER: When Amar bathroom fan [switch.amar_bathroom_fan] is turned on. CONDITIONS: None. ACTIONS: Start Amar bathroom fan timer [timer.amar_bathroom_fan_timer] for 1200 seconds.", "natural_language": { "trigger": "When the Amar bathroom fan [switch.amar_bathroom_fan] is switched on.", "conditions": "There are no conditions.", "action": "Starts the Amar bathroom fan timer [timer.amar_bathroom_fan_timer] for a duration of 1200 seconds (20 minutes)." }, "human_like": "Starts a 20-minute timer for the bathroom fan whenever it is turned on.", "complexity": "low" } }, { "id": "deactivate_amars_bathroom_fan_timer", "result": { "structured": "TRIGGER: When Amar bathroom fan [switch.amar_bathroom_fan] turns off. CONDITIONS: None. ACTIONS: Cancel Amar bathroom fan timer [timer.amar_bathroom_fan_timer].", "natural_language": { "trigger": "When the Amar bathroom fan [switch.amar_bathroom_fan] is turned off.", "conditions": "There are no conditions for this automation.", "action": "Cancels the Amar bathroom fan timer [timer.amar_bathroom_fan_timer]." }, "human_like": "Stops the bathroom fan timer when the fan itself is manually turned off.", "complexity": "low" } }, { "id": "deactivate_amars_bathroom_fan_when_timer_finishes", "result": { "structured": "TRIGGER: When Amar bathroom fan timer [timer.amar_bathroom_fan_timer] finishes. CONDITIONS: None. ACTIONS: Turn off Amar bathroom fan [switch.amar_bathroom_fan].", "natural_language": { "trigger": "When the Amar bathroom fan timer [timer.amar_bathroom_fan_timer] finishes.", "conditions": "There are no conditions.", "action": "Turns off the Amar bathroom fan [switch.amar_bathroom_fan]." }, "human_like": "Automatically turns off the bathroom fan when its timer runs out.", "complexity": "low" } }, { "id": "activate_guest_bathroom_fan_timer", "result": { "structured": "TRIGGER: When Guest bathroom fan [switch.guest_bathroom_fan] turns on. CONDITIONS: None. ACTIONS: Start Guest bathroom fan timer [timer.guest_bathroom_fan_timer] for 1200 seconds (20 minutes).", "natural_language": { "trigger": "When the Guest bathroom fan [switch.guest_bathroom_fan] is switched on.", "conditions": "There are no additional conditions that must be met.", "action": "Starts the Guest bathroom fan timer [timer.guest_bathroom_fan_timer] for a duration of 20 minutes (1200 seconds)." }, "human_like": "Starts a 20-minute timer for the guest bathroom fan whenever the fan is turned on.", "complexity": "low" } }, { "id": "deactivate_guest_bathroom_fan_timer", "result": { "structured": "TRIGGER: When Guest bathroom fan [switch.guest_bathroom_fan] turns off. CONDITIONS: None. ACTIONS: Cancel Guest bathroom fan timer [timer.guest_bathroom_fan_timer].", "natural_language": { "trigger": "When the Guest bathroom fan [switch.guest_bathroom_fan] is turned off.", "conditions": "There are no additional conditions for this automation.", "action": "Cancels the Guest bathroom fan timer [timer.guest_bathroom_fan_timer]." }, "human_like": "Stops the bathroom fan timer when the fan itself is turned off manually.", "complexity": "low" } }, { "id": "deactivate_guest_bathroom_fan_when_timer_finishes", "result": { "structured": "TRIGGER: When Guest bathroom fan timer [timer.guest_bathroom_fan_timer] finishes. ACTIONS: Turn off Guest bathroom fan [switch.guest_bathroom_fan].", "natural_language": { "trigger": "When the Guest bathroom fan timer [timer.guest_bathroom_fan_timer] finishes.", "conditions": "There are no conditions for this automation.", "action": "Turns off the Guest bathroom fan [switch.guest_bathroom_fan]." }, "human_like": "Automatically turns off the guest bathroom fan when its timer runs out.", "complexity": "low" } }, { "id": "increment_amars_roof_extraction_fan_users", "result": { "structured": "TRIGGER: When Amar bathroom fan [switch.amar_bathroom_fan] turns on OR when Guest bathroom fan [switch.guest_bathroom_fan] turns on. CONDITIONS: None. ACTIONS: Set the value of Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] to its current value plus one, but only if the current value is less than the maximum allowed value for that input_number. If the current value is already at or above the maximum, keep it unchanged.", "natural_language": { "trigger": "Whenever either the Amar bathroom fan [switch.amar_bathroom_fan] or the Guest bathroom fan [switch.guest_bathroom_fan] is turned on.", "conditions": "There are no conditions that need to be met for the action to run.", "action": "Increases the count stored in Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] by one, but only if the current count is below its defined maximum limit. If the count is already at the maximum, it remains unchanged." }, "human_like": "Keeps track of how many bathroom fans are in use by increasing a counter whenever a fan is turned on, up to a maximum limit.", "complexity": "medium" } }, { "id": "decrement_amars_roof_extraction_fan_users", "result": { "structured": "TRIGGER: When Amar bathroom fan [switch.amar_bathroom_fan] turns off OR When Guest bathroom fan [switch.guest_bathroom_fan] turns off. CONDITIONS: None. ACTIONS: Set the value of Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] to (its current integer value minus 1) only if the current integer value is greater than the entity's minimum attribute; otherwise, keep the current value.", "natural_language": { "trigger": "When either the Amar bathroom fan [switch.amar_bathroom_fan] or the Guest bathroom fan [switch.guest_bathroom_fan] is turned off.", "conditions": "There are no conditions that must be checked before performing the action.", "action": "Decreases the count stored in Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] by one, but only if the current count is above its configured minimum value. If the count is already at or below the minimum, it is left unchanged." }, "human_like": "Reduces the user count for the roof extraction fan when either bathroom fan is turned off, ensuring the count doesn't go below a minimum.", "complexity": "medium" } }, { "id": "activate_amars_roof_extraction_fan", "result": { "structured": "TRIGGER: When Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] changes state. CONDITIONS: The numeric value of Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] is greater than 0. ACTIONS: Turn on Amar roof extraction fan [switch.amar_roof_extraction_fan].", "natural_language": { "trigger": "Whenever the value of the Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] changes.", "conditions": "The number of users for the extraction fan must be greater than zero.", "action": "Turns on the Amar roof extraction fan [switch.amar_roof_extraction_fan]." }, "human_like": "Turns on Amar's roof extraction fan whenever there is at least one user counted for it.", "complexity": "low" } }, { "id": "deactivate_amars_roof_extraction_fan", "result": { "structured": "TRIGGER: When Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] changes state. CONDITIONS: The numeric value of Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] is below 1. ACTIONS: Turn off Amar roof extraction fan [switch.amar_roof_extraction_fan].", "natural_language": { "trigger": "When the value of the Amar roof extraction fan users [input_number.amar_roof_extraction_fan_users] changes.", "conditions": "The number of users for the Amar roof extraction fan [input_number.amar_roof_extraction_fan_users] is less than one.", "action": "Turns off the Amar roof extraction fan [switch.amar_roof_extraction_fan]." }, "human_like": "Turns off Amar's roof extraction fan when there are no users left.", "complexity": "low" } }, { "id": "28dd9f30-e3e5-4071-900c-3a15a30fc16f", "result": { "structured": "TRIGGER: When sunset occurs OR When sunrise occurs with an offset of +4 hours OR When Home Assistant starts OR When an automation is reloaded. CONDITIONS: (The sun is after sunset OR The sun is before sunrise with an offset of +1 hour 30 minutes) AND (The sun is after sunrise with an offset of +4 hours). ACTIONS: If the first condition block is true, close Family room shades [cover.family_room_shades]. If the second condition block is true, open Family room shades [cover.family_room_shades].", "natural_language": { "trigger": "The automation runs at sunset, at sunrise plus four hours, when Home Assistant starts, or when an automation is reloaded.", "conditions": "For the first action, it checks if the current time is after sunset or before sunrise (with a 1 hour 30 minute offset). For the second action, it checks if the current time is after sunrise plus four hours.", "action": "If it's after sunset or before sunrise (with offset), the Family room shades [cover.family_room_shades] are closed. If it's four hours after sunrise, the shades are opened." }, "human_like": "Automatically opens the family room shades four hours after sunrise and closes them at sunset or before sunrise, ensuring the room is shaded during dark hours.", "complexity": "medium" } }, { "id": "9b1748d1-7cf1-4459-bb17-2936820e333f", "result": { "structured": "TRIGGER: When Print left label button [input_button.print_left_label] is pressed. CONDITIONS: None. ACTIONS: Execute shell_command.print_left_label with data content constructed from the values of Label text first [input_text.label_text_first], Label text second [input_text.label_text_second] (if not empty), and Label text third [input_text.label_text_third] (if not empty), each on a new line, and copies set to the rounded integer value of Label copies [input_number.label_copies].", "natural_language": { "trigger": "When the Print left label button [input_button.print_left_label] is pressed.", "conditions": "There are no conditions that must be met.", "action": "Prints a label using the shell command 'print_left_label'. The label content is built from the text entered in Label text first [input_text.label_text_first], and if Label text second [input_text.label_text_second] is not empty, it adds that text on a new line, and if Label text third [input_text.label_text_third] is not empty, it adds that text on another new line. The number of copies printed is determined by the value set in Label copies [input_number.label_copies], rounded to the nearest whole number." }, "human_like": "Prints a multi-line label when the print button is pressed, using text from three input fields and a specified number of copies.", "complexity": "low" } }, { "id": "e94111fb-6aa4-463a-9ac6-5e6020ecdfe5", "result": { "structured": "TRIGGER: When Print right label button [input_button.print_right_label] is pressed. CONDITIONS: None. ACTIONS: Execute shell_command.print_right_label with content constructed from Label text first [input_text.label_text_first] and optionally Label text second [input_text.label_text_second] and Label text third [input_text.label_text_third] (each on a new line if not empty), and number of copies set to the rounded integer value of Label copies [input_number.label_copies].", "natural_language": { "trigger": "When the Print right label button [input_button.print_right_label] is pressed.", "conditions": "There are no conditions for this automation.", "action": "Prints a label using the shell command 'print_right_label'. The label's content is built from the text entered in Label text first [input_text.label_text_first], and if Label text second [input_text.label_text_second] or Label text third [input_text.label_text_third] are not empty, they are added on new lines. The number of copies printed is determined by the value set in Label copies [input_number.label_copies], rounded to the nearest whole number." }, "human_like": "Prints a custom label with up to three lines of text when the print button is pressed.", "complexity": "low" } }, { "id": "activate_master_bathroom_wc_fan_timer", "result": { "structured": "TRIGGER: When Master bathroom WC fan [switch.master_bathroom_wc_fan] is turned on. CONDITIONS: None. ACTIONS: Start Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer] for a duration of 1200 seconds.", "natural_language": { "trigger": "When the Master bathroom WC fan [switch.master_bathroom_wc_fan] is switched on.", "conditions": "There are no conditions that must be met.", "action": "Starts the Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer] for 20 minutes (1200 seconds)." }, "human_like": "Starts a 20-minute timer for the bathroom fan whenever the fan is turned on.", "complexity": "low" } }, { "id": "deactivate_master_bathroom_wc_fan_timer", "result": { "structured": "TRIGGER: When Master bathroom WC fan [switch.master_bathroom_wc_fan] turns off. CONDITIONS: None. ACTIONS: Cancel Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer].", "natural_language": { "trigger": "When the Master bathroom WC fan [switch.master_bathroom_wc_fan] is turned off.", "conditions": "There are no additional conditions that must be met.", "action": "Cancels the Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer]." }, "human_like": "Stops the bathroom fan's timer when the fan is manually turned off.", "complexity": "low" } }, { "id": "deactivate_master_bathroom_wc_fan_when_timer_finishes", "result": { "structured": "TRIGGER: When Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer] finishes. CONDITIONS: None. ACTIONS: Turn off Master bathroom WC fan [switch.master_bathroom_wc_fan].", "natural_language": { "trigger": "When the Master bathroom WC fan timer [timer.master_bathroom_wc_fan_timer] finishes.", "conditions": "There are no additional conditions.", "action": "Turns off the Master bathroom WC fan [switch.master_bathroom_wc_fan]." }, "human_like": "Automatically turns off the bathroom fan when its timer finishes.", "complexity": "low" } }, { "id": "activate_master_bathroom_shower_fan_timer", "result": { "structured": "TRIGGER: When Master bathroom shower fan [switch.master_bathroom_shower_fan] turns on. CONDITIONS: None. ACTIONS: Start Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer] with a duration of 1200 seconds.", "natural_language": { "trigger": "When the Master bathroom shower fan [switch.master_bathroom_shower_fan] is turned on.", "conditions": "There are no conditions for this automation.", "action": "Starts the Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer] for 1200 seconds (20 minutes)." }, "human_like": "Starts a 20-minute timer for the bathroom shower fan whenever the fan is turned on.", "complexity": "low" } }, { "id": "deactivate_master_bathroom_shower_fan_timer", "result": { "structured": "TRIGGER: When Master bathroom shower fan [switch.master_bathroom_shower_fan] turns off. CONDITIONS: None. ACTIONS: Cancel Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer].", "natural_language": { "trigger": "When the Master bathroom shower fan [switch.master_bathroom_shower_fan] is turned off.", "conditions": "There are no additional conditions.", "action": "Cancels the Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer]." }, "human_like": "Cancels the shower fan timer when the fan is manually turned off.", "complexity": "low" } }, { "id": "deactivate_master_bathroom_shower_fan_when_timer_finishes", "result": { "structured": "TRIGGER: When Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer] finishes. CONDITIONS: None. ACTIONS: Turn off Master bathroom shower fan [switch.master_bathroom_shower_fan].", "natural_language": { "trigger": "When the Master bathroom shower fan timer [timer.master_bathroom_shower_fan_timer] finishes.", "conditions": "There are no conditions.", "action": "Turns off the Master bathroom shower fan [switch.master_bathroom_shower_fan]." }, "human_like": "Automatically turns off the master bathroom shower fan when its timer finishes.", "complexity": "low" } }, { "id": "increment_master_bathroom_roof_extraction_fan_users", "result": { "structured": "TRIGGER: When Master bathroom WC fan [switch.master_bathroom_wc_fan] turns on OR when Master bathroom shower fan [switch.master_bathroom_shower_fan] turns on. CONDITIONS: None. ACTIONS: Set the value of Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] to its current integer value plus one, but only if the current value is less than its defined maximum; otherwise, keep the current value.", "natural_language": { "trigger": "When either the Master bathroom WC fan [switch.master_bathroom_wc_fan] or the Master bathroom shower fan [switch.master_bathroom_shower_fan] is turned on.", "conditions": "There are no conditions that must be met.", "action": "Increments the counter for Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] by one, but only if the current count is below the maximum allowed value. If the count is already at the maximum, it remains unchanged." }, "human_like": "Counts how many bathroom fans are in use by increasing a user counter when either the WC or shower fan is turned on, up to a maximum limit.", "complexity": "medium" } }, { "id": "decrement_master_bathroom_roof_extraction_fan_users", "result": { "structured": "TRIGGER: When Master bathroom WC fan [switch.master_bathroom_wc_fan] turns off OR when Master bathroom shower fan [switch.master_bathroom_shower_fan] turns off. CONDITIONS: None. ACTIONS: Set the value of Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] to its current integer value minus one, but only if the current value is greater than the minimum allowed value for that entity; otherwise, keep the current value unchanged.", "natural_language": { "trigger": "When either the Master bathroom WC fan [switch.master_bathroom_wc_fan] or the Master bathroom shower fan [switch.master_bathroom_shower_fan] is turned off.", "conditions": "There are no additional conditions that must be met.", "action": "Decreases the count of Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] by one, ensuring the count does not go below its defined minimum value. If the count is already at or below the minimum, it remains unchanged." }, "human_like": "Reduces the user count for the master bathroom extraction fan whenever a local fan (WC or shower) is turned off, preventing the count from going below zero.", "complexity": "medium" } }, { "id": "activate_master_bathroom_roof_extraction_fan", "result": { "structured": "TRIGGER: When Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] changes state. CONDITIONS: The numeric value of Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] is greater than 0. ACTIONS: Turn on Master bathroom roof extraction fan [switch.master_bathroom_roof_extraction_fan].", "natural_language": { "trigger": "Whenever the value of the Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] changes.", "conditions": "The number of users for the fan is greater than zero.", "action": "Turn on the Master bathroom roof extraction fan [switch.master_bathroom_roof_extraction_fan]." }, "human_like": "Turns on the bathroom extraction fan whenever there is at least one user counted for it.", "complexity": "low" } }, { "id": "deactivate_master_bathroom_roof_extraction_fan", "result": { "structured": "TRIGGER: When Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] changes state. CONDITIONS: The integer value of Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] is below 1. ACTIONS: Turn off Master bathroom roof extraction fan [switch.master_bathroom_roof_extraction_fan].", "natural_language": { "trigger": "Whenever the value of the Master bathroom roof extraction fan users [input_number.master_bathroom_roof_extraction_fan_users] changes.", "conditions": "The number of users for the fan, stored as an integer, must be less than one.", "action": "Turns off the Master bathroom roof extraction fan [switch.master_bathroom_roof_extraction_fan]." }, "human_like": "Turns off the bathroom extraction fan when the user count drops to zero.", "complexity": "low" } }, { "id": "eb962a09-eb64-4a54-bd9f-a8ee12e1493c", "result": { "structured": "TRIGGER: When Sun [sun.sun] sets (changes to below_horizon) OR When Sun [sun.sun] rises (changes to above_horizon) OR When Home Assistant starts OR When an automation is reloaded (automation_reloaded event). CONDITIONS: (None). ACTIONS: Choose based on conditions: IF (Sun [sun.sun] is after sunset with a 15-minute negative offset OR Sun [sun.sun] is before sunrise) THEN turn on Garage exterior lights [light.garage_exterior_lights]. ELSE IF (Sun [sun.sun] is after sunrise) THEN turn off Garage exterior lights [light.garage_exterior_lights].", "natural_language": { "trigger": "The automation triggers when the sun sets or rises, when Home Assistant starts up, or when an automation is reloaded.", "conditions": "There are no global conditions. The actions are selected based on the time of day relative to sunrise and sunset.", "action": "If it is after sunset (with a 15-minute early offset) or before sunrise, the Garage exterior lights [light.garage_exterior_lights] are turned on. If it is after sunrise, the Garage exterior lights [light.garage_exterior_lights] are turned off." }, "human_like": "Automatically turns the garage exterior lights on at dusk and off at dawn, ensuring they are in the correct state when the system starts or reloads.", "complexity": "medium" } }, { "id": "2453b77a-30be-441b-a355-74a77268b768", "result": { "structured": "TRIGGER: When Sun [sun.sun] sets (state changes to below_horizon) OR when Sun [sun.sun] rises (state changes to above_horizon) OR when Home Assistant starts OR when an automation is reloaded. CONDITIONS: None. ACTIONS: Choose based on conditions: If (Sun [sun.sun] is after sunset with a 15-minute negative offset) OR (Sun [sun.sun] is before sunrise) THEN turn on Front door exterior lights [light.front_door_exterior_lights]; ELSE IF Sun [sun.sun] is after sunrise THEN turn off Front door exterior lights [light.front_door_exterior_lights].", "natural_language": { "trigger": "The automation triggers when the sun sets or rises, when Home Assistant starts up, or when automations are reloaded.", "conditions": "There are no global conditions. The action taken depends on the time of day relative to sunrise and sunset.", "action": "If it is after sunset (starting 15 minutes before sunset) or before sunrise, the Front door exterior lights [light.front_door_exterior_lights] are turned on. If it is after sunrise, the lights are turned off." }, "human_like": "Automatically turns the front door exterior lights on at dusk and off at dawn, ensuring they are in the correct state when the system starts.", "complexity": "medium" } }, { "id": "ec2ae516-1e3d-4134-9f2a-6d67c12d7de9", "result": { "structured": "TRIGGER: When Sun [sun.sun] changes to below_horizon OR when Sun [sun.sun] changes to above_horizon OR when Home Assistant starts OR when an automation_reloaded event occurs. CONDITIONS: None (conditions are evaluated inside the choose action). ACTIONS: Choose between two sequences based on conditions. Sequence 1: IF (Sun [sun.sun] is after sunset with a 15-minute negative offset) OR (Sun [sun.sun] is before sunrise) THEN turn on Exterior lights cherry tree [light.exterior_lights_cherry_tree], Exterior lights maple tree [light.exterior_lights_maple_tree], Exterior lights driveway end [light.exterior_lights_driveway_end], Exterior lights walkway lights [light.exterior_lights_walkway_lights], Exterior lights bay window conifers [light.exterior_lights_bay_window_conifers], Exterior lights forsythia bed [light.exterior_lights_forsythia_bed], and Exterior lights back woods [light.exterior_lights_back_woods]. Sequence 2: IF Sun [sun.sun] is after sunrise THEN turn off the same set of seven exterior lights.", "natural_language": { "trigger": "The automation triggers when the sun sets or rises, when Home Assistant starts up, or when automations are reloaded.", "conditions": "There are no global conditions. The automation uses a conditional action block. It first checks if it is after sunset (with a 15-minute early start) or before sunrise. If that is true, it will turn on the lights. If that condition is false, it then checks if it is after sunrise. If that is true, it will turn off the lights.", "action": "Based on the time of day relative to sunrise and sunset, the automation either turns on or off a group of seven exterior lights, including the Exterior lights cherry tree [light.exterior_lights_cherry_tree], Exterior lights maple tree [light.exterior_lights_maple_tree], Exterior lights driveway end [light.exterior_lights_driveway_end], Exterior lights walkway lights [light.exterior_lights_walkway_lights], Exterior lights bay window conifers [light.exterior_lights_bay_window_conifers], Exterior lights forsythia bed [light.exterior_lights_forsythia_bed], and Exterior lights back woods [light.exterior_lights_back_woods]." }, "human_like": "Automatically turns the garden exterior lights on at dusk and off at dawn, ensuring they are in the correct state when the system starts.", "complexity": "medium" } }, { "id": "c1789adb-ff1e-424d-8b85-65f307bf995d", "result": { "structured": "TRIGGER: When Home Assistant starts OR When an automation is reloaded OR When Anu garage door [cover.anu_garage_door] changes from closed to open OR When Rakesh garage door [cover.rakesh_garage_door] changes from closed to open. CONDITIONS: None. ACTIONS: Choose: If Anu garage door [cover.anu_garage_door] is open OR Rakesh garage door [cover.rakesh_garage_door] is open, then turn on Garage lights [light.garage_lights], wait until both Anu garage door [cover.anu_garage_door] is closed AND Rakesh garage door [cover.rakesh_garage_door] is closed, then wait 10 minutes, then turn off Garage lights [light.garage_lights]. Otherwise, turn off Garage lights [light.garage_lights].", "natural_language": { "trigger": "The automation runs when Home Assistant starts, when an automation is reloaded, or when either the Anu garage door [cover.anu_garage_door] or the Rakesh garage door [cover.rakesh_garage_door] changes from a closed state to an open state.", "conditions": "There are no explicit conditions. The action sequence uses a conditional choice based on the current state of the garage doors.", "action": "If either the Anu garage door [cover.anu_garage_door] or the Rakesh garage door [cover.rakesh_garage_door] is open, the Garage lights [light.garage_lights] are turned on. The automation then waits until both garage doors are closed, waits an additional 10 minutes, and finally turns the lights off. If neither garage door is open when the automation is triggered, the lights are turned off immediately." }, "human_like": "Turns on the garage lights when a garage door opens, and turns them off 10 minutes after both doors are closed. It also ensures the lights are off when Home Assistant starts or automations reload.", "complexity": "medium" } }, { "id": "304cad1d-c405-4479-9177-2beb93c46cae", "result": { "structured": "TRIGGER: When Home Assistant starts OR When an automation is reloaded OR When Front door motion sensor [binary_sensor.front_door_motion_sensor] changes from off to on. CONDITIONS: None. ACTIONS: Choose: If Front door motion sensor [binary_sensor.front_door_motion_sensor] is on AND Garage entry motion sensor illuminance [sensor.garage_entry_motion_sensor_illuminance] is below 100, then turn on Front door lights [light.front_door_lights], wait until Front door motion sensor [binary_sensor.front_door_motion_sensor] is off, then wait 1 minute, then turn off Front door lights [light.front_door_lights]. Otherwise, turn off Front door lights [light.front_door_lights].", "natural_language": { "trigger": "The automation runs when Home Assistant starts up, when any automation is reloaded, or when motion is first detected at the front door, indicated by the Front door motion sensor [binary_sensor.front_door_motion_sensor] changing from no motion to motion.", "conditions": "There are no global conditions for the automation. The action logic contains a conditional check.", "action": "The automation checks if motion is currently detected at the front door and if the light level measured by the Garage entry motion sensor illuminance [sensor.garage_entry_motion_sensor_illuminance] is below 100 lux. If both are true, it turns on the Front door lights [light.front_door_lights]. It then waits for motion to stop at the front door, waits an additional minute, and finally turns the lights off. If the initial check fails (it's not dark or there is no motion), it simply turns the lights off." }, "human_like": "Turns on the front door lights when motion is detected in the dark, and turns them off a minute after motion stops. It also ensures the lights are off when the system starts or reloads.", "complexity": "medium" } }, { "id": "keymaster_turn_on_access_limit_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_number.accesscount_LOCKNAME_TEMPLATENUM changes state. CONDITIONS: (The numeric value of input_number.accesscount_LOCKNAME_TEMPLATENUM is greater than 0). ACTIONS: Turn on input_boolean.accesslimit_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the value of the input number entity input_number.accesscount_LOCKNAME_TEMPLATENUM changes.", "conditions": "The automation only proceeds if the current numeric value of input_number.accesscount_LOCKNAME_TEMPLATENUM is greater than zero.", "action": "Turns on the input boolean entity input_boolean.accesslimit_LOCKNAME_TEMPLATENUM." }, "human_like": "Activates an access limit when a usage counter is positive.", "complexity": "low" } }, { "id": "keymaster_synchronize_codeslot_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When binary_sensor.pin_synched_LOCKNAME_TEMPLATENUM changes from 'on' to 'off'. CONDITIONS: sensor.LOCKNAME_code_slot_TEMPLATENUM is not in the state 'unavailable'. ACTIONS: If binary_sensor.active_LOCKNAME_TEMPLATENUM is 'on', then call service keymaster.add_code on Lock Entity [LOCKENTITYNAME] with code_slot set to TEMPLATENUM and usercode set to the value of input_text.LOCKNAME_pin_TEMPLATENUM (stripped of whitespace). Otherwise, if binary_sensor.active_LOCKNAME_TEMPLATENUM is 'off', then call service keymaster.clear_code on Lock Entity [LOCKENTITYNAME] with code_slot set to TEMPLATENUM.", "natural_language": { "trigger": "When the binary sensor pin_synched_LOCKNAME_TEMPLATENUM [binary_sensor.pin_synched_LOCKNAME_TEMPLATENUM] changes from being on to off.", "conditions": "The sensor LOCKNAME_code_slot_TEMPLATENUM [sensor.LOCKNAME_code_slot_TEMPLATENUM] must not be in an 'unavailable' state.", "action": "If the binary sensor active_LOCKNAME_TEMPLATENUM [binary_sensor.active_LOCKNAME_TEMPLATENUM] is on, it adds a user code to the lock. The code is taken from input_text.LOCKNAME_pin_TEMPLATENUM and is added to the lock entity Lock Entity [LOCKENTITYNAME] in the specified code slot (TEMPLATENUM). If the binary sensor active_LOCKNAME_TEMPLATENUM [binary_sensor.active_LOCKNAME_TEMPLATENUM] is off, it clears the user code from the same code slot on the lock." }, "human_like": "Synchronizes a user code to a smart lock when a sync sensor indicates a change, either adding or clearing the code based on an active/inactive status.", "complexity": "medium" } }, { "id": "keymaster_turn_on_access_limit_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_number.accesscount_LOCKNAME_TEMPLATENUM changes state. CONDITIONS: The numeric value of input_number.accesscount_LOCKNAME_TEMPLATENUM is greater than 0. ACTIONS: Turn on input_boolean.accesslimit_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the value of the input number entity input_number.accesscount_LOCKNAME_TEMPLATENUM changes.", "conditions": "The condition checks if the current numeric value of input_number.accesscount_LOCKNAME_TEMPLATENUM is greater than zero.", "action": "Turns on the input boolean entity input_boolean.accesslimit_LOCKNAME_TEMPLATENUM." }, "human_like": "Enables an access limit flag when a related access count is set to a positive number.", "complexity": "low" } }, { "id": "keymaster_synchronize_codeslot_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When binary_sensor.pin_synched_LOCKNAME_TEMPLATENUM changes from on to off. CONDITIONS: sensor.LOCKNAME_code_slot_TEMPLATENUM is not in the state 'unavailable'. ACTIONS: If binary_sensor.active_LOCKNAME_TEMPLATENUM is on, then call service keymaster.add_code on Lock Entity [LOCKENTITYNAME] with code_slot set to TEMPLATENUM and usercode set to the stripped value of input_text.LOCKNAME_pin_TEMPLATENUM. Otherwise, if binary_sensor.active_LOCKNAME_TEMPLATENUM is off, then call service keymaster.clear_code on Lock Entity [LOCKENTITYNAME] with code_slot set to TEMPLATENUM.", "natural_language": { "trigger": "When the binary sensor indicating a PIN is synchronized for a specific lock and code slot changes from the 'on' state to the 'off' state.", "conditions": "The automation only runs if the sensor representing the status of the code slot for the lock is available and not reporting as 'unavailable'.", "action": "If the sensor indicating the code slot is active is on, it adds a new user code to the specified slot on the lock. If the sensor indicating the code slot is active is off, it clears the user code from that slot on the lock." }, "human_like": "Synchronizes a user PIN code with a smart lock, either adding or clearing it based on whether the slot is marked as active.", "complexity": "medium" } }, { "id": "keymaster_override_parent_LOCKNAME_TEMPLATENUM_state_change", "result": { "structured": "TRIGGER: When input_boolean.override_parent_LOCKNAME_TEMPLATENUM changes to off. CONDITIONS: None. ACTIONS: Execute script Keymaster Copy From Parent [script.keymaster_LOCKNAME_copy_from_parent_TEMPLATENUM].", "natural_language": { "trigger": "When the state of the input boolean input_boolean.override_parent_LOCKNAME_TEMPLATENUM changes to off.", "conditions": "There are no conditions for this automation.", "action": "Runs the script named Keymaster Copy From Parent [script.keymaster_LOCKNAME_copy_from_parent_TEMPLATENUM]." }, "human_like": "When the override is turned off, it triggers a script to copy settings from a parent lock.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_name_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_text.PARENTLOCK_name_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the value of input_text.LOCKNAME_name_TEMPLATENUM to the current state of input_text.PARENTLOCK_name_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the text value of input_text.PARENTLOCK_name_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch, input_boolean.override_parent_LOCKNAME_TEMPLATENUM, is turned off.", "action": "Copies the current text value from input_text.PARENTLOCK_name_TEMPLATENUM to input_text.LOCKNAME_name_TEMPLATENUM." }, "human_like": "Copies a name from a parent lock to a specific lock template, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_pin_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_text.PARENTLOCK_pin_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the value of input_text.LOCKNAME_pin_TEMPLATENUM to the current state of input_text.PARENTLOCK_pin_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the value of the input text entity input_text.PARENTLOCK_pin_TEMPLATENUM changes.", "conditions": "The automation only runs if the override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM is turned off.", "action": "Copies the current value from input_text.PARENTLOCK_pin_TEMPLATENUM to input_text.LOCKNAME_pin_TEMPLATENUM." }, "human_like": "Copies a PIN code from a parent lock slot to a child lock slot, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_enabled_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When enabled_PARENTLOCK_TEMPLATENUM [input_boolean.enabled_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: If enabled_PARENTLOCK_TEMPLATENUM [input_boolean.enabled_PARENTLOCK_TEMPLATENUM] is on, then turn on enabled_LOCKNAME_TEMPLATENUM [input_boolean.enabled_LOCKNAME_TEMPLATENUM]; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the input boolean enabled_PARENTLOCK_TEMPLATENUM [input_boolean.enabled_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The automation only runs if the override input boolean override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is currently off.", "action": "The automation copies the state from the parent input boolean to the child input boolean. If the parent is on, it turns the child on. If the parent is off, it turns the child off." }, "human_like": "This automation synchronizes the state of a child lock setting with its parent setting, unless an override is active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_notify_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_boolean.notify_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.notify_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.notify_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.notify_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "When the state of the input boolean notify_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The input boolean override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "If notify_PARENTLOCK_TEMPLATENUM is on, turn on notify_LOCKNAME_TEMPLATENUM. If notify_PARENTLOCK_TEMPLATENUM is off, turn off notify_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation synchronizes the state of one notification toggle with another, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_reset_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When reset_codeslot_PARENTLOCK_TEMPLATENUM [input_boolean.reset_codeslot_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: If reset_codeslot_PARENTLOCK_TEMPLATENUM [input_boolean.reset_codeslot_PARENTLOCK_TEMPLATENUM] is on, turn it on; otherwise, turn it off.", "natural_language": { "trigger": "When the state of the input boolean reset_codeslot_PARENTLOCK_TEMPLATENUM [input_boolean.reset_codeslot_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The automation only runs if another input boolean, override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM], is turned off.", "action": "The automation sets the state of reset_codeslot_PARENTLOCK_TEMPLATENUM [input_boolean.reset_codeslot_PARENTLOCK_TEMPLATENUM] to match its own current state. If it is on, it turns it on; if it is off, it turns it off." }, "human_like": "This automation resets a lock code slot, but only when a specific override is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_accesslimit_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_boolean.accesslimit_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.accesslimit_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.accesslimit_LOCKNAME_TEMPLATENUM, otherwise turn off input_boolean.accesslimit_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the input boolean 'accesslimit_PARENTLOCK_TEMPLATENUM' changes.", "conditions": "The input boolean 'override_parent_LOCKNAME_TEMPLATENUM' must be off.", "action": "If the 'accesslimit_PARENTLOCK_TEMPLATENUM' is on, turn on the 'accesslimit_LOCKNAME_TEMPLATENUM'. If it is off, turn off the 'accesslimit_LOCKNAME_TEMPLATENUM'." }, "human_like": "Copies the state of a parent access limit toggle to a specific lock's access limit, unless an override is active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_accesscount_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_number.accesscount_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the value of input_number.accesscount_LOCKNAME_TEMPLATENUM to the integer value of input_number.accesscount_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the value of the input number entity input_number.accesscount_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch input_boolean.override_parent_LOCKNAME_TEMPLATENUM is turned off.", "action": "Copies the current integer value from input_number.accesscount_PARENTLOCK_TEMPLATENUM to the target entity input_number.accesscount_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies an access count from a parent lock to a specific lock, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_daterange_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When daterange_PARENTLOCK_TEMPLATENUM [input_boolean.daterange_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: If daterange_PARENTLOCK_TEMPLATENUM [input_boolean.daterange_PARENTLOCK_TEMPLATENUM] is on, then turn on daterange_LOCKNAME_TEMPLATENUM [input_boolean.daterange_LOCKNAME_TEMPLATENUM]; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the input boolean daterange_PARENTLOCK_TEMPLATENUM [input_boolean.daterange_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The automation only runs if the override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off.", "action": "Copies the state from daterange_PARENTLOCK_TEMPLATENUM [input_boolean.daterange_PARENTLOCK_TEMPLATENUM] to daterange_LOCKNAME_TEMPLATENUM [input_boolean.daterange_LOCKNAME_TEMPLATENUM]. If the parent is on, the child is turned on; if the parent is off, the child is turned off." }, "human_like": "This automation copies the state of a parent date-range switch to a child switch, but only when an override is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.start_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the datetime of input_datetime.start_date_LOCKNAME_TEMPLATENUM to the state value of input_datetime.start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "When the date/time entity input_datetime.start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override toggle override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] must be off.", "action": "Copies the date and time from input_datetime.start_date_PARENTLOCK_TEMPLATENUM to input_datetime.start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a start date from a parent lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.end_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the date and time of input_datetime.end_date_LOCKNAME_TEMPLATENUM to match the state of input_datetime.end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date and time value of input_datetime.end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch, input_boolean.override_parent_LOCKNAME_TEMPLATENUM, is turned off.", "action": "Copies the date and time value from input_datetime.end_date_PARENTLOCK_TEMPLATENUM to input_datetime.end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies an end date from a parent lock's schedule to a specific lock's schedule, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sun_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_boolean.sun_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: If sun_PARENTLOCK_TEMPLATENUM [input_boolean.sun_PARENTLOCK_TEMPLATENUM] is on, turn on sun_LOCKNAME_TEMPLATENUM [input_boolean.sun_LOCKNAME_TEMPLATENUM]; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the entity sun_PARENTLOCK_TEMPLATENUM [input_boolean.sun_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The automation only runs if the override control, override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM], is turned off.", "action": "The automation copies the state of sun_PARENTLOCK_TEMPLATENUM [input_boolean.sun_PARENTLOCK_TEMPLATENUM] to another entity, sun_LOCKNAME_TEMPLATENUM [input_boolean.sun_LOCKNAME_TEMPLATENUM]. If the source is on, the target is turned on; if the source is off, the target is turned off." }, "human_like": "This automation copies the state of one control switch to another, but only when a specific override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sun_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.sun_inc_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.sun_inc_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.sun_inc_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.sun_inc_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.sun_inc_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The condition is that the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "The action copies the state from input_boolean.sun_inc_PARENTLOCK_TEMPLATENUM to input_boolean.sun_inc_LOCKNAME_TEMPLATENUM. If the parent entity is on, the target entity is turned on; if it is off, the target entity is turned off." }, "human_like": "This automation copies the state of a parent 'sun inc' input boolean to a specific lock's 'sun inc' input boolean, but only when an override for that lock is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_sun_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the time of input_datetime.sun_start_date_LOCKNAME_TEMPLATENUM [input_datetime.sun_start_date_LOCKNAME_TEMPLATENUM] to the current state value of input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM].", "natural_language": { "trigger": "When the date/time input input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM] is updated.", "conditions": "The override switch input_boolean.override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] must be turned off.", "action": "Copy the date/time value from input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.sun_start_date_PARENTLOCK_TEMPLATENUM] to the target input_datetime.sun_start_date_LOCKNAME_TEMPLATENUM [input_datetime.sun_start_date_LOCKNAME_TEMPLATENUM]." }, "human_like": "Copies a parent lock's start date setting to a specific lock, but only when the override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sun_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.sun_end_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the date/time of input_datetime.sun_end_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.sun_end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time value of input_datetime.sun_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override control override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] must be turned off.", "action": "Copy the date/time value from input_datetime.sun_end_date_PARENTLOCK_TEMPLATENUM to input_datetime.sun_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a sunset end date from a parent lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_mon_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.mon_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.mon_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.mon_LOCKNAME_TEMPLATENUM. If input_boolean.mon_PARENTLOCK_TEMPLATENUM is off, then turn off input_boolean.mon_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.mon_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The condition is that the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "Depending on the new state of the triggering entity, the automation will either turn on or turn off the entity input_boolean.mon_LOCKNAME_TEMPLATENUM. If the trigger entity is on, it turns on the target entity. If the trigger entity is off, it turns off the target entity." }, "human_like": "This automation copies the state of one lock monitoring switch to another, but only when a specific override is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_mon_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.mon_inc_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.mon_inc_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.mon_inc_LOCKNAME_TEMPLATENUM. Otherwise, turn off input_boolean.mon_inc_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.mon_inc_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The condition is that the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "The automation checks the new state of the triggering entity. If input_boolean.mon_inc_PARENTLOCK_TEMPLATENUM is on, it turns on input_boolean.mon_inc_LOCKNAME_TEMPLATENUM. If it is off, it turns off input_boolean.mon_inc_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation synchronizes the state of a child lock's monitoring flag with a parent lock's flag, unless an override is active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_mon_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the time of input_datetime.mon_start_date_LOCKNAME_TEMPLATENUM [input_datetime.mon_start_date_LOCKNAME_TEMPLATENUM] to the current state of input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM [input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM].", "natural_language": { "trigger": "Whenever the value of the date/time input entity input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch input_boolean.override_parent_LOCKNAME_TEMPLATENUM is turned off.", "action": "Copies the date/time value from input_datetime.mon_start_date_PARENTLOCK_TEMPLATENUM to another date/time entity, input_datetime.mon_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies a scheduled start date from a parent lock to a specific lock, but only when the override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_mon_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_datetime.mon_end_date_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the date and time of input_datetime.mon_end_date_LOCKNAME_TEMPLATENUM to match the current state (time value) of input_datetime.mon_end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date or time of the parent lock's Monday end date [input_datetime.mon_end_date_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The override setting for this specific lock and template [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] must be turned off.", "action": "Copy the time value from the parent lock's Monday end date [input_datetime.mon_end_date_PARENTLOCK_TEMPLATENUM] to the corresponding Monday end date for the specific lock [input_datetime.mon_end_date_LOCKNAME_TEMPLATENUM]." }, "human_like": "Copies a scheduled end time from a master lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_tue_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.tue_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.tue_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.tue_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.tue_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "When the state of the entity input_boolean.tue_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "If input_boolean.tue_PARENTLOCK_TEMPLATENUM is on, the automation turns on input_boolean.tue_LOCKNAME_TEMPLATENUM. If it is off, the automation turns off input_boolean.tue_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies the state of one input boolean to another, but only when an override is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_tue_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When tue_inc_PARENTLOCK_TEMPLATENUM [input_boolean.tue_inc_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: If tue_inc_PARENTLOCK_TEMPLATENUM [input_boolean.tue_inc_PARENTLOCK_TEMPLATENUM] is on, then turn on tue_inc_LOCKNAME_TEMPLATENUM [input_boolean.tue_inc_LOCKNAME_TEMPLATENUM]; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the input boolean tue_inc_PARENTLOCK_TEMPLATENUM [input_boolean.tue_inc_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The automation only runs if the override switch override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is turned off.", "action": "Copies the state from the parent input boolean to the target input boolean. If the parent is on, it turns on tue_inc_LOCKNAME_TEMPLATENUM [input_boolean.tue_inc_LOCKNAME_TEMPLATENUM]; if the parent is off, it turns it off." }, "human_like": "Copies the state of a parent schedule switch to a specific lock's schedule switch, unless an override is active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_tue_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.tue_start_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.tue_start_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.tue_start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time value of input_datetime.tue_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM is turned off.", "action": "Copies the time value from input_datetime.tue_start_date_PARENTLOCK_TEMPLATENUM to another date/time input called input_datetime.tue_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies a scheduled start time from a parent lock to a specific lock, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_tue_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM [input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the time of input_datetime.tue_end_date_LOCKNAME_TEMPLATENUM [input_datetime.tue_end_date_LOCKNAME_TEMPLATENUM] to the current state value of input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM [input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM].", "natural_language": { "trigger": "When the date or time value of input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] must be turned off.", "action": "Copies the current time value from input_datetime.tue_end_date_PARENTLOCK_TEMPLATENUM to input_datetime.tue_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a parent lock's Tuesday end date to a specific lock when no override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_wed_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.wed_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.wed_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.wed_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.wed_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.wed_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "If input_boolean.wed_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.wed_LOCKNAME_TEMPLATENUM. If it is off, turn off input_boolean.wed_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies the state of a parent lock schedule to a specific lock's schedule, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_wed_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_boolean.wed_inc_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.wed_inc_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.wed_inc_LOCKNAME_TEMPLATENUM; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the input boolean wed_inc_PARENTLOCK_TEMPLATENUM [input_boolean.wed_inc_PARENTLOCK_TEMPLATENUM] changes.", "conditions": "The override boolean for this specific lock and template, override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM], must be off.", "action": "The automation copies the state of the parent boolean to the child boolean. If the parent boolean is on, it turns on the child boolean wed_inc_LOCKNAME_TEMPLATENUM [input_boolean.wed_inc_LOCKNAME_TEMPLATENUM]. If the parent boolean is off, it turns off the child boolean." }, "human_like": "This automation synchronizes a child lock's 'Wednesday included' setting with its parent setting, unless an override is active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_wed_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.wed_start_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.wed_start_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.wed_start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the value of the input_datetime.wed_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override switch, input_boolean.override_parent_LOCKNAME_TEMPLATENUM, must be turned off.", "action": "Copy the time value from input_datetime.wed_start_date_PARENTLOCK_TEMPLATENUM to another input_datetime entity named input_datetime.wed_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a scheduled start time from a parent lock to a specific lock, but only when the override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_wed_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.wed_end_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.wed_end_date_LOCKNAME_TEMPLATENUM to match the current state of input_datetime.wed_end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time value of input_datetime.wed_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch, input_boolean.override_parent_LOCKNAME_TEMPLATENUM, is turned off.", "action": "It copies the date/time value from input_datetime.wed_end_date_PARENTLOCK_TEMPLATENUM and sets the same value on input_datetime.wed_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a scheduled end date from a parent lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_thu_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.thu_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.thu_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.thu_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.thu_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.thu_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM is currently off.", "action": "The automation copies the state from input_boolean.thu_PARENTLOCK_TEMPLATENUM to input_boolean.thu_LOCKNAME_TEMPLATENUM. If the parent boolean is on, it turns the target on; if it's off, it turns the target off." }, "human_like": "This automation copies the state of one switch to another, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_thu_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.thu_inc_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.thu_inc_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.thu_inc_LOCKNAME_TEMPLATENUM; otherwise, turn it off.", "natural_language": { "trigger": "Whenever the state of the input boolean named 'thu_inc_PARENTLOCK_TEMPLATENUM' changes.", "conditions": "The automation only runs if another input boolean, 'override_parent_LOCKNAME_TEMPLATENUM', is currently turned off.", "action": "The automation copies the state of 'thu_inc_PARENTLOCK_TEMPLATENUM' to 'thu_inc_LOCKNAME_TEMPLATENUM'. If the source is on, the target is turned on. If the source is off, the target is turned off." }, "human_like": "This automation copies the state of one switch to another, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_thu_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.thu_start_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.thu_start_date_LOCKNAME_TEMPLATENUM to match the current state value of input_datetime.thu_start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time value of input_datetime.thu_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM is turned off.", "action": "Copies the date/time value from input_datetime.thu_start_date_PARENTLOCK_TEMPLATENUM to another date/time input called input_datetime.thu_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies a scheduled start time from a parent lock to a specific lock, but only when the override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_thu_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.thu_end_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the time of input_datetime.thu_end_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.thu_end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time entity input_datetime.thu_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override control override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is turned off.", "action": "Copies the time value from the parent entity input_datetime.thu_end_date_PARENTLOCK_TEMPLATENUM to the target entity input_datetime.thu_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a scheduled end date/time from a parent lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_fri_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.fri_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.fri_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.fri_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.fri_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.fri_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM is currently off.", "action": "Depending on the new state of the triggering entity, it either turns on or off the entity input_boolean.fri_LOCKNAME_TEMPLATENUM. If the trigger entity is on, it turns the target entity on; if it's off, it turns the target entity off." }, "human_like": "This automation copies the on/off state from one control switch to another, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_fri_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_boolean.fri_inc_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.fri_inc_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.fri_inc_LOCKNAME_TEMPLATENUM. If input_boolean.fri_inc_PARENTLOCK_TEMPLATENUM is off, turn off input_boolean.fri_inc_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the input boolean 'fri_inc_PARENTLOCK_TEMPLATENUM' changes.", "conditions": "The automation only runs if the override switch 'override_parent_LOCKNAME_TEMPLATENUM' is turned off.", "action": "It copies the state of the parent input boolean to the child input boolean. If the parent is on, it turns the child on. If the parent is off, it turns the child off." }, "human_like": "This automation copies the state of a parent switch to a child switch, but only when an override is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_fri_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.fri_start_date_PARENTLOCK_TEMPLATENUM changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.fri_start_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.fri_start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "When the date/time entity input_datetime.fri_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override switch input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "Copy the time value from input_datetime.fri_start_date_PARENTLOCK_TEMPLATENUM to input_datetime.fri_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a parent lock's Friday start time to a specific lock when the override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_fri_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_datetime.fri_end_date_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the time of input_datetime.fri_end_date_LOCKNAME_TEMPLATENUM to the current state value of input_datetime.fri_end_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date/time value of input_datetime.fri_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be turned off.", "action": "Copy the date/time value from input_datetime.fri_end_date_PARENTLOCK_TEMPLATENUM to input_datetime.fri_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies a scheduled end date/time from a parent lock to a specific lock, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sat_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.sat_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.sat_PARENTLOCK_TEMPLATENUM is on, turn on input_boolean.sat_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.sat_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the entity input_boolean.sat_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the entity input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off.", "action": "The automation copies the state from input_boolean.sat_PARENTLOCK_TEMPLATENUM to input_boolean.sat_LOCKNAME_TEMPLATENUM. If the parent entity is on, it turns the target entity on. If the parent entity is off, it turns the target entity off." }, "human_like": "This automation copies the on/off state from one control switch to another, but only when an override is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sat_inc_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_boolean.sat_inc_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: If input_boolean.sat_inc_PARENTLOCK_TEMPLATENUM is on, then turn on input_boolean.sat_inc_LOCKNAME_TEMPLATENUM; otherwise, turn off input_boolean.sat_inc_LOCKNAME_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the state of the input boolean sat_inc_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "The automation copies the state from sat_inc_PARENTLOCK_TEMPLATENUM to sat_inc_LOCKNAME_TEMPLATENUM. If the parent boolean is on, it turns the target on; if it's off, it turns the target off." }, "human_like": "This automation copies the state of one input boolean to another, but only when an override switch is not active.", "complexity": "medium" } }, { "id": "keymaster_copy_PARENTLOCK_sat_start_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When the state of input_datetime.sat_start_date_PARENTLOCK_TEMPLATENUM changes. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM is off. ACTIONS: Set the date and time of input_datetime.sat_start_date_LOCKNAME_TEMPLATENUM to match the current state of input_datetime.sat_start_date_PARENTLOCK_TEMPLATENUM.", "natural_language": { "trigger": "Whenever the date and time value of input_datetime.sat_start_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The automation only runs if the override switch, input_boolean.override_parent_LOCKNAME_TEMPLATENUM, is turned off.", "action": "Copies the date and time value from input_datetime.sat_start_date_PARENTLOCK_TEMPLATENUM to another date/time input called input_datetime.sat_start_date_LOCKNAME_TEMPLATENUM." }, "human_like": "This automation copies a scheduled start date from a parent lock to a specific lock, but only when the override for that lock is not active.", "complexity": "low" } }, { "id": "keymaster_copy_PARENTLOCK_sat_end_date_LOCKNAME_TEMPLATENUM", "result": { "structured": "TRIGGER: When input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM [input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM] changes state. CONDITIONS: input_boolean.override_parent_LOCKNAME_TEMPLATENUM [input_boolean.override_parent_LOCKNAME_TEMPLATENUM] is off. ACTIONS: Set the time of input_datetime.sat_end_date_LOCKNAME_TEMPLATENUM [input_datetime.sat_end_date_LOCKNAME_TEMPLATENUM] to the current state value of input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM [input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM].", "natural_language": { "trigger": "When the date or time value of input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM changes.", "conditions": "The override control input_boolean.override_parent_LOCKNAME_TEMPLATENUM must be off.", "action": "Copy the date/time value from input_datetime.sat_end_date_PARENTLOCK_TEMPLATENUM to input_datetime.sat_end_date_LOCKNAME_TEMPLATENUM." }, "human_like": "Copies a scheduled end date from a parent lock to a specific lock, unless an override is active.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Reset Code Slot", "result": { "structured": "TRIGGER: When Input Reset Code Slot Header [INPUT_RESET_CODE_SLOT_HEADER] turns on. CONDITIONS: None. ACTIONS: Execute script Keymaster Reset Codeslot [script.keymaster_LOCKNAME_reset_codeslot] with data template code_slot set to the last part of the triggering entity_id after splitting by underscore.", "natural_language": { "trigger": "When the Input Reset Code Slot Header [INPUT_RESET_CODE_SLOT_HEADER] changes its state to on.", "conditions": "There are no additional conditions that need to be met.", "action": "Runs the Keymaster Reset Codeslot [script.keymaster_LOCKNAME_reset_codeslot] script, passing the last segment of the triggering entity's ID as the code slot parameter." }, "human_like": "Resets a specific code slot on a lock when the corresponding reset input is activated.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Lock Notifications", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs for lock named LOCKNAME. CONDITIONS: input_boolean.LOCKNAME_lock_notifications is on. ACTIONS: Execute script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] with data: title set to CASE_LOCK_NAME and message set to the event's action_text, optionally appended with the code_slot_name in parentheses if code_slot is greater than 0.", "natural_language": { "trigger": "When the Home Assistant system receives a specific event indicating a state change for the smart lock named LOCKNAME.", "conditions": "The automation only runs if the notification switch for this lock, input_boolean.LOCKNAME_lock_notifications, is turned on.", "action": "Sends a notification by running the script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify]. The notification includes a title based on the lock's name and a message describing the lock action, which may also include the name of the user code slot if one was used." }, "human_like": "Sends a notification for lock events when the notification feature is enabled for that specific lock.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME User Notifications", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs for lock LOCKNAME. CONDITIONS: (The event's code_slot is greater than 0) AND (The input_boolean entity for notifications for this specific code slot (input_boolean.notify_LOCKNAME_) is on) AND (The master notification switch input_boolean.LOCKNAME_lock_notifications is off). ACTIONS: Execute the script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] with a title of CASE_LOCK_NAME and a message containing the event's action_text and code_slot_name.", "natural_language": { "trigger": "When the smart lock named LOCKNAME reports a change in its state via a keymaster_lock_state_changed event.", "conditions": "If the event data includes a valid user code slot number, if the specific notification switch for that user code is turned on, and if the main notification switch for the lock is turned off.", "action": "Sends a manual notification using the Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] script, with a title based on the lock's case name and a message detailing the lock action and the user's name." }, "human_like": "Sends a notification to a specific user when their smart lock is used, but only if they have personal notifications enabled and the main lock notifications are off.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Door Open and Close", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes state. CONDITIONS: (input_boolean.LOCKNAME_dooraccess_notifications is on) AND (trigger.from_state.state is on OR off AND trigger.to_state.state is on OR off). ACTIONS: Run script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] with data: title set to CASE_LOCK_NAME and message set to 'Door Opened' if the new state is on, otherwise 'Door Closed'.", "natural_language": { "trigger": "Whenever the state of the Door Sensor [DOORSENSORENTITYNAME] changes.", "conditions": "The automation only proceeds if the notification control input_boolean.LOCKNAME_dooraccess_notifications is turned on, and the state change is a valid transition between the 'on' and 'off' states (i.e., the sensor was either on or off and changed to either on or off).", "action": "Executes the Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] script, sending a notification with a title of CASE_LOCK_NAME and a message stating whether the door was opened or closed based on the new sensor state." }, "human_like": "Sends a notification when the door is opened or closed, but only if door access notifications are enabled.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Changed Code", "result": { "structured": "TRIGGER: When Input Lock Pin Header [INPUTLOCKPINHEADER] changes state. CONDITIONS: (input_boolean.enabled_LOCKNAME_X [input_boolean.enabled_LOCKNAME_X] is on) AND (the state of Input Lock Pin Header [INPUTLOCKPINHEADER] changed from its previous value). ACTIONS: Create a persistent notification titled 'CASE_LOCK_NAME LOCK MANAGER' with the message 'You changed the PIN for CASE_LOCK_NAME code slot X. Please enable it in order to make it active.' AND Turn off input_boolean.enabled_LOCKNAME_X [input_boolean.enabled_LOCKNAME_X].", "natural_language": { "trigger": "When the Input Lock Pin Header [INPUTLOCKPINHEADER] changes its state.", "conditions": "If the corresponding input boolean for the code slot (input_boolean.enabled_LOCKNAME_X [input_boolean.enabled_LOCKNAME_X]) is turned on, and the state of the Input Lock Pin Header [INPUTLOCKPINHEADER] is different from its previous state.", "action": "Sends a notification titled 'CASE_LOCK_NAME LOCK MANAGER' informing the user that the PIN for a specific code slot has been changed and needs to be enabled, and then turns off the corresponding input boolean for that slot." }, "human_like": "Notifies the user when a lock PIN is changed and disables the corresponding code slot until it is re-enabled.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Reset", "result": { "structured": "TRIGGER: When input_boolean.LOCKNAME_reset_lock changes from off to on. CONDITIONS: None. ACTIONS: Execute script.keymaster_LOCKNAME_reset_lock [script.keymaster_LOCKNAME_reset_lock] AND turn off input_boolean.LOCKNAME_reset_lock.", "natural_language": { "trigger": "When the input boolean LOCKNAME_reset_lock changes from off to on.", "conditions": "There are no conditions for this automation.", "action": "Runs the Keymaster Reset Lock script [script.keymaster_LOCKNAME_reset_lock] and then turns the input boolean LOCKNAME_reset_lock back off." }, "human_like": "Resets the keymaster lock by running a script when a reset switch is turned on, and automatically turns the switch off afterwards.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Decrement Access Count", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs for lock LOCKNAME. CONDITIONS: (The input boolean entity for the slot (input_boolean.accesslimit_LOCKNAME_) is on) AND (The event's code_slot is greater than 0 AND (the event's action_code is undefined OR the action_code is 6 OR the action_code is 19)). ACTIONS: Decrement the input number entity for the slot (input_number.accesscount_LOCKNAME_).", "natural_language": { "trigger": "When the lock named LOCKNAME reports a state change via the keymaster_lock_state_changed event.", "conditions": "If the access limit for the specific code slot is enabled (the corresponding input boolean is on), and the code slot number is greater than zero, and the lock action that triggered the event is either undefined or corresponds to a specific unlock action (code 6 or 19).", "action": "Decreases the remaining access count for that specific code slot by one." }, "human_like": "Reduces the usage count for a specific lock code when the lock is used, provided the code has a usage limit enabled.", "complexity": "medium" } }, { "id": "keymaster_LOCKNAME_locked", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to locked. CONDITIONS: None. ACTIONS: Cancel timer.keymaster_LOCKNAME_autolock [timer.keymaster_LOCKNAME_autolock].", "natural_language": { "trigger": "When the Lock Entity [LOCKENTITYNAME] becomes locked.", "conditions": "There are no conditions for this automation.", "action": "Cancels the timer named keymaster_LOCKNAME_autolock [timer.keymaster_LOCKNAME_autolock]." }, "human_like": "Cancels the auto-lock timer when the door is manually locked.", "complexity": "low" } }, { "id": "keymaster_turn_off_retry_LOCKNAME", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to locked. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the Lock Entity [LOCKENTITYNAME] becomes locked.", "conditions": "There are no conditions for this automation.", "action": "Turns off the input boolean named input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Turns off a retry indicator when the lock is successfully locked.", "complexity": "low" } }, { "id": "keymaster_retry_bolt_closed_LOCKNAME", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes to closed (off). CONDITIONS: (keymaster_LOCKNAME_retry [input_boolean.keymaster_LOCKNAME_retry] is on) AND (keymaster_LOCKNAME_autolock [input_boolean.keymaster_LOCKNAME_autolock] is on). ACTIONS: Create a persistent notification with title 'LOCKNAME is closed' and message 'The LOCKNAME sensor indicates the door has been closed, re-attempting to lock.', then lock the lock.boltchecked_LOCKNAME [lock.boltchecked_LOCKNAME].", "natural_language": { "trigger": "When the Door Sensor [DOORSENSORENTITYNAME] reports that the door has closed.", "conditions": "Both the keymaster_LOCKNAME_retry [input_boolean.keymaster_LOCKNAME_retry] and keymaster_LOCKNAME_autolock [input_boolean.keymaster_LOCKNAME_autolock] must be turned on.", "action": "Sends a notification stating that the door is closed and a re-lock is being attempted, then commands the lock lock.boltchecked_LOCKNAME [lock.boltchecked_LOCKNAME] to lock." }, "human_like": "Automatically re-locks the door when it closes, provided auto-lock and retry features are enabled.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_opened", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes to open (on). CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Start timer.keymaster_LOCKNAME_autolock with a duration determined by a template: if the next dusk occurs after the next dawn (i.e., it is currently daytime), use the value from input_text.keymaster_LOCKNAME_autolock_door_time_day; otherwise (i.e., it is currently nighttime), use the value from input_text.keymaster_LOCKNAME_autolock_door_time_night.", "natural_language": { "trigger": "When the Door Sensor [DOORSENSORENTITYNAME] detects that the door has been opened.", "conditions": "The automation only runs if the autolock feature for this lock is enabled, meaning the input_boolean.keymaster_LOCKNAME_autolock is in the 'on' state.", "action": "Starts a countdown timer named timer.keymaster_LOCKNAME_autolock. The length of this timer depends on the time of day: if it is currently daytime, it uses the duration stored in input_text.keymaster_LOCKNAME_autolock_door_time_day; if it is currently nighttime, it uses the duration stored in input_text.keymaster_LOCKNAME_autolock_door_time_night." }, "human_like": "Starts a smart autolock timer when a door is opened, using different delay times for day and night.", "complexity": "medium" } }, { "id": "keymaster_LOCKNAME_unlocked_start_autolock", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to unlocked. CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Turn on script Turn On Script [script.turn_on] AND turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the Lock Entity [LOCKENTITYNAME] becomes unlocked.", "conditions": "If the autolock feature for this lock, controlled by the input boolean input_boolean.keymaster_LOCKNAME_autolock, is enabled (set to 'on').", "action": "Starts the autolock timer by activating the script Turn On Script [script.turn_on] and resets any retry state by turning off the input boolean input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Starts the automatic relock timer when the door is unlocked, provided the autolock feature is enabled.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_timer_finished", "result": { "structured": "TRIGGER: When timer.keymaster_LOCKNAME_autolock finishes. CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Lock lock.boltchecked_LOCKNAME.", "natural_language": { "trigger": "When the timer named 'timer.keymaster_LOCKNAME_autolock' finishes.", "conditions": "If the autolock feature for this lock is enabled, indicated by the input_boolean 'input_boolean.keymaster_LOCKNAME_autolock' being in the 'on' state.", "action": "Locks the door by activating the lock entity 'lock.boltchecked_LOCKNAME'." }, "human_like": "Automatically locks the door when a timer expires, provided the auto-lock feature is turned on.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_timer_canceled", "result": { "structured": "TRIGGER: When timer.keymaster_LOCKNAME_autolock is cancelled. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the timer named keymaster_LOCKNAME_autolock is cancelled.", "conditions": "There are no conditions.", "action": "Turns off the input boolean named keymaster_LOCKNAME_retry." }, "human_like": "Cancels the retry process for a lock when its autolock timer is stopped.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_disable_auto_lock", "result": { "structured": "TRIGGER: When input_boolean.keymaster_LOCKNAME_autolock changes to off. CONDITIONS: None. ACTIONS: Cancel timer.keymaster_LOCKNAME_autolock AND Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the input_boolean.keymaster_LOCKNAME_autolock is turned off.", "conditions": "There are no additional conditions that must be met.", "action": "Cancels the timer named timer.keymaster_LOCKNAME_autolock and turns off the input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Disables the auto-lock feature for a lock, stopping its timer and resetting the retry state.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_enable_auto_lock", "result": { "structured": "TRIGGER: When input_boolean.keymaster_LOCKNAME_autolock changes to 'on'. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry AND Cancel timer(s) timer.keymaster_LOCKNAME_autolock AND Start script script.keymaster_LOCKNAME_start_timer.", "natural_language": { "trigger": "When the autolock input boolean [input_boolean.keymaster_LOCKNAME_autolock] is turned on.", "conditions": "There are no conditions that must be checked.", "action": "It turns off the retry input boolean [input_boolean.keymaster_LOCKNAME_retry], cancels the autolock timer [timer.keymaster_LOCKNAME_autolock], and starts the timer start script [script.keymaster_LOCKNAME_start_timer]." }, "human_like": "Enables the auto-lock feature for a lock, resetting related timers and starting the locking countdown.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_initialize", "result": { "structured": "TRIGGER: When Home Assistant starts. CONDITIONS: None. ACTIONS: Set input_text.keymaster_LOCKNAME_autolock_door_time_day to '02:00:00' if its current state is empty or unknown, otherwise keep its current value. Set input_text.keymaster_LOCKNAME_autolock_door_time_night to '00:05:00' if its current state is empty or unknown, otherwise keep its current value.", "natural_language": { "trigger": "When Home Assistant starts up.", "conditions": "There are no conditions for this automation.", "action": "Sets the default autolock time for daytime to 02:00:00 and for nighttime to 00:05:00, but only if the corresponding input text fields are currently empty or in an unknown state. If they already have a value, it leaves them unchanged." }, "human_like": "Initializes default autolock times for a lock when Home Assistant starts, ensuring the settings have a valid starting value.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Reset Code Slot", "result": { "structured": "TRIGGER: When Input Reset Code Slot Header [INPUT_RESET_CODE_SLOT_HEADER] turns on. CONDITIONS: None. ACTIONS: Run script Keymaster Reset Codeslot [script.keymaster_LOCKNAME_reset_codeslot] with data 'code_slot' set to the last part of the triggering entity ID after splitting by underscore.", "natural_language": { "trigger": "When the Input Reset Code Slot Header [INPUT_RESET_CODE_SLOT_HEADER] is turned on.", "conditions": "There are no conditions that must be met.", "action": "Executes the script Keymaster Reset Codeslot [script.keymaster_LOCKNAME_reset_codeslot], passing the last segment of the triggering entity's ID (after splitting by underscores) as the code slot parameter." }, "human_like": "Resets a specific code slot on a lock when the corresponding reset control is activated.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Lock Notifications", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs with event_data.lockname equal to LOCKNAME. CONDITIONS: input_boolean.LOCKNAME_lock_notifications is on. ACTIONS: Execute script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] with data_template: title = CASE_LOCK_NAME, message = trigger.event.data.action_text (and if trigger.event.data.code_slot > 0, append (trigger.event.data.code_slot_name)).", "natural_language": { "trigger": "When the keymaster integration reports a lock state change for the lock named LOCKNAME.", "conditions": "The notification feature for this lock, controlled by input_boolean.LOCKNAME_lock_notifications, must be turned on.", "action": "Sends a manual notification using the script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify]. The notification title is set to CASE_LOCK_NAME, and the message includes the action text from the event. If the event involved a specific user code slot, the name of that slot is also included in the message." }, "human_like": "Sends a notification when the smart lock's state changes, but only if notifications for that lock are enabled.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME User Notifications", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs for lock LOCKNAME. CONDITIONS: (The event's code_slot is greater than 0) AND (The input_boolean for notifications for the specific code slot (input_boolean.notify_LOCKNAME_) is on) AND (LOCKNAME lock notifications [input_boolean.LOCKNAME_lock_notifications] is off). ACTIONS: Execute the Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] script with a title of CASE_LOCK_NAME and a message containing the event's action_text and code_slot_name.", "natural_language": { "trigger": "When the lock named LOCKNAME reports a state change event.", "conditions": "If the event includes a valid user code slot number, if the specific notification setting for that user code slot is enabled, and if the main lock notification switch for LOCKNAME is turned off.", "action": "Sends a manual notification using the Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] script, with the lock's display name and the event details as the message." }, "human_like": "Sends a user-specific notification when a lock is used, but only if the main lock notifications are disabled.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Door Open and Close", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes state. CONDITIONS: input_boolean.LOCKNAME_dooraccess_notifications [input_boolean.LOCKNAME_dooraccess_notifications] is on AND (trigger.from_state.state is on OR off) AND (trigger.to_state.state is on OR off). ACTIONS: Execute script Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] with data: title = CASE_LOCK_NAME, message = 'Door Opened' if trigger.to_state.state is on, else 'Door Closed'.", "natural_language": { "trigger": "Whenever the Door Sensor [DOORSENSORENTITYNAME] changes its state.", "conditions": "The notification feature must be enabled, meaning the input_boolean.LOCKNAME_dooraccess_notifications [input_boolean.LOCKNAME_dooraccess_notifications] is turned on. Additionally, the state change must be a valid transition between the 'on' and 'off' states, ensuring the sensor is reporting a door open or closed event.", "action": "Sends a notification by running the Keymaster Manual Notify [script.keymaster_LOCKNAME_manual_notify] script. The notification's title is set to CASE_LOCK_NAME, and the message indicates whether the door was opened or closed based on the new sensor state." }, "human_like": "Sends a notification when the door is opened or closed, but only if door access notifications are enabled.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Changed Code", "result": { "structured": "TRIGGER: When Input Lock Pin Header [INPUTLOCKPINHEADER] changes state. CONDITIONS: (input_boolean.enabled_LOCKNAME_X [input_boolean.enabled_LOCKNAME_X] is on) AND (the previous state of Input Lock Pin Header [INPUTLOCKPINHEADER] is different from its new state). ACTIONS: Create a persistent notification with title 'CASE_LOCK_NAME LOCK MANAGER' and message 'You changed the PIN for CASE_LOCK_NAME code slot X. Please enable it in order to make it active.', then turn off input_boolean.enabled_LOCKNAME_X [input_boolean.enabled_LOCKNAME_X].", "natural_language": { "trigger": "Whenever the Input Lock Pin Header [INPUTLOCKPINHEADER] changes its state.", "conditions": "If the corresponding input boolean for the lock (derived from the triggering entity's ID) is turned on, and the state of the Input Lock Pin Header has actually changed from its previous value.", "action": "Sends a notification reminding the user that a PIN for a specific code slot on the CASE_LOCK_NAME lock has been changed and needs to be re-enabled, and then automatically turns off the corresponding enabled status boolean." }, "human_like": "Notifies the user and disables a lock's PIN slot after its code is changed, requiring manual re-enablement.", "complexity": "medium" } }, { "id": "keymaster_CASE_LOCK_NAME Reset", "result": { "structured": "TRIGGER: When input_boolean.LOCKNAME_reset_lock changes from off to on. CONDITIONS: None. ACTIONS: Execute script keymaster_LOCKNAME_reset_lock [script.keymaster_LOCKNAME_reset_lock] AND turn off input_boolean.LOCKNAME_reset_lock.", "natural_language": { "trigger": "When the input boolean LOCKNAME_reset_lock is switched from off to on.", "conditions": "There are no conditions for this automation.", "action": "Runs the Keymaster Reset Lock script [script.keymaster_LOCKNAME_reset_lock] and then turns the LOCKNAME_reset_lock input boolean back off." }, "human_like": "Resets the Keymaster lock system when a reset switch is turned on, and then turns the switch off.", "complexity": "low" } }, { "id": "keymaster_CASE_LOCK_NAME Decrement Access Count", "result": { "structured": "TRIGGER: When a keymaster_lock_state_changed event occurs for lock LOCKNAME. CONDITIONS: (input_boolean.accesslimit_LOCKNAME_[code_slot] is on) AND (trigger event code_slot is greater than 0 AND (trigger event action_code is undefined OR trigger event action_code is 6 OR trigger event action_code is 19)). ACTIONS: Decrement the value of input_number.accesscount_LOCKNAME_[code_slot].", "natural_language": { "trigger": "When the lock system named LOCKNAME reports a state change event.", "conditions": "If the access limit is enabled for the specific code slot that triggered the event, and if the code slot number is valid (greater than 0) and the lock action is either undefined or corresponds to a specific unlock or lock operation (code 6 or 19).", "action": "Decreases the usage count for the specific access code slot associated with the lock." }, "human_like": "Reduces the remaining access count for a specific user code on a smart lock after a valid unlock or lock event.", "complexity": "medium" } }, { "id": "keymaster_LOCKNAME_locked", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to locked. CONDITIONS: None. ACTIONS: Cancel timer.keymaster_LOCKNAME_autolock.", "natural_language": { "trigger": "When the Lock Entity [LOCKENTITYNAME] becomes locked.", "conditions": "There are no conditions for this automation.", "action": "Cancels the timer named keymaster_LOCKNAME_autolock." }, "human_like": "Stops the auto-lock timer when the lock is manually locked.", "complexity": "low" } }, { "id": "keymaster_turn_off_retry_LOCKNAME", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to locked. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the Lock Entity [LOCKENTITYNAME] becomes locked.", "conditions": "There are no conditions.", "action": "Turns off the input boolean named input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Turns off a retry flag when the lock is locked.", "complexity": "low" } }, { "id": "keymaster_retry_bolt_closed_LOCKNAME", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes to closed (off). CONDITIONS: input_boolean.keymaster_LOCKNAME_retry is on AND input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Create a persistent notification with title 'LOCKNAME is closed' and message 'The LOCKNAME sensor indicates the door has been closed, re-attempting to lock.', then lock lock.boltchecked_LOCKNAME.", "natural_language": { "trigger": "When the Door Sensor [DOORSENSORENTITYNAME] reports that the door has closed.", "conditions": "The automation will only run if the retry feature for the lock is enabled (input_boolean.keymaster_LOCKNAME_retry is on) and the auto-lock feature for the lock is also enabled (input_boolean.keymaster_LOCKNAME_autolock is on).", "action": "Sends a notification stating that the door is closed and a re-lock is being attempted, then commands the lock lock.boltchecked_LOCKNAME to lock." }, "human_like": "Automatically re-locks a specific door when it is closed, provided both the retry and auto-lock features are turned on.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_opened", "result": { "structured": "TRIGGER: When Door Sensor [DOORSENSORENTITYNAME] changes to open (on). CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Start timer.keymaster_LOCKNAME_autolock with a duration determined by a template: If the next dusk occurs after the next dawn (i.e., it is currently night), use the value from input_text.keymaster_LOCKNAME_autolock_door_time_night; otherwise (i.e., it is currently day), use the value from input_text.keymaster_LOCKNAME_autolock_door_time_day.", "natural_language": { "trigger": "When the Door Sensor [DOORSENSORENTITYNAME] opens.", "conditions": "The automation is only active if the input_boolean.keymaster_LOCKNAME_autolock is turned on.", "action": "Starts a timer named timer.keymaster_LOCKNAME_autolock. The timer's duration is set dynamically: if it is currently nighttime (determined by comparing the times of the next dusk and next dawn), the duration is taken from the input_text.keymaster_LOCKNAME_autolock_door_time_night. If it is daytime, the duration is taken from the input_text.keymaster_LOCKNAME_autolock_door_time_day." }, "human_like": "Starts an auto-lock timer when a door is opened, using different delay times for day and night.", "complexity": "medium" } }, { "id": "keymaster_LOCKNAME_unlocked_ start_autolock", "result": { "structured": "TRIGGER: When Lock Entity [LOCKENTITYNAME] changes to unlocked. CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Turn on script.keymaster_LOCKNAME_start_timer AND Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the lock named Lock Entity [LOCKENTITYNAME] becomes unlocked.", "conditions": "If the autolock feature for this lock, controlled by the input boolean input_boolean.keymaster_LOCKNAME_autolock, is enabled (set to 'on').", "action": "Starts the autolock timer by activating the script script.keymaster_LOCKNAME_start_timer and resets the retry state by turning off the input boolean input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Starts the automatic relock timer when the door is unlocked, provided the autolock feature is enabled.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_timer_finished", "result": { "structured": "TRIGGER: When timer.keymaster_LOCKNAME_autolock finishes. CONDITIONS: input_boolean.keymaster_LOCKNAME_autolock is on. ACTIONS: Lock lock.boltchecked_LOCKNAME.", "natural_language": { "trigger": "When the timer named keymaster_LOCKNAME_autolock finishes.", "conditions": "If the autolock feature for this lock is enabled, indicated by the input_boolean.keymaster_LOCKNAME_autolock being in the 'on' state.", "action": "Locks the door by calling the lock service on the lock entity lock.boltchecked_LOCKNAME." }, "human_like": "Automatically locks a specific door when its autolock timer finishes, provided the autolock feature is turned on.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_timer_canceled", "result": { "structured": "TRIGGER: When timer.keymaster_LOCKNAME_autolock is cancelled. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the timer named 'keymaster_LOCKNAME_autolock' is cancelled.", "conditions": "There are no conditions for this automation.", "action": "Turns off the input boolean named 'keymaster_LOCKNAME_retry'." }, "human_like": "Cancels the retry process for a lock when its autolock timer is stopped.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_disable_auto_lock", "result": { "structured": "TRIGGER: When input_boolean.keymaster_LOCKNAME_autolock changes to off. CONDITIONS: None. ACTIONS: Cancel timer.keymaster_LOCKNAME_autolock AND Turn off input_boolean.keymaster_LOCKNAME_retry.", "natural_language": { "trigger": "When the input_boolean.keymaster_LOCKNAME_autolock is turned off.", "conditions": "There are no conditions for this automation.", "action": "Cancels the timer named timer.keymaster_LOCKNAME_autolock and turns off the input_boolean named input_boolean.keymaster_LOCKNAME_retry." }, "human_like": "Disables the auto-lock feature for a lock, cancelling any pending auto-lock timer and resetting the retry state.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_enable_auto_lock", "result": { "structured": "TRIGGER: When input_boolean.keymaster_LOCKNAME_autolock turns on. CONDITIONS: None. ACTIONS: Turn off input_boolean.keymaster_LOCKNAME_retry AND Cancel timer(s) timer.keymaster_LOCKNAME_autolock AND Start script script.keymaster_LOCKNAME_start_timer.", "natural_language": { "trigger": "When the input_boolean.keymaster_LOCKNAME_autolock is switched on.", "conditions": "There are no conditions for this automation.", "action": "It turns off the input_boolean.keymaster_LOCKNAME_retry, cancels the timer named timer.keymaster_LOCKNAME_autolock, and starts the script named script.keymaster_LOCKNAME_start_timer." }, "human_like": "Enables auto-lock for a lock by resetting related controls and starting a timer when auto-lock is turned on.", "complexity": "low" } }, { "id": "keymaster_LOCKNAME_initialize", "result": { "structured": "TRIGGER: When Home Assistant starts. CONDITIONS: None. ACTIONS: Set the value of input_text.keymaster_LOCKNAME_autolock_door_time_day to '02:00:00' if its current state is empty or 'unknown', otherwise keep its current value. Set the value of input_text.keymaster_LOCKNAME_autolock_door_time_night to '00:05:00' if its current state is empty or 'unknown', otherwise keep its current value.", "natural_language": { "trigger": "When Home Assistant first starts up.", "conditions": "There are no conditions that must be met.", "action": "Initializes two configuration settings. It sets the 'Daytime Auto-lock Delay' [input_text.keymaster_LOCKNAME_autolock_door_time_day] to 2 hours if it's not already set, otherwise it leaves it unchanged. It also sets the 'Nighttime Auto-lock Delay' [input_text.keymaster_LOCKNAME_autolock_door_time_night] to 5 minutes if it's not already set, otherwise it leaves it unchanged." }, "human_like": "Sets default auto-lock delay times for a lock when Home Assistant starts, ensuring the system has initial values to work with.", "complexity": "low" } }, { "id": "c4fdcb6b-1b34-4445-950e-122605812a25", "result": { "structured": "TRIGGER: When Print main label button [input_button.print_main_label] is pressed. CONDITIONS: None. ACTIONS: Execute shell command shell_command.print_kitchen_label with data: content = Label text [input_text.label_text] current state, optionally followed by a newline and Label date [input_datetime.label_date] current state if Print date [input_boolean.print_date] is on; copies = Label copies [input_number.label_copies] current state rounded to nearest integer.", "natural_language": { "trigger": "When the Print main label button [input_button.print_main_label] is pressed.", "conditions": "There are no conditions that must be met.", "action": "Prints a kitchen label using the shell command. The label's content is taken from the Label text [input_text.label_text] field. If the Print date [input_boolean.print_date] is turned on, the label also includes the date from the Label date [input_datetime.label_date] field. The number of copies printed is determined by the value set in the Label copies [input_number.label_copies] field, rounded to the nearest whole number." }, "human_like": "Prints a kitchen label with custom text, an optional date, and a specified number of copies when the print button is pressed.", "complexity": "low" } }, { "id": "cc513eb7-2912-440d-baa9-9d4fd9fd056d", "result": { "structured": "TRIGGER: When Print tape label button [input_button.print_tape_label] is pressed. CONDITIONS: None. ACTIONS: Execute shell command print_tape_label with data: content = Label text [input_text.label_text] state, optionally followed by a newline and the Label date [input_datetime.label_date] state if Print date [input_boolean.print_date] is on; copies = Label copies [input_number.label_copies] state rounded to nearest integer.", "natural_language": { "trigger": "When the Print tape label button [input_button.print_tape_label] is pressed.", "conditions": "There are no conditions.", "action": "Prints a tape label using a shell command. The label content is taken from the Label text [input_text.label_text] field. If the Print date [input_boolean.print_date] is turned on, the label date from Label date [input_datetime.label_date] is appended on a new line. The number of copies printed is determined by the value set in Label copies [input_number.label_copies], rounded to the nearest whole number." }, "human_like": "Prints a custom tape label with optional date and multiple copies when the print button is pressed.", "complexity": "low" } }, { "id": "925e45b5-affc-46cd-921d-227d7777306e", "result": { "structured": "TRIGGER: When Print office label button [input_button.print_office_label] is pressed. CONDITIONS: None. ACTIONS: Execute the shell command 'shell_command.print_office_label' with data: content = Label text [input_text.label_text] state, optionally followed by a newline and the Label date [input_datetime.label_date] state if Print date [input_boolean.print_date] is on; copies = the rounded integer value of Label copies [input_number.label_copies] state.", "natural_language": { "trigger": "When the Print office label button [input_button.print_office_label] is pressed.", "conditions": "There are no conditions for this automation.", "action": "It runs a shell command to print a label. The label's content is taken from the Label text [input_text.label_text] field. If the Print date [input_boolean.print_date] option is enabled, it adds the date from the Label date [input_datetime.label_date] on a new line. The number of copies printed is determined by the value set in Label copies [input_number.label_copies]." }, "human_like": "Prints a custom label from the office when the print button is pressed, optionally including a date and a specified number of copies.", "complexity": "low" } }, { "id": "828c11ac-62c2-49da-891c-7d6b99cd88c4", "result": { "structured": "TRIGGER: When the system time reaches midnight (00:00:00) OR When Home Assistant starts OR When an automation is reloaded (automation_reloaded event). CONDITIONS: None. ACTIONS: Set Label date [input_datetime.label_date] to today's date (YYYY-MM-DD format).", "natural_language": { "trigger": "This automation runs at midnight every day, when Home Assistant first starts up, or whenever an automation is reloaded.", "conditions": "There are no conditions that must be met for the action to run.", "action": "Sets the Label date [input_datetime.label_date] to today's date." }, "human_like": "Updates the 'Label date' to today's date at midnight, on startup, or when automations are reloaded.", "complexity": "low" } }, { "id": "faea6bc6-9c9b-439c-9f5a-ac65fbec8cdf", "result": { "structured": "TRIGGER: When the emulated Roku device named '4t8k7RAjE3TBcfheQvCATZ' receives a command. CONDITIONS: None. ACTIONS: IF command is 'up' THEN set source of Living room shield TV [media_player.living_room_shield_tv] to 'Netflix'. IF command is 'right' THEN set source of Living room shield TV [media_player.living_room_shield_tv] to 'Plex'. IF command is 'down' THEN set source of Living room shield TV [media_player.living_room_shield_tv] to 'YouTube'. IF command is 'left' THEN execute ADB command 'am start -a android.intent.action.VIEW -d -n com.amazon.amazonvideo.livingroom/com.amazon.ignition.IgnitionActivity' on Living room shield TV [media_player.living_room_shield_tv]. IF command is 'home' THEN set source of Living room shield TV [media_player.living_room_shield_tv] to 'com.hbo.hbonow'. IF command is 'search' THEN execute ADB command 'SEARCH' on Living room shield TV [media_player.living_room_shield_tv].", "natural_language": { "trigger": "When a specific emulated Roku device, identified by the name '4t8k7RAjE3TBcfheQvCATZ', receives a command from a Harmony Hub.", "conditions": "There are no conditions that must be met for the automation to proceed.", "action": "Depending on the specific command received, the automation performs different actions on the Living room shield TV [media_player.living_room_shield_tv]. If the 'up' command is received, it switches the media source to Netflix. If the 'right' command is received, it switches the source to Plex. If the 'down' command is received, it switches the source to YouTube. If the 'left' command is received, it sends an ADB command to launch the Amazon Video app. If the 'home' command is received, it switches the source to HBO Now. If the 'search' command is received, it sends an ADB command to initiate a search." }, "human_like": "Maps Harmony remote commands to specific apps and actions on the living room Shield TV, allowing the remote to control media playback.", "complexity": "medium" } }, { "id": "c8ff656a-e0d6-4b26-9840-0da9863b1867", "result": { "structured": "TRIGGER: When Washer wash completed [binary_sensor.washer_wash_completed] turns on. CONDITIONS: None. ACTIONS: Send a notification to living_room_shield_tv with title 'Washer Complete', message 'The washer has finished it's cycle.', and display parameters (duration: 10 seconds, position: top-right, transparency: 50%).", "natural_language": { "trigger": "When the Washer wash completed [binary_sensor.washer_wash_completed] sensor indicates the washing cycle is finished by turning on.", "conditions": "There are no additional conditions that must be met.", "action": "Sends a notification to the Living Room Shield TV, displaying a message titled 'Washer Complete' with the text 'The washer has finished it's cycle.' The notification will appear in the top-right corner of the screen, be semi-transparent, and remain visible for 10 seconds." }, "human_like": "Sends a notification to the TV in the living room when the washing machine finishes its cycle.", "complexity": "low" } }, { "id": "e2f38056-ce90-46ca-8138-51a9637e3e50", "result": { "structured": "TRIGGER: When Dryer dry completed [binary_sensor.dryer_dry_completed] turns on. CONDITIONS: None. ACTIONS: Send a notification to living_room_shield_tv with title 'Dryer Complete', message 'The dryer has finished it's cycle.', and data including duration 10, position top-right, and transparency 50%.", "natural_language": { "trigger": "When the Dryer dry completed [binary_sensor.dryer_dry_completed] sensor indicates the dryer cycle is finished.", "conditions": "There are no conditions that must be met.", "action": "Sends a notification to the living room Shield TV, displaying a message that the dryer has finished its cycle for 10 seconds in the top-right corner with 50% transparency." }, "human_like": "Sends a notification to the living room TV when the dryer finishes its cycle.", "complexity": "low" } }, { "id": "c34228e0-c6c9-431f-ad73-cef94537ca2c", "result": { "structured": "TRIGGER: When Line 103 status [sensor.line_103_status] changes to 'incoming'. CONDITIONS: None. ACTIONS: Send a notification to living_room_shield_tv with title 'Incoming Phone Call' and a message containing Line 103 caller name [sensor.line_103_caller_name] and Line 103 caller number [sensor.line_103_caller_number], with display settings duration 25, position top-right, and transparency 50%.", "natural_language": { "trigger": "When the Line 103 status [sensor.line_103_status] changes to indicate an incoming call.", "conditions": "There are no conditions that must be met.", "action": "Sends a notification to the living room TV (living_room_shield_tv) with the title 'Incoming Phone Call'. The message includes the caller's name from Line 103 caller name [sensor.line_103_caller_name] and their phone number from Line 103 caller number [sensor.line_103_caller_number]. The notification is configured to appear in the top-right corner, with 50% transparency, and remain visible for 25 seconds." }, "human_like": "Displays an incoming phone call notification on the living room TV, showing the caller's name and number.", "complexity": "low" } }, { "id": "6ed8bef7-8ed6-4278-b79f-fefa9bf2ab8b", "result": { "structured": "TRIGGER: When Home Assistant starts OR when an automation is reloaded OR when the state of Living room TV remote plugged in [binary_sensor.living_room_tv_remote_plugged_in] changes. CONDITIONS: None. ACTIONS: If Living room TV remote plugged in [binary_sensor.living_room_tv_remote_plugged_in] is on, then turn off Living room TV remote motion detection [switch.living_room_tv_remote_motion_detection] AND turn off Living room TV remote screen [switch.living_room_tv_remote_screen]. Otherwise, turn on Living room TV remote motion detection [switch.living_room_tv_remote_motion_detection] AND turn on Living room TV remote screen [switch.living_room_tv_remote_screen].", "natural_language": { "trigger": "This automation runs when Home Assistant first starts, when any automation is reloaded, or whenever the charging status of the Living room TV remote plugged in [binary_sensor.living_room_tv_remote_plugged_in] changes.", "conditions": "There are no separate conditions that must be met for the actions to run; the logic is handled within the action sequence.", "action": "If the Living room TV remote plugged in [binary_sensor.living_room_tv_remote_plugged_in] is on (charging), it turns off both the Living room TV remote motion detection [switch.living_room_tv_remote_motion_detection] and the Living room TV remote screen [switch.living_room_tv_remote_screen]. If the remote is not charging, it turns both the motion detection and the screen on." }, "human_like": "Manages the TV remote's motion detection and screen by turning them off when the remote is charging to save power, and turning them back on when it's not.", "complexity": "medium" } }, { "id": "22220e6d-5b70-4718-8a3c-7080f270f928", "result": { "structured": "TRIGGER: When Master bathroom motion [binary_sensor.master_bathroom_motion] changes from off to on OR When Hallway bathroom motion [binary_sensor.hallway_bathroom_motion] changes from off to on OR When Downstairs bathroom motion [binary_sensor.downstairs_bathroom_motion] changes from off to on OR When Kitchen motion [binary_sensor.kitchen_motion] changes from off to on. CONDITIONS: None. ACTIONS: Turn on Hot water pump [switch.hot_water_pump].", "natural_language": { "trigger": "When motion is first detected in any of the following rooms: the Master bathroom [binary_sensor.master_bathroom_motion], the Hallway bathroom [binary_sensor.hallway_bathroom_motion], the Downstairs bathroom [binary_sensor.downstairs_bathroom_motion], or the Kitchen [binary_sensor.kitchen_motion].", "conditions": "There are no additional conditions that must be met.", "action": "Turn on the Hot water pump [switch.hot_water_pump]." }, "human_like": "Turns on the hot water pump whenever motion is detected in any bathroom or the kitchen.", "complexity": "low" } }, { "id": "'1701157132714'", "result": { "structured": "TRIGGER: Every 10 minutes (time pattern). CONDITIONS: None. ACTIONS: Send a custom drawing to the e-paper display device [a07813b027de345048bdf12eaf51eb10] with a white background, no rotation, a 300-second time-to-live, and no dithering. The drawing payload includes: a red border frame, a title 'Server Rack', a 'Current' section with a thermometer icon and the value from Server rack exhaust fan temperature 1 [sensor.server_rack_exhaust_fan_temperature_1] (rounded) in °F, a humidity icon and the value from Server rack exhaust fan humidity 1 [sensor.server_rack_exhaust_fan_humidity_1] (rounded) in %, a 'Target' section with a thermometer icon and the temperature attribute from Server rack exhaust fan fan 1 thermostat [climate.server_rack_exhaust_fan_fan_1_thermostat] (rounded) in °F, a fan icon and the value from Server rack exhaust fan fan 1 speed [sensor.server_rack_exhaust_fan_fan_1_speed] (rounded) in %, and a timestamp of the current date and time.", "natural_language": { "trigger": "The automation runs every 10 minutes based on a time pattern.", "conditions": "There are no conditions that must be met for the automation to proceed.", "action": "The automation updates an e-paper display by drawing a status dashboard. It shows the server rack's current temperature and humidity from sensors, the target temperature from the thermostat, and the current fan speed. It also adds a timestamp showing when the information was last updated." }, "human_like": "Updates a server rack status display every 10 minutes, showing current climate readings and target settings.", "complexity": "medium" } }, { "id": "2c8ca4d5-b0e5-48c9-9a6d-a3cd60d2a449", "result": { "structured": "TRIGGER: When Server rack backup power source [sensor.server_rack_backup_power_source] remains in state 'Battery' for 10 minutes OR When UPS source [sensor.ups_source] remains in state 'Battery' for 10 minutes. CONDITIONS: (Server rack backup power source [sensor.server_rack_backup_power_source] is 'Battery' OR UPS source [sensor.ups_source] is 'Battery'). ACTIONS: Send a notification to rohan_kapoor with a title 'Server Rack Battery Power Alert' and a dynamic message. The message details which power source(s) are on battery, includes current states of Server rack backup power source [sensor.server_rack_backup_power_source] and UPS source [sensor.ups_source], and lists battery information from UPS battery capacity [sensor.ups_battery_capacity], UPS runtime remaining [sensor.ups_runtime_remaining], Server rack backup time remaining [sensor.server_rack_backup_time_remaining], Server rack backup main battery [sensor.server_rack_backup_main_battery], Server rack backup extra1 battery [sensor.server_rack_backup_extra1_battery], and Server rack backup extra2 battery [sensor.server_rack_backup_extra2_battery], along with the current timestamp.", "natural_language": { "trigger": "The automation triggers if the Server rack backup power source [sensor.server_rack_backup_power_source] has been on battery power for at least 10 minutes, or if the UPS source [sensor.ups_source] has been on battery power for at least 10 minutes.", "conditions": "A safety check ensures that at least one of the monitored sensors, the Server rack backup power source [sensor.server_rack_backup_power_source] or the UPS source [sensor.ups_source], is actually reporting a 'Battery' state at the moment the action is about to run. This prevents sending a notification if both sensors have returned to normal power within the 10-minute delay.", "action": "Sends a detailed notification to the user 'rohan_kapoor'. The notification title is 'Server Rack Battery Power Alert'. The message body is dynamically generated: it specifies whether one or both power sources are on battery, shows the current status of both power sources, and provides detailed battery information including capacity and remaining runtime for both the UPS and the server rack backup system, concluding with the current date and time." }, "human_like": "Sends an alert if the server rack or its UPS has been running on battery power for more than 10 minutes, providing detailed status information to help assess the situation.", "complexity": "medium" } }, { "id": "f126138c-bb79-4a9c-957a-a727ab53f95f", "result": { "structured": "TRIGGER: At 03:00:00 daily. CONDITIONS: None. ACTIONS: Press the button for all entities belonging to the 'fullykiosk' integration whose entity_id contains the substring '_restart_browser'.", "natural_language": { "trigger": "Every day at 3:00 AM.", "conditions": "There are no conditions that need to be met.", "action": "Press the button for all Fully Kiosk browser restart entities. This is done by finding all entities associated with the 'fullykiosk' integration and selecting only those whose entity ID includes the text '_restart_browser'." }, "human_like": "Restarts all Fully Kiosk tablet browsers every night at 3 AM to prevent them from getting stuck.", "complexity": "low" } }, { "id": "'1702712886222'", "result": { "structured": "TRIGGER: When the time matches a pattern of every 15 minutes (minutes: /15). CONDITIONS: The current time is between 07:00:00 and 02:00:00 (the next day). ACTIONS: Send a custom drawing command to the ePaper display device [Device 93185d71c897d23075b33b802ad98658] with a white background, no rotation, a 300-second time-to-live, and dithering disabled. The payload includes: 1) An icon representing the current weather condition from Pirate Weather [weather.pirateweather], with logic to map 'partlycloudy' to 'partly-cloudy', 'clear-night' to 'night', and to use night-themed icons when the sun is below the horizon (Sun [sun.sun] state is 'below_horizon'). 2) The outdoor temperature from Weather station outdoor temperature [sensor.weather_station_outdoor_temperature] rounded to the nearest whole number and displayed in °F. 3) A timestamp of the update in the format 'HH:MM AM/PM'.", "natural_language": { "trigger": "The automation runs every 15 minutes.", "conditions": "It only runs if the current time is between 7:00 AM and 2:00 AM the following day.", "action": "It updates an ePaper display by the exterior door. It draws a weather icon based on the current condition from Pirate Weather [weather.pirateweather], adjusting for day or night. It also shows the current outdoor temperature from Weather station outdoor temperature [sensor.weather_station_outdoor_temperature] and the time of the update." }, "human_like": "Updates the weather information on the ePaper displays near the exterior doors every 15 minutes during the day and evening.", "complexity": "medium" } } ]