additional esphome devices and fixes
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user