Sonoff NSPanel Blueprint - Configure your own custom NSPanel easy via a Blueprint

I tried the update again and now roughly 50 hours later it finally hit 100%. Now the screen is just fully white. I’m curious to see if anything happens when I leave it a little longer.

Here is the ESPhome log.

log
INFO ESPHome 2023.8.3
INFO Reading configuration /config/esphome/nspanel3.yaml...
WARNING Found 'id(disp1).goto_page("boot");
id(disp1).set_component_text_printf("boot.esph_version", "%s", "${version}"); // ### esphome-version ###
id(disp1).show_component("bt_reboot");
id(timer_reset_all).execute("boot");' (see display->0->on_setup->then->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_tft) == "${version}");' (see script->18->then->0->wait_until->condition->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_blueprint) == "${version}");' (see script->18->then->0->wait_until->condition->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'id(disp1).goto_page("boot");
id(disp1).set_component_text_printf("boot.esph_version", "%s", "${version}"); // ### esphome-version ###
id(disp1).show_component("bt_reboot");
id(timer_reset_all).execute("boot");' (see display->0->on_setup->then->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_tft) == "${version}");' (see script->18->then->0->wait_until->condition->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_blueprint) == "${version}");' (see script->18->then->0->wait_until->condition->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
INFO Detected timezone 'Australia/Perth'
WARNING GPIO4 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.20.166 using esphome API
INFO Successfully connected to 192.168.20.166
[10:35:05][I][app:102]: ESPHome version 2023.8.3 compiled on Sep 21 2023, 11:51:56
[10:35:05][C][wifi:543]: WiFi:
[10:35:05][C][wifi:379]:   Local MAC: [redacted]
[10:35:05][C][wifi:380]:   SSID: 'DR_i_24g'[redacted]
[10:35:05][C][wifi:381]:   IP Address: 192.168.20.166
[10:35:05][C][wifi:383]:   BSSID: [redacted]
[10:35:05][C][wifi:384]:   Hostname: 'nspanel3'
[10:35:05][C][wifi:386]:   Signal strength: -49 dB ▂▄▆█
[10:35:05][C][wifi:390]:   Channel: 11
[10:35:05][C][wifi:391]:   Subnet: 255.255.255.0
[10:35:05][C][wifi:392]:   Gateway: 192.168.20.1
[10:35:05][C][wifi:393]:   DNS1: 192.168.20.1
[10:35:05][C][wifi:394]:   DNS2: 0.0.0.0
[10:35:05][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:05][W][nextion:072]: Nextion is not connected! 
[10:35:05][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:05][W][component:205]: Components should block for at most 20-30ms.
[10:35:05][C][logger:301]: Logger:
[10:35:05][C][logger:302]:   Level: DEBUG
[10:35:05][C][logger:303]:   Log Baud Rate: 115200
[10:35:05][C][logger:305]:   Hardware UART: UART0
[10:35:05][C][uart.arduino_esp32:124]: UART Bus 1:
[10:35:05][C][uart.arduino_esp32:125]:   TX Pin: GPIO16
[10:35:05][C][uart.arduino_esp32:126]:   RX Pin: GPIO17
[10:35:05][C][uart.arduino_esp32:128]:   RX Buffer Size: 256
[10:35:05][C][uart.arduino_esp32:130]:   Baud Rate: 115200 baud
[10:35:05][C][uart.arduino_esp32:131]:   Data Bits: 8
[10:35:05][C][uart.arduino_esp32:132]:   Parity: NONE
[10:35:05][C][uart.arduino_esp32:133]:   Stop bits: 1
[10:35:05][C][ledc.output:164]: LEDC Output:
[10:35:05][C][ledc.output:165]:   Pin GPIO21
[10:35:05][C][ledc.output:166]:   LEDC Channel: 0
[10:35:05][C][ledc.output:167]:   PWM Frequency: 1000.0 Hz
[10:35:05][C][ledc.output:168]:   Bit depth: 16
[10:35:05][C][template.binary_sensor:028]: Template Binary Sensor 'nspanel3 Nextion display'
[10:35:05][C][template.binary_sensor:028]:   Device Class: 'connectivity'
[10:35:05][C][uptime.sensor:031]: Uptime Sensor 'nspanel3 Uptime seconds'
[10:35:05][C][uptime.sensor:031]:   Device Class: 'duration'
[10:35:05][C][uptime.sensor:031]:   State Class: 'total_increasing'
[10:35:05][C][uptime.sensor:031]:   Unit of Measurement: 's'
[10:35:05][C][uptime.sensor:031]:   Accuracy Decimals: 0
[10:35:05][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[10:35:05][C][template.sensor:022]: Template Sensor 'nspanel3 API uptime'
[10:35:05][C][template.sensor:022]:   Device Class: 'timestamp'
[10:35:05][C][template.sensor:022]:   State Class: ''
[10:35:06][C][template.sensor:022]:   Unit of Measurement: ''
[10:35:06][C][template.sensor:022]:   Accuracy Decimals: 0
[10:35:06][C][template.sensor:023]:   Update Interval: never
[10:35:06][C][template.sensor:022]: Template Sensor 'nspanel3 Device uptime'
[10:35:06][C][template.sensor:022]:   Device Class: 'timestamp'
[10:35:06][C][template.sensor:022]:   State Class: ''
[10:35:06][C][template.sensor:022]:   Unit of Measurement: ''
[10:35:06][C][template.sensor:022]:   Accuracy Decimals: 0
[10:35:06][C][template.sensor:023]:   Update Interval: never
[10:35:06][C][template.text_sensor:020]: Template Sensor 'nspanel3 Notification Label'
[10:35:06][C][template.text_sensor:020]: Template Sensor 'nspanel3 Notification Text'
[10:35:06][C][switch.gpio:068]: GPIO Switch 'nspanel3 Screen Power'
[10:35:06][C][switch.gpio:091]:   Restore Mode: always ON
[10:35:06][C][switch.gpio:031]:   Pin: GPIO4
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Display Brightness'
[10:35:06][C][template.number:050]:   Unit of Measurement: '%'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Display Brightness Dimdown'
[10:35:06][C][template.number:050]:   Unit of Measurement: '%'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Temperature Correction'
[10:35:06][C][template.number:050]:   Unit of Measurement: '°C'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:06][W][nextion:072]: Nextion is not connected! 
[10:35:06][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:06][W][component:205]: Components should block for at most 20-30ms.
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Timeout Page'
[10:35:06][C][template.number:050]:   Icon: 'mdi:timer'
[10:35:06][C][template.number:050]:   Unit of Measurement: 's'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Timeout Dimming'
[10:35:06][C][template.number:050]:   Icon: 'mdi:timer'
[10:35:06][C][template.number:050]:   Unit of Measurement: 's'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][C][template.number:050]: Template Number 'nspanel3 Timeout Sleep'
[10:35:06][C][template.number:050]:   Icon: 'mdi:timer'
[10:35:06][C][template.number:050]:   Unit of Measurement: 's'
[10:35:06][C][template.number:051]:   Optimistic: YES
[10:35:06][C][template.number:052]:   Update Interval: 60.0s
[10:35:06][C][template.select:065]: Template Select 'nspanel3 Wake-up page'
[10:35:06][C][template.select:065]:   Icon: 'mdi:page-next-outline'
[10:35:06][C][template.select:066]:   Update Interval: 60.0s
[10:35:06][C][template.select:069]:   Optimistic: YES
[10:35:06][C][template.select:070]:   Initial Option: home
[10:35:06][C][template.select:071]:   Restore Value: YES
[10:35:06][C][switch.gpio:068]: GPIO Switch 'nspanel3 Relay 1'
[10:35:06][C][switch.gpio:091]:   Restore Mode: restore defaults to OFF
[10:35:06][C][switch.gpio:031]:   Pin: GPIO22
[10:35:06][C][switch.gpio:068]: GPIO Switch 'nspanel3 Relay 2'
[10:35:06][C][switch.gpio:091]:   Restore Mode: restore defaults to OFF
[10:35:06][C][switch.gpio:031]:   Pin: GPIO19
[10:35:06][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:07][W][nextion:072]: Nextion is not connected! 
[10:35:07][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:07][W][component:205]: Components should block for at most 20-30ms.
[10:35:07][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'nspanel3 Left Button'
[10:35:07][C][gpio.binary_sensor:016]:   Pin: GPIO14
[10:35:07][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'nspanel3 Right Button'
[10:35:07][C][gpio.binary_sensor:016]:   Pin: GPIO27
[10:35:07][C][template.text_sensor:020]: Template Sensor 'nspanel3 Current page'
[10:35:07][C][template.switch:068]: Template Switch 'nspanel3 Notification sound'
[10:35:07][C][template.switch:091]:   Restore Mode: restore defaults to OFF
[10:35:07][C][template.switch:057]:   Optimistic: YES
[10:35:07][C][template.switch:068]: Template Switch 'nspanel3 Relay 1 Local'
[10:35:07][C][template.switch:091]:   Restore Mode: restore defaults to OFF
[10:35:07][C][template.switch:057]:   Optimistic: YES
[10:35:07][C][template.switch:068]: Template Switch 'nspanel3 Relay 2 Local'
[10:35:07][C][template.switch:091]:   Restore Mode: restore defaults to OFF
[10:35:07][C][template.switch:057]:   Optimistic: YES
[10:35:07][C][template.switch:068]: Template Switch 'nspanel3 Notification unread'
[10:35:07][C][template.switch:091]:   Restore Mode: always OFF
[10:35:07][C][template.switch:057]:   Optimistic: YES
[10:35:07][C][rtttl:018]: Rtttl
[10:35:07][C][restart.button:017]: Restart Button 'nspanel3 Restart'
[10:35:07][C][adc:094]: ADC Sensor 'ntc_source'
[10:35:07][C][adc:094]:   Device Class: 'voltage'
[10:35:07][C][adc:094]:   State Class: 'measurement'
[10:35:07][C][adc:094]:   Unit of Measurement: 'V'
[10:35:07][C][adc:094]:   Accuracy Decimals: 2
[10:35:07][C][adc:104]:   Pin: GPIO38
[10:35:07][C][adc:119]:  Attenuation: 11db
[10:35:07][C][adc:133]:   Update Interval: 60.0s
[10:35:07][C][resistance:010]: Resistance Sensor 'resistance_sensor'
[10:35:07][C][resistance:010]:   State Class: 'measurement'
[10:35:07][C][resistance:010]:   Unit of Measurement: 'Ω'
[10:35:07][C][resistance:010]:   Accuracy Decimals: 1
[10:35:07][C][resistance:010]:   Icon: 'mdi:flash'
[10:35:07][C][resistance:011]:   Configuration: DOWNSTREAM
[10:35:07][C][resistance:012]:   Resistor: 11200.00Ω
[10:35:07][C][resistance:013]:   Reference Voltage: 3.3V
[10:35:07][C][version.text_sensor:021]: Version Text Sensor 'nspanel3 ESPhome Version'
[10:35:07][C][version.text_sensor:021]:   Icon: 'mdi:new-box'
[10:35:07][C][nextion:117]: Nextion:
[10:35:07][C][nextion:118]:   Device Model:     
[10:35:07][C][nextion:119]:   Firmware Version: 
[10:35:07][C][nextion:120]:   Serial Number:    
[10:35:07][C][nextion:121]:   Flash Size:       
[10:35:07][C][nextion:122]:   Wake On Touch:    True
[10:35:07][C][homeassistant.time:010]: Home Assistant Time:
[10:35:07][C][homeassistant.time:011]:   Timezone: 'AWST-8'
[10:35:07][C][status:034]: Status Binary Sensor 'nspanel3 Status'
[10:35:07][C][status:034]:   Device Class: 'connectivity'
[10:35:07][C][ntc:014]: NTC Sensor 'nspanel3 Temperature'
[10:35:07][C][ntc:014]:   Device Class: 'temperature'
[10:35:07][C][ntc:014]:   State Class: 'measurement'
[10:35:07][C][ntc:014]:   Unit of Measurement: '°C'
[10:35:07][C][ntc:014]:   Accuracy Decimals: 1
[10:35:07][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:07][W][nextion:072]: Nextion is not connected! 
[10:35:07][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:07][W][component:205]: Components should block for at most 20-30ms.
[10:35:08][C][captive_portal:088]: Captive Portal:
[10:35:08][C][web_server:161]: Web Server:
[10:35:08][C][web_server:162]:   Address: 192.168.20.166:80
[10:35:08][C][mdns:112]: mDNS:
[10:35:08][C][mdns:113]:   Hostname: nspanel3
[10:35:08][C][ota:093]: Over-The-Air Updates:
[10:35:08][C][ota:094]:   Address: 192.168.20.166:3232
[10:35:08][C][ota:097]:   Using Password.
[10:35:08][C][api:138]: API Server:
[10:35:08][C][api:139]:   Address: 192.168.20.166:6053
[10:35:08][C][api:143]:   Using noise encryption: NO
[10:35:08][C][wifi_info:009]: WifiInfo IPAddress 'nspanel3 IP'
[10:35:08][C][wifi_info:011]: WifiInfo SSID 'nspanel3 SSID'
[10:35:08][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:08][W][nextion:072]: Nextion is not connected! 
[10:35:08][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:08][W][component:205]: Components should block for at most 20-30ms.
[10:35:08][C][wifi_info:012]: WifiInfo BSSID 'nspanel3 BSSID'
[10:35:08][C][wifi_signal.sensor:009]: WiFi Signal 'nspanel3 RSSI'
[10:35:08][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[10:35:08][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[10:35:08][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[10:35:08][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[10:35:08][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:08][W][nextion:072]: Nextion is not connected! 
[10:35:08][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:08][W][component:205]: Components should block for at most 20-30ms.
[10:35:09][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:09][W][nextion:072]: Nextion is not connected! 
[10:35:09][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:09][W][component:205]: Components should block for at most 20-30ms.
[10:35:10][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:10][W][nextion:072]: Nextion is not connected! 
[10:35:10][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:10][W][component:205]: Components should block for at most 20-30ms.
[10:35:10][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:10][W][nextion:072]: Nextion is not connected! 
[10:35:10][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:10][W][component:205]: Components should block for at most 20-30ms.
[10:35:11][D][esp32.preferences:114]: Saving 1 preferences to flash...
[10:35:11][D][esp32.preferences:143]: Saving 1 preferences to flash: 1 cached, 0 written, 0 failed
[10:35:11][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:11][W][nextion:072]: Nextion is not connected! 
[10:35:11][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:11][W][component:205]: Components should block for at most 20-30ms.
[10:35:12][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:12][W][nextion:072]: Nextion is not connected! 
[10:35:12][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:12][W][component:205]: Components should block for at most 20-30ms.
[10:35:12][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:12][W][nextion:072]: Nextion is not connected! 
[10:35:12][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:12][W][component:205]: Components should block for at most 20-30ms.
[10:35:13][E][uart:015]: Reading from UART timed out at byte 0!
[10:35:13][W][nextion:072]: Nextion is not connected! 
[10:35:13][W][component:204]: Component nextion.display took a long time for an operation (0.11 s).
[10:35:13][W][component:205]: Components should block for at most 20-30ms.

just the top section for wifi ect. I left if completely as per the github repo from the section heading ###esphome configuration ###

On the ‘#2’ panel it seems to be, however the log does show issues:

NS Panel 2 log
INFO ESPHome 2023.8.3
INFO Reading configuration /config/esphome/nspanel2.yaml...
WARNING Found 'id(disp1).goto_page("boot");
id(disp1).set_component_text_printf("boot.esph_version", "%s", "${version}"); // ### esphome-version ###
id(disp1).show_component("bt_reboot");
id(timer_reset_all).execute("boot");' (see display->0->on_setup->then->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_tft) == "${version}");' (see script->18->then->0->wait_until->condition->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_blueprint) == "${version}");' (see script->18->then->0->wait_until->condition->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'id(disp1).goto_page("boot");
id(disp1).set_component_text_printf("boot.esph_version", "%s", "${version}"); // ### esphome-version ###
id(disp1).show_component("bt_reboot");
id(timer_reset_all).execute("boot");' (see display->0->on_setup->then->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_tft) == "${version}");' (see script->18->then->0->wait_until->condition->0->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'return (id(version_blueprint) == "${version}");' (see script->18->then->0->wait_until->condition->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
WARNING Found 'ESP_LOGD("script.check_versions", "ESPHome version: ${version}");
ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str());
if (id(version_tft) != "${version}") ESP_LOGE("script.check_versions", "TFT version mismatch!");
ESP_LOGD("script.check_versions", "Blueprint version: %s", id(version_blueprint).c_str());
if (id(version_blueprint) != "${version}") ESP_LOGE("script.check_versions", "Blueprint version mismatch!");
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
  {
    {"type", "version"},
    {"tft", id(version_tft).c_str()},
    {"esphome", "${version}"},
    {"blueprint", id(version_blueprint).c_str()}
  });' (see script->18->then->1->lambda) which looks like a substitution, but 'version' was not declared
INFO Detected timezone 'Australia/Perth'
WARNING GPIO4 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.20.167 using esphome API
INFO Successfully connected to 192.168.20.167
[10:53:05][I][app:102]: ESPHome version 2023.8.3 compiled on Sep 22 2023, 21:27:41

EDIT: ok, so I see where my version issue has come from. Because I kept my original ‘substitutions’ section, I didn’t have version: 4 included in the code. I’ve updated that on panel #2 and all seems good.

Panel #3 still has a white screen. I’ll try updating it’s code to include the version 4 bit and see what happens

EDIT 2: NS Panel #3 has been updated but still has the TFT issue. I hit update TFT again and have the crazy slow update in progress once again…

The upload shouldn’t take more than 15 to 20 minutes. If after half hour it isn’t close to the end, you should stop and try again. Those life long transfers always fails at the end.

Why are you using the full code and editing it? Why not using a reference to the file in GitHub so you can get all the updates? We can still handle customizations if that is what you need.

From the logs I can see the Nextion display is not connected to ESPHome:

[23:12:24][C][nextion:123]: Nextion:
[23:12:24][C][nextion:124]:   Device Model:     
[23:12:24][C][nextion:125]:   Firmware Version: 
[23:12:24][C][nextion:126]:   Serial Number:    
[23:12:24][C][nextion:127]:   Flash Size:       
[23:12:24][C][nextion:128]:   Wake On Touch:    True
...
[23:12:24][W][nextion:078]: Nextion is not connected! 

So the TFT file cannot be transferred.

Power cycling the device will probably help.

I had the same problem but It is solvable bij putting the tft file locally (in the www map of HA). Make sure you put the path to the tft in you ESPhome-Yaml fil like below:

nextion_update_url: “http://192.168.X.XX:8123/local/nspanel_eu.tft

Restart the panel → go to settings → devices → ESP-home–> nspanel → Restart butten → Exit reparse → upload tft.

This method work with me

1 Like

I have done it numerous times, same result and same problem on both devices I own

this is what I do, local update
never tried the online (github) approach

Same here. With multiple power cycles i can get the blank tft to install but no luck with the real tft file.

It always fails at 17% with the following lines in the log:

16:59:16][D][nextion_upload:048]: Requesting range: bytes=1327104-1392639
WARNING nspanel1.local: Connection error occurred: [Errno 104] Connection reset by peer
INFO Processing unexpected disconnect from ESPHome API for nspanel1.local
WARNING Disconnected from API```

Edit: The 7th attempt worked!
1 Like

I was originally using the ‘advanced config’ and have just stuck with it. (mainly because it includes the section for fixed IP address etc.)

No matter how many times I try, I keep getting these slow /failing TFT updates with this particular NS Panel…

I followed this approach and made some progress
https://github.com/Blackymas/NSPanel_HA_Blueprint/issues/443
but got stuck on this

I’ve tried numerous reboots and reflashing esphome but no luck

1 Like

So you installed Tasmota on it? (as per this post)

correct, I followed this procedure
https://docs.nspanel.pky.eu/prepare_nspanel/#configure-tasmota-template-for-nspanel

and then flashed nspanel_eu.tft and esphome

1 Like

I’m guessing this can’t be done OTA then?

yes, flashed tasmota with serial and then TFT and ESPhome OTA

Thanks, I’ll give it a try when I get time.

use this instead
https://tasmota.github.io/install/

and select nspanel from the dropdown menu

I had the same problem and I solved it by deleting and reinstalling both the esphome sketch (deleted completely and recreated) and the blueprint (deleted and recreated from scratch). The error was caused by the fact that the Blueprint did not correctly find the name of the esphome sketch!

1 Like

it is working now!
thanks

1 Like

Those things are easier now with v4.0.

Please take a look at this: NSPanel_HA_Blueprint/docs/en/customization.md at 63d37695e454683930f63e2ecfd22b2ef6ee2e92 · Blackymas/NSPanel_HA_Blueprint · GitHub