@@ -197,6 +197,7 @@ script:
|
|||||||
- lambda: |-
|
- lambda: |-
|
||||||
static const char *const TAG = "script.upload_tft";
|
static const char *const TAG = "script.upload_tft";
|
||||||
ESP_LOGD(TAG, "Starting...");
|
ESP_LOGD(TAG, "Starting...");
|
||||||
|
char update_msg[128];
|
||||||
|
|
||||||
auto delay_seconds_ = [](int seconds) {
|
auto delay_seconds_ = [](int seconds) {
|
||||||
ESP_LOGD(TAG, "Wait %i seconds", seconds);
|
ESP_LOGD(TAG, "Wait %i seconds", seconds);
|
||||||
@@ -210,23 +211,25 @@ script:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto send_nextion_command = [](const std::string &command) -> bool
|
uint32_t supported_baud_rates[] = {2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400, 250000, 256000, 512000, 921600};
|
||||||
{
|
|
||||||
static const char *const TAG = "script.upload_tft.send_nextion_command";
|
|
||||||
ESP_LOGD(TAG, "Sending: %s", command.c_str());
|
|
||||||
id(tf_uart).write_str(command.c_str());
|
|
||||||
const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF};
|
|
||||||
id(tf_uart).write_array(to_send, sizeof(to_send));
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
auto disable_boot_timers_ = [send_nextion_command]() {
|
auto is_baud_rate_supported = [supported_baud_rates](uint32_t baud_rate_requested) -> bool {
|
||||||
ESP_LOGD(TAG, "Disabling timers on boot page");
|
size_t size = sizeof(supported_baud_rates) / sizeof(supported_baud_rates[0]);
|
||||||
send_nextion_command("timer.en=0");
|
for (size_t i = 0; i < size; ++i) {
|
||||||
send_nextion_command("tm_esphome.en=0");
|
if (supported_baud_rates[i] == baud_rate_requested) {
|
||||||
send_nextion_command("tm_pageid.en=0");
|
return true;
|
||||||
send_nextion_command("wakeup_timer.en=0");
|
}
|
||||||
send_nextion_command("dim=1");
|
}
|
||||||
|
return false; // Return false if not found
|
||||||
|
};
|
||||||
|
|
||||||
|
auto send_nextion_command = [](const std::string &command) -> bool {
|
||||||
|
static const char *const TAG = "script.upload_tft.send_nextion_command";
|
||||||
|
ESP_LOGD(TAG, "Sending: %s", command.c_str());
|
||||||
|
id(tf_uart).write_str(command.c_str());
|
||||||
|
const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF};
|
||||||
|
id(tf_uart).write_array(to_send, sizeof(to_send));
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string framework = "Unknown";
|
std::string framework = "Unknown";
|
||||||
@@ -236,28 +239,6 @@ script:
|
|||||||
framework = "ESP-IDF";
|
framework = "ESP-IDF";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
disable_boot_timers_();
|
|
||||||
if (disp1->is_setup()) {
|
|
||||||
disp1->set_backlight_brightness(1);
|
|
||||||
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
|
||||||
disp1->set_component_text_printf("confirm.body", "Preparing...");
|
|
||||||
disp1->goto_page("confirm");
|
|
||||||
disp1->hide_component("bt_close");
|
|
||||||
disp1->hide_component("bt_accept");
|
|
||||||
disp1->hide_component("bt_clear");
|
|
||||||
disp1->hide_component("bt_close");
|
|
||||||
delay_seconds_(1);
|
|
||||||
display_wrapped_text->execute("confirm.body", "Informing the blueprint that panel is unavailable...", 18);
|
|
||||||
disp1->hide_component("bt_close");
|
|
||||||
}
|
|
||||||
nextion_init->publish_state(false);
|
|
||||||
if (disp1->is_setup()) {
|
|
||||||
delay_seconds_(1);
|
|
||||||
display_wrapped_text->execute("confirm.body", "Stopping scripts...", 18);
|
|
||||||
}
|
|
||||||
stop_all->execute();
|
|
||||||
if (disp1->is_setup()) delay_seconds_(1);
|
|
||||||
|
|
||||||
std::vector<uint8_t> buffer_;
|
std::vector<uint8_t> buffer_;
|
||||||
|
|
||||||
bool is_updating_ = false;
|
bool is_updating_ = false;
|
||||||
@@ -278,6 +259,20 @@ script:
|
|||||||
uart->setup();
|
uart->setup();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto disable_boot_timers_ = [send_nextion_command]() {
|
||||||
|
ESP_LOGD(TAG, "Disabling timers on boot page");
|
||||||
|
send_nextion_command("timer.en=0");
|
||||||
|
send_nextion_command("tm_esphome.en=0");
|
||||||
|
send_nextion_command("tm_pageid.en=0");
|
||||||
|
send_nextion_command("wakeup_timer.en=0");
|
||||||
|
// Set Lovelace UI - Just in case
|
||||||
|
send_nextion_command("tmSleep.en=0");
|
||||||
|
send_nextion_command("tMsg1.txt=""Upload TFT""");
|
||||||
|
send_nextion_command("tMsg2.txt=""""");
|
||||||
|
send_nextion_command("tMsg3.txt=""""");
|
||||||
|
send_nextion_command("dim=1");
|
||||||
|
};
|
||||||
|
|
||||||
auto recv_ret_string_ = [](std::string &response, uint32_t timeout, bool recv_flag) -> uint16_t
|
auto recv_ret_string_ = [](std::string &response, uint32_t timeout, bool recv_flag) -> uint16_t
|
||||||
{
|
{
|
||||||
static const char *const TAG = "script.upload_tft.recv_ret_string_";
|
static const char *const TAG = "script.upload_tft.recv_ret_string_";
|
||||||
@@ -480,10 +475,12 @@ script:
|
|||||||
return upload_end_(false);
|
return upload_end_(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!disp1->is_setup()) {
|
if (not display_mode->state > 0) {
|
||||||
ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive");
|
ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive");
|
||||||
exit_reparse->execute();
|
exit_reparse->execute();
|
||||||
|
disable_boot_timers_();
|
||||||
delay_seconds_(5);
|
delay_seconds_(5);
|
||||||
|
disable_boot_timers_();
|
||||||
}
|
}
|
||||||
|
|
||||||
is_updating_ = true;
|
is_updating_ = true;
|
||||||
@@ -746,10 +743,12 @@ script:
|
|||||||
return upload_end_(false);
|
return upload_end_(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!disp1->is_setup()) {
|
if (not display_mode->state > 0) {
|
||||||
ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive");
|
ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive");
|
||||||
exit_reparse->execute();
|
exit_reparse->execute();
|
||||||
|
disable_boot_timers_();
|
||||||
delay_seconds_(5);
|
delay_seconds_(5);
|
||||||
|
disable_boot_timers_();
|
||||||
}
|
}
|
||||||
|
|
||||||
is_updating_ = true;
|
is_updating_ = true;
|
||||||
@@ -864,17 +863,30 @@ script:
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint32_t supported_baud_rates[] = {2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400, 250000, 256000, 512000, 921600};
|
// The upload process starts here
|
||||||
|
disable_boot_timers_();
|
||||||
auto is_baud_rate_supported = [supported_baud_rates](uint32_t baud_rate_requested) -> bool {
|
nextion_init->publish_state(false);
|
||||||
size_t size = sizeof(supported_baud_rates) / sizeof(supported_baud_rates[0]);
|
if (display_mode->state > 0) {
|
||||||
for (size_t i = 0; i < size; ++i) {
|
disp1->set_backlight_brightness(1);
|
||||||
if (supported_baud_rates[i] == baud_rate_requested) {
|
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
||||||
return true;
|
disp1->set_component_text_printf("confirm.body", "Preparing...");
|
||||||
}
|
disp1->goto_page("confirm");
|
||||||
}
|
disp1->hide_component("bt_close");
|
||||||
return false; // Return false if not found
|
disp1->hide_component("bt_accept");
|
||||||
};
|
disp1->hide_component("bt_clear");
|
||||||
|
disp1->hide_component("bt_close");
|
||||||
|
delay_seconds_(1);
|
||||||
|
display_wrapped_text->execute("confirm.body", "Informing the blueprint that panel is unavailable...", 18);
|
||||||
|
disp1->hide_component("bt_close");
|
||||||
|
delay_seconds_(1);
|
||||||
|
display_wrapped_text->execute("confirm.body", "Stopping scripts...", 18);
|
||||||
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Preparing to upload TFT file...~65535~10000~3~~~", framework.c_str());
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
|
}
|
||||||
|
stop_all->execute();
|
||||||
|
if (display_mode->state > 0) delay_seconds_(1);
|
||||||
|
|
||||||
uint32_t original_baud_rate_ = tf_uart->get_baud_rate();
|
uint32_t original_baud_rate_ = tf_uart->get_baud_rate();
|
||||||
if (!is_baud_rate_supported(original_baud_rate_)) original_baud_rate_ = 115200;
|
if (!is_baud_rate_supported(original_baud_rate_)) original_baud_rate_ = 115200;
|
||||||
@@ -886,35 +898,56 @@ script:
|
|||||||
ESP_LOGD(TAG, "Target upload baud rate: %d", target_upload_baud_rate_);
|
ESP_LOGD(TAG, "Target upload baud rate: %d", target_upload_baud_rate_);
|
||||||
ESP_LOGD(TAG, "Current baud rate: %d", tf_uart->get_baud_rate());
|
ESP_LOGD(TAG, "Current baud rate: %d", tf_uart->get_baud_rate());
|
||||||
|
|
||||||
char update_msg[128];
|
|
||||||
sprintf(update_msg, "Try #1 at %d bps", target_upload_baud_rate_);
|
sprintf(update_msg, "Try #1 at %d bps", target_upload_baud_rate_);
|
||||||
ESP_LOGD(TAG, update_msg);
|
ESP_LOGD(TAG, update_msg);
|
||||||
if (disp1->is_setup()) {
|
if (display_mode->state > 0) {
|
||||||
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
||||||
delay_seconds_(1);
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Try #1 at %d bps~65535~10000~3~~~", framework.c_str(), target_upload_baud_rate_);
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
}
|
}
|
||||||
|
delay_seconds_(1);
|
||||||
if (upload_tft_(url, target_upload_baud_rate_)) id(restart_nspanel).press();
|
if (upload_tft_(url, target_upload_baud_rate_)) id(restart_nspanel).press();
|
||||||
ESP_LOGW(TAG, "Try #1 failed");
|
ESP_LOGW(TAG, "Try #1 failed");
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", "Try #1 failed", 18);
|
if (display_mode->state > 0) display_wrapped_text->execute("confirm.body", "Try #1 failed", 18);
|
||||||
delay_seconds_(5);
|
delay_seconds_(5);
|
||||||
disable_boot_timers_();
|
disable_boot_timers_();
|
||||||
sprintf(update_msg, "Try #2 at %d bps", target_upload_baud_rate_);
|
sprintf(update_msg, "Try #2 at %d bps", target_upload_baud_rate_);
|
||||||
ESP_LOGD(TAG, update_msg);
|
ESP_LOGD(TAG, update_msg);
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", update_msg, 18);
|
if (display_mode->state > 0) {
|
||||||
|
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
||||||
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Try #2 at %d bps~65535~10000~3~~~", framework.c_str(), target_upload_baud_rate_);
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
|
}
|
||||||
|
delay_seconds_(1);
|
||||||
if (upload_tft_(url, target_upload_baud_rate_)) id(restart_nspanel).press();
|
if (upload_tft_(url, target_upload_baud_rate_)) id(restart_nspanel).press();
|
||||||
ESP_LOGW(TAG, "Try #2 failed");
|
ESP_LOGW(TAG, "Try #2 failed");
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", "Try #2 failed", 18);
|
if (display_mode->state > 0) display_wrapped_text->execute("confirm.body", "Try #2 failed", 18);
|
||||||
delay_seconds_(5);
|
delay_seconds_(5);
|
||||||
disable_boot_timers_();
|
disable_boot_timers_();
|
||||||
sprintf(update_msg, "Try #3 at %d bps", original_baud_rate_);
|
sprintf(update_msg, "Try #3 at %d bps", original_baud_rate_);
|
||||||
ESP_LOGD(TAG, update_msg);
|
ESP_LOGD(TAG, update_msg);
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", update_msg, 18);
|
if (display_mode->state > 0) {
|
||||||
|
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
||||||
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Try #3 at %d bps~65535~10000~3~~~", framework.c_str(), original_baud_rate_);
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
|
}
|
||||||
|
delay_seconds_(1);
|
||||||
if (upload_tft_(url, original_baud_rate_)) id(restart_nspanel).press();
|
if (upload_tft_(url, original_baud_rate_)) id(restart_nspanel).press();
|
||||||
ESP_LOGW(TAG, "Try #3 failed");
|
ESP_LOGW(TAG, "Try #3 failed");
|
||||||
if (disp1->is_setup()) {
|
if (display_mode->state > 0) {
|
||||||
display_wrapped_text->execute("confirm.body", "Try #3 failed. Restarting display.", 18);
|
display_wrapped_text->execute("confirm.body", "Try #3 failed. Restarting display.", 18);
|
||||||
delay_seconds_(3);
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Power cycle display~65535~10000~3~~~", framework.c_str(), original_baud_rate_);
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
}
|
}
|
||||||
|
delay_seconds_(3);
|
||||||
ESP_LOGD(TAG, "Turn off Nextion");
|
ESP_LOGD(TAG, "Turn off Nextion");
|
||||||
id(screen_power).turn_off();
|
id(screen_power).turn_off();
|
||||||
delay_seconds_(2);
|
delay_seconds_(2);
|
||||||
@@ -931,7 +964,7 @@ script:
|
|||||||
disable_boot_timers_();
|
disable_boot_timers_();
|
||||||
sprintf(update_msg, "Try #4 at %d bps", original_baud_rate_);
|
sprintf(update_msg, "Try #4 at %d bps", original_baud_rate_);
|
||||||
ESP_LOGD(TAG, update_msg);
|
ESP_LOGD(TAG, update_msg);
|
||||||
if (disp1->is_setup()) {
|
if (display_mode->state > 0) {
|
||||||
disp1->set_backlight_brightness(1);
|
disp1->set_backlight_brightness(1);
|
||||||
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
||||||
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
||||||
@@ -940,19 +973,23 @@ script:
|
|||||||
disp1->hide_component("bt_accept");
|
disp1->hide_component("bt_accept");
|
||||||
disp1->hide_component("bt_clear");
|
disp1->hide_component("bt_clear");
|
||||||
disp1->hide_component("bt_close");
|
disp1->hide_component("bt_close");
|
||||||
delay_seconds_(1);
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~Try #4 at %d bps~65535~10000~3~~~", framework.c_str(), original_baud_rate_);
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
}
|
}
|
||||||
|
delay_seconds_(1);
|
||||||
if (upload_tft_(url, original_baud_rate_)) id(restart_nspanel).press();
|
if (upload_tft_(url, original_baud_rate_)) id(restart_nspanel).press();
|
||||||
ESP_LOGW(TAG, "Try #4 failed");
|
ESP_LOGW(TAG, "Try #4 failed");
|
||||||
disable_boot_timers_();
|
disable_boot_timers_();
|
||||||
if (disp1->is_setup()) {
|
if (display_mode->state > 0) {
|
||||||
display_wrapped_text->execute("confirm.body", "Try #4 failed.", 18);
|
display_wrapped_text->execute("confirm.body", "Try #4 failed.", 18);
|
||||||
delay_seconds_(3);
|
delay_seconds_(3);
|
||||||
}
|
}
|
||||||
disable_boot_timers_();
|
disable_boot_timers_();
|
||||||
sprintf(update_msg, "Try #5 at %d bps", 115200);
|
sprintf(update_msg, "Try #5 at %d bps", 115200);
|
||||||
ESP_LOGD(TAG, update_msg);
|
ESP_LOGD(TAG, update_msg);
|
||||||
if (disp1->is_setup()) {
|
if (display_mode->state > 0) {
|
||||||
disp1->set_backlight_brightness(1);
|
disp1->set_backlight_brightness(1);
|
||||||
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", framework.c_str());
|
||||||
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
display_wrapped_text->execute("confirm.body", update_msg, 18);
|
||||||
@@ -961,15 +998,19 @@ script:
|
|||||||
disp1->hide_component("bt_accept");
|
disp1->hide_component("bt_accept");
|
||||||
disp1->hide_component("bt_clear");
|
disp1->hide_component("bt_clear");
|
||||||
disp1->hide_component("bt_close");
|
disp1->hide_component("bt_close");
|
||||||
delay_seconds_(1);
|
} else {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
sprintf(update_msg, "entityUpdateDetail~~Upload TFT - %s~65535~~0~~0~TFT upload failed.~65535~10000~3~~~", framework.c_str());
|
||||||
|
lovelace_custom_command->execute(update_msg);
|
||||||
}
|
}
|
||||||
|
delay_seconds_(1);
|
||||||
if (upload_tft_(url, 115200)) id(restart_nspanel).press();
|
if (upload_tft_(url, 115200)) id(restart_nspanel).press();
|
||||||
ESP_LOGE(TAG, "TFT upload failed");
|
ESP_LOGE(TAG, "TFT upload failed");
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", "TFT upload failed", 18);
|
if (display_mode->state > 0) display_wrapped_text->execute("confirm.body", "TFT upload failed", 18);
|
||||||
if (disp1->is_setup()) delay_seconds_(2);
|
if (display_mode->state > 0) delay_seconds_(2);
|
||||||
ESP_LOGD(TAG, "Turn off Nextion");
|
ESP_LOGD(TAG, "Turn off Nextion");
|
||||||
if (disp1->is_setup()) display_wrapped_text->execute("confirm.body", "Restarting...", 18);
|
if (display_mode->state > 0) display_wrapped_text->execute("confirm.body", "Restarting...", 18);
|
||||||
if (disp1->is_setup()) delay_seconds_(2);
|
if (display_mode->state > 0) delay_seconds_(2);
|
||||||
id(screen_power).turn_off();
|
id(screen_power).turn_off();
|
||||||
delay_seconds_(2);
|
delay_seconds_(2);
|
||||||
ESP_LOGD(TAG, "Turn on Nextion");
|
ESP_LOGD(TAG, "Turn on Nextion");
|
||||||
|
|||||||
@@ -11,6 +11,12 @@ substitutions:
|
|||||||
temp_units: "°C"
|
temp_units: "°C"
|
||||||
#############################
|
#############################
|
||||||
|
|
||||||
|
##### External components #####
|
||||||
|
external_components:
|
||||||
|
- source: github://pr#5979 # Remove this when that PR is released (Hopefully v2024.1.0)
|
||||||
|
components:
|
||||||
|
- nextion
|
||||||
|
|
||||||
##### ESPHOME CONFIGURATION #####
|
##### ESPHOME CONFIGURATION #####
|
||||||
esphome:
|
esphome:
|
||||||
name: ${device_name}
|
name: ${device_name}
|
||||||
@@ -29,13 +35,17 @@ esphome:
|
|||||||
- wait_until:
|
- wait_until:
|
||||||
condition:
|
condition:
|
||||||
- lambda: !lambda return disp1->is_detected();
|
- lambda: !lambda return disp1->is_detected();
|
||||||
timeout: 45s
|
timeout: 10s
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
if (!disp1->is_setup()) exit_reparse->execute();
|
if (!disp1->is_setup()) {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
lovelace_custom_command->execute("entityUpdateDetail~~Unsupported TFT file~65535~~0~~0~Please upload a\r\ncompatible TFT file.~65535~10000~3~~~");
|
||||||
|
exit_reparse->execute();
|
||||||
|
}
|
||||||
- wait_until:
|
- wait_until:
|
||||||
condition:
|
condition:
|
||||||
- lambda: !lambda return disp1->is_setup();
|
- lambda: !lambda return disp1->is_setup();
|
||||||
timeout: 20s
|
timeout: 10s
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
static const char *const TAG = "on_boot";
|
static const char *const TAG = "on_boot";
|
||||||
|
|
||||||
@@ -70,6 +80,8 @@ esphome:
|
|||||||
static const char *const TAG = "on_boot";
|
static const char *const TAG = "on_boot";
|
||||||
nextion_status->execute();
|
nextion_status->execute();
|
||||||
if (not disp1->is_setup()) {
|
if (not disp1->is_setup()) {
|
||||||
|
lovelace_custom_command->execute("pageType~popupNotify");
|
||||||
|
lovelace_custom_command->execute("entityUpdateDetail~~Unsupported TFT file~65535~~0~~0~Please upload a\r\ncompatible TFT file.~65535~10000~3~~~");
|
||||||
ESP_LOGE(TAG, "No response from Nextion display");
|
ESP_LOGE(TAG, "No response from Nextion display");
|
||||||
}
|
}
|
||||||
ESP_LOGD(TAG, "Finished");
|
ESP_LOGD(TAG, "Finished");
|
||||||
@@ -353,7 +365,7 @@ api:
|
|||||||
disp1->goto_page("notification");
|
disp1->goto_page("notification");
|
||||||
disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str());
|
disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str());
|
||||||
|
|
||||||
display_wrapped_text->execute("notification.notifi_text01", message.c_str(), id(display_mode) == 2 ? 23 : 32);
|
display_wrapped_text->execute("notification.notifi_text01", message.c_str(), display_mode->state == 2 ? 23 : 32);
|
||||||
|
|
||||||
notification_label->publish_state(label.c_str());
|
notification_label->publish_state(label.c_str());
|
||||||
notification_text->publish_state(message.c_str());
|
notification_text->publish_state(message.c_str());
|
||||||
@@ -567,8 +579,8 @@ api:
|
|||||||
- lambda: |-
|
- lambda: |-
|
||||||
if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str());
|
if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str());
|
||||||
disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str());
|
disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str());
|
||||||
display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), id(display_mode) == 2 ? 25 : 10);
|
display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), display_mode->state == 2 ? 25 : 10);
|
||||||
display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), id(display_mode) == 2 ? 25 : 10);
|
display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), display_mode->state == 2 ? 25 : 10);
|
||||||
|
|
||||||
#### Service to populate the media player page #####
|
#### Service to populate the media player page #####
|
||||||
- service: media_player
|
- service: media_player
|
||||||
@@ -590,8 +602,8 @@ api:
|
|||||||
{
|
{
|
||||||
detailed_entity->publish_state(entity);
|
detailed_entity->publish_state(entity);
|
||||||
disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str());
|
disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str());
|
||||||
display_wrapped_text->execute("track", media_title.c_str(), id(display_mode) == 2 ? 16 : 27);
|
display_wrapped_text->execute("track", media_title.c_str(), display_mode->state == 2 ? 16 : 27);
|
||||||
display_wrapped_text->execute("artist", media_artist.c_str(), id(display_mode) == 2 ? 26 : 40);
|
display_wrapped_text->execute("artist", media_artist.c_str(), display_mode->state == 2 ? 26 : 40);
|
||||||
|
|
||||||
// on/off button
|
// on/off button
|
||||||
if (supported_features & 128 and state == "off") //TURN_ON
|
if (supported_features & 128 and state == "off") //TURN_ON
|
||||||
@@ -693,14 +705,17 @@ display:
|
|||||||
uart_id: tf_uart
|
uart_id: tf_uart
|
||||||
start_up_page: 8
|
start_up_page: 8
|
||||||
on_setup:
|
on_setup:
|
||||||
- script.execute: boot_sequence
|
- script.execute: setup_sequence
|
||||||
on_page:
|
on_page:
|
||||||
lambda: |-
|
lambda: |-
|
||||||
static const char *const TAG = "display.disp1.on_page";
|
static const char *const TAG = "display.disp1.on_page";
|
||||||
ESP_LOGD(TAG, "Nextion page changed");
|
ESP_LOGD(TAG, "Nextion page changed");
|
||||||
ESP_LOGD(TAG, "New page: %s (%i)" , id(page_names)[x].c_str(), x);
|
ESP_LOGD(TAG, "New page: %s (%i)" , id(page_names)[x].c_str(), x);
|
||||||
current_page->publish_state(id(page_names)[x].c_str());
|
page_id->update();
|
||||||
page_changed->execute(id(page_names)[x].c_str());
|
if (current_page->state != id(page_names)[x].c_str()) {
|
||||||
|
current_page->publish_state(id(page_names)[x].c_str());
|
||||||
|
page_changed->execute(id(page_names)[x].c_str());
|
||||||
|
}
|
||||||
on_touch:
|
on_touch:
|
||||||
lambda: |-
|
lambda: |-
|
||||||
static const char *const TAG = "display.disp1.on_touch";
|
static const char *const TAG = "display.disp1.on_touch";
|
||||||
@@ -714,7 +729,7 @@ display:
|
|||||||
globals:
|
globals:
|
||||||
|
|
||||||
##### Is boot sequence completed? #####
|
##### Is boot sequence completed? #####
|
||||||
- id: boot_sequence_completed
|
- id: setup_sequence_completed
|
||||||
type: bool
|
type: bool
|
||||||
restore_value: false
|
restore_value: false
|
||||||
initial_value: 'false'
|
initial_value: 'false'
|
||||||
@@ -747,18 +762,6 @@ globals:
|
|||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: 'false'
|
initial_value: 'false'
|
||||||
|
|
||||||
##### Display mode (1 = EU, 2 = US, 3 = US Landscape)
|
|
||||||
- id: display_mode
|
|
||||||
type: uint
|
|
||||||
restore_value: true
|
|
||||||
initial_value: '0'
|
|
||||||
|
|
||||||
##### Charset (1 = International (original), 2 = CJK languages)
|
|
||||||
- id: display_charset
|
|
||||||
type: uint
|
|
||||||
restore_value: true
|
|
||||||
initial_value: '0'
|
|
||||||
|
|
||||||
##### Is embedded thermostat set as main climate entity? #####
|
##### Is embedded thermostat set as main climate entity? #####
|
||||||
- id: is_embedded_thermostat
|
- id: is_embedded_thermostat
|
||||||
type: bool
|
type: bool
|
||||||
@@ -860,10 +863,6 @@ globals:
|
|||||||
type: std::string
|
type: std::string
|
||||||
restore_value: false
|
restore_value: false
|
||||||
initial_value: ''
|
initial_value: ''
|
||||||
- id: version_tft
|
|
||||||
type: std::string
|
|
||||||
restore_value: false
|
|
||||||
initial_value: ''
|
|
||||||
|
|
||||||
- id: page_names
|
- id: page_names
|
||||||
type: std::vector<std::string>
|
type: std::vector<std::string>
|
||||||
@@ -950,7 +949,7 @@ binary_sensor:
|
|||||||
- delay: 2s
|
- delay: 2s
|
||||||
- lambda: disp1->soft_reset();
|
- lambda: disp1->soft_reset();
|
||||||
- delay: 2s
|
- delay: 2s
|
||||||
- script.execute: boot_sequence
|
- script.execute: setup_sequence
|
||||||
|
|
||||||
##### RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY #####
|
##### RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY #####
|
||||||
- name: ${device_name} Right Button
|
- name: ${device_name} Right Button
|
||||||
@@ -1266,6 +1265,39 @@ sensor:
|
|||||||
- lambda: |-
|
- lambda: |-
|
||||||
timer_reset_all->execute("settings");
|
timer_reset_all->execute("settings");
|
||||||
|
|
||||||
|
- id: page_id
|
||||||
|
name: ${device_name} Page Id
|
||||||
|
platform: nextion
|
||||||
|
variable_name: dp
|
||||||
|
precision: 0
|
||||||
|
internal: true
|
||||||
|
entity_category: diagnostic
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
if (current_page->state != id(page_names)[x].c_str()) {
|
||||||
|
current_page->publish_state(id(page_names)[x].c_str());
|
||||||
|
page_changed->execute(id(page_names)[x].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
##### Display mode (1 = EU, 2 = US, 3 = US Landscape)
|
||||||
|
- id: display_mode
|
||||||
|
name: ${device_name} Display mode
|
||||||
|
platform: nextion
|
||||||
|
variable_name: display_mode
|
||||||
|
precision: 0
|
||||||
|
internal: true
|
||||||
|
entity_category: diagnostic
|
||||||
|
|
||||||
|
##### Charset (1 = International (original), 2 = CJK languages)
|
||||||
|
- id: display_charset
|
||||||
|
name: ${device_name} Display charset
|
||||||
|
platform: nextion
|
||||||
|
variable_name: charset
|
||||||
|
precision: 0
|
||||||
|
internal: true
|
||||||
|
entity_category: diagnostic
|
||||||
|
|
||||||
##### START - SWITCH CONFIGURATION #####
|
##### START - SWITCH CONFIGURATION #####
|
||||||
switch:
|
switch:
|
||||||
|
|
||||||
@@ -1337,7 +1369,7 @@ switch:
|
|||||||
- lambda: !lambda return disp1->is_setup();
|
- lambda: !lambda return disp1->is_setup();
|
||||||
timeout: 20s
|
timeout: 20s
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
if (id(boot_sequence_completed)) {
|
if (id(setup_sequence_completed)) {
|
||||||
nextion_init->publish_state(true);
|
nextion_init->publish_state(true);
|
||||||
disp1->goto_page(wakeup_page_name->state.c_str());
|
disp1->goto_page(wakeup_page_name->state.c_str());
|
||||||
}
|
}
|
||||||
@@ -1500,33 +1532,11 @@ text_sensor:
|
|||||||
else if (page == "blank") page_blank->execute();
|
else if (page == "blank") page_blank->execute();
|
||||||
else if (page == "boot")
|
else if (page == "boot")
|
||||||
{
|
{
|
||||||
// Detect display mode
|
|
||||||
if (doc.containsKey("display_mode"))
|
|
||||||
{
|
|
||||||
std::string display_mode_str = doc["display_mode"];
|
|
||||||
ESP_LOGV(TAG, "display_mode: %s", display_mode_str.c_str());
|
|
||||||
float display_mode_float = stof(display_mode_str);
|
|
||||||
if (display_mode_float > 0) id(display_mode) = int(display_mode_float);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect display charset
|
|
||||||
if (doc.containsKey("charset"))
|
|
||||||
{
|
|
||||||
std::string charset_str = doc["charset"];
|
|
||||||
ESP_LOGV(TAG, "charset: %s", charset_str.c_str());
|
|
||||||
float charset_float = stof(charset_str);
|
|
||||||
if (charset_float > 0) id(display_charset) = int(charset_float);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Contruct page boot
|
// Contruct page boot
|
||||||
page_boot->execute();
|
page_boot->execute();
|
||||||
|
|
||||||
// Detect TFT version
|
// Detect TFT version
|
||||||
if (doc.containsKey("version"))
|
version_tft->update();
|
||||||
{
|
|
||||||
std::string version_tmp = doc["version"];
|
|
||||||
id(version_tft) = version_tmp;
|
|
||||||
}
|
|
||||||
check_versions->execute();
|
check_versions->execute();
|
||||||
|
|
||||||
// Detect timeout
|
// Detect timeout
|
||||||
@@ -1580,6 +1590,24 @@ text_sensor:
|
|||||||
else if (not key.empty()) ha_call_service->execute((std::string("media_player.") + key.c_str()), "", "", entity.c_str());
|
else if (not key.empty()) ha_call_service->execute((std::string("media_player.") + key.c_str()), "", "", entity.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- id: version_tft
|
||||||
|
name: ${device_name} TFT version
|
||||||
|
platform: nextion
|
||||||
|
component_name: boot.tft_version
|
||||||
|
entity_category: diagnostic
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "text_sensor.version_tft";
|
||||||
|
ESP_LOGD(TAG, "TFT version: %s", version_tft->state.c_str());
|
||||||
|
if (current_page->state == "boot") {
|
||||||
|
disp1->send_command_printf("tm_esphome.en=0");
|
||||||
|
disp1->send_command_printf("tm_pageid.en=0");
|
||||||
|
page_boot->execute();
|
||||||
|
timer_reset_all->execute("boot");
|
||||||
|
}
|
||||||
|
check_versions->execute();
|
||||||
|
|
||||||
### Scripts ######
|
### Scripts ######
|
||||||
script:
|
script:
|
||||||
- id: addon_climate_service_call
|
- id: addon_climate_service_call
|
||||||
@@ -1589,84 +1617,6 @@ script:
|
|||||||
value: string
|
value: string
|
||||||
then: # Reserved for Add-on Climate
|
then: # Reserved for Add-on Climate
|
||||||
|
|
||||||
- id: boot_sequence
|
|
||||||
mode: restart
|
|
||||||
then:
|
|
||||||
- lambda: |-
|
|
||||||
static const char *const TAG = "script.boot_sequence";
|
|
||||||
ESP_LOGD(TAG, "Starting boot sequence");
|
|
||||||
ESP_LOGD(TAG, "Wait for TFT version");
|
|
||||||
- wait_until:
|
|
||||||
- lambda: !lambda return !id(version_tft).empty();
|
|
||||||
- lambda: |-
|
|
||||||
static const char *const TAG = "script.boot_sequence";
|
|
||||||
ESP_LOGD(TAG, "TFT version: %s", id(version_tft).c_str());
|
|
||||||
if (current_page->state == "boot") {
|
|
||||||
disp1->send_command_printf("tm_esphome.en=0");
|
|
||||||
disp1->send_command_printf("tm_pageid.en=0");
|
|
||||||
page_boot->execute();
|
|
||||||
}
|
|
||||||
timer_reset_all->execute("boot");
|
|
||||||
- lambda: |-
|
|
||||||
static const char *const TAG = "script.boot_sequence";
|
|
||||||
ESP_LOGD(TAG, "Wait for API");
|
|
||||||
- wait_until:
|
|
||||||
api.connected
|
|
||||||
- lambda: |-
|
|
||||||
static const char *const TAG = "script.boot_sequence";
|
|
||||||
if (current_page->state == "boot") {
|
|
||||||
ESP_LOGD(TAG, "Publish IP address");
|
|
||||||
disp1->set_component_text_printf("boot.ip_addr", "%s", network::get_ip_address().str().c_str());
|
|
||||||
set_brightness->execute(100);
|
|
||||||
}
|
|
||||||
ESP_LOGD(TAG, "Report to Home Assistant");
|
|
||||||
auto ha_event = new esphome::api::CustomAPIDevice();
|
|
||||||
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
|
||||||
{
|
|
||||||
{"type", "boot"},
|
|
||||||
{"step", "start"}
|
|
||||||
});
|
|
||||||
if (!id(boot_sequence_completed)) delay(1000);
|
|
||||||
// Set dimming values
|
|
||||||
display_brightness->publish_state(id(display_brightness_global));
|
|
||||||
display_dim_brightness->publish_state(id(display_dim_brightness_global));
|
|
||||||
disp1->send_command_printf("brightness=%i", id(display_brightness_global));
|
|
||||||
disp1->send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
|
|
||||||
disp1->send_command_printf("brightness_dim=%i", id(display_dim_brightness_global));
|
|
||||||
disp1->send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
|
|
||||||
disp1->send_command_printf("brightness_sleep=%i", int(display_sleep_brightness->state));
|
|
||||||
set_brightness->execute(id(display_brightness_global));
|
|
||||||
ESP_LOGD(TAG, "Report to Home Assistant");
|
|
||||||
nextion_init->publish_state(true);
|
|
||||||
//auto ha_event = new esphome::api::CustomAPIDevice();
|
|
||||||
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
|
||||||
{
|
|
||||||
{"type", "boot"},
|
|
||||||
{"step", "nextion_init"}
|
|
||||||
});
|
|
||||||
// Chips icon size
|
|
||||||
ESP_LOGV(TAG, "Chips size");
|
|
||||||
for (int i = 1; i <= 10; ++i) {
|
|
||||||
disp1->send_command_printf("home.icon_top_%02d.font=%i", i, id(home_chip_font_size));
|
|
||||||
}
|
|
||||||
disp1->send_command_printf("home.wifi_icon.font=%i", id(home_chip_font_size));
|
|
||||||
disp1->set_component_text_printf("home.icon_top_01", "%s", id(home_relay1_icon).c_str());
|
|
||||||
disp1->set_component_text_printf("home.icon_top_02", "%s", id(home_relay2_icon).c_str());
|
|
||||||
timer_reset_all->execute("boot");
|
|
||||||
notification_clear->execute();
|
|
||||||
id(boot_sequence_completed) = true;
|
|
||||||
- wait_until:
|
|
||||||
condition:
|
|
||||||
- not:
|
|
||||||
- text_sensor.state: # Is boot page visible?
|
|
||||||
id: current_page
|
|
||||||
state: 'boot'
|
|
||||||
timeout: 15s
|
|
||||||
- lambda: |-
|
|
||||||
static const char *const TAG = "script.boot_sequence";
|
|
||||||
if (current_page->state == "boot") disp1->goto_page(wakeup_page_name->state.c_str());
|
|
||||||
ESP_LOGD(TAG, "Boot sequence finished!");
|
|
||||||
|
|
||||||
- id: check_versions
|
- id: check_versions
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
@@ -1683,7 +1633,7 @@ script:
|
|||||||
|
|
||||||
return (major1 == major2) && (minor1 == minor2);
|
return (major1 == major2) && (minor1 == minor2);
|
||||||
};
|
};
|
||||||
return (compareVersions("${version}", id(version_tft).c_str()) and compareVersions("${version}", id(version_blueprint).c_str()));
|
return (compareVersions("${version}", version_tft->state.c_str()) and compareVersions("${version}", id(version_blueprint).c_str()));
|
||||||
timeout: 60s
|
timeout: 60s
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
static const char *const TAG = "script.check_versions";
|
static const char *const TAG = "script.check_versions";
|
||||||
@@ -1698,8 +1648,8 @@ script:
|
|||||||
return (major1 == major2) && (minor1 == minor2);
|
return (major1 == major2) && (minor1 == minor2);
|
||||||
};
|
};
|
||||||
ESP_LOGD(TAG, "ESPHome version: ${version}");
|
ESP_LOGD(TAG, "ESPHome version: ${version}");
|
||||||
ESP_LOGD(TAG, "TFT version: %s", id(version_tft).c_str());
|
ESP_LOGD(TAG, "TFT version: %s", version_tft->state.c_str());
|
||||||
if (not compareVersions("${version}", id(version_tft).c_str())) ESP_LOGE(TAG, "TFT version mismatch!");
|
if (not compareVersions("${version}", version_tft->state.c_str())) ESP_LOGE(TAG, "TFT version mismatch!");
|
||||||
ESP_LOGD(TAG, "Blueprint version: %s", id(version_blueprint).c_str());
|
ESP_LOGD(TAG, "Blueprint version: %s", id(version_blueprint).c_str());
|
||||||
if (not compareVersions("${version}", id(version_blueprint).c_str())) ESP_LOGE(TAG, "Blueprint version mismatch!");
|
if (not compareVersions("${version}", id(version_blueprint).c_str())) ESP_LOGE(TAG, "Blueprint version mismatch!");
|
||||||
|
|
||||||
@@ -1716,7 +1666,7 @@ script:
|
|||||||
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
||||||
{
|
{
|
||||||
{"type", "version"},
|
{"type", "version"},
|
||||||
{"tft", id(version_tft).c_str()},
|
{"tft", version_tft->state.c_str()},
|
||||||
{"esphome", "${version}"},
|
{"esphome", "${version}"},
|
||||||
{"blueprint", id(version_blueprint).c_str()},
|
{"blueprint", id(version_blueprint).c_str()},
|
||||||
{"framework", framework.c_str()},
|
{"framework", framework.c_str()},
|
||||||
@@ -1796,6 +1746,12 @@ script:
|
|||||||
- uart.write:
|
- uart.write:
|
||||||
id: tf_uart
|
id: tf_uart
|
||||||
data: [0xFF, 0xFF, 0xFF]
|
data: [0xFF, 0xFF, 0xFF]
|
||||||
|
- uart.write:
|
||||||
|
id: tf_uart
|
||||||
|
data: "connect"
|
||||||
|
- uart.write:
|
||||||
|
id: tf_uart
|
||||||
|
data: [0xFF, 0xFF, 0xFF]
|
||||||
|
|
||||||
- id: global_settings
|
- id: global_settings
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -1927,6 +1883,40 @@ script:
|
|||||||
}
|
}
|
||||||
ESP_LOGV(TAG, "Finished");
|
ESP_LOGV(TAG, "Finished");
|
||||||
|
|
||||||
|
- id: lovelace_custom_command
|
||||||
|
mode: queued
|
||||||
|
parameters:
|
||||||
|
command: string
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.lovelace_custom_command";
|
||||||
|
ESP_LOGV(TAG, "Sending command: %s", command.c_str());
|
||||||
|
|
||||||
|
auto crc16 = [](const uint8_t *data, uint16_t len) -> uint16_t {
|
||||||
|
uint16_t crc = 0xFFFF;
|
||||||
|
while (len--) {
|
||||||
|
crc ^= *data++;
|
||||||
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
|
if ((crc & 0x01) != 0) {
|
||||||
|
crc >>= 1;
|
||||||
|
crc ^= 0xA001;
|
||||||
|
} else {
|
||||||
|
crc >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<uint8_t> data = {0x55, 0xBB};
|
||||||
|
data.push_back(command.length() & 0xFF);
|
||||||
|
data.push_back((command.length() >> 8) & 0xFF);
|
||||||
|
data.insert(data.end(), command.begin(), command.end());
|
||||||
|
auto crc = crc16(data.data(), data.size());
|
||||||
|
data.push_back(crc & 0xFF);
|
||||||
|
data.push_back((crc >> 8) & 0xFF);
|
||||||
|
tf_uart->write_array(data.data(), data.size());
|
||||||
|
|
||||||
- id: nextion_status
|
- id: nextion_status
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
@@ -2198,7 +2188,7 @@ script:
|
|||||||
static const char *const TAG = "script.page_notification";
|
static const char *const TAG = "script.page_notification";
|
||||||
ESP_LOGV(TAG, "Updating notification page");
|
ESP_LOGV(TAG, "Updating notification page");
|
||||||
disp1->set_component_text_printf("notification.notifi_label", "%s", notification_label->state.c_str());
|
disp1->set_component_text_printf("notification.notifi_label", "%s", notification_label->state.c_str());
|
||||||
display_wrapped_text->execute("notification.notifi_text01", notification_text->state.c_str(), id(display_mode) == 2 ? 23 : 32);
|
display_wrapped_text->execute("notification.notifi_text01", notification_text->state.c_str(), display_mode->state == 2 ? 23 : 32);
|
||||||
|
|
||||||
- id: page_qrcode
|
- id: page_qrcode
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -2497,6 +2487,152 @@ script:
|
|||||||
};
|
};
|
||||||
disp1->send_command_printf("%s=%i", variable.c_str(), pageIndex(page.c_str()));
|
disp1->send_command_printf("%s=%i", variable.c_str(), pageIndex(page.c_str()));
|
||||||
|
|
||||||
|
- id: setup_sequence
|
||||||
|
mode: restart
|
||||||
|
then:
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Starting Nextion setup sequence");
|
||||||
|
ESP_LOGD(TAG, "Fetching page id");
|
||||||
|
page_id->update();
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (page_id->state > 0);
|
||||||
|
timeout: 5s
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Fetching charset");
|
||||||
|
display_charset->update();
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (display_charset->state > 0);
|
||||||
|
timeout: 5s
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Fetching display mode");
|
||||||
|
display_mode->update();
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (display_mode->state > 0);
|
||||||
|
timeout: 5s
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (display_mode->state > 0);
|
||||||
|
then: # Project's TFT detected
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Goto page Boot");
|
||||||
|
disp1->goto_page("boot");
|
||||||
|
ESP_LOGD(TAG, "Fetching TFT version");
|
||||||
|
version_tft->update();
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (not version_tft->state.empty());
|
||||||
|
timeout: 5s
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Wait for Wi-Fi");
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (wifi_component->is_connected());
|
||||||
|
timeout: 10s
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (wifi_component->is_connected());
|
||||||
|
then: # Wi-Fi connected
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
if (current_page->state == "boot") {
|
||||||
|
ESP_LOGD(TAG, "Publish IP address on screen");
|
||||||
|
disp1->set_component_text_printf("boot.ip_addr", "%s", network::get_ip_address().str().c_str());
|
||||||
|
set_brightness->execute(100);
|
||||||
|
}
|
||||||
|
ESP_LOGD(TAG, "Wait for API");
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (api_server->is_connected());
|
||||||
|
timeout: 10s
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return (api_server->is_connected());
|
||||||
|
then: # API connected
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Publish IP address on screen");
|
||||||
|
ESP_LOGD(TAG, "Report setup to Home Assistant");
|
||||||
|
auto ha_event = new esphome::api::CustomAPIDevice();
|
||||||
|
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
||||||
|
{
|
||||||
|
{"type", "boot"},
|
||||||
|
{"step", "start"}
|
||||||
|
});
|
||||||
|
else: # API not connected
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGE(TAG, "API not available");
|
||||||
|
else: # Wi-Fi not connected
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGE(TAG, "Wi-Fi not available");
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGE(TAG, "Wi-Fi not available");
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- lambda: !lambda return id(setup_sequence_completed);
|
||||||
|
timeout: 1s
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Set dimming values");
|
||||||
|
display_brightness->publish_state(id(display_brightness_global));
|
||||||
|
display_dim_brightness->publish_state(id(display_dim_brightness_global));
|
||||||
|
set_brightness->execute(id(display_brightness_global));
|
||||||
|
ESP_LOGD(TAG, "Set page Settings");
|
||||||
|
disp1->send_command_printf("brightness=%i", id(display_brightness_global));
|
||||||
|
disp1->send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
|
||||||
|
disp1->send_command_printf("brightness_dim=%i", id(display_dim_brightness_global));
|
||||||
|
disp1->send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
|
||||||
|
disp1->send_command_printf("brightness_sleep=%i", int(display_sleep_brightness->state));
|
||||||
|
ESP_LOGD(TAG, "Report to Home Assistant");
|
||||||
|
nextion_init->publish_state(true);
|
||||||
|
if (api_server->is_connected()) {
|
||||||
|
auto ha_event = new esphome::api::CustomAPIDevice();
|
||||||
|
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
|
||||||
|
{
|
||||||
|
{"type", "boot"},
|
||||||
|
{"step", "nextion_init"}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Chips icon size
|
||||||
|
ESP_LOGV(TAG, "Adjusting icon's sizes");
|
||||||
|
for (int i = 1; i <= 10; ++i) {
|
||||||
|
disp1->send_command_printf("home.icon_top_%02d.font=%i", i, id(home_chip_font_size));
|
||||||
|
}
|
||||||
|
disp1->send_command_printf("home.wifi_icon.font=%i", id(home_chip_font_size));
|
||||||
|
ESP_LOGV(TAG, "Restoring relay's icons");
|
||||||
|
disp1->set_component_text_printf("home.icon_top_01", "%s", id(home_relay1_icon).c_str());
|
||||||
|
disp1->set_component_text_printf("home.icon_top_02", "%s", id(home_relay2_icon).c_str());
|
||||||
|
timer_reset_all->execute("boot");
|
||||||
|
notification_clear->execute();
|
||||||
|
id(setup_sequence_completed) = true;
|
||||||
|
ESP_LOGD(TAG, "Wait for leaving boot page");
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
- not:
|
||||||
|
- text_sensor.state: # Is boot page visible?
|
||||||
|
id: current_page
|
||||||
|
state: boot
|
||||||
|
timeout: 10s
|
||||||
|
- lambda: |-
|
||||||
|
if (current_page->state == "boot") disp1->goto_page(wakeup_page_name->state.c_str());
|
||||||
|
else: # Unknown TFT
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGE(TAG, "A non-compatible TFT is installed");
|
||||||
|
- lambda: |-
|
||||||
|
static const char *const TAG = "script.setup_sequence";
|
||||||
|
ESP_LOGD(TAG, "Nextion setup sequence finished!");
|
||||||
|
|
||||||
- id: stop_all
|
- id: stop_all
|
||||||
mode: restart
|
mode: restart
|
||||||
then:
|
then:
|
||||||
@@ -2504,7 +2640,6 @@ script:
|
|||||||
static const char *const TAG = "script.stop_all";
|
static const char *const TAG = "script.stop_all";
|
||||||
ESP_LOGD(TAG, "Stopping scripts...");
|
ESP_LOGD(TAG, "Stopping scripts...");
|
||||||
addon_climate_service_call->stop();
|
addon_climate_service_call->stop();
|
||||||
boot_sequence->stop();
|
|
||||||
check_versions->stop();
|
check_versions->stop();
|
||||||
display_embedded_temp->stop();
|
display_embedded_temp->stop();
|
||||||
display_wrapped_text->stop();
|
display_wrapped_text->stop();
|
||||||
@@ -2512,6 +2647,7 @@ script:
|
|||||||
global_settings->stop();
|
global_settings->stop();
|
||||||
ha_button->stop();
|
ha_button->stop();
|
||||||
ha_call_service->stop();
|
ha_call_service->stop();
|
||||||
|
lovelace_custom_command->stop();
|
||||||
nextion_status->stop();
|
nextion_status->stop();
|
||||||
notification_clear->stop();
|
notification_clear->stop();
|
||||||
open_entity_settings_page->stop();
|
open_entity_settings_page->stop();
|
||||||
@@ -2556,6 +2692,7 @@ script:
|
|||||||
set_climate->stop();
|
set_climate->stop();
|
||||||
set_component_color->stop();
|
set_component_color->stop();
|
||||||
set_page_id->stop();
|
set_page_id->stop();
|
||||||
|
setup_sequence->stop();
|
||||||
timer_dim->stop();
|
timer_dim->stop();
|
||||||
timer_page->stop();
|
timer_page->stop();
|
||||||
timer_reset_all->stop();
|
timer_reset_all->stop();
|
||||||
|
|||||||
Reference in New Issue
Block a user