Compare commits
12 Commits
v2024.12.1
...
v2024.12.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0109771731 | ||
|
|
b7df1686b6 | ||
|
|
c22d8eb847 | ||
|
|
4378952d97 | ||
|
|
876d03ace5 | ||
|
|
5ddf5388bd | ||
|
|
7aee88c38f | ||
|
|
e546fedf08 | ||
|
|
cca59bbe2a | ||
|
|
aec1aa69d3 | ||
|
|
bcf4396c6f | ||
|
|
403cdce2b5 |
@@ -96,6 +96,12 @@ rtttl:
|
||||
- id: rtttl_speaker
|
||||
speaker: mp_speaker
|
||||
|
||||
script:
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
ESP_LOGCONFIG("addon_ble_proxy", "Add-on BLE Proxy installed");
|
||||
|
||||
speaker:
|
||||
- id: mp_speaker
|
||||
platform: i2s_audio
|
||||
|
||||
@@ -25,12 +25,14 @@ substitutions:
|
||||
TX_MODEL_3_GANG_TEXT: "3 Gang"
|
||||
TX_MODEL_4_GANG_TEXT: "4 Gang"
|
||||
|
||||
DUMP_CONFIG_CALLER_DELAY: 10s # Delay to dump config after requested
|
||||
|
||||
packages:
|
||||
# yamllint disable rule:colons
|
||||
core_hw_buttons: !include TX-Ultimate-Easy-ESPHome_core_hw_buttons.yaml
|
||||
core_hw_leds: !include TX-Ultimate-Easy-ESPHome_core_hw_leds.yaml
|
||||
core_hw_media_player: !include TX-Ultimate-Easy-ESPHome_core_hw_media_player.yaml
|
||||
core_hw_relays: !include TX-Ultimate-Easy-ESPHome_core_hw_relays.yaml
|
||||
core_hw_speaker: !include TX-Ultimate-Easy-ESPHome_core_hw_speaker.yaml
|
||||
core_hw_touch: !include TX-Ultimate-Easy-ESPHome_core_hw_touch.yaml
|
||||
core_hw_vibration: !include TX-Ultimate-Easy-ESPHome_core_hw_vibration.yaml
|
||||
# yamllint enable rule:colons
|
||||
@@ -39,8 +41,26 @@ api:
|
||||
id: api_server
|
||||
on_client_connected:
|
||||
then:
|
||||
- script.execute: dump_config_caller
|
||||
- script.execute: publish_device_info
|
||||
|
||||
binary_sensor:
|
||||
- id: bs_pending_restart
|
||||
name: Pending Restart Status
|
||||
internal: false
|
||||
disabled_by_default: false
|
||||
platform: template
|
||||
entity_category: diagnostic
|
||||
device_class: problem
|
||||
on_state:
|
||||
then:
|
||||
- lambda: |-
|
||||
if (x)
|
||||
ESP_LOGW("core", "Pending restart: YES");
|
||||
else
|
||||
ESP_LOGCONFIG("core", "Pending restart: No");
|
||||
- script.execute: dump_config_caller
|
||||
|
||||
button:
|
||||
- id: bt_restart
|
||||
name: Restart
|
||||
@@ -86,6 +106,12 @@ globals:
|
||||
restore_value: true
|
||||
initial_value: '0'
|
||||
|
||||
- id: gang_count_plural_suffix
|
||||
type: std::string
|
||||
restore_value: true
|
||||
max_restore_data_length: 3
|
||||
# initial_value: "''"
|
||||
|
||||
improv_serial:
|
||||
id: serial_improv
|
||||
|
||||
@@ -97,7 +123,7 @@ ota:
|
||||
|
||||
psram:
|
||||
mode: octal
|
||||
speed: 40MHz
|
||||
speed: 80MHz
|
||||
|
||||
script:
|
||||
- id: api_send_ha_event_boot
|
||||
@@ -130,11 +156,67 @@ script:
|
||||
- script.execute:
|
||||
id: api_send_ha_event_boot
|
||||
type: start
|
||||
- wait_until:
|
||||
condition:
|
||||
- lambda: return sl_tx_model_format->active_index().has_value();
|
||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
||||
- lambda: |-
|
||||
id(is_us_model) = (sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}");
|
||||
id(gang_count) = sl_tx_model_gang->active_index().value() + 1;
|
||||
if (id(gang_count) < 1 || id(gang_count) > 4) {
|
||||
ESP_LOGE("core_hw_leds", "Invalid number of gangs: %" PRIu8, id(gang_count));
|
||||
}
|
||||
id(gang_count_plural_suffix) = id(gang_count) > 1 ? "s" : "";
|
||||
|
||||
- id: boot_sequence
|
||||
mode: restart
|
||||
then:
|
||||
- script.execute: publish_device_info
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: false
|
||||
|
||||
- id: dump_config
|
||||
mode: restart
|
||||
then:
|
||||
# Extended by all modules
|
||||
- lambda: |-
|
||||
// Device identification
|
||||
ESP_LOGCONFIG("core", "Device friendly name: ${friendly_name}");
|
||||
ESP_LOGCONFIG("core", "Device name: ${name}");
|
||||
ESP_LOGCONFIG("core", "Device name (HA): %s", tx_device_name->state.c_str());
|
||||
ESP_LOGCONFIG("core", "Device hostname: %s", App.get_name().c_str());
|
||||
|
||||
// Version information
|
||||
ESP_LOGCONFIG("core", "ESPHome builder: %s", esphome_fw_version->state.c_str());
|
||||
ESP_LOGCONFIG("core", "TX Ultimate firmware version: ${version}");
|
||||
|
||||
// Framework detection
|
||||
#ifdef ARDUINO
|
||||
ESP_LOGCONFIG("core", "Framework: Arduino");
|
||||
#elif defined(USE_ESP_IDF)
|
||||
ESP_LOGCONFIG("core", "Framework: ESP-IDF");
|
||||
#else
|
||||
ESP_LOGW("core", "Framework: UNKNOWN");
|
||||
#endif
|
||||
|
||||
// Model configuration
|
||||
ESP_LOGCONFIG("core", "Model format (selected): %s", sl_tx_model_format->state.c_str());
|
||||
ESP_LOGCONFIG("core", "Model format (detected): %s", id(is_us_model) ? "US" : "EU");
|
||||
ESP_LOGCONFIG("core", "Gangs (selected): %s", sl_tx_model_gang->state.c_str());
|
||||
ESP_LOGCONFIG("core", "Gangs (detected): %" PRIu8 "-Gang%s", id(gang_count), id(gang_count_plural_suffix).c_str());
|
||||
|
||||
// System state
|
||||
if (bs_pending_restart->state)
|
||||
ESP_LOGW("core", "Pending restart: YES");
|
||||
else
|
||||
ESP_LOGCONFIG("core", "Pending restart: No");
|
||||
|
||||
- id: dump_config_caller
|
||||
mode: restart
|
||||
then:
|
||||
- delay: ${DUMP_CONFIG_CALLER_DELAY}
|
||||
- script.execute: dump_config
|
||||
|
||||
- id: publish_device_info
|
||||
mode: restart
|
||||
@@ -159,6 +241,9 @@ select:
|
||||
icon: mdi:tablet-cellphone
|
||||
on_value:
|
||||
then:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: true
|
||||
- lambda: |-
|
||||
id(is_us_model) = (x == "${TX_MODEL_FORMAT_US_TEXT}");
|
||||
ESP_LOGI("core", "New model selected: %s", id(is_us_model) ? "US" : "EU");
|
||||
@@ -180,6 +265,9 @@ select:
|
||||
icon: mdi:dip-switch
|
||||
on_value:
|
||||
then:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: true
|
||||
- lambda: |-
|
||||
id(gang_count) = static_cast<uint8_t>(i) + 1;
|
||||
ESP_LOGI("core", "New model selected: %" PRIu8 "-%s", id(gang_count), id(gang_count) > 1 ? "Gangs" : "Gang");
|
||||
|
||||
@@ -86,28 +86,19 @@ script:
|
||||
- id: boot_initialize_buttons
|
||||
mode: restart
|
||||
then:
|
||||
- wait_until:
|
||||
condition:
|
||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
||||
- lambda: |-
|
||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
||||
if (num_gangs < 1 || num_gangs > 4) {
|
||||
ESP_LOGE("core_hw_buttons", "Invalid number of gangs: %" PRIu8, num_gangs);
|
||||
return;
|
||||
}
|
||||
bs_button_1->publish_state(false);
|
||||
bs_button_1->set_internal(num_gangs < 1);
|
||||
sl_button_1_action->set_internal(num_gangs < 1);
|
||||
bs_button_1->set_internal(id(gang_count) < 1);
|
||||
sl_button_1_action->set_internal(id(gang_count) < 1);
|
||||
bs_button_2->publish_state(false);
|
||||
bs_button_2->set_internal(num_gangs < 2);
|
||||
sl_button_2_action->set_internal(num_gangs < 2);
|
||||
bs_button_2->set_internal(id(gang_count) < 2);
|
||||
sl_button_2_action->set_internal(id(gang_count) < 2);
|
||||
bs_button_3->publish_state(false);
|
||||
bs_button_3->set_internal(num_gangs < 3);
|
||||
sl_button_3_action->set_internal(num_gangs < 3);
|
||||
bs_button_3->set_internal(id(gang_count) < 3);
|
||||
sl_button_3_action->set_internal(id(gang_count) < 3);
|
||||
bs_button_4->publish_state(false);
|
||||
bs_button_4->set_internal(num_gangs < 4);
|
||||
sl_button_4_action->set_internal(num_gangs < 4);
|
||||
bs_button_4->set_internal(id(gang_count) < 4);
|
||||
sl_button_4_action->set_internal(id(gang_count) < 4);
|
||||
|
||||
- id: button_action
|
||||
mode: parallel
|
||||
@@ -209,6 +200,28 @@ script:
|
||||
}
|
||||
}
|
||||
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
ESP_LOGCONFIG("core_hw_buttons", "Button%s action%s:",
|
||||
id(gang_count_plural_suffix).c_str(),
|
||||
id(gang_count_plural_suffix).c_str());
|
||||
ESP_LOGCONFIG("core_hw_buttons", " Relay 1: %s", sl_button_1_action->has_state()
|
||||
? sl_button_1_action->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 2)
|
||||
ESP_LOGCONFIG("core_hw_buttons", " Relay 2: %s", sl_button_2_action->has_state()
|
||||
? sl_button_2_action->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 3)
|
||||
ESP_LOGCONFIG("core_hw_buttons", " Relay 3: %s", sl_button_3_action->has_state()
|
||||
? sl_button_3_action->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 4)
|
||||
ESP_LOGCONFIG("core_hw_buttons", " Relay 4: %s", sl_button_4_action->has_state()
|
||||
? sl_button_4_action->state.c_str()
|
||||
: "Unknown");
|
||||
|
||||
- id: !extend touch_on_multi_touch_release
|
||||
then:
|
||||
- script.execute: buttons_release
|
||||
|
||||
@@ -28,7 +28,6 @@ substitutions:
|
||||
LIGHT_FULL_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
LIGHT_SIDES_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
LIGHT_INDIVIDUAL_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
LIGHT_RELAYS_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
|
||||
globals:
|
||||
- id: gb_lights_1
|
||||
@@ -418,334 +417,32 @@ light:
|
||||
from: 31
|
||||
to: 31
|
||||
|
||||
# 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
|
||||
default_transition_length: ${default_transition_length}
|
||||
restore_mode: ${LIGHT_RELAYS_RESTORE_MODE}
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 9
|
||||
to: 9
|
||||
- id: light_eu_rl_1_1_top
|
||||
name: Light - Relay 1 of 1 (top)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 8
|
||||
- id: light_us_rl_1_2_left
|
||||
name: Light - Relay 1 of 2 (left)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 3
|
||||
- id: light_us_rl_2_2_left
|
||||
name: Light - Relay 2 of 2 (left)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 16
|
||||
to: 17
|
||||
- id: light_us_rl_3_3_right
|
||||
name: Light - Relay 3 of 3 (right)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 23
|
||||
to: 24
|
||||
- id: light_us_rl_1_4_right
|
||||
name: Light - Relay 1 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 0
|
||||
- id: light_us_rl_2_4_left
|
||||
name: Light - Relay 2 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 21
|
||||
to: 22
|
||||
- id: light_us_rl_2_4_right
|
||||
name: Light - Relay 2 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 1
|
||||
to: 2
|
||||
- id: light_us_rl_3_4_left
|
||||
name: Light - Relay 3 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 17
|
||||
to: 18
|
||||
- id: light_us_rl_3_4_right
|
||||
name: Light - Relay 3 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 5
|
||||
to: 6
|
||||
- id: light_us_rl_4_4_left
|
||||
name: Light - Relay 4 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 15
|
||||
to: 16
|
||||
- id: light_us_rl_4_4_right
|
||||
name: Light - Relay 4 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 7
|
||||
to: 8
|
||||
|
||||
script:
|
||||
- id: !extend boot_initialize
|
||||
then:
|
||||
- wait_until:
|
||||
condition:
|
||||
- lambda: return sl_tx_model_format->active_index().has_value();
|
||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
||||
- lambda: |-
|
||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
||||
sl_tx_model_format->active_index().value() == 1;
|
||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
||||
if (num_gangs < 1 || num_gangs > 4) {
|
||||
ESP_LOGE("core_hw_leds", "Invalid number of gangs: %" PRIu8, num_gangs);
|
||||
return;
|
||||
}
|
||||
light_28->set_internal(!is_model_us);
|
||||
light_29->set_internal(!is_model_us);
|
||||
light_30->set_internal(!is_model_us);
|
||||
light_31->set_internal(!is_model_us);
|
||||
light_eu->set_internal(is_model_us);
|
||||
light_eu_bottom->set_internal(is_model_us);
|
||||
light_eu_left->set_internal(is_model_us);
|
||||
light_eu_right->set_internal(is_model_us);
|
||||
light_eu_top->set_internal(is_model_us);
|
||||
light_us->set_internal(!is_model_us);
|
||||
light_us_bottom->set_internal(!is_model_us);
|
||||
light_us_left->set_internal(!is_model_us);
|
||||
light_us_right->set_internal(!is_model_us);
|
||||
light_us_top->set_internal(!is_model_us);
|
||||
switch (num_gangs) {
|
||||
light_28->set_internal(!id(is_us_model));
|
||||
light_29->set_internal(!id(is_us_model));
|
||||
light_30->set_internal(!id(is_us_model));
|
||||
light_31->set_internal(!id(is_us_model));
|
||||
light_eu->set_internal(id(is_us_model));
|
||||
light_eu_bottom->set_internal(id(is_us_model));
|
||||
light_eu_left->set_internal(id(is_us_model));
|
||||
light_eu_right->set_internal(id(is_us_model));
|
||||
light_eu_top->set_internal(id(is_us_model));
|
||||
light_us->set_internal(!id(is_us_model));
|
||||
light_us_bottom->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_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)) {
|
||||
case 1: // 1 Gang
|
||||
if (is_model_us) {
|
||||
if (id(is_us_model)) {
|
||||
id(gb_lights_1) = { light_us_rl_1_1_left };
|
||||
id(gb_lights_2) = { light_us_rl_1_1_right };
|
||||
} else {
|
||||
@@ -754,7 +451,7 @@ script:
|
||||
}
|
||||
break;
|
||||
case 2: // 2 Gang
|
||||
if (is_model_us) {
|
||||
if (id(is_us_model)) {
|
||||
id(gb_lights_1) = { light_us_rl_1_2_left, light_us_rl_2_2_left };
|
||||
id(gb_lights_2) = { light_us_rl_1_2_right, light_us_rl_2_2_right };
|
||||
} else {
|
||||
@@ -763,7 +460,7 @@ script:
|
||||
}
|
||||
break;
|
||||
case 3: // 3 Gang
|
||||
if (is_model_us) {
|
||||
if (id(is_us_model)) {
|
||||
id(gb_lights_1) = { light_us_rl_1_3_left, light_us_rl_2_3_left, light_us_rl_3_3_left };
|
||||
id(gb_lights_2) = { light_us_rl_1_3_right, light_us_rl_2_3_right, light_us_rl_3_3_right };
|
||||
} else {
|
||||
@@ -772,7 +469,7 @@ script:
|
||||
}
|
||||
break;
|
||||
case 4: // 4 Gang
|
||||
if (is_model_us) {
|
||||
if (id(is_us_model)) {
|
||||
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 };
|
||||
id(gb_lights_2) = { light_us_rl_1_4_right, light_us_rl_2_4_right,
|
||||
@@ -784,8 +481,52 @@ script:
|
||||
light_eu_rl_3_4_top, light_eu_rl_4_4_top };
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ESP_LOGE("core_hw_leds", "Invalid gang count: %" PRIu8, id(gang_count));
|
||||
break;
|
||||
}
|
||||
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
// Relay's LEDs modes
|
||||
ESP_LOGCONFIG("core_hw_leds", "Relay%s LEDs mode%s:",
|
||||
id(gang_count_plural_suffix).c_str(),
|
||||
id(gang_count_plural_suffix).c_str());
|
||||
ESP_LOGCONFIG("core_hw_leds", " Relay 1: %s", id(is_us_model)
|
||||
? sl_relay_1_light_mode_us->state.c_str()
|
||||
: sl_relay_1_light_mode_eu->state.c_str());
|
||||
if (id(gang_count) >= 2)
|
||||
ESP_LOGCONFIG("core_hw_leds", " Relay 2: %s", id(is_us_model)
|
||||
? sl_relay_2_light_mode_us->state.c_str()
|
||||
: sl_relay_2_light_mode_eu->state.c_str());
|
||||
if (id(gang_count) >= 3)
|
||||
ESP_LOGCONFIG("core_hw_leds", " Relay 3: %s", id(is_us_model)
|
||||
? sl_relay_3_light_mode_us->state.c_str()
|
||||
: sl_relay_3_light_mode_eu->state.c_str());
|
||||
if (id(gang_count) >= 4)
|
||||
ESP_LOGCONFIG("core_hw_leds", " Relay 4: %s", id(is_us_model)
|
||||
? sl_relay_4_light_mode_us->state.c_str()
|
||||
: sl_relay_4_light_mode_eu->state.c_str());
|
||||
|
||||
// Transition times
|
||||
ESP_LOGCONFIG("core_hw_leds", "Transition times:");
|
||||
ESP_LOGCONFIG("core_hw_leds", " Default: ${default_transition_length}");
|
||||
if (${LIGHT_TRANSITION_TURN_ON} > 0)
|
||||
ESP_LOGCONFIG("core_hw_leds", " Turning on: ${LIGHT_TRANSITION_TURN_ON}ms");
|
||||
else
|
||||
ESP_LOGCONFIG("core_hw_leds", " Turning on: Disabled");
|
||||
if (${LIGHT_TRANSITION_TURN_OFF} > 0)
|
||||
ESP_LOGCONFIG("core_hw_leds", " Turning off: ${LIGHT_TRANSITION_TURN_OFF}ms");
|
||||
else
|
||||
ESP_LOGCONFIG("core_hw_leds", " Turning off: Disabled");
|
||||
|
||||
// Restore modes
|
||||
ESP_LOGCONFIG("core_hw_leds", "LED restore modes:");
|
||||
ESP_LOGCONFIG("core_hw_leds", " Light - All: ${LIGHT_FULL_RESTORE_MODE}");
|
||||
ESP_LOGCONFIG("core_hw_leds", " Sides: ${LIGHT_SIDES_RESTORE_MODE}");
|
||||
ESP_LOGCONFIG("core_hw_leds", " Individual: ${LIGHT_INDIVIDUAL_RESTORE_MODE}");
|
||||
|
||||
- id: light_set_state
|
||||
mode: parallel
|
||||
parameters:
|
||||
@@ -798,10 +539,12 @@ script:
|
||||
static const uint32_t LIGHT_TRANSITION_TURN_OFF = ${LIGHT_TRANSITION_TURN_OFF};
|
||||
static const uint8_t LIGHT_BRIGHTNESS_TURN_ON = ${LIGHT_BRIGHTNESS_TURN_ON};
|
||||
|
||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
||||
sl_tx_model_format->active_index().value() == 1;
|
||||
const std::string light_mode_group_1 = is_model_us ? "${LIGHT_MODE_LEFT_TEXT}" : "${LIGHT_MODE_BOTTOM_TEXT}";
|
||||
const std::string light_mode_group_2 = is_model_us ? "${LIGHT_MODE_RIGHT_TEXT}" : "${LIGHT_MODE_TOP_TEXT}";
|
||||
const std::string light_mode_group_1 = id(is_us_model)
|
||||
? "${LIGHT_MODE_LEFT_TEXT}"
|
||||
: "${LIGHT_MODE_BOTTOM_TEXT}";
|
||||
const std::string light_mode_group_2 = id(is_us_model)
|
||||
? "${LIGHT_MODE_RIGHT_TEXT}"
|
||||
: "${LIGHT_MODE_TOP_TEXT}";
|
||||
|
||||
switch (light_group) {
|
||||
case 1:
|
||||
@@ -872,15 +615,12 @@ select:
|
||||
entity_category: config
|
||||
disabled_by_default: false
|
||||
icon: mdi:dots-square
|
||||
|
||||
- id: sl_relay_2_light_mode_eu
|
||||
name: Relay 2 light mode
|
||||
<<: *relay_light_mode_eu
|
||||
|
||||
- id: sl_relay_3_light_mode_eu
|
||||
name: Relay 3 light mode
|
||||
<<: *relay_light_mode_eu
|
||||
|
||||
- id: sl_relay_4_light_mode_eu
|
||||
name: Relay 4 light mode
|
||||
<<: *relay_light_mode_eu
|
||||
@@ -902,15 +642,12 @@ select:
|
||||
entity_category: config
|
||||
disabled_by_default: false
|
||||
icon: mdi:dots-square
|
||||
|
||||
- id: sl_relay_2_light_mode_us
|
||||
name: Relay 2 light mode
|
||||
<<: *relay_light_mode_us
|
||||
|
||||
- id: sl_relay_3_light_mode_us
|
||||
name: Relay 3 light mode
|
||||
<<: *relay_light_mode_us
|
||||
|
||||
- id: sl_relay_4_light_mode_us
|
||||
name: Relay 4 light mode
|
||||
<<: *relay_light_mode_us
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
##### TX Ultimate Easy for ESPHome #####
|
||||
##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy #####
|
||||
####################################################################################################
|
||||
##### Purpose: ESPHome Core - Hardware - Speaker #####
|
||||
##### Purpose: ESPHome Core - Hardware - Media player #####
|
||||
####################################################################################################
|
||||
##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo #####
|
||||
####################################################################################################
|
||||
@@ -17,8 +17,8 @@ i2s_audio:
|
||||
i2s_lrclk_pin: GPIO4
|
||||
|
||||
media_player:
|
||||
- id: mp_speaker
|
||||
name: Speaker
|
||||
- id: mp_media_player
|
||||
name: Media Player
|
||||
internal: false
|
||||
platform: i2s_audio
|
||||
i2s_dout_pin: GPIO15
|
||||
@@ -15,13 +15,28 @@ substitutions:
|
||||
RELAY_MODE_TEXT_SWITCH: "Switch"
|
||||
RELAY_MODE_TEXT_LIGHT: "Light"
|
||||
RELAY_MODE_TEXT_NOT_USED: "Not in use"
|
||||
|
||||
RELAY_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
LIGHT_RELAYS_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||
|
||||
|
||||
globals:
|
||||
- id: boot_initialization_relays
|
||||
type: bool
|
||||
restore_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:
|
||||
# These lights are used for the physical relays to be shown as lights
|
||||
@@ -103,19 +118,312 @@ light:
|
||||
then:
|
||||
- switch.turn_off: sw_relay_4
|
||||
|
||||
# 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
|
||||
disabled_by_default: true
|
||||
default_transition_length: ${default_transition_length}
|
||||
restore_mode: ${LIGHT_RELAYS_RESTORE_MODE}
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 9
|
||||
to: 9
|
||||
- id: light_eu_rl_1_1_top
|
||||
name: Light - Relay 1 of 1 (top)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 8
|
||||
- id: light_us_rl_1_2_left
|
||||
name: Light - Relay 1 of 2 (left)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 3
|
||||
- id: light_us_rl_2_2_left
|
||||
name: Light - Relay 2 of 2 (left)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 16
|
||||
to: 17
|
||||
- id: light_us_rl_3_3_right
|
||||
name: Light - Relay 3 of 3 (right)
|
||||
<<: *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)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 23
|
||||
to: 24
|
||||
- id: light_us_rl_1_4_right
|
||||
name: Light - Relay 1 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 31
|
||||
to: 31
|
||||
- id: light_full
|
||||
from: 0
|
||||
to: 0
|
||||
- id: light_us_rl_2_4_left
|
||||
name: Light - Relay 2 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 21
|
||||
to: 22
|
||||
- id: light_us_rl_2_4_right
|
||||
name: Light - Relay 2 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 1
|
||||
to: 2
|
||||
- id: light_us_rl_3_4_left
|
||||
name: Light - Relay 3 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 17
|
||||
to: 18
|
||||
- id: light_us_rl_3_4_right
|
||||
name: Light - Relay 3 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 5
|
||||
to: 6
|
||||
- id: light_us_rl_4_4_left
|
||||
name: Light - Relay 4 of 4 (left)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 15
|
||||
to: 16
|
||||
- id: light_us_rl_4_4_right
|
||||
name: Light - Relay 4 of 4 (right)
|
||||
<<: *light_partition_relays
|
||||
segments:
|
||||
- id: light_full
|
||||
from: 7
|
||||
to: 8
|
||||
|
||||
output:
|
||||
- id: output_relay_1
|
||||
platform: gpio
|
||||
pin: GPIO18
|
||||
|
||||
- id: output_relay_2
|
||||
platform: gpio
|
||||
pin: GPIO17
|
||||
|
||||
- id: output_relay_3
|
||||
platform: gpio
|
||||
pin: GPIO27
|
||||
|
||||
- id: output_relay_4
|
||||
platform: gpio
|
||||
pin: GPIO23
|
||||
@@ -128,31 +436,112 @@ script:
|
||||
- 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 sl_tx_model_format->active_index().has_value();
|
||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
||||
- 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
|
||||
then:
|
||||
- lambda: |-
|
||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
||||
sl_tx_model_format->active_index().value() == 1;
|
||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
||||
if (num_gangs < 1 || num_gangs > 4) {
|
||||
ESP_LOGE("core_hw_relays", "Invalid number of gangs: %" PRIu8, num_gangs);
|
||||
return;
|
||||
}
|
||||
sl_relay_1_mode->set_internal(num_gangs < 1);
|
||||
sl_relay_1_light_mode_eu->set_internal(is_model_us or num_gangs < 1);
|
||||
sl_relay_1_light_mode_us->set_internal(!is_model_us or num_gangs < 1);
|
||||
sl_relay_2_mode->set_internal(num_gangs < 2);
|
||||
sl_relay_2_light_mode_eu->set_internal(is_model_us or num_gangs < 2);
|
||||
sl_relay_2_light_mode_us->set_internal(!is_model_us or num_gangs < 2);
|
||||
sl_relay_3_mode->set_internal(num_gangs < 3);
|
||||
sl_relay_3_light_mode_eu->set_internal(is_model_us or num_gangs < 3);
|
||||
sl_relay_3_light_mode_us->set_internal(!is_model_us or num_gangs < 3);
|
||||
sl_relay_4_mode->set_internal(num_gangs < 4);
|
||||
sl_relay_4_light_mode_eu->set_internal(is_model_us or num_gangs < 4);
|
||||
sl_relay_4_light_mode_us->set_internal(!is_model_us or num_gangs < 4);
|
||||
// EU light modes
|
||||
sl_relay_1_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 1);
|
||||
sl_relay_2_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 2);
|
||||
sl_relay_3_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 3);
|
||||
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);
|
||||
|
||||
// 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();
|
||||
if (relay_mode_index.has_value()) {
|
||||
light_output_1->set_internal(false or relay_mode_index.value() != 1);
|
||||
@@ -160,20 +549,22 @@ script:
|
||||
}
|
||||
relay_mode_index = sl_relay_2_mode->active_index();
|
||||
if (relay_mode_index.has_value()) {
|
||||
light_output_2->set_internal(num_gangs < 2 or relay_mode_index.value() != 1);
|
||||
sw_relay_2->set_internal(num_gangs < 2 or relay_mode_index.value() != 0);
|
||||
light_output_2->set_internal(id(gang_count) < 2 or relay_mode_index.value() != 1);
|
||||
sw_relay_2->set_internal(id(gang_count) < 2 or relay_mode_index.value() != 0);
|
||||
}
|
||||
relay_mode_index = sl_relay_3_mode->active_index();
|
||||
if (relay_mode_index.has_value()) {
|
||||
light_output_3->set_internal(num_gangs < 3 or relay_mode_index.value() != 1);
|
||||
sw_relay_3->set_internal(num_gangs < 3 or relay_mode_index.value() != 0);
|
||||
light_output_3->set_internal(id(gang_count) < 3 or relay_mode_index.value() != 1);
|
||||
sw_relay_3->set_internal(id(gang_count) < 3 or relay_mode_index.value() != 0);
|
||||
}
|
||||
relay_mode_index = sl_relay_4_mode->active_index();
|
||||
if (relay_mode_index.has_value()) {
|
||||
light_output_4->set_internal(num_gangs < 4 or relay_mode_index.value() != 1);
|
||||
sw_relay_4->set_internal(num_gangs < 4 or relay_mode_index.value() != 0);
|
||||
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);
|
||||
}
|
||||
id(boot_initialization_relays) = true;
|
||||
|
||||
// Set this section of initialization as completed
|
||||
id(boot_initialization_relays_relay_modes) = true;
|
||||
|
||||
- id: !extend button_click_event
|
||||
then:
|
||||
@@ -243,32 +634,66 @@ script:
|
||||
ESP_LOGE("core_hw_relays", "No button action selected for button %" PRIu8, button);
|
||||
}
|
||||
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
ESP_LOGCONFIG("core_hw_relays", "Relay%s mode%s:",
|
||||
id(gang_count_plural_suffix).c_str(),
|
||||
id(gang_count_plural_suffix).c_str());
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 1: %s", sl_relay_1_mode->has_state()
|
||||
? sl_relay_1_mode->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 2)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 2: %s", sl_relay_2_mode->has_state()
|
||||
? sl_relay_2_mode->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 3)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 3: %s", sl_relay_3_mode->has_state()
|
||||
? sl_relay_3_mode->state.c_str()
|
||||
: "Unknown");
|
||||
if (id(gang_count) >= 4)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 4: %s", sl_relay_4_mode->has_state()
|
||||
? sl_relay_4_mode->state.c_str()
|
||||
: "Unknown");
|
||||
ESP_LOGCONFIG("core_hw_relays", "Relay%s state%s:",
|
||||
id(gang_count_plural_suffix).c_str(),
|
||||
id(gang_count_plural_suffix).c_str());
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 1: %s", sw_relay_1->state ? "ON" : "OFF");
|
||||
if (id(gang_count) >= 2)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 2: %s", sw_relay_2->state ? "ON" : "OFF");
|
||||
if (id(gang_count) >= 3)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 3: %s", sw_relay_3->state ? "ON" : "OFF");
|
||||
if (id(gang_count) >= 4)
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay 4: %s", sw_relay_4->state ? "ON" : "OFF");
|
||||
ESP_LOGCONFIG("core_hw_relays", "Expose Relay's LEDs to Home Assistant: %s",
|
||||
YESNO(sw_expose_relays_leds_to_ha->state));
|
||||
ESP_LOGCONFIG("core_hw_relays", "Boot initialization flags:");
|
||||
ESP_LOGCONFIG("core_hw_relays", " Overall: %s", YESNO(id(boot_initialization_relays)));
|
||||
ESP_LOGCONFIG("core_hw_relays", " Light modes: %s", YESNO(id(boot_initialization_relays_light_modes)));
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relay modes: %s", YESNO(id(boot_initialization_relays_relay_modes)));
|
||||
ESP_LOGCONFIG("core_hw_relays", " Status LEDs: %s", YESNO(id(boot_initialization_relays_relay_leds)));
|
||||
ESP_LOGCONFIG("core_hw_relays", "Restore modes:");
|
||||
ESP_LOGCONFIG("core_hw_relays", " Relays: ${RELAY_RESTORE_MODE}");
|
||||
ESP_LOGCONFIG("core_hw_relays", " Status LEDs: ${LIGHT_RELAYS_RESTORE_MODE}");
|
||||
|
||||
- id: show_relay_status
|
||||
mode: restart
|
||||
then:
|
||||
- script.wait: boot_initialize_relays
|
||||
- wait_until:
|
||||
condition:
|
||||
- lambda: return id(boot_initialization_relays);
|
||||
- lambda: |-
|
||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
||||
sl_tx_model_format->active_index().value() == 1;
|
||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value())
|
||||
? (sl_tx_model_gang->active_index().value() + 1)
|
||||
: 0;
|
||||
|
||||
if (num_gangs < 1 || num_gangs > 4) {
|
||||
ESP_LOGE("core_hw_relays", "Invalid number of gangs: %" PRIu8, num_gangs);
|
||||
if (not id(boot_initialization_relays)) {
|
||||
ESP_LOGW("core_hw_relays", "Relays not initialized yet");
|
||||
if (not boot_initialize_relays->is_running())
|
||||
boot_initialize_relays->execute();
|
||||
return;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < num_gangs; i++) {
|
||||
for (uint8_t i = 0; i < id(gang_count); i++) {
|
||||
bool relay_state = false;
|
||||
std::string light_mode;
|
||||
const std::string light_mode_group_1 = is_model_us
|
||||
const std::string light_mode_group_1 = id(is_us_model)
|
||||
? "${LIGHT_MODE_LEFT_TEXT}"
|
||||
: "${LIGHT_MODE_BOTTOM_TEXT}";
|
||||
const std::string light_mode_group_2 = is_model_us
|
||||
const std::string light_mode_group_2 = id(is_us_model)
|
||||
? "${LIGHT_MODE_RIGHT_TEXT}"
|
||||
: "${LIGHT_MODE_TOP_TEXT}";
|
||||
|
||||
@@ -276,25 +701,25 @@ script:
|
||||
switch (i) {
|
||||
case 0:
|
||||
relay_state = id(sw_relay_1).state;
|
||||
light_mode = is_model_us
|
||||
light_mode = id(is_us_model)
|
||||
? id(sl_relay_1_light_mode_us)->state
|
||||
: id(sl_relay_1_light_mode_eu)->state;
|
||||
break;
|
||||
case 1:
|
||||
relay_state = id(sw_relay_2).state;
|
||||
light_mode = is_model_us
|
||||
light_mode = id(is_us_model)
|
||||
? id(sl_relay_2_light_mode_us)->state
|
||||
: id(sl_relay_2_light_mode_eu)->state;
|
||||
break;
|
||||
case 2:
|
||||
relay_state = id(sw_relay_3).state;
|
||||
light_mode = is_model_us
|
||||
light_mode = id(is_us_model)
|
||||
? id(sl_relay_3_light_mode_us)->state
|
||||
: id(sl_relay_3_light_mode_eu)->state;
|
||||
break;
|
||||
case 3:
|
||||
relay_state = id(sw_relay_4).state;
|
||||
light_mode = is_model_us
|
||||
light_mode = id(is_us_model)
|
||||
? id(sl_relay_4_light_mode_us)->state
|
||||
: id(sl_relay_4_light_mode_eu)->state;
|
||||
break;
|
||||
@@ -333,20 +758,40 @@ select:
|
||||
entity_category: config
|
||||
disabled_by_default: false
|
||||
icon: mdi:dip-switch
|
||||
|
||||
on_value:
|
||||
then:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: true
|
||||
- id: sl_relay_2_mode
|
||||
name: Relay 2 display mode
|
||||
<<: *relay_select_mode_base
|
||||
|
||||
- id: sl_relay_3_mode
|
||||
name: Relay 3 display mode
|
||||
<<: *relay_select_mode_base
|
||||
|
||||
- id: sl_relay_4_mode
|
||||
name: Relay 4 display mode
|
||||
<<: *relay_select_mode_base
|
||||
|
||||
switch:
|
||||
- id: sw_expose_relays_leds_to_ha
|
||||
name: Expose Relay's LEDs to Home Assistant
|
||||
platform: template
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
optimistic: true
|
||||
internal: false
|
||||
entity_category: config
|
||||
on_turn_on:
|
||||
then:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: true
|
||||
on_turn_off:
|
||||
then:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_pending_restart
|
||||
state: true
|
||||
|
||||
- id: sw_relay_1
|
||||
name: Relay 1
|
||||
output: output_relay_1
|
||||
@@ -369,7 +814,6 @@ switch:
|
||||
- light.is_on: light_output_1
|
||||
then:
|
||||
- light.turn_off: light_output_1
|
||||
|
||||
- id: sw_relay_2
|
||||
name: Relay 2
|
||||
output: output_relay_2
|
||||
@@ -392,7 +836,6 @@ switch:
|
||||
- light.is_on: light_output_2
|
||||
then:
|
||||
- light.turn_off: light_output_2
|
||||
|
||||
- id: sw_relay_3
|
||||
name: Relay 3
|
||||
output: output_relay_3
|
||||
@@ -415,7 +858,6 @@ switch:
|
||||
- light.is_on: light_output_3
|
||||
then:
|
||||
- light.turn_off: light_output_3
|
||||
|
||||
- id: sw_relay_4
|
||||
name: Relay 4
|
||||
output: output_relay_4
|
||||
|
||||
@@ -256,13 +256,8 @@ script:
|
||||
- id: boot_initialize_touch_gang
|
||||
mode: restart
|
||||
then:
|
||||
- wait_until:
|
||||
condition:
|
||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
||||
- lambda: |-
|
||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
||||
tx_ultimate->set_gang_count(num_gangs);
|
||||
tx_ultimate->set_gang_count(id(gang_count));
|
||||
bs_button_1_click_event->publish_state(false);
|
||||
bs_button_2_click_event->publish_state(false);
|
||||
bs_button_3_click_event->publish_state(false);
|
||||
@@ -275,18 +270,27 @@ script:
|
||||
bs_button_2_long_press_event->publish_state(false);
|
||||
bs_button_3_long_press_event->publish_state(false);
|
||||
bs_button_4_long_press_event->publish_state(false);
|
||||
bs_button_1_click_event->set_internal(num_gangs < 1);
|
||||
bs_button_2_click_event->set_internal(num_gangs < 2);
|
||||
bs_button_3_click_event->set_internal(num_gangs < 3);
|
||||
bs_button_4_click_event->set_internal(num_gangs < 4);
|
||||
bs_button_1_double_click_event->set_internal(num_gangs < 1);
|
||||
bs_button_2_double_click_event->set_internal(num_gangs < 2);
|
||||
bs_button_3_double_click_event->set_internal(num_gangs < 3);
|
||||
bs_button_4_double_click_event->set_internal(num_gangs < 4);
|
||||
bs_button_1_long_press_event->set_internal(num_gangs < 1);
|
||||
bs_button_2_long_press_event->set_internal(num_gangs < 2);
|
||||
bs_button_3_long_press_event->set_internal(num_gangs < 3);
|
||||
bs_button_4_long_press_event->set_internal(num_gangs < 4);
|
||||
bs_button_1_click_event->set_internal(id(gang_count) < 1);
|
||||
bs_button_2_click_event->set_internal(id(gang_count) < 2);
|
||||
bs_button_3_click_event->set_internal(id(gang_count) < 3);
|
||||
bs_button_4_click_event->set_internal(id(gang_count) < 4);
|
||||
bs_button_1_double_click_event->set_internal(id(gang_count) < 1);
|
||||
bs_button_2_double_click_event->set_internal(id(gang_count) < 2);
|
||||
bs_button_3_double_click_event->set_internal(id(gang_count) < 3);
|
||||
bs_button_4_double_click_event->set_internal(id(gang_count) < 4);
|
||||
bs_button_1_long_press_event->set_internal(id(gang_count) < 1);
|
||||
bs_button_2_long_press_event->set_internal(id(gang_count) < 2);
|
||||
bs_button_3_long_press_event->set_internal(id(gang_count) < 3);
|
||||
bs_button_4_long_press_event->set_internal(id(gang_count) < 4);
|
||||
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
if (sw_touch_panel_power->state)
|
||||
ESP_LOGCONFIG("core_hw_touch", "Touch panel - Power: On");
|
||||
else
|
||||
ESP_LOGW("core_hw_touch", "Touch panel - Power: OFF");
|
||||
ESP_LOGCONFIG("core_hw_touch", "Touch event duration: %.0fms", nr_touch_duration->state);
|
||||
|
||||
- id: touch_on_multi_touch_release
|
||||
mode: restart
|
||||
|
||||
@@ -53,6 +53,21 @@ ota:
|
||||
- switch.turn_off: sw_vibration_motor
|
||||
|
||||
script:
|
||||
- id: !extend dump_config
|
||||
then:
|
||||
- lambda: |-
|
||||
// Configuration
|
||||
ESP_LOGCONFIG("core_hw_vibration", "Touch - Vibration feedback: %s",
|
||||
sl_touch_vibration_feedback->state.c_str());
|
||||
ESP_LOGCONFIG("core_hw_vibration", "Vibrate duration: %.0fms", nr_vibrating_duration->state);
|
||||
ESP_LOGCONFIG("core_hw_vibration", "Vibrate max duration: ${vibration_max_duration}");
|
||||
|
||||
// State
|
||||
if (bs_vibrating->state)
|
||||
ESP_LOGW("core_hw_vibration", "Vibrating now: YES");
|
||||
else
|
||||
ESP_LOGCONFIG("core_hw_vibration", "Vibrating now: No");
|
||||
|
||||
- id: !extend touch_on_multi_touch_release
|
||||
then:
|
||||
- script.execute: touch_on_multi_touch_release_vibration
|
||||
@@ -133,5 +148,4 @@ switch:
|
||||
- binary_sensor.template.publish:
|
||||
id: bs_vibrating
|
||||
state: OFF # yamllint disable-line rule:truthy
|
||||
|
||||
...
|
||||
|
||||
@@ -68,9 +68,9 @@ namespace esphome {
|
||||
if (this->gang_count_ == 1)
|
||||
return 1;
|
||||
|
||||
// Calculate button number
|
||||
const uint8_t width = (TOUCH_MAX_POSITION + 1) / this->gang_count_; // Width of each button region
|
||||
if (width < 1 or width > this->gang_count_) // Invalid width - and prevents division by zero
|
||||
//Calculate button number Change to round up insted of truncate (integer division)
|
||||
const uint8_t width = (TOUCH_MAX_POSITION + gang_count_) / this->gang_count_; // Width of each button region
|
||||
if (width < 1) // Invalid width - and prevents division by zero removed "width > gang_count_" issue with 2 gang
|
||||
return 0;
|
||||
const uint8_t button = std::min(
|
||||
static_cast<uint8_t>((position / width) + 1), // Convert position to button index
|
||||
|
||||
@@ -1 +1 @@
|
||||
2024.12.17
|
||||
2024.12.20
|
||||
|
||||
@@ -1 +1 @@
|
||||
version: 2024.12.17
|
||||
version: 2024.12.20
|
||||
|
||||
Reference in New Issue
Block a user