Compare commits

..

8 Commits

Author SHA1 Message Date
GitHub Actions
44b3586a17 Bump version to 2024.12.17 [skip-versioning] 2024-12-24 13:46:33 +00:00
Edward Firmo
93990e78c1 Merge pull request #63 from edwardtfn/button-failsafe-action
Adds "Relay n (API failsafe only)" to button's actions
2024-12-24 14:46:21 +01:00
GitHub Actions
e8470f56e4 Bump version to 2024.12.16 [skip-versioning] 2024-12-24 11:02:55 +00:00
Edward Firmo
2429c9d616 Merge pull request #70 from edwardtfn/swipe-log-messages
Fix swipe log messages
2024-12-24 12:02:45 +01:00
Edward Firmo
7a5a537847 Fix swipe log messages 2024-12-24 11:57:03 +01:00
Edward Firmo
a44e486411 Add Id to Wi-Fi component 2024-12-24 01:23:29 +01:00
Edward Firmo
c4b2b8917f Consider disconnected if wifi is disconnected
Trying to detect a disconnection earlier.
2024-12-24 01:17:00 +01:00
Edward Firmo
60a3248c6b Adds "Relay n (API failsafe only)" to button's actions
Solves #23
2024-12-23 20:30:32 +01:00
6 changed files with 83 additions and 55 deletions

View File

@@ -75,6 +75,17 @@ esphome:
then:
- 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:
id: serial_improv
@@ -146,6 +157,11 @@ select:
entity_category: config
disabled_by_default: false
icon: mdi:tablet-cellphone
on_value:
then:
- 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
name: Model (Gang)
@@ -164,7 +180,10 @@ select:
icon: mdi:dip-switch
on_value:
then:
- lambda: tx_ultimate->set_gang_count(static_cast<uint8_t>(i)+1);
- 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:
- id: esphome_fw_version
@@ -216,5 +235,6 @@ time:
web_server:
wifi:
id: wifi_component
ap:
...

View File

@@ -19,6 +19,10 @@ substitutions:
BUTTON_2_ACTION_TEXT: "Relay 2 (toggle)"
BUTTON_3_ACTION_TEXT: "Relay 3 (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_MAX_LENGTH: '350' # The maximum duration the click should last, in msec
@@ -289,6 +293,7 @@ select:
options:
- "${BUTTON_ACTION_NONE_TEXT}"
- "${BUTTON_1_ACTION_TEXT}"
- "${BUTTON_1_ACTION_FAILSAFE_TEXT}"
initial_option: "${BUTTON_1_ACTION_TEXT}"
optimistic: true
restore_value: true
@@ -303,6 +308,7 @@ select:
options:
- "${BUTTON_ACTION_NONE_TEXT}"
- "${BUTTON_2_ACTION_TEXT}"
- "${BUTTON_2_ACTION_FAILSAFE_TEXT}"
initial_option: "${BUTTON_2_ACTION_TEXT}"
<<: *button_select_action_base
@@ -312,6 +318,7 @@ select:
options:
- "${BUTTON_ACTION_NONE_TEXT}"
- "${BUTTON_3_ACTION_TEXT}"
- "${BUTTON_3_ACTION_FAILSAFE_TEXT}"
initial_option: "${BUTTON_3_ACTION_TEXT}"
<<: *button_select_action_base
@@ -321,6 +328,7 @@ select:
options:
- "${BUTTON_ACTION_NONE_TEXT}"
- "${BUTTON_4_ACTION_TEXT}"
- "${BUTTON_4_ACTION_FAILSAFE_TEXT}"
initial_option: "${BUTTON_4_ACTION_TEXT}"
<<: *button_select_action_base
...

View File

@@ -191,57 +191,57 @@ script:
}
// Toggle relay if corresponding button action is enabled
ESP_LOGVV("core_hw_relays", "Toggle relays: (${BUTTON_ACTION_NONE_TEXT})");
ESP_LOGVV("core_hw_relays", " Relay 1: %s (%s)",
YESNO(sl_button_1_action->state != "${BUTTON_ACTION_NONE_TEXT}"),
sl_button_1_action->state.c_str());
ESP_LOGVV("core_hw_relays", " Relay 2: %s (%s)",
YESNO(sl_button_2_action->state != "${BUTTON_ACTION_NONE_TEXT}"),
sl_button_2_action->state.c_str());
ESP_LOGVV("core_hw_relays", " Relay 3: %s (%s)",
YESNO(sl_button_3_action->state != "${BUTTON_ACTION_NONE_TEXT}"),
sl_button_3_action->state.c_str());
ESP_LOGVV("core_hw_relays", " Relay 4: %s (%s)",
YESNO(sl_button_4_action->state != "${BUTTON_ACTION_NONE_TEXT}"),
sl_button_4_action->state.c_str());
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) {
case ${BUTTON_1_ID}:
if (sl_button_1_action->state != "${BUTTON_ACTION_NONE_TEXT}") {
ESP_LOGV("core_hw_relays", "Toggle relay 1: (%s)", sl_button_1_action->state.c_str());
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();
} else {
ESP_LOGV("core_hw_relays", "Ignoring toggle for relay 1: action is '%s'",
sl_button_1_action->state.c_str());
}
break;
case ${BUTTON_2_ID}:
if (sl_button_2_action->state != "${BUTTON_ACTION_NONE_TEXT}") {
ESP_LOGV("core_hw_relays", "Toggle relay 2: (%s)", sl_button_2_action->state.c_str());
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();
} else {
ESP_LOGV("core_hw_relays", "Ignoring toggle for relay 2: action is '%s'",
sl_button_2_action->state.c_str());
}
break;
case ${BUTTON_3_ID}:
if (sl_button_3_action->state != "${BUTTON_ACTION_NONE_TEXT}") {
ESP_LOGV("core_hw_relays", "Toggle relay 3: (%s)", sl_button_3_action->state.c_str());
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();
} else {
ESP_LOGV("core_hw_relays", "Ignoring toggle for relay 3: action is '%s'",
sl_button_3_action->state.c_str());
}
break;
case ${BUTTON_4_ID}:
if (sl_button_4_action->state != "${BUTTON_ACTION_NONE_TEXT}") {
ESP_LOGV("core_hw_relays", "Toggle relay 4: (%s)", sl_button_4_action->state.c_str());
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();
} else {
ESP_LOGV("core_hw_relays", "Ignoring toggle for relay 4: action is '%s'",
sl_button_4_action->state.c_str());
}
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
mode: restart

View File

@@ -358,9 +358,9 @@ tx_ultimate_easy:
- lambda: |-
const uint8_t touch_position = static_cast<uint8_t>(touch.x);
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 {
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:
@@ -373,21 +373,21 @@ tx_ultimate_easy:
type: multi_touch
action: release
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
on_press:
- lambda: |-
const uint8_t position = static_cast<uint8_t>(touch.x);
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 {
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);
}
on_release:
- lambda: ESP_LOGI("tx_ultimate_easy", "Released");
- lambda: ESP_LOGI("core_hw_touch", "Released");
- script.execute: touch_on_release
on_swipe_left:
@@ -399,12 +399,12 @@ tx_ultimate_easy:
domain: touch
type: swipe
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 |-
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;
- 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"
: "down");
- script.execute: touch_swipe_left
@@ -418,21 +418,21 @@ tx_ultimate_easy:
domain: touch
type: swipe
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 |-
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;
- 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"
: "up");
- script.execute: touch_swipe_right
on_touch_event:
- lambda: |-
ESP_LOGD("tx_ultimate_easy", "Touch event:");
ESP_LOGD("tx_ultimate_easy", " State: %i (%s)", touch.state, touch.state_str.c_str());
ESP_LOGD("tx_ultimate_easy", " Position: %i", touch.x);
ESP_LOGD("core_hw_touch", "Touch event:");
ESP_LOGD("core_hw_touch", " State: %i (%s)", touch.state, touch.state_str.c_str());
ESP_LOGD("core_hw_touch", " Position: %i", touch.x);
uart:
- id: uart_touch

View File

@@ -1 +1 @@
2024.12.15
2024.12.17

View File

@@ -1 +1 @@
version: 2024.12.15
version: 2024.12.17