Split boot_initialize_relays script

This commit is contained in:
Edward Firmo
2024-12-25 00:01:57 +01:00
parent 403cdce2b5
commit bcf4396c6f
2 changed files with 120 additions and 49 deletions

View File

@@ -435,6 +435,11 @@ script:
light_us_left->set_internal(!id(is_us_model)); light_us_left->set_internal(!id(is_us_model));
light_us_right->set_internal(!id(is_us_model)); light_us_right->set_internal(!id(is_us_model));
light_us_top->set_internal(!id(is_us_model)); light_us_top->set_internal(!id(is_us_model));
// LED Group Assignment:
// - For US model: gb_lights_1 = left side LEDs, gb_lights_2 = right side LEDs
// - For EU model: gb_lights_1 = bottom LEDs, gb_lights_2 = top LEDs
// Gang configurations determine which LED segments are active
switch (id(gang_count)) { switch (id(gang_count)) {
case 1: // 1 Gang case 1: // 1 Gang
if (id(is_us_model)) { if (id(is_us_model)) {

View File

@@ -25,6 +25,18 @@ globals:
type: bool type: bool
restore_value: false restore_value: false
initial_value: 'false' initial_value: 'false'
- id: boot_initialization_relays_light_modes
type: bool
restore_value: false
initial_value: 'false'
- id: boot_initialization_relays_relay_leds
type: bool
restore_value: false
initial_value: 'false'
- id: boot_initialization_relays_relay_modes
type: bool
restore_value: false
initial_value: 'false'
light: light:
# These lights are used for the physical relays to be shown as lights # These lights are used for the physical relays to be shown as lights
@@ -422,21 +434,114 @@ script:
- script.execute: boot_initialize_relays - script.execute: boot_initialize_relays
- id: boot_initialize_relays - id: boot_initialize_relays
mode: restart
then:
- script.execute: boot_initialize_relays_light_modes
- script.execute: boot_initialize_relays_relay_leds
- script.execute: boot_initialize_relays_relay_modes
- script.wait: boot_initialize_relays_light_modes
- script.wait: boot_initialize_relays_relay_leds
- script.wait: boot_initialize_relays_relay_modes
- wait_until:
condition:
- lambda: return id(boot_initialization_relays_light_modes);
- lambda: return id(boot_initialization_relays_relay_leds);
- lambda: return id(boot_initialization_relays_relay_modes);
- globals.set:
id: boot_initialization_relays
value: 'true'
- id: boot_initialize_relays_light_modes
mode: restart mode: restart
then: then:
- lambda: |- - lambda: |-
sl_relay_1_mode->set_internal(id(gang_count) < 1); // EU light modes
sl_relay_1_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 1); sl_relay_1_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 1);
sl_relay_1_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 1);
sl_relay_2_mode->set_internal(id(gang_count) < 2);
sl_relay_2_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 2); sl_relay_2_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 2);
sl_relay_2_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 2);
sl_relay_3_mode->set_internal(id(gang_count) < 3);
sl_relay_3_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 3); sl_relay_3_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 3);
sl_relay_3_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 3);
sl_relay_4_mode->set_internal(id(gang_count) < 4);
sl_relay_4_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 4); sl_relay_4_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 4);
// US light modes
sl_relay_1_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 1);
sl_relay_2_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 2);
sl_relay_3_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 3);
sl_relay_4_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 4); sl_relay_4_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 4);
// Set this section of initialization as completed
id(boot_initialization_relays_light_modes) = true;
- id: boot_initialize_relays_relay_leds
mode: restart
then:
- lambda: |-
const bool set_internal = not sw_expose_relays_leds_to_ha->state;
// EU model LEDs
// EU model - 1 Gang
light_eu_rl_1_1_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1);
light_eu_rl_1_1_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1);
// EU model - 2 Gang
light_eu_rl_1_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_1_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_2_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_2_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
// EU model - 3 Gang
light_eu_rl_1_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_1_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_2_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_2_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_3_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_3_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
// EU model - 4 Gang
light_eu_rl_1_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_1_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_2_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_2_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_3_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_3_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_4_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_4_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
// US model LEDs
// US model - 1 Gang
light_us_rl_1_1_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
light_us_rl_1_1_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
// US model - 2 Gang
light_us_rl_1_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_1_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_2_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_2_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
// US model - 3 Gang
light_us_rl_1_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_1_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_2_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_2_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_3_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_3_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
// US model - 4 Gang
light_us_rl_1_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_1_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_2_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_2_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_3_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_3_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_4_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_4_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
// Set this section of initialization as completed
id(boot_initialization_relays_relay_leds) = true;
- id: boot_initialize_relays_relay_modes
mode: restart
then:
- lambda: |-
// Set selector internal based on the model (num of relays)
sl_relay_1_mode->set_internal(id(gang_count) < 1);
sl_relay_2_mode->set_internal(id(gang_count) < 2);
sl_relay_3_mode->set_internal(id(gang_count) < 3);
sl_relay_4_mode->set_internal(id(gang_count) < 4);
// Set indicator (either switch or light) visible on Home Assistant
auto relay_mode_index = sl_relay_1_mode->active_index(); auto relay_mode_index = sl_relay_1_mode->active_index();
if (relay_mode_index.has_value()) { if (relay_mode_index.has_value()) {
light_output_1->set_internal(false or relay_mode_index.value() != 1); light_output_1->set_internal(false or relay_mode_index.value() != 1);
@@ -457,48 +562,9 @@ script:
light_output_4->set_internal(id(gang_count) < 4 or relay_mode_index.value() != 1); light_output_4->set_internal(id(gang_count) < 4 or relay_mode_index.value() != 1);
sw_relay_4->set_internal(id(gang_count) < 4 or relay_mode_index.value() != 0); sw_relay_4->set_internal(id(gang_count) < 4 or relay_mode_index.value() != 0);
} }
const bool set_internal = not sw_expose_relays_leds_to_ha->state;
light_eu_rl_1_1_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1); // Set this section of initialization as completed
light_eu_rl_1_1_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1); id(boot_initialization_relays_relay_modes) = true;
light_eu_rl_1_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_1_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_2_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_2_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
light_eu_rl_1_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_1_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_2_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_2_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_3_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_3_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
light_eu_rl_1_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_1_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_2_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_2_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_3_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_3_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_4_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_eu_rl_4_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
light_us_rl_1_1_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
light_us_rl_1_1_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
light_us_rl_1_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_1_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_2_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_2_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
light_us_rl_1_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_1_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_2_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_2_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_3_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_3_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
light_us_rl_1_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_1_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_2_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_2_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_3_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_3_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_4_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
light_us_rl_4_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
id(boot_initialization_relays) = true;
- id: !extend button_click_event - id: !extend button_click_event
then: then: