From 96db05cc34f1cfdc3614564214046569d6062cc0 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 00:24:02 +0100 Subject: [PATCH 1/9] Fix typo --- ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml index 22374f6..b2acc9f 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml @@ -817,7 +817,7 @@ script: id(gb_lights_2) = { light_eu_rl_1_3_top, light_eu_rl_2_3_top, light_eu_rl_3_3_top }; } break; - case 4: // 3 Gang + case 4: // 4 Gang if (is_model_us) { id(gb_lights_1) = { light_us_rl_1_4_left, light_us_rl_2_4_left, light_us_rl_3_4_left, light_us_rl_4_4_left }; From ee8ff66addbc48387336bbfddb607110ed32e677 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 08:54:41 +0100 Subject: [PATCH 2/9] Removed LED auxiliary files Using YAML anchors instead. It makes it cleaner and easier to understand. --- ...TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml | 352 ++++++++---------- ...-Easy-ESPHome_core_hw_leds_light_base.yaml | 4 - ...sy-ESPHome_core_hw_leds_light_effects.yaml | 40 -- ...y-ESPHome_core_hw_leds_light_internal.yaml | 4 - ...-Ultimate-Easy-ESPHome_core_hw_relays.yaml | 21 ++ 5 files changed, 168 insertions(+), 253 deletions(-) delete mode 100644 ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml delete mode 100644 ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml delete mode 100644 ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml index b2acc9f..0cf8b30 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml @@ -21,9 +21,9 @@ substitutions: LIGHT_MODE_BOTTOM_TEXT: "Bottom" LIGHT_MODE_TOP_TEXT: "Top" - LIGHT_TRANSITION_TURN_ON: '0' # Transition time in msec - LIGHT_TRANSITION_TURN_OFF: '0' # Transition time in msec - LIGHT_BRIGHTNESS_TURN_ON: '0' # Brightness (1 to 100%, 0 to not set it) + LIGHT_TRANSITION_TURN_ON: '0' # Transition time in msec + LIGHT_TRANSITION_TURN_OFF: '0' # Transition time in msec + LIGHT_BRIGHTNESS_TURN_ON: '0' # Brightness (1 to 100%, 0 to not set it) globals: - id: gb_lights_1 @@ -34,27 +34,7 @@ globals: restore_value: false light: - - id: light_output_1 - name: Light output 1 - internal: true - platform: binary - output: output_relay_1 - - id: light_output_2 - name: Light output 2 - internal: true - platform: binary - output: output_relay_2 - - id: light_output_3 - name: Light output 3 - internal: true - platform: binary - output: output_relay_3 - - id: light_output_4 - name: Light output 4 - internal: true - platform: binary - output: output_relay_4 - + # These lights are controlling the LEDs on the device - id: light_full name: Light - All internal: true @@ -65,11 +45,51 @@ light: num_leds: 32 pin: GPIO13 - - id: light_eu + # Those lights are available based on the model selections + - &light_partition_with_effects + id: light_eu name: Light - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + platform: partition + default_transition_length: ${default_transition_length} + internal: true + effects: + - addressable_rainbow: + name: "Rainbow" + - addressable_rainbow: + name: "Rainbow - Fast" + speed: 50 + - pulse: + name: "Pulse" + transition_length: 1s + update_interval: 1s + - pulse: + name: "Pulse - Slow" + transition_length: 2s + update_interval: 2s + - addressable_scan: + name: "Scan" + move_interval: 100ms + scan_width: 3 + - addressable_twinkle: + name: "Twinkle" + twinkle_probability: 5% + progress_interval: 4ms + - addressable_random_twinkle: + name: "Random Twinkle" + twinkle_probability: 20% + progress_interval: 32ms + - addressable_fireworks: + name: "Fireworks" + update_interval: 32ms + spark_probability: 10% + use_random_color: false + fade_out_rate: 120 + - addressable_flicker: + name: "Flicker" + update_interval: 16ms + intensity: 5% + - random: + name: "Random" segments: - id: light_full from: 0 @@ -77,20 +97,17 @@ light: - id: light_us name: Light - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects segments: - id: light_full from: 0 to: 31 - # Those lights are available based on the model selections - - id: light_eu_bottom + - &light_partition_with_effects_disabled + id: light_eu_bottom name: Light - Bottom - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + disabled_by_default: true + <<: *light_partition_with_effects segments: - id: light_full from: 6 @@ -98,9 +115,7 @@ light: reversed: true - id: light_eu_left name: Light - Left - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 13 @@ -108,9 +123,7 @@ light: reversed: true - id: light_eu_right name: Light - Right - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 27 @@ -122,9 +135,7 @@ light: reversed: false - id: light_eu_top name: Light - Top - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 20 @@ -132,9 +143,7 @@ light: reversed: false - id: light_us_bottom name: Light - Bottom - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 9 @@ -142,9 +151,7 @@ light: reversed: true - id: light_us_left name: Light - Left - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 15 @@ -152,9 +159,7 @@ light: reversed: true - id: light_us_right name: Light - Right - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 31 @@ -166,444 +171,399 @@ light: reversed: false - id: light_us_top name: Light - Top - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml + <<: *light_partition_with_effects_disabled segments: - id: light_full from: 25 to: 30 reversed: false - - id: light_00 + - &light_partition_individual_led + id: light_00 name: Light - LED 00 + platform: partition disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + default_transition_length: ${default_transition_length} segments: - id: light_full from: 0 to: 0 - id: light_01 name: Light - LED 01 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 1 to: 1 - id: light_02 name: Light - LED 02 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 2 to: 2 - id: light_03 name: Light - LED 03 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 3 to: 3 - id: light_04 name: Light - LED 04 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 4 to: 4 - id: light_05 name: Light - LED 05 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 5 to: 5 - id: light_06 name: Light - LED 06 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 6 to: 6 - id: light_07 name: Light - LED 07 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 7 to: 7 - id: light_08 name: Light - LED 08 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 8 to: 8 - id: light_09 name: Light - LED 09 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 9 to: 9 - id: light_10 name: Light - LED 10 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 10 to: 10 - id: light_11 name: Light - LED 11 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 11 to: 11 - id: light_12 name: Light - LED 12 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 12 to: 12 - id: light_13 name: Light - LED 13 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 13 to: 13 - id: light_14 name: Light - LED 14 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 14 to: 14 - id: light_15 name: Light - LED 15 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 15 to: 15 - id: light_16 name: Light - LED 16 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 16 to: 16 - id: light_17 name: Light - LED 17 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 17 to: 17 - id: light_18 name: Light - LED 18 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 18 to: 18 - id: light_19 name: Light - LED 19 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 19 to: 19 - id: light_20 name: Light - LED 20 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 20 to: 20 - id: light_21 name: Light - LED 21 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 21 to: 21 - id: light_22 name: Light - LED 22 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 22 to: 22 - id: light_23 name: Light - LED 23 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 23 to: 23 - id: light_24 name: Light - LED 24 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 24 to: 24 - id: light_25 name: Light - LED 25 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 25 to: 25 - id: light_26 name: Light - LED 26 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 26 to: 26 - id: light_27 name: Light - LED 27 - disabled_by_default: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_individual_led segments: - id: light_full from: 27 to: 27 - - id: light_28 + - id: light_28 # US Model only name: Light - LED 28 - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + internal: true + <<: *light_partition_individual_led segments: - id: light_full from: 28 to: 28 - - id: light_29 + - id: light_29 # US Model only name: Light - LED 29 - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + internal: true + <<: *light_partition_individual_led segments: - id: light_full from: 29 to: 29 - - id: light_30 + - id: light_30 # US Model only name: Light - LED 30 - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + internal: true + <<: *light_partition_individual_led segments: - id: light_full from: 30 to: 30 - - id: light_31 + - id: light_31 # US Model only name: Light - LED 31 - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + internal: true + <<: *light_partition_individual_led segments: - id: light_full from: 31 to: 31 - - id: light_eu_rl_1_1_bottom + # These lights are used to indicate relay's statuses + - &light_partition_relays + id: light_eu_rl_1_1_bottom name: Light - Relay 1 of 1 (bottom) + platform: partition internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + default_transition_length: ${default_transition_length} segments: - id: light_full from: 9 to: 9 - id: light_eu_rl_1_1_top name: Light - Relay 1 of 1 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 23 to: 23 - id: light_eu_rl_1_2_bottom name: Light - Relay 1 of 2 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 11 to: 11 - id: light_eu_rl_1_2_top name: Light - Relay 1 of 2 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 21 to: 21 - id: light_eu_rl_2_2_bottom name: Light - Relay 2 of 2 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 7 to: 7 - id: light_eu_rl_2_2_top name: Light - Relay 2 of 2 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 25 to: 25 - id: light_eu_rl_1_3_bottom name: Light - Relay 1 of 3 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 12 to: 12 - id: light_eu_rl_1_3_top name: Light - Relay 1 of 3 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 20 to: 20 - id: light_eu_rl_2_3_bottom name: Light - Relay 2 of 3 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 9 to: 9 - id: light_eu_rl_2_3_top name: Light - Relay 2 of 3 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 23 to: 23 - id: light_eu_rl_3_3_bottom name: Light - Relay 3 of 3 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 6 to: 6 - id: light_eu_rl_3_3_top name: Light - Relay 3 of 3 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 26 to: 26 - id: light_eu_rl_1_4_bottom name: Light - Relay 1 of 4 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 12 to: 12 - id: light_eu_rl_1_4_top name: Light - Relay 1 of 4 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 20 to: 20 - id: light_eu_rl_2_4_bottom name: Light - Relay 2 of 4 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 10 to: 10 - id: light_eu_rl_2_4_top name: Light - Relay 2 of 4 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 22 to: 22 - id: light_eu_rl_3_4_bottom name: Light - Relay 3 of 4 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 8 to: 8 - id: light_eu_rl_3_4_top name: Light - Relay 3 of 4 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 24 to: 24 - id: light_eu_rl_4_4_bottom name: Light - Relay 4 of 4 (bottom) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 6 to: 6 - id: light_eu_rl_4_4_top name: Light - Relay 4 of 4 (top) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 26 to: 26 - id: light_us_rl_1_1_left name: Light - Relay 1 of 1 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 15 to: 24 - id: light_us_rl_1_1_right name: Light - Relay 1 of 1 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 31 @@ -613,16 +573,14 @@ light: to: 8 - id: light_us_rl_1_2_left name: Light - Relay 1 of 2 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 20 to: 24 - id: light_us_rl_1_2_right name: Light - Relay 1 of 2 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 31 @@ -632,128 +590,112 @@ light: to: 3 - id: light_us_rl_2_2_left name: Light - Relay 2 of 2 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 15 to: 19 - id: light_us_rl_2_2_right name: Light - Relay 2 of 2 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 4 to: 8 - id: light_us_rl_1_3_left name: Light - Relay 1 of 3 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 22 to: 23 - id: light_us_rl_1_3_right name: Light - Relay 1 of 3 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 0 to: 1 - id: light_us_rl_2_3_left name: Light - Relay 2 of 3 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 19 to: 20 - id: light_us_rl_2_3_right name: Light - Relay 2 of 3 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 3 to: 4 - id: light_us_rl_3_3_left name: Light - Relay 3 of 3 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 17 to: 18 - id: light_us_rl_3_3_right name: Light - Relay 3 of 3 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 6 to: 7 - id: light_us_rl_1_4_left name: Light - Relay 1 of 4 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 12 to: 12 - id: light_us_rl_1_4_right name: Light - Relay 1 of 4 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 31 to: 31 - id: light_us_rl_2_4_left name: Light - Relay 2 of 4 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 24 to: 24 - id: light_us_rl_2_4_right name: Light - Relay 2 of 4 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 2 to: 2 - id: light_us_rl_3_4_left name: Light - Relay 3 of 4 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 21 to: 21 - id: light_us_rl_3_4_right name: Light - Relay 3 of 4 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 4 to: 4 - id: light_us_rl_4_4_left name: Light - Relay 4 of 4 (left) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 19 to: 19 - id: light_us_rl_4_4_right name: Light - Relay 4 of 4 (right) - internal: true - <<: !include TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml + <<: *light_partition_relays segments: - id: light_full from: 7 diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml deleted file mode 100644 index 9430a37..0000000 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_base.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- -platform: partition -default_transition_length: ${default_transition_length} -... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml deleted file mode 100644 index dcdf7fb..0000000 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_effects.yaml +++ /dev/null @@ -1,40 +0,0 @@ ---- -effects: - - addressable_rainbow: - name: "Rainbow" - - addressable_rainbow: - name: "Rainbow - Fast" - speed: 50 - - pulse: - name: "Pulse" - transition_length: 1s - update_interval: 1s - - pulse: - name: "Pulse - Slow" - transition_length: 2s - update_interval: 2s - - addressable_scan: - name: "Scan" - move_interval: 100ms - scan_width: 3 - - addressable_twinkle: - name: "Twinkle" - twinkle_probability: 5% - progress_interval: 4ms - - addressable_random_twinkle: - name: "Random Twinkle" - twinkle_probability: 20% - progress_interval: 32ms - - addressable_fireworks: - name: "Fireworks" - update_interval: 32ms - spark_probability: 10% - use_random_color: false - fade_out_rate: 120 - - addressable_flicker: - name: "Flicker" - update_interval: 16ms - intensity: 5% - - random: - name: "Random" -... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml deleted file mode 100644 index 42e596a..0000000 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds_light_internal.yaml +++ /dev/null @@ -1,4 +0,0 @@ ---- -internal: true -disabled_by_default: true -... diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml index e096d2a..79a92ce 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml @@ -66,6 +66,27 @@ globals: restore_value: false initial_value: 'false' +light: + # These lights are used for the physical relays to be shown as lights + - &light_binary_base + id: light_output_1 + name: Light output 1 + output: output_relay_1 + platform: binary + internal: true + - id: light_output_2 + name: Light output 2 + output: output_relay_2 + <<: *light_binary_base + - id: light_output_3 + name: Light output 3 + output: output_relay_3 + <<: *light_binary_base + - id: light_output_4 + name: Light output 4 + output: output_relay_4 + <<: *light_binary_base + output: - id: output_relay_1 platform: gpio From 35bf4bc0ec498f59d1560cbe04c1913bf575c364 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:17:32 +0100 Subject: [PATCH 3/9] New versioning --- .github/workflows/validate_esphome_beta.yml | 3 +- .github/workflows/versioning.yml | 45 +++++++++++++++++ README.md | 6 +-- versioning/README.md | 55 +++++++++++++++++++++ versioning/bump_version.sh | 39 +++++++++++++++ 5 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/versioning.yml create mode 100644 versioning/README.md create mode 100644 versioning/bump_version.sh diff --git a/.github/workflows/validate_esphome_beta.yml b/.github/workflows/validate_esphome_beta.yml index 43d5f7e..5d16d51 100644 --- a/.github/workflows/validate_esphome_beta.yml +++ b/.github/workflows/validate_esphome_beta.yml @@ -1,8 +1,7 @@ --- name: Validate ESPHome (Beta) -# yamllint disable-line rule:truthy -on: +on: # yamllint disable-line rule:truthy push: paths: - "*.yaml" diff --git a/.github/workflows/versioning.yml b/.github/workflows/versioning.yml new file mode 100644 index 0000000..dbdb406 --- /dev/null +++ b/.github/workflows/versioning.yml @@ -0,0 +1,45 @@ +# Workflow for managing versioning, tagging, and conditional updates +--- +name: Bump Version and Tag + +on: # yamllint disable-line rule:truthy + push: + branches: + - main + workflow_dispatch: + inputs: + update_stable: + description: "Update stable tag?" + required: true + default: "false" + +jobs: + versioning: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Git + run: | + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + + - name: Bump Version + run: | + chmod +x ./versioning/bump_version.sh + ./versioning/bump_version.sh + + - name: Push Changes and Tags + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git push origin main + git push origin --tags --force + + - name: Conditionally Update Stable Tag + if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.update_stable == 'true' }} + run: | + git tag -f stable + git push origin stable --force +... diff --git a/README.md b/README.md index a184ba5..80a5575 100644 --- a/README.md +++ b/README.md @@ -98,17 +98,15 @@ TX Ultimate Easy offers extensive configuration options: We welcome contributions from the community! Here's how you can help: 1. Fork the repository -2. Create a feature branch from `dev` +2. Create a feature branch from `main` 3. Make your changes -4. Submit a pull request targeting the `dev` branch +4. Submit a pull request targeting the `main` branch Please ensure your code follows our standards: - Passes all lint checks (YAML, C++, Markdown) - Includes appropriate documentation - Follows existing code style -All pull requests should be made against the `dev` branch. We don't accept pull requests directly to `main` as it's reserved for stable releases. - ## Support and Community Need help? Here are your options: diff --git a/versioning/README.md b/versioning/README.md new file mode 100644 index 0000000..60d4c7e --- /dev/null +++ b/versioning/README.md @@ -0,0 +1,55 @@ +# Versioning + +## Overview +This project uses a time-based versioning scheme: `year.month.sequential_number`. +This scheme makes it easy to identify when a version was released and provides a clear order for releases within a given month. + +### Examples +- `2024.12.01` – First release of December 2024. +- `2024.12.02` – Second release of December 2024. +- `2025.01.01` – First release of January 2025. + +## Files +- **`VERSION`**: Contains the current version of the project as plain text. +- **`bump_version.sh`**: A script to increment the version based on the current date and release sequence. +- **`README.md`**: Documentation for the versioning process. + +## Versioning Rules +1. The version format is `YYYY.MM.NN`, where: + - `YYYY` is the current year. + - `MM` is the current month (two digits). + - `NN` is the sequential release number within the month (starting at `01`). +2. On each new merge to the `main` branch: + - If the month hasn’t changed, the sequential number (`NN`) is incremented. + - If the month has changed, the sequential number resets to `01`. + +## Usage + +### Automatically Managed +The versioning process is fully integrated into the workflow. Developers do not need to manually increment or manage versions. +Simply push your changes, and the system will handle version updates and tagging automatically. + +### Access Version in Code +The version is accessible in the ESPHome YAML configuration file (`TX-Ultimate-Easy-ESPHome_core.yaml`) using the following syntax: + +```yaml +substitutions: + version: <<: !include ../versioning/VERSION +``` + +This ensures the correct version is used directly in the ESPHome setup without requiring manual updates. + +## Benefits of this Versioning Approach +1. **Clarity**: Each version is tied to a specific point in time, making it easy to track releases. +2. **Automation**: The process is seamless and reduces manual effort. +3. **Scalability**: Supports frequent releases while keeping the versioning system organized. +4. **Traceability**: Git tags and the `VERSION` file ensure releases are well-documented and easily accessible. + +## Extending the System +- Add more scripts to handle additional automation tasks, such as generating changelogs or notifying stakeholders of new releases. +- Enhance the `bump_version.sh` script to support different versioning schemes if needed. +- Integrate versioning information into your deployment pipelines to label builds with their corresponding version. + +### GitHub Actions Workflow Adjustment +The GitHub Actions workflow for versioning runs only when changes are merged into the `main` branch, ensuring no premature version updates during PR creation. +This behavior is automatically handled by the integrated workflow. diff --git a/versioning/bump_version.sh b/versioning/bump_version.sh new file mode 100644 index 0000000..5571617 --- /dev/null +++ b/versioning/bump_version.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +VERSION_FILE="./versioning/VERSION" +VERSION_YAML_FILE="./versioning/VERSION_YAML" + +# Read the current version +if [ -f "$VERSION_FILE" ]; then + CURRENT_VERSION=$(cat $VERSION_FILE) +else + CURRENT_VERSION="0.0.0" # Default if file doesn't exist +fi + +# Extract components +CURRENT_YEAR=$(date +%Y) +CURRENT_MONTH=$(date +%m) +CURRENT_SEQ=$(echo "$CURRENT_VERSION" | awk -F. '{print $3}') + +VERSION_YEAR=$(echo "$CURRENT_VERSION" | awk -F. '{print $1}') +VERSION_MONTH=$(echo "$CURRENT_VERSION" | awk -F. '{print $2}') + +# Determine new version +if [[ "$CURRENT_YEAR" == "$VERSION_YEAR" && "$CURRENT_MONTH" == "$VERSION_MONTH" ]]; then + NEW_SEQ=$(printf "%02d" $((10#$CURRENT_SEQ + 1))) # Increment sequence +else + NEW_SEQ="01" # Reset sequence for a new month +fi + +NEW_VERSION="${CURRENT_YEAR}.${CURRENT_MONTH}.${NEW_SEQ}" + +# Update the plain text VERSION file +echo "$NEW_VERSION" > "$VERSION_FILE" + +# Update the YAML VERSION_YAML file +echo "version: $NEW_VERSION" > "$VERSION_YAML_FILE" + +# Commit and tag +git add "$VERSION_FILE" "$VERSION_YAML_FILE" +git commit -m "Bump version to $NEW_VERSION" +git tag "v$NEW_VERSION" From 26a244cbedcfa4aea86b04db875e6ad7d00f408f Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:28:14 +0100 Subject: [PATCH 4/9] Fix potential overflow in sequence number Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- versioning/bump_version.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/versioning/bump_version.sh b/versioning/bump_version.sh index 5571617..6fa82c2 100644 --- a/versioning/bump_version.sh +++ b/versioning/bump_version.sh @@ -20,7 +20,12 @@ VERSION_MONTH=$(echo "$CURRENT_VERSION" | awk -F. '{print $2}') # Determine new version if [[ "$CURRENT_YEAR" == "$VERSION_YEAR" && "$CURRENT_MONTH" == "$VERSION_MONTH" ]]; then - NEW_SEQ=$(printf "%02d" $((10#$CURRENT_SEQ + 1))) # Increment sequence + NEXT_SEQ=$((10#$CURRENT_SEQ + 1)) + if [ $NEXT_SEQ -gt 99 ]; then + echo "Error: Sequence number would exceed 99" + exit 1 + fi + NEW_SEQ=$(printf "%02d" $NEXT_SEQ) else NEW_SEQ="01" # Reset sequence for a new month fi From 23436428a413468525495319a88f106d660b5559 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:29:12 +0100 Subject: [PATCH 5/9] Add error handling for invalid version format Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- versioning/bump_version.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/versioning/bump_version.sh b/versioning/bump_version.sh index 6fa82c2..d11d706 100644 --- a/versioning/bump_version.sh +++ b/versioning/bump_version.sh @@ -13,6 +13,10 @@ fi # Extract components CURRENT_YEAR=$(date +%Y) CURRENT_MONTH=$(date +%m) +if ! [[ "$CURRENT_VERSION" =~ ^[0-9]{4}\.[0-9]{2}\.[0-9]{2}$ ]]; then + echo "Error: Invalid version format in $VERSION_FILE" + exit 1 +fi CURRENT_SEQ=$(echo "$CURRENT_VERSION" | awk -F. '{print $3}') VERSION_YEAR=$(echo "$CURRENT_VERSION" | awk -F. '{print $1}') From 04ca752c3be99a4e97f5b0e487b47b680b8604bc Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:29:46 +0100 Subject: [PATCH 6/9] Add error handling for git operations Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- versioning/bump_version.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/versioning/bump_version.sh b/versioning/bump_version.sh index d11d706..6cd72c6 100644 --- a/versioning/bump_version.sh +++ b/versioning/bump_version.sh @@ -43,6 +43,15 @@ echo "$NEW_VERSION" > "$VERSION_FILE" echo "version: $NEW_VERSION" > "$VERSION_YAML_FILE" # Commit and tag -git add "$VERSION_FILE" "$VERSION_YAML_FILE" -git commit -m "Bump version to $NEW_VERSION" -git tag "v$NEW_VERSION" +if ! git add "$VERSION_FILE" "$VERSION_YAML_FILE"; then + echo "Error: Failed to stage version files" + exit 1 +fi +if ! git commit -m "Bump version to $NEW_VERSION"; then + echo "Error: Failed to commit version bump" + exit 1 +fi +if ! git tag "v$NEW_VERSION"; then + echo "Error: Failed to create version tag" + exit 1 +fi From 5569260f925bcdcc643b96c833c3f4d44ddc7806 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:30:28 +0100 Subject: [PATCH 7/9] Update checkout action version Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .github/workflows/versioning.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/versioning.yml b/.github/workflows/versioning.yml index dbdb406..3a5f76f 100644 --- a/.github/workflows/versioning.yml +++ b/.github/workflows/versioning.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Git run: | From 737343e395a6e623b840abec4c18688af9fd6269 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:31:23 +0100 Subject: [PATCH 8/9] Add fetch-depth: 0 to checkout action Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .github/workflows/versioning.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/versioning.yml b/.github/workflows/versioning.yml index 3a5f76f..c15dfb5 100644 --- a/.github/workflows/versioning.yml +++ b/.github/workflows/versioning.yml @@ -34,8 +34,14 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git push origin main - git push origin --tags --force + if ! git push origin main; then + echo "Failed to push to main branch" + exit 1 + fi + if ! git push origin --tags --force; then + echo "Failed to push tags" + exit 1 + fi - name: Conditionally Update Stable Tag if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.update_stable == 'true' }} From dc9e19d43c0310b7c1265b0d51420d9e53336294 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:33:36 +0100 Subject: [PATCH 9/9] Add section about version validation --- versioning/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/versioning/README.md b/versioning/README.md index 60d4c7e..fd527fb 100644 --- a/versioning/README.md +++ b/versioning/README.md @@ -50,6 +50,17 @@ This ensures the correct version is used directly in the ESPHome setup without r - Enhance the `bump_version.sh` script to support different versioning schemes if needed. - Integrate versioning information into your deployment pipelines to label builds with their corresponding version. +## Version Validation + +The versioning system enforces strict format validation: +- Year must be a 4-digit number (YYYY) +- Month must be a 2-digit number (01-12) +- Sequence must be a 2-digit number (01-99) + +The `bump_version.sh` script includes validation checks and will fail if: +- The version format is invalid +- The sequence number would exceed 99 in a month + ### GitHub Actions Workflow Adjustment The GitHub Actions workflow for versioning runs only when changes are merged into the `main` branch, ensuring no premature version updates during PR creation. This behavior is automatically handled by the integrated workflow.