additional esphome devices and fixes

This commit is contained in:
root
2026-04-29 19:36:37 +12:00
parent f14bbbd23a
commit ae00e821ba
6 changed files with 632 additions and 109 deletions
+75 -16
View File
@@ -1,6 +1,42 @@
# yaml-language-server: $schema=null
###############################################################################
# PACKAGE: Lounge scenes (delta-only settings) + manual override
# PACKAGE: Lounge scenes controller
#
# PURPOSE:
# - Provides selectable lounge lighting scenes from Home Assistant.
# - Scenes are selected via input_select.lounge_scene.
# - The selector resets back to "Select Scene:" after each scene is applied, so
# the same scene can be selected repeatedly.
# - Scenes are delta-only: only entities listed in a scene are changed.
# - Manual override can block automatic scene changes.
# - Last remembered scene is tracked so TV automations can avoid changing lights
# when the lounge was deliberately set to All Off.
#
# SUPPORTED SCENE VALUE TYPES:
# - light.*:
# 0 = turn off
# 1-100 = turn on at brightness percentage
# "on" = turn on
# "off" = turn off
# "toggle" = toggle on/off, using 100 percent when turning on
# "toggle_75" = if on, turn off; if off, turn on at 75 percent
#
# - switch.*:
# "on" = turn on
# "off" = turn off
# "toggle" = toggle on/off
#
# - number.*:
# numeric value is sent using number.set_value
#
# - input_number.*:
# numeric value is sent using input_number.set_value
# Example: input_number.openhasp_1_backlight_level: 180
#
# NOTES:
# - Keep on/off/toggle values quoted for clarity.
# - Numeric values can be left unquoted.
# - Only scenes not listed in excluded_scenes update input_text.lounge_last_scene.
###############################################################################
input_select:
@@ -49,7 +85,7 @@ script:
data:
option: "{{ scene_name }}"
# NEW: Wait briefly for HA to commit the new state (avoids race)
# Wait briefly for HA to commit the new state before reading it.
- wait_template: "{{ states('input_select.lounge_scene') == scene_name }}"
timeout: "00:00:02"
continue_on_timeout: true
@@ -62,15 +98,19 @@ script:
sequence:
- variables:
sel: "{{ states('input_select.lounge_scene') }}"
#####################################################################
# EXCLUDED SCENES (these are temp scenes, not remembered as last)
# EXCLUDED SCENES
# These are temporary/action scenes and are not remembered as last.
#####################################################################
excluded_scenes:
- "Select Scene:"
- "Reading On/Off"
#- "Night Light"
#####################################################################
# SCENE SETTINGS (delta only - only list entities you want to change)
# SCENE SETTINGS
# Delta only - only list entities you want to change.
#####################################################################
scene_settings:
Bright:
@@ -91,6 +131,7 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 100
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 100
input_number.openhasp_1_backlight_level: 255
TV General:
light.esp_lounge6chdimmer_couch_spots_left: 60
@@ -109,6 +150,7 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 60
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 60
input_number.openhasp_1_backlight_level: 120
Movie:
light.esp_lounge6chdimmer_couch_spots_left: 20
@@ -127,6 +169,7 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 40
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 40
input_number.openhasp_1_backlight_level: 15
Reading On/Off:
light.esp_lounge6chdimmer_couch_spots_left: "toggle_75"
@@ -154,6 +197,7 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 5
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 5
input_number.openhasp_1_backlight_level: 8
Warm Cozy:
light.esp_lounge6chdimmer_couch_spots_left: 20
@@ -170,6 +214,7 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 20
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 20
input_number.openhasp_1_backlight_level: 12
All Off:
light.esp_lounge6chdimmer_couch_spots_left: 0
@@ -188,12 +233,11 @@ script:
#switch.esp_loungenorthswitch_relay_1_main_lights: "on"
number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 0
number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 0
#input_number.openhasp_1_backlight_level: 100
#####################################################################
#####################################################################
#####################################################################
# Only remember scenes that are not excluded
#########################################################################
# REMEMBER LAST SCENE
#########################################################################
- choose:
- conditions: "{{ sel not in excluded_scenes }}"
sequence:
@@ -202,6 +246,9 @@ script:
data:
value: "{{ sel }}"
#########################################################################
# APPLY SELECTED SCENE
#########################################################################
- repeat:
for_each: "{{ (scene_settings.get(sel, {})).keys() | list }}"
sequence:
@@ -210,23 +257,32 @@ script:
val: "{{ (scene_settings.get(sel, {}))[ent] }}"
is_light: "{{ ent.startswith('light.') }}"
is_switch: "{{ ent.startswith('switch.') }}"
is_number_ent: "{{ ent.startswith('number.') }}"
is_input_number_ent: "{{ ent.startswith('input_number.') }}"
is_num: "{{ val is number }}"
vstr: "{{ (val|string) if not is_num else '' }}"
is_toggle: "{{ (not is_num) and (vstr|lower).startswith('toggle') }}"
toggle_pct: "{{ (vstr.split('_')|last)|int if ('_' in vstr) else 100 }}"
currently_on: "{{ is_state(ent, 'on') }}"
is_number_ent: "{{ ent.startswith('number.') }}" # 🔹 NEW
- choose:
# 0) Numbers: set numeric value (e.g. 0..100)
- conditions: "{{ is_number_ent and is_num }}" # 🔹 NEW
# 0a) Numbers: set numeric value
- conditions: "{{ is_number_ent and is_num }}"
sequence:
- service: number.set_value
data:
entity_id: "{{ ent }}"
value: "{{ val|float }}"
# 1) Lights: toggle[_NN] -> if on turn off, else turn on to NN (default 100)
# 0b) Input numbers: set numeric value
- conditions: "{{ is_input_number_ent and is_num }}"
sequence:
- service: input_number.set_value
data:
entity_id: "{{ ent }}"
value: "{{ val|float }}"
# 1) Lights: toggle[_NN] -> if on turn off, else turn on to NN
- conditions: "{{ is_light and is_toggle }}"
sequence:
- choose:
@@ -248,13 +304,14 @@ script:
data:
entity_id: "{{ ent }}"
# 3) Lights: numeric brightness (0 = off)
# 3) Lights: numeric brightness, where 0 = off
- conditions: "{{ is_light and is_num and (val|int) > 0 }}"
sequence:
- service: light.turn_on
data:
entity_id: "{{ ent }}"
brightness_pct: "{{ val|int }}"
- conditions: "{{ is_light and is_num and (val|int) == 0 }}"
sequence:
- service: light.turn_off
@@ -267,6 +324,7 @@ script:
- service: light.turn_on
data:
entity_id: "{{ ent }}"
- conditions: "{{ is_light and not is_num and (val in [false, 'off', 'Off', 'OFF']) }}"
sequence:
- service: light.turn_off
@@ -279,6 +337,7 @@ script:
- service: switch.turn_on
data:
entity_id: "{{ ent }}"
- conditions: "{{ is_switch and (val in [false, 'off', 'Off', 'OFF']) }}"
sequence:
- service: switch.turn_off
@@ -322,7 +381,7 @@ automation:
- platform: state
entity_id: remote.lounge_tv
to: "on"
for: "00:00:02" #small debounce
for: "00:00:02"
condition:
- condition: state
entity_id: input_boolean.lounge_manual_override
@@ -340,7 +399,7 @@ automation:
- platform: state
entity_id: remote.lounge_tv
to: "off"
for: "00:00:02" #small debounce
for: "00:00:02"
condition:
- condition: state
entity_id: input_boolean.lounge_manual_override