Compare commits
37 Commits
v2024.12.9
...
v2024.12.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cca59bbe2a | ||
|
|
aec1aa69d3 | ||
|
|
bcf4396c6f | ||
|
|
403cdce2b5 | ||
|
|
44b3586a17 | ||
|
|
93990e78c1 | ||
|
|
e8470f56e4 | ||
|
|
2429c9d616 | ||
|
|
7a5a537847 | ||
|
|
2aa036dc0e | ||
|
|
802acdc476 | ||
|
|
37b2e93896 | ||
|
|
695cca07a0 | ||
|
|
f258b8f783 | ||
|
|
7e055e7737 | ||
|
|
9fec812b66 | ||
|
|
269ba89bd3 | ||
|
|
a44e486411 | ||
|
|
c4b2b8917f | ||
|
|
ae87f025a3 | ||
|
|
303a3f1267 | ||
|
|
a716e8e9cf | ||
|
|
d77d761497 | ||
|
|
60a3248c6b | ||
|
|
ec528ec128 | ||
|
|
4ed98e533f | ||
|
|
1ef73d5cd0 | ||
|
|
420225b6ba | ||
|
|
8996cfbdf8 | ||
|
|
085250c471 | ||
|
|
6230e31323 | ||
|
|
248f7e9cd8 | ||
|
|
6343e6eb4a | ||
|
|
226d5db7c8 | ||
|
|
dbde1da920 | ||
|
|
f2ff037c82 | ||
|
|
82af8b6687 |
8
.github/workflows/validate_esphome.yml
vendored
8
.github/workflows/validate_esphome.yml
vendored
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: Validate ESPHome
|
name: Validate ESPHome (Latest)
|
||||||
|
|
||||||
# yamllint disable-line rule:truthy
|
on: # yamllint disable-line rule:truthy
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -37,6 +36,7 @@ jobs:
|
|||||||
uses: esphome/build-action@main
|
uses: esphome/build-action@main
|
||||||
with:
|
with:
|
||||||
yaml-file: ".test/esphome_ard_basic.yaml"
|
yaml-file: ".test/esphome_ard_basic.yaml"
|
||||||
|
version: latest
|
||||||
|
|
||||||
build_bluetooth_proxy_4:
|
build_bluetooth_proxy_4:
|
||||||
name: Bluetooth Proxy (IDF)
|
name: Bluetooth Proxy (IDF)
|
||||||
@@ -47,6 +47,7 @@ jobs:
|
|||||||
uses: esphome/build-action@main
|
uses: esphome/build-action@main
|
||||||
with:
|
with:
|
||||||
yaml-file: ".test/esphome_idf_bluetooth_proxy.yaml"
|
yaml-file: ".test/esphome_idf_bluetooth_proxy.yaml"
|
||||||
|
version: latest
|
||||||
|
|
||||||
build_bluetooth_proxy_53:
|
build_bluetooth_proxy_53:
|
||||||
name: Bluetooth Proxy (IDF v5.3)
|
name: Bluetooth Proxy (IDF v5.3)
|
||||||
@@ -57,4 +58,5 @@ jobs:
|
|||||||
uses: esphome/build-action@main
|
uses: esphome/build-action@main
|
||||||
with:
|
with:
|
||||||
yaml-file: ".test/esphome_idf53_bluetooth_proxy.yaml"
|
yaml-file: ".test/esphome_idf53_bluetooth_proxy.yaml"
|
||||||
|
version: latest
|
||||||
...
|
...
|
||||||
|
|||||||
2
.github/workflows/validate_esphome_beta.yml
vendored
2
.github/workflows/validate_esphome_beta.yml
vendored
@@ -11,6 +11,8 @@ on: # yamllint disable-line rule:truthy
|
|||||||
- "*.c"
|
- "*.c"
|
||||||
- "*.cpp"
|
- "*.cpp"
|
||||||
- "*.py"
|
- "*.py"
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- "*.yaml"
|
- "*.yaml"
|
||||||
|
|||||||
@@ -11,6 +11,27 @@
|
|||||||
##### - For normal system use, modifications to this file are NOT required. #####
|
##### - For normal system use, modifications to this file are NOT required. #####
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
---
|
---
|
||||||
|
substitutions:
|
||||||
|
# RTTTL format: name:d=duration,o=octave,b=tempo:notes
|
||||||
|
# d=32 (32nd note), o=5 (octave 5), b=100 (tempo 100)
|
||||||
|
tone_volume_change: "scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b" # Use "none" to disable sound
|
||||||
|
|
||||||
|
api:
|
||||||
|
actions:
|
||||||
|
- action: rtttl_play
|
||||||
|
variables:
|
||||||
|
# The RTTTL string for the melody to be played.
|
||||||
|
# It should follow the RTTTL format, including the melody's name,
|
||||||
|
# default settings, and a sequence of notes.
|
||||||
|
tone: string
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
rtttl_speaker->stop();
|
||||||
|
if (rtttl_speaker_gain->state > 0) {
|
||||||
|
ESP_LOGI("api", "Play tone: '%s'", tone.c_str());
|
||||||
|
rtttl_speaker->play(tone.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
bluetooth_proxy:
|
bluetooth_proxy:
|
||||||
|
|
||||||
esp32:
|
esp32:
|
||||||
@@ -33,17 +54,54 @@ esphome:
|
|||||||
build_flags:
|
build_flags:
|
||||||
- -D TX_ULTIMATE_EASY_ADDON_BLE_PROXY
|
- -D TX_ULTIMATE_EASY_ADDON_BLE_PROXY
|
||||||
|
|
||||||
i2s_audio: !remove
|
|
||||||
|
|
||||||
light:
|
light:
|
||||||
- id: !extend light_full
|
- id: !extend light_full
|
||||||
platform: esp32_rmt_led_strip
|
platform: esp32_rmt_led_strip
|
||||||
rgb_order: GRB
|
rgb_order: GRB
|
||||||
rmt_channel: 0
|
rmt_channel: 1
|
||||||
chipset: ws2812
|
chipset: ws2812
|
||||||
type: !remove
|
type: !remove
|
||||||
variant: !remove
|
variant: !remove
|
||||||
max_refresh_rate: 33ms
|
max_refresh_rate: 33ms
|
||||||
|
use_psram: true
|
||||||
|
|
||||||
media_player: !remove
|
media_player: !remove
|
||||||
|
|
||||||
|
number:
|
||||||
|
- id: rtttl_speaker_gain
|
||||||
|
name: Sound - Volume
|
||||||
|
platform: template
|
||||||
|
max_value: 100
|
||||||
|
min_value: 0
|
||||||
|
step: 1
|
||||||
|
initial_value: 100
|
||||||
|
unit_of_measurement: "%"
|
||||||
|
internal: false
|
||||||
|
disabled_by_default: true
|
||||||
|
entity_category: config
|
||||||
|
device_class: sound_pressure
|
||||||
|
restore_value: true
|
||||||
|
optimistic: true
|
||||||
|
set_action:
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
rtttl_speaker->set_gain((100-(x/10.0f))/100.0f);
|
||||||
|
std::string tone_volume_change = "${tone_volume_change}";
|
||||||
|
// Play sound if tone_volume_change is not "none"
|
||||||
|
if (x > 0 and !tone_volume_change.empty() and tone_volume_change != "none")
|
||||||
|
rtttl_speaker->play(tone_volume_change);
|
||||||
|
rtttl_speaker->dump_config();
|
||||||
|
|
||||||
|
rtttl:
|
||||||
|
- id: rtttl_speaker
|
||||||
|
speaker: mp_speaker
|
||||||
|
|
||||||
|
speaker:
|
||||||
|
- id: mp_speaker
|
||||||
|
platform: i2s_audio
|
||||||
|
dac_type: external
|
||||||
|
i2s_dout_pin: GPIO15
|
||||||
|
i2s_audio_id: if_i2s_audio
|
||||||
|
i2s_comm_fmt: stand_msb
|
||||||
|
channel: mono
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -41,6 +41,15 @@ api:
|
|||||||
then:
|
then:
|
||||||
- script.execute: publish_device_info
|
- 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
|
||||||
|
|
||||||
button:
|
button:
|
||||||
- id: bt_restart
|
- id: bt_restart
|
||||||
name: Restart
|
name: Restart
|
||||||
@@ -75,6 +84,17 @@ esphome:
|
|||||||
then:
|
then:
|
||||||
- script.execute: boot_done
|
- script.execute: boot_done
|
||||||
|
|
||||||
|
globals:
|
||||||
|
- id: is_us_model
|
||||||
|
type: bool
|
||||||
|
restore_value: true
|
||||||
|
initial_value: 'false'
|
||||||
|
|
||||||
|
- id: gang_count
|
||||||
|
type: uint8_t
|
||||||
|
restore_value: true
|
||||||
|
initial_value: '0'
|
||||||
|
|
||||||
improv_serial:
|
improv_serial:
|
||||||
id: serial_improv
|
id: serial_improv
|
||||||
|
|
||||||
@@ -85,6 +105,8 @@ ota:
|
|||||||
platform: esphome
|
platform: esphome
|
||||||
|
|
||||||
psram:
|
psram:
|
||||||
|
mode: octal
|
||||||
|
speed: 80MHz
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- id: api_send_ha_event_boot
|
- id: api_send_ha_event_boot
|
||||||
@@ -117,11 +139,24 @@ script:
|
|||||||
- script.execute:
|
- script.execute:
|
||||||
id: api_send_ha_event_boot
|
id: api_send_ha_event_boot
|
||||||
type: start
|
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: boot_sequence
|
- id: boot_sequence
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
- script.execute: publish_device_info
|
- script.execute: publish_device_info
|
||||||
|
- binary_sensor.template.publish:
|
||||||
|
id: bs_pending_restart
|
||||||
|
state: false
|
||||||
|
|
||||||
- id: publish_device_info
|
- id: publish_device_info
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -144,6 +179,14 @@ select:
|
|||||||
entity_category: config
|
entity_category: config
|
||||||
disabled_by_default: false
|
disabled_by_default: false
|
||||||
icon: mdi:tablet-cellphone
|
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");
|
||||||
|
|
||||||
- id: sl_tx_model_gang
|
- id: sl_tx_model_gang
|
||||||
name: Model (Gang)
|
name: Model (Gang)
|
||||||
@@ -162,11 +205,23 @@ select:
|
|||||||
icon: mdi:dip-switch
|
icon: mdi:dip-switch
|
||||||
on_value:
|
on_value:
|
||||||
then:
|
then:
|
||||||
- lambda: tx_ultimate->set_gang_count(static_cast<uint8_t>(i)+1);
|
- 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");
|
||||||
|
tx_ultimate->set_gang_count(id(gang_count));
|
||||||
|
|
||||||
text_sensor:
|
text_sensor:
|
||||||
|
- id: esphome_fw_version
|
||||||
|
name: ESPHome Version
|
||||||
|
platform: version
|
||||||
|
entity_category: diagnostic
|
||||||
|
internal: false
|
||||||
|
|
||||||
- id: tx_fw_version
|
- id: tx_fw_version
|
||||||
name: Firmware version
|
name: TX Ultimate Easy Firmware Version
|
||||||
platform: template
|
platform: template
|
||||||
entity_category: diagnostic
|
entity_category: diagnostic
|
||||||
icon: mdi:tag-text-outline
|
icon: mdi:tag-text-outline
|
||||||
@@ -208,5 +263,6 @@ time:
|
|||||||
web_server:
|
web_server:
|
||||||
|
|
||||||
wifi:
|
wifi:
|
||||||
|
id: wifi_component
|
||||||
ap:
|
ap:
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ substitutions:
|
|||||||
BUTTON_2_ACTION_TEXT: "Relay 2 (toggle)"
|
BUTTON_2_ACTION_TEXT: "Relay 2 (toggle)"
|
||||||
BUTTON_3_ACTION_TEXT: "Relay 3 (toggle)"
|
BUTTON_3_ACTION_TEXT: "Relay 3 (toggle)"
|
||||||
BUTTON_4_ACTION_TEXT: "Relay 4 (toggle)"
|
BUTTON_4_ACTION_TEXT: "Relay 4 (toggle)"
|
||||||
|
BUTTON_1_ACTION_FAILSAFE_TEXT: "Relay 1 (API failsafe only)"
|
||||||
|
BUTTON_2_ACTION_FAILSAFE_TEXT: "Relay 2 (API failsafe only)"
|
||||||
|
BUTTON_3_ACTION_FAILSAFE_TEXT: "Relay 3 (API failsafe only)"
|
||||||
|
BUTTON_4_ACTION_FAILSAFE_TEXT: "Relay 4 (API failsafe only)"
|
||||||
|
|
||||||
BUTTON_CLICK_MIN_LENGTH: '50' # The minimum duration the click should last, in msec
|
BUTTON_CLICK_MIN_LENGTH: '50' # The minimum duration the click should last, in msec
|
||||||
BUTTON_CLICK_MAX_LENGTH: '350' # The maximum duration the click should last, in msec
|
BUTTON_CLICK_MAX_LENGTH: '350' # The maximum duration the click should last, in msec
|
||||||
@@ -82,28 +86,19 @@ script:
|
|||||||
- id: boot_initialize_buttons
|
- id: boot_initialize_buttons
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
- wait_until:
|
|
||||||
condition:
|
|
||||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
|
||||||
- lambda: |-
|
- 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->publish_state(false);
|
||||||
bs_button_1->set_internal(num_gangs < 1);
|
bs_button_1->set_internal(id(gang_count) < 1);
|
||||||
sl_button_1_action->set_internal(num_gangs < 1);
|
sl_button_1_action->set_internal(id(gang_count) < 1);
|
||||||
bs_button_2->publish_state(false);
|
bs_button_2->publish_state(false);
|
||||||
bs_button_2->set_internal(num_gangs < 2);
|
bs_button_2->set_internal(id(gang_count) < 2);
|
||||||
sl_button_2_action->set_internal(num_gangs < 2);
|
sl_button_2_action->set_internal(id(gang_count) < 2);
|
||||||
bs_button_3->publish_state(false);
|
bs_button_3->publish_state(false);
|
||||||
bs_button_3->set_internal(num_gangs < 3);
|
bs_button_3->set_internal(id(gang_count) < 3);
|
||||||
sl_button_3_action->set_internal(num_gangs < 3);
|
sl_button_3_action->set_internal(id(gang_count) < 3);
|
||||||
bs_button_4->publish_state(false);
|
bs_button_4->publish_state(false);
|
||||||
bs_button_4->set_internal(num_gangs < 4);
|
bs_button_4->set_internal(id(gang_count) < 4);
|
||||||
sl_button_4_action->set_internal(num_gangs < 4);
|
sl_button_4_action->set_internal(id(gang_count) < 4);
|
||||||
|
|
||||||
- id: button_action
|
- id: button_action
|
||||||
mode: parallel
|
mode: parallel
|
||||||
@@ -289,6 +284,7 @@ select:
|
|||||||
options:
|
options:
|
||||||
- "${BUTTON_ACTION_NONE_TEXT}"
|
- "${BUTTON_ACTION_NONE_TEXT}"
|
||||||
- "${BUTTON_1_ACTION_TEXT}"
|
- "${BUTTON_1_ACTION_TEXT}"
|
||||||
|
- "${BUTTON_1_ACTION_FAILSAFE_TEXT}"
|
||||||
initial_option: "${BUTTON_1_ACTION_TEXT}"
|
initial_option: "${BUTTON_1_ACTION_TEXT}"
|
||||||
optimistic: true
|
optimistic: true
|
||||||
restore_value: true
|
restore_value: true
|
||||||
@@ -303,6 +299,7 @@ select:
|
|||||||
options:
|
options:
|
||||||
- "${BUTTON_ACTION_NONE_TEXT}"
|
- "${BUTTON_ACTION_NONE_TEXT}"
|
||||||
- "${BUTTON_2_ACTION_TEXT}"
|
- "${BUTTON_2_ACTION_TEXT}"
|
||||||
|
- "${BUTTON_2_ACTION_FAILSAFE_TEXT}"
|
||||||
initial_option: "${BUTTON_2_ACTION_TEXT}"
|
initial_option: "${BUTTON_2_ACTION_TEXT}"
|
||||||
<<: *button_select_action_base
|
<<: *button_select_action_base
|
||||||
|
|
||||||
@@ -312,6 +309,7 @@ select:
|
|||||||
options:
|
options:
|
||||||
- "${BUTTON_ACTION_NONE_TEXT}"
|
- "${BUTTON_ACTION_NONE_TEXT}"
|
||||||
- "${BUTTON_3_ACTION_TEXT}"
|
- "${BUTTON_3_ACTION_TEXT}"
|
||||||
|
- "${BUTTON_3_ACTION_FAILSAFE_TEXT}"
|
||||||
initial_option: "${BUTTON_3_ACTION_TEXT}"
|
initial_option: "${BUTTON_3_ACTION_TEXT}"
|
||||||
<<: *button_select_action_base
|
<<: *button_select_action_base
|
||||||
|
|
||||||
@@ -321,6 +319,7 @@ select:
|
|||||||
options:
|
options:
|
||||||
- "${BUTTON_ACTION_NONE_TEXT}"
|
- "${BUTTON_ACTION_NONE_TEXT}"
|
||||||
- "${BUTTON_4_ACTION_TEXT}"
|
- "${BUTTON_4_ACTION_TEXT}"
|
||||||
|
- "${BUTTON_4_ACTION_FAILSAFE_TEXT}"
|
||||||
initial_option: "${BUTTON_4_ACTION_TEXT}"
|
initial_option: "${BUTTON_4_ACTION_TEXT}"
|
||||||
<<: *button_select_action_base
|
<<: *button_select_action_base
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ substitutions:
|
|||||||
LIGHT_TRANSITION_TURN_OFF: '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_BRIGHTNESS_TURN_ON: '0' # Brightness (1 to 100%, 0 to not set it)
|
||||||
|
|
||||||
|
LIGHT_FULL_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||||
|
LIGHT_SIDES_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||||
|
LIGHT_INDIVIDUAL_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||||
|
|
||||||
globals:
|
globals:
|
||||||
- id: gb_lights_1
|
- id: gb_lights_1
|
||||||
type: std::vector<light::LightState*>
|
type: std::vector<light::LightState*>
|
||||||
@@ -44,6 +48,7 @@ light:
|
|||||||
# method: esp32_rmt
|
# method: esp32_rmt
|
||||||
num_leds: 32
|
num_leds: 32
|
||||||
pin: GPIO13
|
pin: GPIO13
|
||||||
|
restore_mode: ${LIGHT_FULL_RESTORE_MODE}
|
||||||
|
|
||||||
# Those lights are available based on the model selections
|
# Those lights are available based on the model selections
|
||||||
- &light_partition_with_effects
|
- &light_partition_with_effects
|
||||||
@@ -52,6 +57,7 @@ light:
|
|||||||
platform: partition
|
platform: partition
|
||||||
default_transition_length: ${default_transition_length}
|
default_transition_length: ${default_transition_length}
|
||||||
internal: true
|
internal: true
|
||||||
|
restore_mode: ${LIGHT_SIDES_RESTORE_MODE}
|
||||||
effects:
|
effects:
|
||||||
- addressable_rainbow:
|
- addressable_rainbow:
|
||||||
name: "Rainbow"
|
name: "Rainbow"
|
||||||
@@ -184,6 +190,7 @@ light:
|
|||||||
platform: partition
|
platform: partition
|
||||||
disabled_by_default: true
|
disabled_by_default: true
|
||||||
default_transition_length: ${default_transition_length}
|
default_transition_length: ${default_transition_length}
|
||||||
|
restore_mode: ${LIGHT_INDIVIDUAL_RESTORE_MODE}
|
||||||
segments:
|
segments:
|
||||||
- id: light_full
|
- id: light_full
|
||||||
from: 0
|
from: 0
|
||||||
@@ -410,330 +417,32 @@ light:
|
|||||||
from: 31
|
from: 31
|
||||||
to: 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}
|
|
||||||
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: 17
|
|
||||||
to: 18
|
|
||||||
- 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: 12
|
|
||||||
to: 12
|
|
||||||
- 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_us_rl_2_4_left
|
|
||||||
name: Light - Relay 2 of 4 (left)
|
|
||||||
<<: *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)
|
|
||||||
<<: *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)
|
|
||||||
<<: *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)
|
|
||||||
<<: *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)
|
|
||||||
<<: *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)
|
|
||||||
<<: *light_partition_relays
|
|
||||||
segments:
|
|
||||||
- id: light_full
|
|
||||||
from: 7
|
|
||||||
to: 7
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- id: !extend boot_initialize
|
- id: !extend boot_initialize
|
||||||
then:
|
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: |-
|
- lambda: |-
|
||||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
light_28->set_internal(!id(is_us_model));
|
||||||
sl_tx_model_format->active_index().value() == 1;
|
light_29->set_internal(!id(is_us_model));
|
||||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
light_30->set_internal(!id(is_us_model));
|
||||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
light_31->set_internal(!id(is_us_model));
|
||||||
if (num_gangs < 1 || num_gangs > 4) {
|
light_eu->set_internal(id(is_us_model));
|
||||||
ESP_LOGE("core_hw_leds", "Invalid number of gangs: %" PRIu8, num_gangs);
|
light_eu_bottom->set_internal(id(is_us_model));
|
||||||
return;
|
light_eu_left->set_internal(id(is_us_model));
|
||||||
}
|
light_eu_right->set_internal(id(is_us_model));
|
||||||
light_28->set_internal(!is_model_us);
|
light_eu_top->set_internal(id(is_us_model));
|
||||||
light_29->set_internal(!is_model_us);
|
light_us->set_internal(!id(is_us_model));
|
||||||
light_30->set_internal(!is_model_us);
|
light_us_bottom->set_internal(!id(is_us_model));
|
||||||
light_31->set_internal(!is_model_us);
|
light_us_left->set_internal(!id(is_us_model));
|
||||||
light_eu->set_internal(is_model_us);
|
light_us_right->set_internal(!id(is_us_model));
|
||||||
light_eu_bottom->set_internal(is_model_us);
|
light_us_top->set_internal(!id(is_us_model));
|
||||||
light_eu_left->set_internal(is_model_us);
|
|
||||||
light_eu_right->set_internal(is_model_us);
|
// LED Group Assignment:
|
||||||
light_eu_top->set_internal(is_model_us);
|
// - For US model: gb_lights_1 = left side LEDs, gb_lights_2 = right side LEDs
|
||||||
light_us->set_internal(!is_model_us);
|
// - For EU model: gb_lights_1 = bottom LEDs, gb_lights_2 = top LEDs
|
||||||
light_us_bottom->set_internal(!is_model_us);
|
// Gang configurations determine which LED segments are active
|
||||||
light_us_left->set_internal(!is_model_us);
|
switch (id(gang_count)) {
|
||||||
light_us_right->set_internal(!is_model_us);
|
|
||||||
light_us_top->set_internal(!is_model_us);
|
|
||||||
switch (num_gangs) {
|
|
||||||
case 1: // 1 Gang
|
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_1) = { light_us_rl_1_1_left };
|
||||||
id(gb_lights_2) = { light_us_rl_1_1_right };
|
id(gb_lights_2) = { light_us_rl_1_1_right };
|
||||||
} else {
|
} else {
|
||||||
@@ -742,7 +451,7 @@ script:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // 2 Gang
|
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_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 };
|
id(gb_lights_2) = { light_us_rl_1_2_right, light_us_rl_2_2_right };
|
||||||
} else {
|
} else {
|
||||||
@@ -751,7 +460,7 @@ script:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // 3 Gang
|
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_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 };
|
id(gb_lights_2) = { light_us_rl_1_3_right, light_us_rl_2_3_right, light_us_rl_3_3_right };
|
||||||
} else {
|
} else {
|
||||||
@@ -760,7 +469,7 @@ script:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4: // 4 Gang
|
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,
|
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 };
|
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,
|
id(gb_lights_2) = { light_us_rl_1_4_right, light_us_rl_2_4_right,
|
||||||
@@ -786,10 +495,12 @@ script:
|
|||||||
static const uint32_t LIGHT_TRANSITION_TURN_OFF = ${LIGHT_TRANSITION_TURN_OFF};
|
static const uint32_t LIGHT_TRANSITION_TURN_OFF = ${LIGHT_TRANSITION_TURN_OFF};
|
||||||
static const uint8_t LIGHT_BRIGHTNESS_TURN_ON = ${LIGHT_BRIGHTNESS_TURN_ON};
|
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
|
const std::string light_mode_group_1 = id(is_us_model)
|
||||||
sl_tx_model_format->active_index().value() == 1;
|
? "${LIGHT_MODE_LEFT_TEXT}"
|
||||||
const std::string light_mode_group_1 = is_model_us ? "${LIGHT_MODE_LEFT_TEXT}" : "${LIGHT_MODE_BOTTOM_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_2 = id(is_us_model)
|
||||||
|
? "${LIGHT_MODE_RIGHT_TEXT}"
|
||||||
|
: "${LIGHT_MODE_TOP_TEXT}";
|
||||||
|
|
||||||
switch (light_group) {
|
switch (light_group) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|||||||
@@ -16,11 +16,27 @@ substitutions:
|
|||||||
RELAY_MODE_TEXT_LIGHT: "Light"
|
RELAY_MODE_TEXT_LIGHT: "Light"
|
||||||
RELAY_MODE_TEXT_NOT_USED: "Not in use"
|
RELAY_MODE_TEXT_NOT_USED: "Not in use"
|
||||||
|
|
||||||
|
RELAY_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||||
|
LIGHT_RELAYS_RESTORE_MODE: RESTORE_DEFAULT_OFF
|
||||||
|
|
||||||
|
|
||||||
globals:
|
globals:
|
||||||
- id: boot_initialization_relays
|
- id: boot_initialization_relays
|
||||||
type: bool
|
type: bool
|
||||||
restore_value: false
|
restore_value: false
|
||||||
initial_value: 'false'
|
initial_value: 'false'
|
||||||
|
- id: boot_initialization_relays_light_modes
|
||||||
|
type: bool
|
||||||
|
restore_value: false
|
||||||
|
initial_value: 'false'
|
||||||
|
- id: boot_initialization_relays_relay_leds
|
||||||
|
type: bool
|
||||||
|
restore_value: false
|
||||||
|
initial_value: 'false'
|
||||||
|
- id: boot_initialization_relays_relay_modes
|
||||||
|
type: bool
|
||||||
|
restore_value: false
|
||||||
|
initial_value: 'false'
|
||||||
|
|
||||||
light:
|
light:
|
||||||
# These lights are used for the physical relays to be shown as lights
|
# These lights are used for the physical relays to be shown as lights
|
||||||
@@ -29,6 +45,7 @@ light:
|
|||||||
output: output_relay_1
|
output: output_relay_1
|
||||||
platform: binary
|
platform: binary
|
||||||
internal: true
|
internal: true
|
||||||
|
restore_mode: ${RELAY_RESTORE_MODE}
|
||||||
on_turn_on:
|
on_turn_on:
|
||||||
then:
|
then:
|
||||||
- if:
|
- if:
|
||||||
@@ -101,19 +118,312 @@ light:
|
|||||||
then:
|
then:
|
||||||
- switch.turn_off: sw_relay_4
|
- 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:
|
output:
|
||||||
- id: output_relay_1
|
- id: output_relay_1
|
||||||
platform: gpio
|
platform: gpio
|
||||||
pin: GPIO18
|
pin: GPIO18
|
||||||
|
|
||||||
- id: output_relay_2
|
- id: output_relay_2
|
||||||
platform: gpio
|
platform: gpio
|
||||||
pin: GPIO17
|
pin: GPIO17
|
||||||
|
|
||||||
- id: output_relay_3
|
- id: output_relay_3
|
||||||
platform: gpio
|
platform: gpio
|
||||||
pin: GPIO27
|
pin: GPIO27
|
||||||
|
|
||||||
- id: output_relay_4
|
- id: output_relay_4
|
||||||
platform: gpio
|
platform: gpio
|
||||||
pin: GPIO23
|
pin: GPIO23
|
||||||
@@ -126,31 +436,112 @@ script:
|
|||||||
- id: boot_initialize_relays
|
- id: boot_initialize_relays
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
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:
|
- wait_until:
|
||||||
condition:
|
condition:
|
||||||
- lambda: return sl_tx_model_format->active_index().has_value();
|
- lambda: return id(boot_initialization_relays_light_modes);
|
||||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
- 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: |-
|
- lambda: |-
|
||||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
// EU light modes
|
||||||
sl_tx_model_format->active_index().value() == 1;
|
sl_relay_1_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 1);
|
||||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
sl_relay_2_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 2);
|
||||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
sl_relay_3_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 3);
|
||||||
if (num_gangs < 1 || num_gangs > 4) {
|
sl_relay_4_light_mode_eu->set_internal(id(is_us_model) or id(gang_count) < 4);
|
||||||
ESP_LOGE("core_hw_relays", "Invalid number of gangs: %" PRIu8, num_gangs);
|
|
||||||
return;
|
// US light modes
|
||||||
}
|
sl_relay_1_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 1);
|
||||||
sl_relay_1_mode->set_internal(num_gangs < 1);
|
sl_relay_2_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 2);
|
||||||
sl_relay_1_light_mode_eu->set_internal(is_model_us or num_gangs < 1);
|
sl_relay_3_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 3);
|
||||||
sl_relay_1_light_mode_us->set_internal(!is_model_us or num_gangs < 1);
|
sl_relay_4_light_mode_us->set_internal(!id(is_us_model) or id(gang_count) < 4);
|
||||||
sl_relay_2_mode->set_internal(num_gangs < 2);
|
|
||||||
sl_relay_2_light_mode_eu->set_internal(is_model_us or num_gangs < 2);
|
// Set this section of initialization as completed
|
||||||
sl_relay_2_light_mode_us->set_internal(!is_model_us or num_gangs < 2);
|
id(boot_initialization_relays_light_modes) = true;
|
||||||
sl_relay_3_mode->set_internal(num_gangs < 3);
|
|
||||||
sl_relay_3_light_mode_eu->set_internal(is_model_us or num_gangs < 3);
|
- id: boot_initialize_relays_relay_leds
|
||||||
sl_relay_3_light_mode_us->set_internal(!is_model_us or num_gangs < 3);
|
mode: restart
|
||||||
sl_relay_4_mode->set_internal(num_gangs < 4);
|
then:
|
||||||
sl_relay_4_light_mode_eu->set_internal(is_model_us or num_gangs < 4);
|
- lambda: |-
|
||||||
sl_relay_4_light_mode_us->set_internal(!is_model_us or num_gangs < 4);
|
const bool set_internal = not sw_expose_relays_leds_to_ha->state;
|
||||||
|
|
||||||
|
// EU model LEDs
|
||||||
|
// EU model - 1 Gang
|
||||||
|
light_eu_rl_1_1_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1);
|
||||||
|
light_eu_rl_1_1_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 1);
|
||||||
|
// EU model - 2 Gang
|
||||||
|
light_eu_rl_1_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_eu_rl_1_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_eu_rl_2_2_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_eu_rl_2_2_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 2);
|
||||||
|
// EU model - 3 Gang
|
||||||
|
light_eu_rl_1_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_eu_rl_1_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_eu_rl_2_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_eu_rl_2_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_eu_rl_3_3_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_eu_rl_3_3_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 3);
|
||||||
|
// EU model - 4 Gang
|
||||||
|
light_eu_rl_1_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_1_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_2_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_2_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_3_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_3_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_4_4_bottom->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_eu_rl_4_4_top->set_internal(set_internal or id(is_us_model) or id(gang_count) != 4);
|
||||||
|
|
||||||
|
// US model LEDs
|
||||||
|
// US model - 1 Gang
|
||||||
|
light_us_rl_1_1_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
|
||||||
|
light_us_rl_1_1_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 1);
|
||||||
|
// US model - 2 Gang
|
||||||
|
light_us_rl_1_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_us_rl_1_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_us_rl_2_2_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
|
||||||
|
light_us_rl_2_2_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 2);
|
||||||
|
// US model - 3 Gang
|
||||||
|
light_us_rl_1_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_us_rl_1_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_us_rl_2_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_us_rl_2_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_us_rl_3_3_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
light_us_rl_3_3_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 3);
|
||||||
|
// US model - 4 Gang
|
||||||
|
light_us_rl_1_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_1_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_2_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_2_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_3_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_3_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_4_4_left->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
light_us_rl_4_4_right->set_internal(set_internal or !id(is_us_model) or id(gang_count) != 4);
|
||||||
|
|
||||||
|
// Set this section of initialization as completed
|
||||||
|
id(boot_initialization_relays_relay_leds) = true;
|
||||||
|
|
||||||
|
- id: boot_initialize_relays_relay_modes
|
||||||
|
mode: restart
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
// Set selector internal based on the model (num of relays)
|
||||||
|
sl_relay_1_mode->set_internal(id(gang_count) < 1);
|
||||||
|
sl_relay_2_mode->set_internal(id(gang_count) < 2);
|
||||||
|
sl_relay_3_mode->set_internal(id(gang_count) < 3);
|
||||||
|
sl_relay_4_mode->set_internal(id(gang_count) < 4);
|
||||||
|
|
||||||
|
// Set indicator (either switch or light) visible on Home Assistant
|
||||||
auto relay_mode_index = sl_relay_1_mode->active_index();
|
auto relay_mode_index = sl_relay_1_mode->active_index();
|
||||||
if (relay_mode_index.has_value()) {
|
if (relay_mode_index.has_value()) {
|
||||||
light_output_1->set_internal(false or relay_mode_index.value() != 1);
|
light_output_1->set_internal(false or relay_mode_index.value() != 1);
|
||||||
@@ -158,20 +549,22 @@ script:
|
|||||||
}
|
}
|
||||||
relay_mode_index = sl_relay_2_mode->active_index();
|
relay_mode_index = sl_relay_2_mode->active_index();
|
||||||
if (relay_mode_index.has_value()) {
|
if (relay_mode_index.has_value()) {
|
||||||
light_output_2->set_internal(num_gangs < 2 or relay_mode_index.value() != 1);
|
light_output_2->set_internal(id(gang_count) < 2 or relay_mode_index.value() != 1);
|
||||||
sw_relay_2->set_internal(num_gangs < 2 or relay_mode_index.value() != 0);
|
sw_relay_2->set_internal(id(gang_count) < 2 or relay_mode_index.value() != 0);
|
||||||
}
|
}
|
||||||
relay_mode_index = sl_relay_3_mode->active_index();
|
relay_mode_index = sl_relay_3_mode->active_index();
|
||||||
if (relay_mode_index.has_value()) {
|
if (relay_mode_index.has_value()) {
|
||||||
light_output_3->set_internal(num_gangs < 3 or relay_mode_index.value() != 1);
|
light_output_3->set_internal(id(gang_count) < 3 or relay_mode_index.value() != 1);
|
||||||
sw_relay_3->set_internal(num_gangs < 3 or relay_mode_index.value() != 0);
|
sw_relay_3->set_internal(id(gang_count) < 3 or relay_mode_index.value() != 0);
|
||||||
}
|
}
|
||||||
relay_mode_index = sl_relay_4_mode->active_index();
|
relay_mode_index = sl_relay_4_mode->active_index();
|
||||||
if (relay_mode_index.has_value()) {
|
if (relay_mode_index.has_value()) {
|
||||||
light_output_4->set_internal(num_gangs < 4 or relay_mode_index.value() != 1);
|
light_output_4->set_internal(id(gang_count) < 4 or relay_mode_index.value() != 1);
|
||||||
sw_relay_4->set_internal(num_gangs < 4 or relay_mode_index.value() != 0);
|
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
|
- id: !extend button_click_event
|
||||||
then:
|
then:
|
||||||
@@ -189,51 +582,76 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Toggle relay if corresponding button action is enabled
|
// Toggle relay if corresponding button action is enabled
|
||||||
|
const bool api_disconnected = !global_api_server->is_connected() or
|
||||||
|
!wifi_component->is_connected();
|
||||||
|
std::string select_state;
|
||||||
|
bool toggle_relay = false;
|
||||||
|
if (api_disconnected) {
|
||||||
|
ESP_LOGW("core_hw_relays", "Toggle relays:");
|
||||||
|
ESP_LOGW("core_hw_relays", " API state: DISCONNECTED");
|
||||||
|
ESP_LOGW("core_hw_relays", " Button: %" PRIu8, button);
|
||||||
|
} else {
|
||||||
|
ESP_LOGVV("core_hw_relays", "Toggle relays:");
|
||||||
|
ESP_LOGVV("core_hw_relays", " API state: Connected");
|
||||||
|
ESP_LOGVV("core_hw_relays", " Button: %" PRIu8, button);
|
||||||
|
}
|
||||||
switch (button) {
|
switch (button) {
|
||||||
case ${BUTTON_1_ID}:
|
case ${BUTTON_1_ID}:
|
||||||
if (sl_button_1_action->state != "${RELAY_MODE_TEXT_NOT_USED}")
|
select_state = sl_button_1_action->state;
|
||||||
|
toggle_relay = (select_state == "${BUTTON_1_ACTION_TEXT}" or
|
||||||
|
(api_disconnected and select_state == "${BUTTON_1_ACTION_FAILSAFE_TEXT}"));
|
||||||
|
if (toggle_relay)
|
||||||
sw_relay_1->toggle();
|
sw_relay_1->toggle();
|
||||||
break;
|
break;
|
||||||
case ${BUTTON_2_ID}:
|
case ${BUTTON_2_ID}:
|
||||||
if (sl_button_2_action->state != "${RELAY_MODE_TEXT_NOT_USED}")
|
select_state = sl_button_2_action->state;
|
||||||
|
toggle_relay = (select_state == "${BUTTON_2_ACTION_TEXT}" or
|
||||||
|
(api_disconnected and select_state == "${BUTTON_2_ACTION_FAILSAFE_TEXT}"));
|
||||||
|
if (toggle_relay)
|
||||||
sw_relay_2->toggle();
|
sw_relay_2->toggle();
|
||||||
break;
|
break;
|
||||||
case ${BUTTON_3_ID}:
|
case ${BUTTON_3_ID}:
|
||||||
if (sl_button_3_action->state != "${RELAY_MODE_TEXT_NOT_USED}")
|
select_state = sl_button_3_action->state;
|
||||||
|
toggle_relay = (select_state == "${BUTTON_3_ACTION_TEXT}" or
|
||||||
|
(api_disconnected and select_state == "${BUTTON_3_ACTION_FAILSAFE_TEXT}"));
|
||||||
|
if (toggle_relay)
|
||||||
sw_relay_3->toggle();
|
sw_relay_3->toggle();
|
||||||
break;
|
break;
|
||||||
case ${BUTTON_4_ID}:
|
case ${BUTTON_4_ID}:
|
||||||
if (sl_button_4_action->state != "${RELAY_MODE_TEXT_NOT_USED}")
|
select_state = sl_button_4_action->state;
|
||||||
|
toggle_relay = (select_state == "${BUTTON_4_ACTION_TEXT}" or
|
||||||
|
(api_disconnected and select_state == "${BUTTON_4_ACTION_FAILSAFE_TEXT}"));
|
||||||
|
if (toggle_relay)
|
||||||
sw_relay_4->toggle();
|
sw_relay_4->toggle();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (toggle_relay) {
|
||||||
|
ESP_LOGI("core_hw_relays", "Toggle relay %" PRIu8 ": (%s)", button, select_state.c_str());
|
||||||
|
} else if (not select_state.empty()) {
|
||||||
|
ESP_LOGV("core_hw_relays", "Ignoring toggle for relay %" PRIu8 ": action is '%s'",
|
||||||
|
button, select_state.c_str());
|
||||||
|
} else {
|
||||||
|
ESP_LOGE("core_hw_relays", "No button action selected for button %" PRIu8, button);
|
||||||
|
}
|
||||||
|
|
||||||
- id: show_relay_status
|
- id: show_relay_status
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
- script.wait: boot_initialize_relays
|
- script.wait: boot_initialize_relays
|
||||||
- wait_until:
|
|
||||||
condition:
|
|
||||||
- lambda: return id(boot_initialization_relays);
|
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
const bool is_model_us = sl_tx_model_format->active_index().has_value() and
|
if (not id(boot_initialization_relays)) {
|
||||||
sl_tx_model_format->active_index().value() == 1;
|
ESP_LOGW("core_hw_relays", "Relays not initialized yet");
|
||||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value())
|
if (not boot_initialize_relays->is_running())
|
||||||
? (sl_tx_model_gang->active_index().value() + 1)
|
boot_initialize_relays->execute();
|
||||||
: 0;
|
|
||||||
|
|
||||||
if (num_gangs < 1 || num_gangs > 4) {
|
|
||||||
ESP_LOGE("core_hw_relays", "Invalid number of gangs: %" PRIu8, num_gangs);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
for (uint8_t i = 0; i < id(gang_count); i++) {
|
||||||
for (uint8_t i = 0; i < num_gangs; i++) {
|
|
||||||
bool relay_state = false;
|
bool relay_state = false;
|
||||||
std::string light_mode;
|
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_LEFT_TEXT}"
|
||||||
: "${LIGHT_MODE_BOTTOM_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_RIGHT_TEXT}"
|
||||||
: "${LIGHT_MODE_TOP_TEXT}";
|
: "${LIGHT_MODE_TOP_TEXT}";
|
||||||
|
|
||||||
@@ -241,25 +659,25 @@ script:
|
|||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
relay_state = id(sw_relay_1).state;
|
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_us)->state
|
||||||
: id(sl_relay_1_light_mode_eu)->state;
|
: id(sl_relay_1_light_mode_eu)->state;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
relay_state = id(sw_relay_2).state;
|
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_us)->state
|
||||||
: id(sl_relay_2_light_mode_eu)->state;
|
: id(sl_relay_2_light_mode_eu)->state;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
relay_state = id(sw_relay_3).state;
|
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_us)->state
|
||||||
: id(sl_relay_3_light_mode_eu)->state;
|
: id(sl_relay_3_light_mode_eu)->state;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
relay_state = id(sw_relay_4).state;
|
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_us)->state
|
||||||
: id(sl_relay_4_light_mode_eu)->state;
|
: id(sl_relay_4_light_mode_eu)->state;
|
||||||
break;
|
break;
|
||||||
@@ -298,25 +716,45 @@ select:
|
|||||||
entity_category: config
|
entity_category: config
|
||||||
disabled_by_default: false
|
disabled_by_default: false
|
||||||
icon: mdi:dip-switch
|
icon: mdi:dip-switch
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- binary_sensor.template.publish:
|
||||||
|
id: bs_pending_restart
|
||||||
|
state: true
|
||||||
- id: sl_relay_2_mode
|
- id: sl_relay_2_mode
|
||||||
name: Relay 2 display mode
|
name: Relay 2 display mode
|
||||||
<<: *relay_select_mode_base
|
<<: *relay_select_mode_base
|
||||||
|
|
||||||
- id: sl_relay_3_mode
|
- id: sl_relay_3_mode
|
||||||
name: Relay 3 display mode
|
name: Relay 3 display mode
|
||||||
<<: *relay_select_mode_base
|
<<: *relay_select_mode_base
|
||||||
|
|
||||||
- id: sl_relay_4_mode
|
- id: sl_relay_4_mode
|
||||||
name: Relay 4 display mode
|
name: Relay 4 display mode
|
||||||
<<: *relay_select_mode_base
|
<<: *relay_select_mode_base
|
||||||
|
|
||||||
switch:
|
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
|
- id: sw_relay_1
|
||||||
name: Relay 1
|
name: Relay 1
|
||||||
output: output_relay_1
|
output: output_relay_1
|
||||||
platform: output
|
platform: output
|
||||||
restore_mode: RESTORE_DEFAULT_OFF
|
restore_mode: ${RELAY_RESTORE_MODE}
|
||||||
internal: true
|
internal: true
|
||||||
on_turn_on:
|
on_turn_on:
|
||||||
then:
|
then:
|
||||||
@@ -334,12 +772,11 @@ switch:
|
|||||||
- light.is_on: light_output_1
|
- light.is_on: light_output_1
|
||||||
then:
|
then:
|
||||||
- light.turn_off: light_output_1
|
- light.turn_off: light_output_1
|
||||||
|
|
||||||
- id: sw_relay_2
|
- id: sw_relay_2
|
||||||
name: Relay 2
|
name: Relay 2
|
||||||
output: output_relay_2
|
output: output_relay_2
|
||||||
platform: output
|
platform: output
|
||||||
restore_mode: RESTORE_DEFAULT_OFF
|
restore_mode: ${RELAY_RESTORE_MODE}
|
||||||
internal: true
|
internal: true
|
||||||
on_turn_on:
|
on_turn_on:
|
||||||
then:
|
then:
|
||||||
@@ -357,12 +794,11 @@ switch:
|
|||||||
- light.is_on: light_output_2
|
- light.is_on: light_output_2
|
||||||
then:
|
then:
|
||||||
- light.turn_off: light_output_2
|
- light.turn_off: light_output_2
|
||||||
|
|
||||||
- id: sw_relay_3
|
- id: sw_relay_3
|
||||||
name: Relay 3
|
name: Relay 3
|
||||||
output: output_relay_3
|
output: output_relay_3
|
||||||
platform: output
|
platform: output
|
||||||
restore_mode: RESTORE_DEFAULT_OFF
|
restore_mode: ${RELAY_RESTORE_MODE}
|
||||||
internal: true
|
internal: true
|
||||||
on_turn_on:
|
on_turn_on:
|
||||||
then:
|
then:
|
||||||
@@ -380,12 +816,11 @@ switch:
|
|||||||
- light.is_on: light_output_3
|
- light.is_on: light_output_3
|
||||||
then:
|
then:
|
||||||
- light.turn_off: light_output_3
|
- light.turn_off: light_output_3
|
||||||
|
|
||||||
- id: sw_relay_4
|
- id: sw_relay_4
|
||||||
name: Relay 4
|
name: Relay 4
|
||||||
output: output_relay_4
|
output: output_relay_4
|
||||||
platform: output
|
platform: output
|
||||||
restore_mode: RESTORE_DEFAULT_OFF
|
restore_mode: ${RELAY_RESTORE_MODE}
|
||||||
internal: true
|
internal: true
|
||||||
on_turn_on:
|
on_turn_on:
|
||||||
then:
|
then:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
##### TX Ultimate Easy for ESPHome #####
|
##### TX Ultimate Easy for ESPHome #####
|
||||||
##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy #####
|
##### 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 #####
|
##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo #####
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
@@ -17,13 +17,13 @@ i2s_audio:
|
|||||||
i2s_lrclk_pin: GPIO4
|
i2s_lrclk_pin: GPIO4
|
||||||
|
|
||||||
media_player:
|
media_player:
|
||||||
- id: mp_speaker
|
- id: mp_media_player
|
||||||
name: Speaker
|
name: Media Player
|
||||||
|
internal: false
|
||||||
platform: i2s_audio
|
platform: i2s_audio
|
||||||
i2s_dout_pin: GPIO15
|
i2s_dout_pin: GPIO15
|
||||||
i2s_audio_id: if_i2s_audio
|
i2s_audio_id: if_i2s_audio
|
||||||
i2s_comm_fmt: lsb
|
i2s_comm_fmt: msb # Experimental - It was 'lsb' until v2024.12.12
|
||||||
dac_type: external
|
dac_type: external
|
||||||
mode: mono
|
mode: mono
|
||||||
internal: false
|
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -256,13 +256,8 @@ script:
|
|||||||
- id: boot_initialize_touch_gang
|
- id: boot_initialize_touch_gang
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
- wait_until:
|
|
||||||
condition:
|
|
||||||
- lambda: return sl_tx_model_gang->active_index().has_value();
|
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
const uint8_t num_gangs = (sl_tx_model_gang->active_index().has_value()) ?
|
tx_ultimate->set_gang_count(id(gang_count));
|
||||||
(sl_tx_model_gang->active_index().value() + 1) : 0;
|
|
||||||
tx_ultimate->set_gang_count(num_gangs);
|
|
||||||
bs_button_1_click_event->publish_state(false);
|
bs_button_1_click_event->publish_state(false);
|
||||||
bs_button_2_click_event->publish_state(false);
|
bs_button_2_click_event->publish_state(false);
|
||||||
bs_button_3_click_event->publish_state(false);
|
bs_button_3_click_event->publish_state(false);
|
||||||
@@ -275,18 +270,18 @@ script:
|
|||||||
bs_button_2_long_press_event->publish_state(false);
|
bs_button_2_long_press_event->publish_state(false);
|
||||||
bs_button_3_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_4_long_press_event->publish_state(false);
|
||||||
bs_button_1_click_event->set_internal(num_gangs < 1);
|
bs_button_1_click_event->set_internal(id(gang_count) < 1);
|
||||||
bs_button_2_click_event->set_internal(num_gangs < 2);
|
bs_button_2_click_event->set_internal(id(gang_count) < 2);
|
||||||
bs_button_3_click_event->set_internal(num_gangs < 3);
|
bs_button_3_click_event->set_internal(id(gang_count) < 3);
|
||||||
bs_button_4_click_event->set_internal(num_gangs < 4);
|
bs_button_4_click_event->set_internal(id(gang_count) < 4);
|
||||||
bs_button_1_double_click_event->set_internal(num_gangs < 1);
|
bs_button_1_double_click_event->set_internal(id(gang_count) < 1);
|
||||||
bs_button_2_double_click_event->set_internal(num_gangs < 2);
|
bs_button_2_double_click_event->set_internal(id(gang_count) < 2);
|
||||||
bs_button_3_double_click_event->set_internal(num_gangs < 3);
|
bs_button_3_double_click_event->set_internal(id(gang_count) < 3);
|
||||||
bs_button_4_double_click_event->set_internal(num_gangs < 4);
|
bs_button_4_double_click_event->set_internal(id(gang_count) < 4);
|
||||||
bs_button_1_long_press_event->set_internal(num_gangs < 1);
|
bs_button_1_long_press_event->set_internal(id(gang_count) < 1);
|
||||||
bs_button_2_long_press_event->set_internal(num_gangs < 2);
|
bs_button_2_long_press_event->set_internal(id(gang_count) < 2);
|
||||||
bs_button_3_long_press_event->set_internal(num_gangs < 3);
|
bs_button_3_long_press_event->set_internal(id(gang_count) < 3);
|
||||||
bs_button_4_long_press_event->set_internal(num_gangs < 4);
|
bs_button_4_long_press_event->set_internal(id(gang_count) < 4);
|
||||||
|
|
||||||
- id: touch_on_multi_touch_release
|
- id: touch_on_multi_touch_release
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -311,9 +306,9 @@ script:
|
|||||||
- id: touch_on_release
|
- id: touch_on_release
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
# Extended by:
|
# Extended by:
|
||||||
# - HW Buttons
|
# - HW Buttons
|
||||||
# - HW Vibration
|
# - HW Vibration
|
||||||
|
|
||||||
- id: touch_swipe_left
|
- id: touch_swipe_left
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -358,9 +353,9 @@ tx_ultimate_easy:
|
|||||||
- lambda: |-
|
- lambda: |-
|
||||||
const uint8_t touch_position = static_cast<uint8_t>(touch.x);
|
const uint8_t touch_position = static_cast<uint8_t>(touch.x);
|
||||||
if (touch_position > ${TOUCH_POSITION_MAX_VALUE}) { // Check for valid range
|
if (touch_position > ${TOUCH_POSITION_MAX_VALUE}) { // Check for valid range
|
||||||
ESP_LOGE("tx_ultimate_easy", "Invalid long-touch position: %" PRIu8, touch_position);
|
ESP_LOGE("core_hw_touch", "Invalid long-touch position: %" PRIu8, touch_position);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI("tx_ultimate_easy", "Long-touch released at position %" PRIu8, touch_position);
|
ESP_LOGI("core_hw_touch", "Long-touch released at position %" PRIu8, touch_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
on_multi_touch_release:
|
on_multi_touch_release:
|
||||||
@@ -373,21 +368,21 @@ tx_ultimate_easy:
|
|||||||
type: multi_touch
|
type: multi_touch
|
||||||
action: release
|
action: release
|
||||||
position: !lambda return touch.x;
|
position: !lambda return touch.x;
|
||||||
- lambda: ESP_LOGI("tx_ultimate_easy", "Multi-touch released");
|
- lambda: ESP_LOGI("core_hw_touch", "Multi-touch released");
|
||||||
- script.execute: touch_on_multi_touch_release
|
- script.execute: touch_on_multi_touch_release
|
||||||
|
|
||||||
on_press:
|
on_press:
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
const uint8_t position = static_cast<uint8_t>(touch.x);
|
const uint8_t position = static_cast<uint8_t>(touch.x);
|
||||||
if (position > ${TOUCH_POSITION_MAX_VALUE}) { // Check for valid range
|
if (position > ${TOUCH_POSITION_MAX_VALUE}) { // Check for valid range
|
||||||
ESP_LOGE("tx_ultimate_easy", "Invalid touch position: %" PRIu8, position);
|
ESP_LOGE("core_hw_touch", "Invalid touch position: %" PRIu8, position);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI("tx_ultimate_easy", "Pressed at position %" PRIu8, position);
|
ESP_LOGI("core_hw_touch", "Pressed at position %" PRIu8, position);
|
||||||
touch_on_press->execute(static_cast<uint8_t>(touch.button), position);
|
touch_on_press->execute(static_cast<uint8_t>(touch.button), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
on_release:
|
on_release:
|
||||||
- lambda: ESP_LOGI("tx_ultimate_easy", "Released");
|
- lambda: ESP_LOGI("core_hw_touch", "Released");
|
||||||
- script.execute: touch_on_release
|
- script.execute: touch_on_release
|
||||||
|
|
||||||
on_swipe_left:
|
on_swipe_left:
|
||||||
@@ -399,12 +394,12 @@ tx_ultimate_easy:
|
|||||||
domain: touch
|
domain: touch
|
||||||
type: swipe
|
type: swipe
|
||||||
action: !lambda |-
|
action: !lambda |-
|
||||||
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}" ? "left" : "down";
|
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}" ? "left" : "down";
|
||||||
swipe-direction: !lambda |-
|
swipe-direction: !lambda |-
|
||||||
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}" ? "left" : "down";
|
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}" ? "left" : "down";
|
||||||
position: !lambda return touch.x;
|
position: !lambda return touch.x;
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
ESP_LOGI("tx_ultimate_easy", "Swipe %s", sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}"
|
ESP_LOGI("core_hw_touch", "Swipe %s", sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}"
|
||||||
? "left"
|
? "left"
|
||||||
: "down");
|
: "down");
|
||||||
- script.execute: touch_swipe_left
|
- script.execute: touch_swipe_left
|
||||||
@@ -418,21 +413,21 @@ tx_ultimate_easy:
|
|||||||
domain: touch
|
domain: touch
|
||||||
type: swipe
|
type: swipe
|
||||||
action: !lambda |-
|
action: !lambda |-
|
||||||
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}" ? "right" : "up";
|
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}" ? "right" : "up";
|
||||||
swipe-direction: !lambda |-
|
swipe-direction: !lambda |-
|
||||||
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}" ? "right" : "up";
|
return sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}" ? "right" : "up";
|
||||||
position: !lambda return touch.x;
|
position: !lambda return touch.x;
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
ESP_LOGI("tx_ultimate_easy", "Swipe %s", sl_tx_model_format->state == "${TX_MODEL_FORMAT_US_TEXT}"
|
ESP_LOGI("core_hw_touch", "Swipe %s", sl_tx_model_format->state == "${TX_MODEL_FORMAT_EU_TEXT}"
|
||||||
? "right"
|
? "right"
|
||||||
: "up");
|
: "up");
|
||||||
- script.execute: touch_swipe_right
|
- script.execute: touch_swipe_right
|
||||||
|
|
||||||
on_touch_event:
|
on_touch_event:
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
ESP_LOGD("tx_ultimate_easy", "Touch event:");
|
ESP_LOGD("core_hw_touch", "Touch event:");
|
||||||
ESP_LOGD("tx_ultimate_easy", " State: %i (%s)", touch.state, touch.state_str.c_str());
|
ESP_LOGD("core_hw_touch", " State: %i (%s)", touch.state, touch.state_str.c_str());
|
||||||
ESP_LOGD("tx_ultimate_easy", " Position: %i", touch.x);
|
ESP_LOGD("core_hw_touch", " Position: %i", touch.x);
|
||||||
|
|
||||||
uart:
|
uart:
|
||||||
- id: uart_touch
|
- id: uart_touch
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2024.12.9
|
2024.12.18
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
version: 2024.12.9
|
version: 2024.12.18
|
||||||
|
|||||||
Reference in New Issue
Block a user