diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml index 20eb5a7..7573678 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml @@ -26,6 +26,12 @@ substitutions: BUTTON_PRESS_TIMEOUT: '10000' # Ignore if button is pressed for longer than this time, in msec BUTTON_LONG_PRESS_DELAY: '800' # The time to wait to consider a long press, in msec + # Button numbers constants + BUTTON_1_ID: '1' + BUTTON_2_ID: '2' + BUTTON_3_ID: '3' + BUTTON_4_ID: '4' + binary_sensor: - &binary_sensor_button_base id: bs_button_2 diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml index 0cf8b30..a044bb5 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml @@ -795,12 +795,12 @@ script: case 1: if (light_index >= id(gb_lights_1).size()) { ESP_LOGE("core_hw_leds", "Invalid set with %s light for Relay %" PRIu8, - light_mode_group_1.c_str(), light_index); + light_mode_group_1.c_str(), light_index+1); return; } if (state and !id(gb_lights_1)[light_index]->current_values.is_on()) { ESP_LOGI("core_hw_leds", "Turn-on %s light for Relay %" PRIu8, - light_mode_group_1.c_str(), light_index); + light_mode_group_1.c_str(), light_index+1); auto call = id(gb_lights_1)[light_index]->turn_on(); if (LIGHT_TRANSITION_TURN_ON > 0) call.set_transition_length(LIGHT_TRANSITION_TURN_ON); // in ms @@ -809,7 +809,7 @@ script: call.perform(); } else if (!state and id(gb_lights_1)[light_index]->current_values.is_on()) { ESP_LOGI("core_hw_leds", "Turn-off %s light for Relay %" PRIu8, - light_mode_group_1.c_str(), light_index); + light_mode_group_1.c_str(), light_index+1); auto call = id(gb_lights_1)[light_index]->turn_off(); if (LIGHT_TRANSITION_TURN_OFF > 0) call.set_transition_length(LIGHT_TRANSITION_TURN_OFF); // in ms @@ -819,12 +819,12 @@ script: case 2: if (light_index >= id(gb_lights_2).size()) { ESP_LOGE("core_hw_leds", "Invalid set with %s light for Relay %" PRIu8, - light_mode_group_2.c_str(), light_index); + light_mode_group_2.c_str(), light_index+1); return; } if (state and !id(gb_lights_2)[light_index]->current_values.is_on()) { ESP_LOGI("core_hw_leds", "Turn-on %s light for Relay %" PRIu8, - light_mode_group_2.c_str(), light_index); + light_mode_group_2.c_str(), light_index+1); auto call = id(gb_lights_2)[light_index]->turn_on(); if (LIGHT_TRANSITION_TURN_ON > 0) call.set_transition_length(LIGHT_TRANSITION_TURN_ON); // in ms @@ -833,7 +833,7 @@ script: call.perform(); } else if (!state and id(gb_lights_2)[light_index]->current_values.is_on()) { ESP_LOGI("core_hw_leds", "Turn-off %s light for Relay %" PRIu8, - light_mode_group_2.c_str(), light_index); + light_mode_group_2.c_str(), light_index+1); auto call = id(gb_lights_2)[light_index]->turn_off(); if (LIGHT_TRANSITION_TURN_OFF > 0) call.set_transition_length(LIGHT_TRANSITION_TURN_OFF); // in ms diff --git a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml index dc59f0a..80b6bd5 100644 --- a/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml +++ b/ESPHome/TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml @@ -11,6 +11,11 @@ ##### - For normal system use, modifications to this file are NOT required. ##### #################################################################################################### --- +substitutions: + RELAY_MODE_TEXT_SWITCH: "Switch" + RELAY_MODE_TEXT_LIGHT: "Light" + RELAY_MODE_TEXT_NOT_USED: "Not in use" + globals: - id: boot_initialization_relays type: bool @@ -19,24 +24,82 @@ globals: light: # These lights are used for the physical relays to be shown as lights - - &light_binary_base - id: light_output_1 + - id: light_output_1 name: Light output 1 output: output_relay_1 platform: binary internal: true + on_turn_on: + then: + - if: + condition: + - switch.is_off: sw_relay_1 + then: + - switch.turn_on: sw_relay_1 + on_turn_off: + then: + - if: + condition: + - switch.is_on: sw_relay_1 + then: + - switch.turn_off: sw_relay_1 - id: light_output_2 name: Light output 2 output: output_relay_2 - <<: *light_binary_base + platform: binary + internal: true + on_turn_on: + then: + - if: + condition: + - switch.is_off: sw_relay_2 + then: + - switch.turn_on: sw_relay_2 + on_turn_off: + then: + - if: + condition: + - switch.is_on: sw_relay_2 + then: + - switch.turn_off: sw_relay_2 - id: light_output_3 name: Light output 3 output: output_relay_3 - <<: *light_binary_base + platform: binary + internal: true + on_turn_on: + then: + - if: + condition: + - switch.is_off: sw_relay_3 + then: + - switch.turn_on: sw_relay_3 + on_turn_off: + then: + - if: + condition: + - switch.is_on: sw_relay_3 + then: + - switch.turn_off: sw_relay_3 - id: light_output_4 name: Light output 4 output: output_relay_4 - <<: *light_binary_base + platform: binary + internal: true + on_turn_on: + then: + - if: + condition: + - switch.is_off: sw_relay_4 + then: + - switch.turn_on: sw_relay_4 + on_turn_off: + then: + - if: + condition: + - switch.is_on: sw_relay_4 + then: + - switch.turn_off: sw_relay_4 output: - id: output_relay_1 @@ -127,24 +190,20 @@ script: // Toggle relay if corresponding button action is enabled switch (button_id) { - case 1: - if (sl_button_1_action->active_index().has_value() and - sl_button_1_action->active_index().value() == 1) + case ${BUTTON_1_ID}: + if (sl_button_1_action->state != "${RELAY_MODE_TEXT_NOT_USED}") sw_relay_1->toggle(); break; - case 2: - if (sl_button_2_action->active_index().has_value() and - sl_button_2_action->active_index().value() == 1) + case ${BUTTON_2_ID}: + if (sl_button_2_action->state != "${RELAY_MODE_TEXT_NOT_USED}") sw_relay_2->toggle(); break; - case 3: - if (sl_button_3_action->active_index().has_value() and - sl_button_3_action->active_index().value() == 1) + case ${BUTTON_3_ID}: + if (sl_button_3_action->state != "${RELAY_MODE_TEXT_NOT_USED}") sw_relay_3->toggle(); break; - case 4: - if (sl_button_4_action->active_index().has_value() and - sl_button_4_action->active_index().value() == 1) + case ${BUTTON_4_ID}: + if (sl_button_4_action->state != "${RELAY_MODE_TEXT_NOT_USED}") sw_relay_4->toggle(); break; } @@ -226,12 +285,13 @@ script: select: - &relay_select_mode_base id: sl_relay_1_mode - name: Relay 1 mode + name: Relay 1 display mode platform: template options: - - "Relay" - - "Light" - - "Not in use" + - "${RELAY_MODE_TEXT_SWITCH}" + - "${RELAY_MODE_TEXT_LIGHT}" + - "${RELAY_MODE_TEXT_NOT_USED}" + initial_option: "${RELAY_MODE_TEXT_SWITCH}" optimistic: true restore_value: true internal: true @@ -240,44 +300,107 @@ select: icon: mdi:dip-switch - id: sl_relay_2_mode - name: Relay 2 mode + name: Relay 2 display mode <<: *relay_select_mode_base - id: sl_relay_3_mode - name: Relay 3 mode + name: Relay 3 display mode <<: *relay_select_mode_base - id: sl_relay_4_mode - name: Relay 4 mode + name: Relay 4 display mode <<: *relay_select_mode_base switch: - - &relay_switch_base - id: sw_relay_1 + - id: sw_relay_1 name: Relay 1 - platform: output output: output_relay_1 + platform: output restore_mode: RESTORE_DEFAULT_OFF internal: true on_turn_on: then: - script.execute: show_relay_status + - if: + condition: + - light.is_off: light_output_1 + then: + light.turn_on: light_output_1 on_turn_off: then: - script.execute: show_relay_status + - if: + condition: + - light.is_on: light_output_1 + then: + - light.turn_off: light_output_1 - id: sw_relay_2 name: Relay 2 output: output_relay_2 - <<: *relay_switch_base + platform: output + restore_mode: RESTORE_DEFAULT_OFF + internal: true + on_turn_on: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_off: light_output_2 + then: + light.turn_on: light_output_2 + on_turn_off: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_on: light_output_2 + then: + - light.turn_off: light_output_2 - id: sw_relay_3 name: Relay 3 output: output_relay_3 - <<: *relay_switch_base + platform: output + restore_mode: RESTORE_DEFAULT_OFF + internal: true + on_turn_on: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_off: light_output_3 + then: + - light.turn_on: light_output_3 + on_turn_off: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_on: light_output_3 + then: + - light.turn_off: light_output_3 - id: sw_relay_4 name: Relay 4 output: output_relay_4 - <<: *relay_switch_base + platform: output + restore_mode: RESTORE_DEFAULT_OFF + internal: true + on_turn_on: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_off: light_output_4 + then: + - light.turn_on: light_output_4 + on_turn_off: + then: + - script.execute: show_relay_status + - if: + condition: + - light.is_on: light_output_4 + then: + - light.turn_off: light_output_4 ... diff --git a/TX-Ultimate-Easy-ESPHome.yaml b/TX-Ultimate-Easy-ESPHome.yaml index f3b95c3..9823def 100644 --- a/TX-Ultimate-Easy-ESPHome.yaml +++ b/TX-Ultimate-Easy-ESPHome.yaml @@ -16,8 +16,8 @@ wifi: packages: remote_package: url: https://github.com/edwardtfn/TX-Ultimate-Easy - ref: main - refresh: 30s + ref: latest # Or you can specify a version, like `ref: v2024.12.6` + refresh: 5min files: - ESPHome/TX-Ultimate-Easy-ESPHome_core.yaml # - ESPHome/TX-Ultimate-Easy-ESPHome_addon_ble_proxy.yaml # Adds experimental BLE proxy support (limited)