Add boot progress bar

This commit is contained in:
Edward Firmo
2024-03-17 01:24:59 +01:00
parent 7e00837d8b
commit efee51ea3d
14 changed files with 165 additions and 133 deletions

View File

@@ -125,7 +125,7 @@ script:
bool temp_unit_fahrenheit = (temp_units == "°F" || temp_units == "F" || temp_units == "°f" || temp_units == "f");
ClimateTraits traits = thermostat_embedded->get_traits();
disp1->set_component_text_printf("page_label", id(addon_climate_friendly_name).c_str());
disp1->set_component_text("page_label", id(addon_climate_friendly_name).c_str());
float temp_step = traits.get_visual_target_temperature_step();
float temp_offset = traits.get_visual_min_temperature();
float temp_max = traits.get_visual_max_temperature();

View File

@@ -258,7 +258,7 @@ api:
then:
- lambda: |-
if (!id(is_uploading_tft)) {
nspanel_ha_blueprint::HomeAssistantEntity entity_id = nspanel_ha_blueprint::extractHomeAssistantEntity(entity);
HomeAssistantEntity entity_id = extractHomeAssistantEntity(entity);
if (entity_id.domain != "invalid" or entity == "embedded_climate") {
detailed_entity->publish_state(entity);
if (entity_id.domain == "alarm_control_panel") entity_id.domain = "alarm";
@@ -351,9 +351,7 @@ api:
- lambda: |-
if (!id(is_uploading_tft)) {
using namespace nspanel_ha_blueprint;
using namespace esphome::display;
// Relay settings
update_bitwise_setting(id(relay_settings), relay1_local_control, RelaySettings::Relay1_Local);
update_bitwise_setting(id(relay_settings), relay1_fallback, RelaySettings::Relay1_Fallback);
@@ -417,6 +415,7 @@ api:
then:
- lambda: |-
if (!id(is_uploading_tft)) {
using namespace esphome::display;
// Localization
id(mui_time_format) = time_format;
if (meridiem.size() == 2) {
@@ -425,8 +424,8 @@ api:
}
// Date/Time colors
id(home_date_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(date_color[0], date_color[1], date_color[2]));
id(home_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(time_color[0], time_color[1], time_color[2]));
id(home_date_color) = ColorUtil::color_to_565(esphome::Color(date_color[0], date_color[1], date_color[2]));
id(home_time_color) = ColorUtil::color_to_565(esphome::Color(time_color[0], time_color[1], time_color[2]));
disp1->set_component_font_color("home.date", id(home_date_color));
disp1->set_component_font_color("home.time", id(home_time_color));
@@ -455,20 +454,22 @@ api:
// QRCode button
set_component_visibility->execute("home.bt_qrcode", qrcode);
disp1->set_component_text("home.bt_qrcode", qrcode_icon.c_str());
disp1->set_component_font_color("home.bt_qrcode", esphome::display::ColorUtil::color_to_565(esphome::Color(qrcode_icon_color[0], qrcode_icon_color[1], qrcode_icon_color[2])));
disp1->set_component_font_color("home.bt_qrcode", ColorUtil::color_to_565(esphome::Color(qrcode_icon_color[0],
qrcode_icon_color[1],
qrcode_icon_color[2])));
// Entities pages button
disp1->set_component_text("home.bt_entities", entities_pages_icon.c_str());
disp1->set_component_font_color("home.bt_entities", esphome::display::ColorUtil::color_to_565(esphome::Color(entities_pages_icon_color[0],
entities_pages_icon_color[1],
entities_pages_icon_color[2])));
disp1->set_component_font_color("home.bt_entities", ColorUtil::color_to_565(esphome::Color(entities_pages_icon_color[0],
entities_pages_icon_color[1],
entities_pages_icon_color[2])));
// Utilities button
disp1->send_command_printf("is_utilities=%i", utilities ? 1 : 0);
disp1->set_component_text("home.bt_utilities", utilities_icon.c_str());
disp1->set_component_font_color("home.bt_utilities", esphome::display::ColorUtil::color_to_565(esphome::Color(utilities_icon_color[0],
utilities_icon_color[1],
utilities_icon_color[2])));
disp1->set_component_font_color("home.bt_utilities", ColorUtil::color_to_565(esphome::Color(utilities_icon_color[0],
utilities_icon_color[1],
utilities_icon_color[2])));
blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 1));
}
@@ -778,18 +779,19 @@ api:
then:
- lambda: |-
if (!id(is_uploading_tft) and !(id.empty())) {
using namespace esphome::display;
if (!(icon.empty())) disp1->set_component_text((id + "_icon").c_str(), icon.c_str());
if (icon_color.size() == 3)
disp1->set_component_font_color((id + "_icon").c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(icon_color[0],
icon_color[1],
icon_color[2])));
disp1->set_component_font_color((id + "_icon").c_str(), ColorUtil::color_to_565(esphome::Color(icon_color[0],
icon_color[1],
icon_color[2])));
if (!(name.empty())) disp1->set_component_text((id + "_label").c_str(), name.c_str());
if (!(value.empty())) disp1->set_component_text(id.c_str(), adjustDecimalSeparator(value, id(mui_decimal_separator)).c_str());
if (value_color.size() == 3)
disp1->set_component_font_color(id.c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(value_color[0],
value_color[1],
value_color[2])));
disp1->set_component_font_color(id.c_str(), ColorUtil::color_to_565(esphome::Color(value_color[0],
value_color[1],
value_color[2])));
if (current_page->state.find("entitypage") == 0 and !(value.empty())) { // Adjust value's font on entities pages
// Adjusted length starts at 0
float adjusted_length = 0.0;
@@ -835,7 +837,7 @@ display:
- id: disp1
platform: nextion
uart_id: tf_uart
# start_up_page: 8 # Boot page
start_up_page: 8 # Boot page
on_setup:
lambda: |-
nextion_init->publish_state(true);
@@ -1095,9 +1097,9 @@ binary_sensor:
- if:
condition:
or:
- lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Local);
- lambda: return (id(relay_settings) & RelaySettings::Relay1_Local);
- and:
- lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Fallback);
- lambda: return (id(relay_settings) & RelaySettings::Relay1_Fallback);
- or:
- not:
- api.connected:
@@ -1135,9 +1137,9 @@ binary_sensor:
- if:
condition:
or:
- lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Local);
- lambda: return (id(relay_settings) & RelaySettings::Relay2_Local);
- and:
- lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Fallback);
- lambda: return (id(relay_settings) & RelaySettings::Relay2_Fallback);
- or:
- not:
- api.connected:
@@ -1592,8 +1594,7 @@ switch:
- lambda: !lambda return disp1->is_setup();
timeout: 20s
- lambda: |-
nextion_init->publish_state(disp1->is_setup());
goto_page->execute(wakeup_page_name->state.c_str());
goto_page->execute("boot");
on_turn_off:
- lambda: |-
nextion_init->publish_state(false);
@@ -1648,7 +1649,7 @@ text_sensor:
on_value:
lambda: |-
if (!id(is_uploading_tft)) {
page_changed->execute(x.c_str());
page_changed->execute();
}
- id: notification_label
@@ -1916,10 +1917,10 @@ script:
then:
- lambda: |-
if (id(is_uploading_tft)) global_settings->stop();
if (blueprint_status->state <= 99) goto_page->execute("boot");
// Blueprint version
nspanel_ha_blueprint::copyStringToCharArray(id(version_blueprint), blueprint_version);
copyStringToCharArray(id(version_blueprint), blueprint_version);
disp1->set_component_text("boot.bluep_version", blueprint_version.c_str());
// if (current_page->state == "boot") page_boot->execute();
check_versions->execute();
// MUI strings
@@ -1929,7 +1930,9 @@ script:
// Screen saver page (sleep)
id(screensaver_display_time) = screensaver_time;
id(screensaver_display_time_font) = screensaver_time_font;
id(screensaver_display_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(screensaver_time_color[0], screensaver_time_color[1], screensaver_time_color[2]));
id(screensaver_display_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(screensaver_time_color[0],
screensaver_time_color[1],
screensaver_time_color[2]));
page_screensaver->execute();
// Entities pages alignment
@@ -1940,39 +1943,8 @@ script:
if (current_page->state != "boot") {
// Update current page
page_changed->execute(current_page->state.c_str());
page_changed->execute();
}
disp1->set_component_text("boot.bluep_version", blueprint_version.c_str());
- if:
condition:
- text_sensor.state: # Is boot page visible?
id: current_page
state: boot
then:
- wait_until:
condition:
- not:
- text_sensor.state: # Is boot page visible?
id: current_page
state: boot
timeout: 2s
- if:
condition:
- text_sensor.state: # Avoid this being called twice by multiple boot triggers
id: current_page
state: boot
then:
- if:
condition:
switch.is_on: notification_sound
then:
- rtttl.play:
rtttl: 'two short:d=4,o=5,b=100:16e6,16e6'
- lambda: |-
ESP_LOGD("script.global_settings", "Jump to wake-up page: %s", wakeup_page_name->state.c_str());
goto_page->execute(wakeup_page_name->state.c_str());
timer_reset_all->execute();
- id: goto_page
mode: restart
@@ -1980,6 +1952,7 @@ script:
page: string
then:
- lambda: |-
ESP_LOGW("DEBUG", "goto_page: from %s to %s", current_page->state.c_str(), page.c_str());
if (current_page->state != page)
disp1->goto_page(page.c_str());
@@ -2064,16 +2037,17 @@ script:
then:
- logger.log: Page boot called
- lambda: |-
boot_progress->execute(0);
set_brightness->execute(100);
update_tft_info->execute();
disp1->set_component_text_printf("boot.esph_version", "${version}"); // ESPHome version
if (current_page->state == "boot") {
#ifdef ARDUINO
disp1->set_component_text("framework", "Arduino");
#elif defined(USE_ESP_IDF)
disp1->set_component_text("framework", "ESP-IDF");
#endif
}
boot_progress->execute(1);
#ifdef ARDUINO
disp1->set_component_text("framework", "Arduino");
#elif defined(USE_ESP_IDF)
disp1->set_component_text("framework", "ESP-IDF");
#endif
boot_progress->execute(2);
- logger.log: Wait for Wi-Fi
- wait_until:
condition:
@@ -2083,11 +2057,14 @@ script:
condition:
- lambda: return (wifi_component->is_connected());
then: # Wi-Fi connected
- logger.log: Wi-Fi connected
- lambda: |-
boot_progress->execute(3);
if (current_page->state == "boot") {
disp1->set_component_text("ip_addr", network::get_ip_address().str().c_str()); // To do: get_ip_addresses()[0]
set_brightness->execute(100);
}
- logger.log: Wait for API
- wait_until:
condition:
- lambda: return (api_server->is_connected());
@@ -2096,25 +2073,31 @@ script:
condition:
- lambda: return (api_server->is_connected());
then: # API connected
- logger.log: API connected
- lambda: |-
esphome::api::CustomAPIDevice ha_event;
ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint",
{
{"device_name", device_name->state.c_str()},
{"type", "boot"},
{"step", "start"}
});
boot_progress->execute(4);
if (blueprint_status->state <= 99) {
esphome::api::CustomAPIDevice ha_event;
ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint",
{
{"device_name", device_name->state.c_str()},
{"type", "boot"},
{"step", "start"}
});
}
- wait_until:
condition:
- lambda: return (wifi_component->is_connected() and api_server->is_connected() and blueprint_status->state > 99);
timeout: 2s
timeout: 5s
- rtttl.play: "DEBUG:d=8,o=5,b=100:e6"
- lambda: |-
set_brightness->execute(display_brightness->state);
boot_progress->execute(5);
disp1->send_command_printf("brightness=%i", int(display_brightness->state));
disp1->set_component_value("settings.brightslider", int(display_brightness->state));
disp1->send_command_printf("brightness_dim=%i", int(display_dim_brightness->state));
disp1->set_component_value("settings.dimslider", int(display_dim_brightness->state));
disp1->send_command_printf("brightness_sleep=%i", int(display_sleep_brightness->state));
boot_progress->execute(6);
nextion_init->publish_state(disp1->is_setup());
if (api_server->is_connected() and disp1->is_setup()) {
esphome::api::CustomAPIDevice ha_event;
@@ -2125,6 +2108,7 @@ script:
{"step", "nextion_init"}
});
}
boot_progress->execute(7);
// Chips icon size
for (int i = 1; i <= 7; ++i) {
disp1->send_command_printf("home.chip%02d.font=%i", i, id(home_chip_font_id));
@@ -2139,17 +2123,34 @@ script:
disp1->set_component_font("home.wifi_icon", id(home_chip_font_id));
disp1->set_component_font_color("home.chip_relay1", id(home_relay1_icon_color));
disp1->set_component_font_color("home.chip_relay2", id(home_relay2_icon_color));
timer_reset_all->execute();
boot_progress->execute(8);
- wait_until:
condition:
- not:
- text_sensor.state: # Is boot page visible?
id: current_page
state: boot
- lambda: return (wifi_component->is_connected() and api_server->is_connected() and blueprint_status->state > 99);
timeout: 10s
- delay: 5s
- lambda: |-
if (current_page->state == "boot") {
goto_page->execute(wakeup_page_name->state.c_str());
boot_progress->execute(9);
if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6");
boot_progress->execute(10);
set_brightness->execute(display_brightness->state);
ESP_LOGD("script.page_boot", "Jump to wake-up page: %s", wakeup_page_name->state.c_str());
goto_page->execute(wakeup_page_name->state.c_str());
- id: boot_progress
mode: restart
parameters:
step: uint
then:
- lambda: |-
timer_reset_all->execute();
if (step == 10) {
ESP_LOGD("script.boot_progress", "Progress: Completed");
disp1->set_component_value("boot.progress", 100);
} else {
step = int(round((blueprint_status->state + (step/10))/2));
ESP_LOGD("script.boot_progress", "Progress: %i%%", step);
disp1->set_component_value("boot.progress", step);
}
- id: page_buttonpage
@@ -2184,29 +2185,24 @@ script:
- id: page_changed
mode: restart
parameters:
page: string
then:
- lambda: |-
// Report new page to logs
ESP_LOGD("script.page_changed", "New page: %s", page.c_str());
// Go to boot page if not initiated
if (not nextion_init->state) {
goto_page->execute("boot");
}
ESP_LOGD("script.page_changed", "New page: %s", current_page->state.c_str());
// Reset globals
if (page != "alarm" &&
page != "climate" &&
page != "cover" &&
page != "fan" &&
page != "light" &&
page != "media_player" &&
page != "confirm" &&
page != "keyb_num") {
if (current_page->state != "alarm" &&
current_page->state != "climate" &&
current_page->state != "cover" &&
current_page->state != "fan" &&
current_page->state != "light" &&
current_page->state != "media_player" &&
current_page->state != "confirm" &&
current_page->state != "keyb_num") {
detailed_entity->publish_state("");
disp1->send_command_printf("back_page_id=0");
}
if (page != "media_player") {
if (current_page->state != "media_player") {
id(last_volume_level) = 0;
id(last_media_duration) = 0;
id(last_media_position) = 0;
@@ -2219,7 +2215,7 @@ script:
refresh_hardware_buttons_bars->execute();
// Reset timers
timer_reset_all->execute();
if (current_page->state != "screensaver") timer_reset_all->execute();
// Report new page to Home Assistant
esphome::api::CustomAPIDevice ha_event;
@@ -2227,40 +2223,40 @@ script:
{
{"device_name", device_name->state.c_str()},
{"type", "page_changed"},
{"page", page.c_str()},
{"page", current_page->state.c_str()},
{"entity", detailed_entity->state.c_str()}
});
// Call page constructor
if (page == "alarm") page_alarm->execute();
else if (page == "blank") page_blank->execute();
else if (page == "boot") page_boot->execute();
else if (page == "buttonpage01") page_buttonpage01->execute();
else if (page == "buttonpage02") page_buttonpage02->execute();
else if (page == "buttonpage03") page_buttonpage03->execute();
else if (page == "buttonpage04") page_buttonpage04->execute();
else if (page == "climate") page_climate->execute();
else if (page == "confirm") page_confirm->execute();
else if (page == "cover") page_cover->execute();
else if (page == "entitypage01") page_entitypage01->execute();
else if (page == "entitypage02") page_entitypage02->execute();
else if (page == "entitypage03") page_entitypage03->execute();
else if (page == "entitypage04") page_entitypage04->execute();
else if (page == "fan") page_fan->execute();
else if (page == "home") page_home->execute();
else if (page == "keyb_num") page_keyb_num->execute();
else if (page == "light") page_light->execute();
else if (page == "media_player") page_media_player->execute();
else if (page == "notification") page_notification->execute();
else if (page == "qrcode") page_qrcode->execute();
else if (page == "screensaver") page_screensaver->execute();
else if (page == "settings") page_settings->execute();
else if (page == "utilities") page_utilities->execute();
else if (page == "weather01") page_weather01->execute();
else if (page == "weather02") page_weather02->execute();
else if (page == "weather03") page_weather03->execute();
else if (page == "weather04") page_weather04->execute();
else if (page == "weather05") page_weather05->execute();
if (current_page->state == "alarm") page_alarm->execute();
else if (current_page->state == "blank") page_blank->execute();
else if (current_page->state == "boot") page_boot->execute();
else if (current_page->state == "buttonpage01") page_buttonpage01->execute();
else if (current_page->state == "buttonpage02") page_buttonpage02->execute();
else if (current_page->state == "buttonpage03") page_buttonpage03->execute();
else if (current_page->state == "buttonpage04") page_buttonpage04->execute();
else if (current_page->state == "climate") page_climate->execute();
else if (current_page->state == "confirm") page_confirm->execute();
else if (current_page->state == "cover") page_cover->execute();
else if (current_page->state == "entitypage01") page_entitypage01->execute();
else if (current_page->state == "entitypage02") page_entitypage02->execute();
else if (current_page->state == "entitypage03") page_entitypage03->execute();
else if (current_page->state == "entitypage04") page_entitypage04->execute();
else if (current_page->state == "fan") page_fan->execute();
else if (current_page->state == "home") page_home->execute();
else if (current_page->state == "keyb_num") page_keyb_num->execute();
else if (current_page->state == "light") page_light->execute();
else if (current_page->state == "media_player") page_media_player->execute();
else if (current_page->state == "notification") page_notification->execute();
else if (current_page->state == "qrcode") page_qrcode->execute();
else if (current_page->state == "screensaver") page_screensaver->execute();
else if (current_page->state == "settings") page_settings->execute();
else if (current_page->state == "utilities") page_utilities->execute();
else if (current_page->state == "weather01") page_weather01->execute();
else if (current_page->state == "weather02") page_weather02->execute();
else if (current_page->state == "weather03") page_weather03->execute();
else if (current_page->state == "weather04") page_weather04->execute();
else if (current_page->state == "weather05") page_weather05->execute();
- delay: 1s
- script.execute: refresh_hardware_buttons_bars
@@ -2710,7 +2706,7 @@ script:
show: bool
then:
- lambda: |-
nspanel_ha_blueprint::NextionComponent component = nspanel_ha_blueprint::extractNextionComponent(component_id, current_page->state);
NextionComponent component = extractNextionComponent(component_id, current_page->state);
if (component.is_current_page) disp1->send_command_printf("vis %s,%i", component.component_id.c_str(), show ? 1 : 0);
- id: stop_all

View File

@@ -159,6 +159,14 @@ Text unavailable
Text :
Max. Text Size : 1
Progress Bar progress
Attributes
ID : 17
Scope : global
Dragging : 0
Send Component ID: disabled
Value : 0
Dual-state Button bt_reboot
Attributes
ID : 4

View File

@@ -12,6 +12,10 @@ Page home
Events
Preinitialize Event
if(boot.progress.val<100)
{
page boot
}
printh 92
prints "current_page",0
printh 00

View File

@@ -166,6 +166,14 @@ Text unavailable
Text :
Max. Text Size : 1
Progress Bar progress
Attributes
ID : 17
Scope : global
Dragging : 0
Send Component ID: disabled
Value : 0
Dual-state Button bt_reboot
Attributes
ID : 4

View File

@@ -12,6 +12,10 @@ Page home
Events
Preinitialize Event
if(boot.progress.val<100)
{
page boot
}
printh 92
prints "current_page",0
printh 00

View File

@@ -159,6 +159,14 @@ Text unavailable
Text :
Max. Text Size : 1
Progress Bar progress
Attributes
ID : 17
Scope : global
Dragging : 0
Send Component ID: disabled
Value : 0
Dual-state Button bt_reboot
Attributes
ID : 4

View File

@@ -12,6 +12,10 @@ Page home
Events
Preinitialize Event
if(boot.progress.val<100)
{
page boot
}
printh 92
prints "current_page",0
printh 00

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.