[
{
"id": "Ambient Light | Set Quantize Values",
"automation": "- alias: Ambient Light | Set Quantize Values\n description: 'This automation ''quantizes'' the raw lux values reported by the ambient\n sensor devices into text values of Bright, Dim, Dark, or Night. These quantized\n values are what I use to trigger ambient light related automations.
**04/25/2025**: Created\n this automation to update both of the ''real'' sensors.'\n triggers:\n - trigger: time_pattern\n minutes: /5\n conditions: []\n actions:\n - repeat:\n for_each:\n - sensor: sensor.ambient_light_sensor_s2_bh1750_lux\n quantized: input_text.ambient_s2_quantized\n night_lux: input_number.ambient_s2_quant_night_lux\n dark_lux: input_number.ambient_s2_quant_dark_lux\n dim_lux: input_number.ambient_s2_quant_dim_lux\n - sensor: sensor.adafruit_feather_sensors_bh1750_illuminance\n quantized: input_text.ambient_s1_quantized\n night_lux: input_number.ambient_s1_quant_night_lux\n dark_lux: input_number.ambient_s1_quant_dark_lux\n dim_lux: input_number.ambient_s1_quant_dim_lux\n sequence:\n - choose:\n - conditions:\n - condition: template\n value_template: '{% set lux = states(repeat.item.sensor) | float %} {%\n set n = states(repeat.item.night_lux) | float %} {% set d = states(repeat.item.dark_lux) |\n float %} {{ lux > n and lux < d }}\n\n '\n sequence:\n - target:\n entity_id: '{{ repeat.item.quantized }}'\n data:\n value: Dark\n action: input_text.set_value\n - conditions:\n - condition: template\n value_template: '{% set lux = states(repeat.item.sensor) | float %} {%\n set d = states(repeat.item.dark_lux) | float %} {% set di = states(repeat.item.dim_lux) |\n float %} {{ lux > d and lux < di }}\n\n '\n sequence:\n - target:\n entity_id: '{{ repeat.item.quantized }}'\n data:\n value: Dim\n action: input_text.set_value\n - conditions:\n - condition: template\n value_template: '{% set lux = states(repeat.item.sensor) | float %} {%\n set di = states(repeat.item.dim_lux) | float %} {{ lux > di }}\n\n '\n sequence:\n - target:\n entity_id: '{{ repeat.item.quantized }}'\n data:\n value: Bright\n action: input_text.set_value\n default:\n - target:\n entity_id: '{{ repeat.item.quantized }}'\n data:\n value: Night\n action: input_text.set_value\n mode: single",
"config": [
{
"name": "ambient light sensor s2 bh1750 lux",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.ambient_light_sensor_s2_bh1750_lux",
"device_id": null
}
},
{
"name": "ambient s2 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s2_quantized",
"device_id": null
}
},
{
"name": "ambient s2 quant night lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s2_quant_night_lux",
"device_id": null
}
},
{
"name": "ambient s2 quant dark lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s2_quant_dark_lux",
"device_id": null
}
},
{
"name": "ambient s2 quant dim lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s2_quant_dim_lux",
"device_id": null
}
},
{
"name": "adafruit feather sensors bh1750 illuminance",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.adafruit_feather_sensors_bh1750_illuminance",
"device_id": null
}
},
{
"name": "ambient s1 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s1_quantized",
"device_id": null
}
},
{
"name": "ambient s1 quant night lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s1_quant_night_lux",
"device_id": null
}
},
{
"name": "ambient s1 quant dark lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s1_quant_dark_lux",
"device_id": null
}
},
{
"name": "ambient s1 quant dim lux",
"room": null,
"type": "input_number",
"id": {
"entity_id": "input_number.ambient_s1_quant_dim_lux",
"device_id": null
}
},
{
"name": "ambient s1 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s1_quantized",
"device_id": null
}
},
{
"name": "ambient s2 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s2_quantized",
"device_id": null
}
}
]
},
{
"id": "Ambient Sensors | State Changed",
"automation": "- alias: Ambient Sensors | State Changed\n description: 'This is part of my handling of changes to ambient light and the day-dim\n application. This automation catches an ambient light level change for any of\n the lux sensors and to then calls the ''lightset_assess_conditions'' script.
\n **04/25/2025**: Implemented and is working.'\n triggers:\n - trigger: state\n entity_id:\n - input_text.ambient_s9_quantized\n - input_text.ambient_s1_quantized\n - input_text.ambient_s2_quantized\n from: null\n to: null\n conditions: []\n actions:\n - variables:\n trigger_map:\n input_text.ambient_s9_quantized: input_text.ambient_s9_lightset_label\n input_text.ambient_s1_quantized: input_text.ambient_s1_lightset_label\n input_text.ambient_s2_quantized: input_text.ambient_s2_lightset_label\n sensor_label_helper: '{{ trigger_map[trigger.entity_id] }}'\n lightset_label: '{{ states(sensor_label_helper) | default(''NoLightsetLabel'')\n }}'\n alias: Define Needed Variables\n - alias: Debug - Show Variables\n data:\n name: Lightset Debug\n message: 'VARIABLE: [sensor_label_helper: {{ sensor_label_helper }}] || VARIABLE:\n [lightset_label: {{lightset_label }}]\n\n '\n action: logbook.log\n - action: script.turn_on\n metadata: {}\n data:\n entity_id: script.lightset_assess_conditions\n variables:\n lightset_label: '{{ lightset_label }}'\n mode: parallel",
"config": [
{
"name": "ambient s2 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s2_quantized",
"device_id": null
}
},
{
"name": "ambient s1 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s1_quantized",
"device_id": null
}
},
{
"name": "ambient s9 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s9_quantized",
"device_id": null
}
},
{
"name": "ambient s1 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s1_quantized",
"device_id": null
}
},
{
"name": "ambient s2 quantized",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s2_quantized",
"device_id": null
}
},
{
"name": "ambient s9 lightset label",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s9_lightset_label",
"device_id": null
}
},
{
"name": "ambient s1 lightset label",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s1_lightset_label",
"device_id": null
}
},
{
"name": "ambient s2 lightset label",
"room": null,
"type": "input_text",
"id": {
"entity_id": "input_text.ambient_s2_lightset_label",
"device_id": null
}
},
{
"name": "lightset assess conditions script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_assess_conditions",
"device_id": null
}
}
]
},
{
"id": "Light Set - Lset App Test Light Set | Deactivate Requested",
"automation": "- alias: Light Set - Lset App Test Light Set | Deactivate Requested\n description: ''\n triggers:\n - trigger: state\n entity_id:\n - input_button.light_set_lset_app_test_light_set_deactivate\n - input_button.light_set_lset_app_test_light_set_disable\n from: null\n to: null\n conditions: []\n actions:\n - variables:\n button_map:\n input_button.light_set_lset_app_test_light_set_deactivate:\n target_lightset_label: Light Set - Lset App Test Light Set\n target_exit_state: Deactivated\n input_button.light_set_lset_app_test_light_set_disable:\n target_lightset_label: Light Set - Lset App Test Light Set\n target_exit_state: Disabled\n target_lightset_label: '{{ button_map[trigger.entity_id].target_lightset_label\n }}'\n target_exit_state: '{{ button_map[trigger.entity_id].target_exit_state }}'\n - action: script.turn_on\n metadata: {}\n data:\n variables:\n lightset_label: '{{ target_lightset_label }}'\n exit_state: '{{ target_exit_state }}'\n target:\n entity_id:\n - script.lightset_deactivate_disable\n mode: parallel",
"config": [
{
"name": "light set lset app test light set deactivate button",
"room": null,
"type": "input_button",
"id": {
"entity_id": "input_button.light_set_lset_app_test_light_set_deactivate",
"device_id": null
}
},
{
"name": "light set lset app test light set disable button",
"room": null,
"type": "input_button",
"id": {
"entity_id": "input_button.light_set_lset_app_test_light_set_disable",
"device_id": null
}
},
{
"name": "lightset deactivate disable script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_deactivate_disable",
"device_id": null
}
}
]
},
{
"id": "lightset | State Changed",
"automation": "- alias: lightset | State Changed\n description: '**Membership**: *Lightset Virtual Object* and an element of the Day-Dim\n App.
**Purpose**: React to light-set state changes and route actions to the\n appropriate action scripts that are part of the app.
**Note-1**: I am using\n the non-blocking form of calling the routed to scripts in the ''''choose'''' section\n so that this automation can be called again immediately (i.e., by a different\n light-set having been triggered).
**Note-2**: *mode: queued* is important\n as the call out to the LED set indicator script is recursive and will fail if\n mode is single. (Actually it should likely be mode: parallel if ever I use the\n feature to set a ''''start_state'''' in the scripts that turn the lights on and\n off).
**04/26/2025**: Fixed error in lightset strings in the trigger_map\n table.
**04/25/2025**: Fixed up for new naming of helpers.
**04/22/2025**:\n Added case for ''''Inactive'''' to set * | Operational State* to ''''Activate''''\n
**Documentation** .../HomeAssistant/Documentation/doc_diagrams.odg\n\n '\n triggers:\n - trigger: state\n entity_id:\n - input_select.lightset_test_set_state\n - input_select.lightset_kitchen_state\n - input_select.lightset_living_area_state\n conditions: []\n actions:\n - variables:\n trigger_map:\n input_select.lightset_test_set_state:\n lightset: Light-Set - Day-Dim | Test Set\n operational_state_helper: input_select.lightset_test_set_operational_state\n input_select.lightset_kitchen_state:\n lightset: Light-Set - Day-Dim | Kitchen\n operational_state_helper: input_select.lightset_kitchen_operational_state\n input_select.lightset_living_area_state:\n lightset: Light-Set - Day-Dim | Living Area\n operational_state_helper: input_select.lightset_living_area_operational_state\n lightset: '{{ trigger_map[trigger.entity_id].lightset }}'\n ops_state_helper: '{{ trigger_map[trigger.entity_id].operational_state_helper\n }}'\n alias: Define Needed Variables\n - alias: Debug - Show Variables\n data:\n name: Lightset Debug\n message: 'VARIABLE: [lightset: {{ lightset }}] || VARIABLE: [ops_state_helper:\n {{ ops_state_helper }}] || VALUE: [trigger.entity_id: {{ trigger.entity_id\n }}] || VALUE: [trigger.to_state.state: {{ trigger.to_state.state }}] ||\n\n '\n action: logbook.log\n - action: script.lightset_set_state_indicators\n metadata: {}\n data:\n changed_helper: '{{ trigger.entity_id }}'\n new_state: '{{ trigger.to_state.state }}'\n alias: CALL Script to Set ESPHome LED Indicators for New State\n - alias: CASE Section | Route to Appropriate Handler Based on New State\n choose:\n - alias: CASE-0 State Changed to 'In Process - ON'\n conditions:\n - condition: template\n alias: IF State is In Process - On\n value_template: '{{ trigger.to_state.state == ''In Process - ON''}}'\n sequence:\n - alias: Turn on the Light Set\n action: script.turn_on\n data:\n entity_id: script.lightset_on_by_label\n variables:\n lightset_label: '{{ lightset }}'\n - alias: CASE-1 State Changed to 'Pending - OFF'\n conditions:\n - condition: template\n alias: IF State is Pending - OFF\n value_template: '{{ trigger.to_state.state == ''Pending - OFF''}}'\n sequence:\n - alias: Turn on Delay Timer for Light Set\n action: script.turn_on\n data:\n entity_id: script.lightset_goto_pending_off\n variables:\n lightset_label: '{{ lightset }}'\n - alias: CASE-2 State Changed to 'In Process - OFF'\n conditions:\n - condition: template\n alias: IF State is In Process - OFF\n value_template: '{{ trigger.to_state.state == ''In Process - OFF''}}'\n sequence:\n - alias: Turn off the Light Set\n action: script.turn_on\n data:\n entity_id: script.lightset_off_by_areas\n variables:\n lightset_label: '{{ lightset }}'\n - alias: CASE-3 State Changed to Cancel In Process\n conditions:\n - condition: template\n alias: IF State is Cancel In Process\n value_template: '{{ trigger.to_state.state == ''Cancel In Process''}}'\n sequence:\n - alias: Cancel any active light-set activity\n action: script.turn_on\n data:\n entity_id: script.lightset_cancel\n variables:\n lightset_label: '{{ lightset }}'\n - alias: CASE-4 State Changed to 'Inactive' from 'Cancel In Process'\n conditions:\n - condition: template\n alias: IF State went to 'Inactive' from 'Cancel In Process'\n value_template: '{{ trigger.to_state.state == ''Inactive'' and trigger.from_state.state\n == ''Cancel In Process''}}'\n sequence:\n - alias: Set Light-Set's Operational State to 'Activate.'\n action: input_select.select_option\n metadata: {}\n data:\n option: Activate\n target:\n entity_id: '{{ ops_state_helper }}'\n mode: queued",
"config": [
{
"name": "lightset test set state",
"room": null,
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_test_set_state",
"device_id": null
}
},
{
"name": "lightset kitchen state",
"room": "kitchen",
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_kitchen_state",
"device_id": null
}
},
{
"name": "lightset living area state",
"room": "living_area",
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_living_area_state",
"device_id": null
}
},
{
"name": "lightset test set operational state",
"room": null,
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_test_set_operational_state",
"device_id": null
}
},
{
"name": "lightset kitchen operational state",
"room": "kitchen",
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_kitchen_operational_state",
"device_id": null
}
},
{
"name": "lightset living area operational state",
"room": "living_area",
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_living_area_operational_state",
"device_id": null
}
},
{
"name": "lightset set state indicators script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_set_state_indicators",
"device_id": null
}
},
{
"name": "lightset on by label script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_on_by_label",
"device_id": null
}
},
{
"name": "lightset goto pending off script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_goto_pending_off",
"device_id": null
}
},
{
"name": "lightset off by areas script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_off_by_areas",
"device_id": null
}
},
{
"name": "lightset cancel script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_cancel",
"device_id": null
}
}
]
},
{
"id": "lightset | Transition Timer Expired",
"automation": "- alias: lightset | Transition Timer Expired\n description: '**Purpose**: Detect when a light-set''s transition delay timer has\n expired and take appropriate action.
**04/26/2025**: Fixed helper name errors.\n Added test for valid timer in loopup map.
**04/25/2025**: Fixed up for new\n naming of helpers and added in the two non-test light-sets.
**04/12/2025**:\n Initial Creation\n\n '\n triggers:\n - trigger: state\n entity_id:\n - timer.lightset_test_set_timer\n - timer.lightset_kitchen_timer\n - timer.lightset_living_area_timer\n from: null\n to: idle\n alias: When any Light-Set's timer has finished\n conditions: []\n actions:\n - variables:\n trigger_map:\n timer.lightset_test_set_timer:\n label: Light-Set - Day-Dim | Test Set\n state_helper: input_select.lightset_test_set_state\n timer.lightset_kitchen_timer:\n label: Light-Set - Day-Dim | Kitchen\n state_helper: input_select.lightset_test_set_state\n timer.lightset_living_area_timer:\n label: Light-Set - Day-Dim | Living Area\n state_helper: input_select.lightset_test_set_state\n NoMappedTimer:\n label: NoLightsetLabel\n state_helper: NoStateHelper\n timer_to_act_on: \"{% if trigger.entity_id in trigger_map %}\\n {{ trigger.entity_id\\\n \\ }}\\n{% else %}\\n NoMappedTimer\\n{% endif %}\\n\"\n target_lightset_label: '{{ trigger_map[timer_to_act_on].label }}'\n target_state_helper: '{{ trigger_map[timer_to_act_on].state_helper }}'\n - alias: Debug - Show Variables\n data:\n name: Lightset Debug\n message: 'VARIABLE: [timer_to_act_on: {{ timer_to_act_on }}] || VARIABLE: [target_lightset_label:\n {{ target_lightset_label }}] || VARIABLE: [target_state_helper: {{ target_state_helper\n }}] || VALUE: [trigger.entity_id: {{ trigger.entity_id }} ] || VALUE: [trigger.to_state.state:\n {{ trigger.to_state.state }} ] ||\n\n '\n action: logbook.log\n - alias: If we have valid timer call assess conditions script, else error\n choose:\n - alias: Call the Light-Set Assess Conditions Script.\n conditions:\n - condition: template\n value_template: '{{ timer_to_act_on != ''NoMappedTimer'' }}'\n sequence:\n - action: script.turn_on\n metadata: {}\n data:\n variables:\n lightset_label: '{{ target_lightset_label }}'\n target:\n entity_id:\n - script.lightset_assess_conditions\n default:\n - alias: No timer, report error\n sequence:\n - data:\n name: Automation | lightset Transition Timer Expired - ERROR\n message: Triggering timer - '{{ trigger.entity_id }}' - has no entry in\n trigger_map lookup table.\n action: logbook.log\n mode: parallel",
"config": [
{
"name": "lightset assess conditions script",
"room": null,
"type": "script",
"id": {
"entity_id": "script.lightset_assess_conditions",
"device_id": null
}
},
{
"name": "lightset test set state",
"room": null,
"type": "input_select",
"id": {
"entity_id": "input_select.lightset_test_set_state",
"device_id": null
}
},
{
"name": "lightset test set timer",
"room": null,
"type": "timer",
"id": {
"entity_id": "timer.lightset_test_set_timer",
"device_id": null
}
},
{
"name": "lightset kitchen timer",
"room": "kitchen",
"type": "timer",
"id": {
"entity_id": "timer.lightset_kitchen_timer",
"device_id": null
}
},
{
"name": "lightset living area timer",
"room": "living_area",
"type": "timer",
"id": {
"entity_id": "timer.lightset_living_area_timer",
"device_id": null
}
}
]
},
{
"id": "Away Random Lights by Label",
"automation": "- alias: Away Random Lights by Label\n description: 'When I''m away, randomly toggle any light tagged “Light Set – Night\n Random” between night and bedtime.\n\n '\n trigger:\n - platform: time_pattern\n minutes: /5\n variables:\n lights: \"{{ states.light\\n | selectattr('attributes.label','eq','Light Set -\\\n \\ Night Random')\\n | map(attribute='entity_id')\\n | list }}\"\n condition:\n - condition: state\n entity_id: input_boolean.away_from_home\n state: 'on'\n - condition: template\n value_template: '{{ is_state(''sensor.daypart'',''nighttime'') }}\n\n '\n - condition: template\n value_template: '{{ now().strftime(''%H:%M'') < states(''input_datetime.bedtime_normal'')\n }}\n\n '\n - condition: template\n value_template: '{{ (range(0,5) | random) == 0 }}\n\n '\n action:\n - choose:\n - conditions: '{{ lights | length > 0 }}'\n sequence:\n - service: light.toggle\n target:\n entity_id: '{{ lights | random }}'\n mode: parallel",
"config": [
{
"name": "away from home",
"room": null,
"type": "input_boolean",
"id": {
"entity_id": "input_boolean.away_from_home",
"device_id": null
}
},
{
"name": "daypart sensor",
"room": null,
"type": "sensor",
"id": {
"entity_id": "sensor.daypart",
"device_id": null
}
},
{
"name": "bedtime normal",
"room": null,
"type": "input_datetime",
"id": {
"entity_id": "input_datetime.bedtime_normal",
"device_id": null
}
}
]
}
]