Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problems updating - blank tft good, but rest not #680

Closed
rploeg opened this issue Apr 15, 2023 · 24 comments · Fixed by #675
Closed

Problems updating - blank tft good, but rest not #680

rploeg opened this issue Apr 15, 2023 · 24 comments · Fixed by #675

Comments

@rploeg
Copy link

rploeg commented Apr 15, 2023

I tried to update yesterday my devices to 3.2.2 (blueprint, TFT and ESP yaml). I was stuck like some other people with the [11:54:05][W][nextion:396]: Nextion reported variable name invalid!'

So updated my device with the blank tft image, that was successful (but still including the above error). But then I tried to update the TFT eu version and still my blank tft was loaded. So it looks like my blank TFT is loaded, but nothing more is possible. I have tried to update flashing via cables (not wireless), but still the blank image is loaded (looks like). When I try do it wirelessly I see it's successful, but again the blank tft is loaded with the same error.

Compiling /data/nspanel01/.pioenvs/nspanel01/src/main.cpp.o
Linking /data/nspanel01/.pioenvs/nspanel01/firmware.elf
RAM: [= ] 13.4% (used 44024 bytes from 327680 bytes)
Flash: [====== ] 62.9% (used 1153501 bytes from 1835008 bytes)
Building /data/nspanel01/.pioenvs/nspanel01/firmware.bin
Creating esp32 image...
Successfully created esp32 image.
esp32_create_combined_bin(["/data/nspanel01/.pioenvs/nspanel01/firmware.bin"], ["/data/nspanel01/.pioenvs/nspanel01/firmware.elf"])
Wrote 0x12b070 bytes to file /data/nspanel01/.pioenvs/nspanel01/firmware-factory.bin, ready to flash to offset 0x0
========================= [SUCCESS] Took 31.33 seconds =========================
INFO Successfully compiled program.
INFO Resolving IP address of nspanel01.local
INFO -> 192.168.1.116
INFO Uploading /data/nspanel01/.pioenvs/nspanel01/firmware.bin (1159280 bytes)
Uploading: [============================================================] 100% Done...

INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from nspanel01.local using esphome API
[11:53:58][W][nextion:396]: Nextion reported variable name invalid!_

And again the blank TFT is loaded with the above variable invalid error.

Then I click on TFT update and get the error on my screen:

Model does not match

And see then this in my logs

`

12:16:26 [E] [uart:015] Reading from UART timed out at byte 0!
`
@edwardtfn
Copy link
Collaborator

So it looks like my blank TFT is loaded

If nspanel_blank.tft is loaded, you should be seen a totally white screen, with no text and no way to turn off other than disconnecting power supply.
Is that your case?

Could you please share the ESPHOME yaml you are using? Please remove any sensitive information (wifi settings, etc) before sharing.

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023

@edwardtfn Yes, that is the case (white screen). here is my esphome yaml - sorry for the weird formatting

#####################################################################################################

NSPANEL ESPHOME created by Blackymas - https://github.com/Blackymas/NSPanel_HA_Blueprint
ADVANCED CONFIG + FULL ESPHOME CODE!
PLEASE only make changes if it is necessary and also the required knowledge is available.
For normal use with the Blueprint, no changes are necessary.

#####################################################################################################

ADVANCED CONFIGURATION - activate only when you know what you do

substitutions:

## usage of secrets-file ## -> comment in ###### Change ME

device_name: "nspanel01" # Wird im Blueprint benötigt!
wifi_ssid: !secret wifi_ssid # add in your esphome secrets file.
wifi_password: !secret wifi_password # add in your esphome secrets file. -> per default this is also used for ota_password and web_password
ota_password: !secret ota_pwd # add in your esphome secrets file. - manual change in code required to activate
web_password: !secret wifi_password # add in your esphome secrets file. - manual change in code required to activate
api_password: !secret api_pwd # add in your esphome secrets file. - manual change in code required to activate
nextion_update_url: !secret ns_nextion_update_url

## static ip config

ip: "10.0.0.7"

gw: "10.0.0.138"

subnet: "255.255.255.0"

dns: "10.0.0.138"

domain: ".local"

if you rename this file to .nspanel_esphome.yaml then you can activate nested config
use the ADVANCED CONFIG-Section as device configuration
https://esphome.io/guides/configuration-types.html#yaml-insertion-operator

<<: !include .nspanel_esphome.yaml

END OF ADVANCED CONFIGURATION
WIFI SETUP

wifi:
ssid: ${wifi_ssid}
password: ${wifi_password}
power_save_mode: none

advanced config - uncomment to use static IP-Config

manual_ip:

static_ip: ${ip}

gateway: ${gw}

subnet: ${subnet}

dns1: ${dns}

domain: ${domain}

Enable fallback hotspot (captive portal) in case wifi connection fails

ap:
ssid: "${device_name}"
password: ${wifi_password}

ESPHOME CONFIGURATION

esphome:
name: ${device_name}
min_version: 2022.10.2
on_boot:
priority: 601
then:
- lambda: id(disp1).send_command_printf("DRAKJHSUYDGBNCJHGJKSHBDN");

TYPE OF ESP BOARD

esp32:
board: esp32dev

captive_portal:

web_server:
port: 80
auth:
username: admin
password: ${wifi_password}
##### advanced config - change to use web_password #####
# password: ${web_password}

OTA PASSWORD

ota:
password: ${wifi_password}

advanced config - change to use ota_password

password: ${ota_password}

safe_mode: true
reboot_timeout: 3min
num_attempts: 3

LOGGER

logger:

baud_rate: 0

level: WARN

CONFIGURE INTERNAL BUZZER

output:
##### BUZZER FOR PLAYING RINGTONES #####

  • platform: ledc
    id: buzzer_out
    pin:
    number: 21
ENABLE RINGTONE MUSIC SUPPORT

rtttl:
id: buzzer
output: buzzer_out

UART FOR NEXTION DISPLAY

uart:
tx_pin: 16
rx_pin: 17
baud_rate: 115200
id: tf_uart

START - BUTTON CONFIGURATION

button:

REBOOT BUTTON
  • platform: restart
    name: ${device_name} Restart
    id: restart_nspanel
UPDATE TFT DISPLAY
  • platform: template
    name: ${device_name} Update TFT display
    icon: mdi:file-sync
    id: tft_update
    entity_category: config
    on_press:
    • delay: 16ms
    • lambda: id(disp1).upload_tft();
START - API CONFIGURATION

api:

advanced config - activate to use api_password

password: ${api_password}

services:

##### SERVICE TO UPDATE THE HMI FILE #####
- service: upload_tft
  then:
    - lambda: 'id(disp1)->upload_tft();'

##### SERVICE TO UPDATE THE TFT FILE from URL #####
- service: upload_tft_url
  variables:
    url: string
  then:
    - lambda: 'id(disp1)->set_tft_url(url.c_str());'
    - lambda: 'id(disp1)->upload_tft();'

##### Service to send a command "printf" directly to the display #####
- service: send_command_printf
  variables:
    cmd: string
  then:
    - lambda: 'id(disp1).send_command_printf("%s", cmd.c_str());'

##### Service to send a command "text_printf" directly to the display #####
- service: send_command_text_printf
  variables:
    component: string
    message: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).set_component_text_printf(component.c_str(), "%s", message.c_str());'

##### Service to send a command "component_value (Dualstate Button)" directly to the display #####
- service: send_command_value
  variables:
    component: string
    message: int
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).set_component_value(component.c_str(), message);'

##### Service to send a command "hide componente" directly to the display #####
- service: send_command_hide ### unused ###
  variables:
    component: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).hide_component(component.c_str());'

##### Service to send a command "show componente" directly to the display #####
- service: send_command_show ### unused ###
  variables:
    component: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).show_component(component.c_str());'

##### Service to send a command "show ALL componente" directly to the display #####
- service: send_command_show_all ### unused ###
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).show_component("255");'

##### Service to send a command "font color" directly to the display #####
- service: send_command_font_color
  variables:
    component: string
    message: int
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).set_component_font_color(component.c_str(), message);'

##### Service to send a command "background color" directly to the display #####
- service: send_command_background_color
  variables:
    component: string
    message: int
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: 'id(disp1).set_component_background_color(component.c_str(), message);'

##### Service to show a notification-message on the screen #####
- service: notification_show
  variables:
    label: string
    text: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: |-
        id(disp1).send_command_printf("page notification");
        id(disp1).set_component_text_printf("notification.notifi_label", "%s", label.c_str());
        id(disp1).set_component_text_printf("notification.notifi_text01", "%s", text.c_str());
        id(notification_label).publish_state(label.c_str());
        id(notification_text).publish_state(text.c_str());
    - switch.turn_on: notification_unread
    - if:
        condition:
          switch.is_on: notification_sound
        then:
          - rtttl.play: "two short:d=4,o=5,b=100:16e6,16e6"

##### Service to clear the notification #####
- service: notification_clear
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: |-
        id(notification_label).publish_state("");
        id(notification_text).publish_state("");
    - switch.turn_off: notification_unread

##### Service to set entity-information for settings-page(s)
- service: set_settings_entity
  variables:
    entity: string
  then:
    - wait_until:
        switch.is_on: nextion_init
    - lambda: |-
        id(settings_entity).publish_state(entity.c_str());

##### Service to play a rtttl tones #####
# Example tones : https://codebender.cc/sketch:109888#RTTTL%20Songs.ino
- service: play_rtttl
  variables:
    song_str: string
  then:
    - rtttl.play:
        rtttl: !lambda 'return song_str;'

# Service to show a QR code on the display (ex. for WiFi password)
- service: qr_code
  variables:
    qrdata: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: |-
        id(disp1).send_command_printf("page qrcode");
        id(disp1).set_component_text_printf("qrcode.qrcode_value", "%s", qrdata.c_str());

#### Service to send thermostat cycle state ####
- service: send_thermostat_cycle_state
  variables:
    value: float
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: |-
        //ESP_LOGD("nextion", "thermostat sendig value %f", value);
        int v = int(2 * std::min(std::max(value - 13.5, 0.0), 5.0));
        int left = v + (v ? 19 : 16); // 16 is empty left.
        v = int(2 * std::min(std::max(value - 18.0, 0.0), 4.0));
        int mid = v + (v ? 29 : 17); // 17 is empty mid.
        v = int(2 * std::min(std::max(value - 21.5, 0.0), 5.5));
        int right = v + (v ? 37 : 18); // 18 is empty right.
        // sends the 3 images to the display
        //ESP_LOGD("nextion", "thermostat left %i", left);
        //ESP_LOGD("nextion", "thermostat mid %i", mid);
        //ESP_LOGD("nextion", "thermostat right %i", right);
        id(disp1).send_command_printf("climate_left.pic=%i", left);
        id(disp1).send_command_printf("climate_middle.pic=%i", mid);
        id(disp1).send_command_printf("climate_right.pic=%i", right);
        // send target-temp
        id(disp1).set_component_text_printf("target_temp", "%.1f°", value);
        id(display_target_temp).publish_state(value);

#### Service to set the buttons ####
- service: set_button
  variables:
    btn_id: string
    btn_pic: int
    btn_bg: int
    btn_icon_font: int
    btn_txt_font: int
    btn_bri_font: int
    btn_icon: string
    btn_label: string
    btn_bri_txt: string
  then:
    - wait_until:
          switch.is_on: nextion_init
    - lambda: |-
        // ESP_LOGD("nextion", "set button %s", btn_id.c_str());
        std::string btnicon = btn_id.c_str() + std::string("icon");
        std::string btntext = btn_id.c_str() + std::string("text");
        std::string btnbri = btn_id.c_str() + std::string("bri");
        id(disp1).send_command_printf("%spic.pic=%i", btn_id.c_str(), btn_pic);
        id(disp1).set_component_background_color(btnicon.c_str(), btn_bg);
        id(disp1).set_component_background_color(btntext.c_str(), btn_bg);
        id(disp1).set_component_background_color(btnbri.c_str(), btn_bg);
        id(disp1).set_component_font_color(btnicon.c_str(), btn_icon_font);
        id(disp1).set_component_font_color(btntext.c_str(), btn_txt_font);
        id(disp1).set_component_font_color(btnbri.c_str(), btn_bri_font);
        id(disp1).set_component_text_printf(btnicon.c_str(), "%s", btn_icon.c_str());
        id(disp1).set_component_text_printf(btntext.c_str(), "%s", btn_label.c_str());
        // id(disp1).set_component_text_printf(btnbri.c_str(), "%s", btn_bri_txt.c_str());
        if (strcmp(btn_bri_txt.c_str(), "0") != 0) {
          id(disp1).set_component_text_printf(btnbri.c_str(), "%s", btn_bri_txt.c_str());
        } else {
          id(disp1).set_component_text_printf(btnbri.c_str(), " ");
        }
START - GLOBALS CONFIGURATION

globals:

Save Display Brightness for NSPanel reboot
  • id: display_brightness_global
    type: int
    restore_value: true
    initial_value: '100'
Save Display DIM Brightness for NSPanel reboot
  • id: display_dim_brightness_global
    type: int
    restore_value: true
    initial_value: '10'
Temperature Correction
  • id: temperature_correction_global
    type: float
    restore_value: true
    initial_value: '0.0'
Save Display DIM Brightness for NSPanel reboot
  • id: sleep_modus_global
    type: int
    restore_value: true
    initial_value: '0'
lastclick_general State
  • id: lastclick_general_global
    type: std::string
    restore_value: no
    initial_value: ''
lastclick_lightsettings State
  • id: lastclick_lightsettings_global
    type: std::string
    restore_value: no
    initial_value: ''
lastclick_coversettings State
  • id: lastclick_coversettings_global
    type: std::string
    restore_value: no
    initial_value: ''
lastclick_climatesettings State
  • id: lastclick_climatesettings_global
    type: std::string
    restore_value: no
    initial_value: ''
lastclick_currentpage State
  • id: currentpage_global
    type: std::string
    restore_value: no
    initial_value: ''
START - BINARY SENSOR CONFIGURATION

binary_sensor:

LEFT BUTTON BELOW DISPLAY TO TOGGLE RELAY#####
  • platform: gpio
    name: ${device_name} Left Button
    id: left_button
    pin:
    number: 14
    inverted: true
    on_click:
    then:
    - if:
    condition:
    and:
    - switch.is_on: relay1_fallback
    - not:
    api.connected:
    then:
    - switch.toggle: relay_1
    - if:
    condition:
    switch.is_on: relay_1
    then:
    - lambda: id(disp1).send_command_printf("home.left_bt_pic.pic=78");
    - lambda: id(disp1).send_command_printf("home.icon_top_01","\U0000E3A5");
    else:
    - lambda: id(disp1).send_command_printf("home.left_bt_pic.pic=77");
    - lambda: id(disp1).send_command_printf("home.icon_top_01","\U0000FFFF");
RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY
  • platform: gpio
    name: ${device_name} Right Button
    id: right_button
    pin:
    number: 27
    inverted: true
    on_click:
    then:
    - if:
    condition:
    and:
    - switch.is_on: relay2_fallback
    - not:
    api.connected:
    then:
    - switch.toggle: relay_2
    - if:
    condition:
    switch.is_on: relay_2
    then:
    - lambda: id(disp1).send_command_printf("home.right_bt_pic.pic=78");
    - lambda: id(disp1).send_command_printf("home.icon_top_02","\U0000E3A8");
    else:
    - lambda: id(disp1).send_command_printf("home.right_bt_pic.pic=77");
    - lambda: id(disp1).send_command_printf("home.icon_top_02","\U0000FFFF");
JUMP PAGE TO SETTING PAGE
  • platform: nextion
    name: $device_name setting page
    page_id: 0
    component_id: 52
    internal: true
    on_multi_click:
    • timing:
      • ON for at least 1s #LONG Press
        then:
      • lambda: 'id(disp1).send_command_printf("page settings");'
Restart NSPanel Button - Setting Page
  • platform: nextion
    name: ${device_name} Restart
    page_id: 7
    component_id: 13
    internal: true
    on_click:
    • button.press: restart_nspanel
Restart NSPanel Button - Boot Page
  • platform: nextion
    name: ${device_name} Restart
    page_id: 8
    component_id: 4
    internal: true
    on_click:
    • button.press: restart_nspanel
Sleep Modus NSPanel Button
  • platform: nextion
    name: ${device_name} Sleep Modus
    page_id: 7
    component_id: 14
    internal: true
    on_click:
    • switch.toggle: sleep_modus
Hotwater Charge

- platform: nextion

name: ${device_name} Hotwater Charge

page_id: 6

component_id: 20

# on_click:
#   - homeassistant.service:
#       service: switch.toggle
#       data:
#         entity_id: ${ha_hotwater_charge}
START - SENSOR CONFIGURATION

sensor:

Uptime
  • platform: uptime
    name: ${device_name} uptime
    disabled_by_default: true
WIFI Signal stregth
  • platform: wifi_signal
    name: ${device_name} RSSI
    update_interval: 60s
    on_value:
    • if:
      condition:
      wifi.connected:
      then:
      - lambda: id(disp1).set_component_text_printf("home.wifi_icon", "%s", "\U0000E5A8");
      else:
      - lambda: id(disp1).set_component_text_printf("home.wifi_icon", "%s", "\U0000FFFF");
INTERNAL TEMPERATURE SENSOR, ADC VALUE
  • platform: adc
    id: ntc_source
    pin: 38
    update_interval: 60s
    attenuation: 11db
INTERNAL TEMPERATURE SENSOR, adc reading converted to resistance (calculation)#####
  • platform: resistance
    id: resistance_sensor
    sensor: ntc_source
    configuration: DOWNSTREAM
    resistor: 11.2kOhm
INTERNAL TEMPERATURE SENSOR, resistance to temperature (calculation)
  • platform: ntc
    name: ${device_name} Temperature
    id: temp_nspanel
    sensor: resistance_sensor
    calibration:
    b_constant: 3950
    reference_temperature: 25°C
    reference_resistance: 10kOhm
    filters:
    • lambda: return x + id(temperature_correction_global);

on_value:

then:

- wait_until:

switch.is_on: nextion_init

- lambda: id(disp1).set_component_text_printf("home.current_temp", "%.1f°", id(temp_nspanel).state); # onboard temp (thermostat temp) to home page.

- lambda: id(disp1).set_component_text_printf("climate.current_temp", "%.1f", id(temp_nspanel).state);

current value of page-climate target_temp
  • platform: template
    name: ${device_name} Display Target Temperature
    id: display_target_temp
    lambda: return {};
    update_interval: 10s
Display Brightness GET VALUE FROM NSPanel SLIDER
  • platform: nextion
    id: brightslider
    name: ${device_name} brightness Slider
    variable_name: brightslider
    internal: true
    on_value:
    then:
    - wait_until:
    switch.is_on: nextion_init
    - number.set:
    id: display_brightness
    value: !lambda 'return int(x);'
    # send text field percentage of current_lightslider_val
    - lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
Display DIM Brightness GET VALUE FROM NSPanel SLIDER
  • platform: nextion
    id: dimslider
    name: ${device_name} dim brightness slider
    variable_name: dimslider
    internal: true
    on_value:
    then:
    - wait_until:
    switch.is_on: nextion_init
    - number.set:
    id: display_dim_brightness
    value: !lambda 'return int(x);'
    # send text field percentage of current_lightslider_val
    - lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
Send current page to HA

- platform: nextion

id: current_page

name: "${device_name} Current Page"

variable_name: dp

update_interval: 1s

accuracy_decimals: 0

filters:

- delta: 1.0

- lambda: return int(x);

START - TEXT SENSOR CONFIGURATION

text_sensor:

ESPhome version used to compile the app
  • platform: version
    name: ${device_name} ESPhome Version
    disabled_by_default: true

  • platform: wifi_info
    ip_address:
    name: ${device_name} IP
    disabled_by_default: true
    id: ip_address
    ssid:
    name: ${device_name} SSID
    disabled_by_default: true
    bssid:
    name: ${device_name} BSSID
    disabled_by_default: true

  • platform: template
    name: ${device_name} Notification Label
    id: notification_label

  • platform: template
    name: ${device_name} Notification Text
    id: notification_text

  • platform: template
    name: ${device_name} Settings Entity
    id: settings_entity

last click sensor, the main action variable - push to HA
  • platform: nextion
    nextion_id: disp1
    name: ${device_name} Last Click
    id: disp1_lastclick_general
    update_interval: 50ms
    component_name: lastclick
    internal: false
    filters:
    • lambda: |-
      if (strcmp(x.c_str(), id(lastclick_general_global).c_str()) != 0) {
      return x;
      } else {
      return {};
      }
      on_value:
      then:
      • globals.set:
        id: lastclick_general_global
        value: !lambda return x;
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
last click lightsettings page, the main action variable - push to HA
  • platform: nextion
    nextion_id: disp1
    name: ${device_name} last click lightsettings
    id: disp1_lastclick_lightsettings
    update_interval: 50ms
    component_name: lightsetting
    internal: false
    filters:
    • lambda: |-
      if (strcmp(x.c_str(), id(lastclick_lightsettings_global).c_str()) != 0) {
      return x;
      } else {
      return {};
      }
      on_value:
      then:
      • globals.set:
        id: lastclick_lightsettings_global
        value: !lambda return x;
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
last click coversettings page, the main action variable - push to HA
  • platform: nextion
    nextion_id: disp1
    name: ${device_name} last click coversettings
    id: disp1_lastclick_coversettings
    update_interval: 50ms
    component_name: coversetting
    internal: false
    filters:
    • lambda: |-
      if (strcmp(x.c_str(), id(lastclick_coversettings_global).c_str()) != 0) {
      return x;
      } else {
      return {};
      }
      on_value:
      then:
      • globals.set:
        id: lastclick_coversettings_global
        value: !lambda return x;
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
last click climate page, the main action variable - push to HA
  • platform: nextion
    nextion_id: disp1
    name: ${device_name} last click climatesettings
    id: disp1_lastclick_climatesettings
    update_interval: 50ms
    component_name: climatesetting
    internal: false
    filters:
    • lambda: |-
      if (strcmp(x.c_str(), id(lastclick_climatesettings_global).c_str()) != 0) {
      return x;
      } else {
      return {};
      }
      on_value:
      then:
      • globals.set:
        id: lastclick_climatesettings_global
        value: !lambda return x;
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
currentpage sensor, the main action variable - push to HA
  • platform: nextion
    nextion_id: disp1
    name: ${device_name} currentpage
    id: disp1_currentpage
    update_interval: 50ms
    component_name: currentpage
    internal: false
    filters:
    • lambda: |-
      if (strcmp(x.c_str(), id(currentpage_global).c_str()) != 0) {
      return x;
      } else {
      return {};
      }
      on_value:
      then:
      • globals.set:
        id: currentpage_global
        value: !lambda return x;
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
touchevent sensor, Reset the page timeout
  • platform: nextion
    nextion_id: disp1
    #name: ${device_name} touchevent
    id: disp1_touchevent
    update_interval: 50ms
    component_name: touchevent
    internal: true
    filters:
    • lambda: |-
      static std::string touchevent_history = "";
      if (strcmp(x.c_str(), touchevent_history.c_str()) != 0) {
      touchevent_history = x;
      return x;
      // touchevent_history = "";
      } else {
      return {};
      }
      on_value:
      then:
      • lambda: |-
        id(page_timer)->execute(int(id(page_timeout).state));
START - SWITCH CONFIGURATION

switch:

##### Restart switch

- platform: restart

name: ${device_name} Restart

##### Restart in safe-mode

- platform: safe_mode

name: ${device_name} Restart (Safe Mode)

global variable to keep track on whether the Nextion display is ready or not. Delays initial info from HA to the display
  • platform: template
    name: ${device_name} Nextion inited
    id: nextion_init
    entity_category: config
    restore_state: false
    assumed_state: off
    optimistic: true
Notification unread
  • platform: template
    name: ${device_name} Notification unread
    id: notification_unread
    entity_category: config
    restore_state: true
    optimistic: true
Notification sound
  • platform: template
    name: ${device_name} Notification sound
    id: notification_sound
    entity_category: config
    restore_state: true
    optimistic: true
Confirmation Message
  • platform: template
    name: ${device_name} Confirmation Message
    id: confirmation_message
    entity_category: config
    restore_state: false
    optimistic: true
PHYSICAL SWITCH 1
  • platform: gpio
    name: ${device_name} Relay 1
    id: relay_1
    pin:
    number: 22
PHYSICAL SWITCH 2
  • platform: gpio
    name: ${device_name} Relay 2
    id: relay_2
    pin:
    number: 19
DISPLAY ALWAYS ON
  • platform: gpio
    name: ${device_name} Screen Power
    id: screen_power
    entity_category: config
    pin:
    number: 4
    inverted: true
    restore_mode: ALWAYS_ON
    internal: true
Switch Display Sleep Modus
  • platform: template
    device_class: switch
    name: ${device_name} Sleep Modus
    id: sleep_modus
    entity_category: config
    restore_state: true
    assumed_state: false
    optimistic: true
    on_turn_off:
    • lambda: id(disp1).send_command_printf("home.sleepmodus.val=0");
    • globals.set:
      id: sleep_modus_global
      value: '0'
    • lambda: id(disp1).set_component_value("settings.bt1",0);
      on_turn_on:
    • lambda: id(disp1).send_command_printf("home.sleepmodus.val=1");
    • globals.set:
      id: sleep_modus_global
      value: '1'
    • lambda: id(disp1).set_component_value("settings.bt1",1);
Relay Local control Fallback
  • platform: template
    name: ${device_name} Relay 1 Local Fallback
    id: relay1_fallback
    entity_category: config
    restore_state: true
    optimistic: true

  • platform: template
    name: ${device_name} Relay 2 Local Fallback
    id: relay2_fallback
    entity_category: config
    restore_state: true
    optimistic: true

START - NUMBER CONFIGURATION

number:

SCREEN BRIGHTNESS
  • platform: template
    name: ${device_name} Display Brightness
    id: display_brightness
    entity_category: config
    unit_of_measurement: '%'
    min_value: 1
    max_value: 100
    step: 1
    restore_value: true
    optimistic: true
    set_action:
    then:
    - lambda: 'id(disp1).set_backlight_brightness(x/100);'
    - lambda: 'id(disp1).send_command_printf("home.brightness.val=%i", int(x));'
    - globals.set:
    id: display_brightness_global
    value: !lambda 'return int(x);'
SCREEN BRIGHTNESS DIMMED DOWN
  • platform: template
    name: ${device_name} Display Brightness Dimdown
    id: display_dim_brightness
    entity_category: config
    unit_of_measurement: '%'
    min_value: 1
    max_value: 100
    step: 1
    restore_value: true
    optimistic: true
    set_action:
    then:
    - lambda: 'id(disp1).send_command_printf("home.brightdd.val=%i", int(x));'
    - globals.set:
    id: display_dim_brightness_global
    value: !lambda 'return int(x);'
Temperature Correction
  • platform: template
    name: ${device_name} Temperature Correction
    id: temperature_correction
    entity_category: config
    unit_of_measurement: '°C'
    min_value: -10
    max_value: 10
    step: 0.5
    restore_value: true
    optimistic: true
    set_action:
    then:
    - globals.set:
    id: temperature_correction_global
    value: !lambda 'return x;'
page-timeout
  • platform: template
    name: ${device_name} Page Timeout
    id: page_timeout
    entity_category: config
    min_value: 0
    max_value: 60
    initial_value: 10
    step: 1
    restore_value: true
    optimistic: true
START - DISPLAY START CONFIGURATION

display:

  • platform: nextion
    id: disp1
    uart_id: tf_uart
    tft_url: ${nextion_update_url}
    on_setup:
    then:
    - lambda: id(disp1).send_command_printf("page 8");
    - lambda: id(disp1).set_component_text_printf("boot.esph_version", "%s", "3.2.2"); ### esphome-version ###
    - wait_until:
    api.connected
    - lambda: id(disp1).set_component_text_printf("boot.ip_addr", "%s", id(ip_address).state.c_str());
    - delay: 1s
    - number.set:
    id: display_brightness
    value: !lambda 'return id(display_brightness_global);'
    - number.set:
    id: display_dim_brightness
    value: !lambda 'return id(display_dim_brightness_global);'
    - lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
    - lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
    - lambda: id(disp1).send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
    - lambda: id(disp1).send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
    - lambda: id(disp1).send_command_printf("home.sleepmodus.val=%i", id(sleep_modus_global));
    - lambda: id(disp1).set_component_value("settings.a02", id(sleep_modus_global) == 1);
    - delay: 1s
    - switch.template.publish:
    id: nextion_init
    state: on

Script for page_timer

script:

  • id: page_timer
    mode: restart
    parameters:
    delay: int
    then:
    • lambda: ESP_LOGD("nspanel", "start page-timer delay %i", int(id(page_timeout).state));
    • delay: !lambda return delay *1000;
    • lambda: |-
      if (id(disp1_currentpage).state == "home" or id(disp1_currentpage).state == "screensaver" or id(disp1_currentpage).state == "boot" or int(id(page_timeout).state) == 0) {
      ESP_LOGD("nspanel", "no page-jump");
      } else {
      ESP_LOGD("nspanel", "timer->home");
      id(disp1).send_command_printf("page 0");
      }

@edwardtfn
Copy link
Collaborator

If you go to Developer Tools > Services and then look for service ESPHome: nspanel01_upload_tft_url, add the url of nspanel_eu.tft and click "Call service", what happens? Any error message on Home Assistant? Anything happens in the device's screen? Anything on ESPHome logs?

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023

Then I get this error (in the logs of my panel):

`

15:28:14 [E] [uart:015] Reading from UART timed out at byte 0!
`

and then see the 'Model does not match' on my screen.

Here the full log:

[15:31:18][W][nextion:072]: Nextion is not connected! [15:31:19][D][nextion_upload:169]: Connected [15:31:19][D][nextion_upload:175]: Requesting URL: http://192.168.1.113:8123/local/nspanel_eu.tft [15:31:19][D][nextion_upload:209]: Updating Nextion ... [15:31:19][D][nextion_upload:235]: Waiting for upgrade response [15:31:19][E][uart:015]: Reading from UART timed out at byte 0! [15:31:19][E][uart:015]: Reading from UART timed out at byte 0! [15:31:19][E][uart:015]: Reading from UART timed out at byte 0! [15:31:19][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:20][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][E][uart:015]: Reading from UART timed out at byte 0! [15:31:21][D][nextion_upload:239]: Upgrade response is 19 [15:31:21][D][nextion_upload:242]: Available 0 : 0x00 [15:31:21][D][nextion_upload:242]: Available 1 : 0x00 [15:31:21][D][nextion_upload:242]: Available 2 : 0x00 [15:31:21][D][nextion_upload:242]: Available 3 : 0x00 [15:31:21][D][nextion_upload:242]: Available 4 : 0x00 [15:31:21][D][nextion_upload:242]: Available 5 : 0x00 [15:31:21][D][nextion_upload:242]: Available 6 : 0x00 [15:31:21][D][nextion_upload:242]: Available 7 : 0x00 [15:31:21][D][nextion_upload:242]: Available 8 : 0x00 [15:31:21][D][nextion_upload:242]: Available 9 : 0x00 [15:31:21][D][nextion_upload:242]: Available 10 : 0x00 [15:31:21][D][nextion_upload:242]: Available 11 : 0x00 [15:31:21][D][nextion_upload:242]: Available 12 : 0x00 [15:31:21][D][nextion_upload:242]: Available 13 : 0x00 [15:31:21][D][nextion_upload:242]: Available 14 : 0x00 [15:31:21][D][nextion_upload:242]: Available 15 : 0x00 [15:31:21][D][nextion_upload:242]: Available 16 : 0x00 [15:31:21][D][nextion_upload:242]: Available 17 : 0x00 [15:31:21][D][nextion_upload:242]: Available 18 : 0x00 [15:31:21][D][nextion_upload:248]: preparation for tft update failed 0 "" [15:31:21][D][nextion_upload:310]: Restarting Nextion [15:31:23][D][nextion_upload:313]: Restarting esphome

I have tried the flashing with an USB setup with the right TFT and also wireless upgrade. Also tried another www server to host the TFT file, but get exactly the same issue.

@edwardtfn
Copy link
Collaborator

This is weird. I wouldn't expect this error when the TFT blank is already installed. It looks like your panel is in reparse mode, but that should be the case when nspanel_blank.tft is installed.

I would suggest installing the beta version temporarily, so will be able to try different baud rates, but let's start with this:

substitutions:

###### CHANGE ME START ######

  device_name: "nspanel01" 
  wifi_ssid: !secret wifi_ssid
  wifi_password: !secret wifi_password

  nextion_update_url: "http://192.168.1.113:8123/local/nspanel_eu.tft"
  #nextion_update_url: "http://192.168.1.113:8123/local/nspanel_blank.tft"

##### CHANGE ME END #####

###### USE THIS ONLY FOR YOUR FIRST TFT UPLOAD, ONCE IT WORKED, REMOVE THESE LINES ######
external_components:
  - source: github://pr#2956
    components: [nextion]
    refresh: 1h
###############################################################################


##### DO NOT CHANGE ANYTHING! #####

packages:
  ##### download esphome code from Github
  remote_package:
    url: https://github.com/Blackymas/NSPanel_HA_Blueprint
    ref: beta
    files: [nspanel_esphome.yaml]
    refresh: 300s

##### DO NOT CHANGE ANYTHING! #####

And please let me know what you see when you try to update TFT.

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023

@edwardtfn exactly the same issue - output on the display is 'Model does not match' And still the blank screen after rebooting

@edwardtfn
Copy link
Collaborator

output on the display is 'Model does not match'

This looks like a corrupt TFT fille.

Which one have you used? nspanel_blank.tft or nspanel_eu.tft?

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023

nspanel_eu.tft hosted on HA, but also 2 other machine. When I download the files from Github I see this:

image

It is correct that the eu.tft version is smaller then the blank one?

@edwardtfn
Copy link
Collaborator

It is correct that the eu.tft version is smaller then the blank one?

Nope!
nspanel_blank.tft looks right size, but nspanel_eu.tft should be around 7Mb.

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023

@edwardtfn yes I see it. when I do 'save as' of the TFT file from Github the file is smaller. If I indeed do a full git clone I see that the file is 6MB. I will try the new file. Do you advise to use the beta version?

@edwardtfn
Copy link
Collaborator

nspanel_eu.tft from main is 6.19Mb:

https://github.com/Blackymas/NSPanel_HA_Blueprint/raw/main/nspanel_eu.tft

@edwardtfn
Copy link
Collaborator

Do you advise to use the beta version?

No. Try the MAIN first. On beta we fixed a lot of bugs, but you might find unknown new bugs, so main is probably a better choice to start, then you go beta later if you want.

@edwardtfn
Copy link
Collaborator

When you have successfully uplodade TFT, you should have your ESPHome file looking like this:


substitutions:

###### CHANGE ME START ######

  device_name: "nspanel01" 
  wifi_ssid: !secret wifi_ssid
  wifi_password: !secret wifi_password

  nextion_update_url: "http://192.168.1.113:8123/local/nspanel_eu.tft"
  #nextion_update_url: "http://192.168.1.113:8123/local/nspanel_blank.tft"

##### CHANGE ME END #####


##### DO NOT CHANGE ANYTHING! #####

packages:
  ##### download esphome code from Github
  remote_package:
    url: https://github.com/Blackymas/NSPanel_HA_Blueprint
    ref: main
    files: [nspanel_esphome.yaml]
    refresh: 300s

##### DO NOT CHANGE ANYTHING! #####

@edwardtfn
Copy link
Collaborator

when I do 'save as' of the TFT file from Github the file is smaller.

Try to click "Download" button instead:
https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/nspanel_eu.tft
IMG_6184

@haywiremk
Copy link

haywiremk commented Apr 16, 2023

I have the same issue. I followed the external_compents to update TFT and get the following. It seems this update removed all the variable mismatches initially on reboot. It runs up to 90% quickly and then hangs. Going to try the blank one with this ext comp setup

[10:49:02][D][button:013]: 'livingnsp Update TFT display' Pressed.
[10:49:02][D][nextion_upload:169]: Connected
[10:49:02][D][nextion_upload:175]: Requesting URL: https://raw.githubusercontent.com/Blackymas/NSPanel_HA_Blueprint/main/nspanel_us.tft
[10:49:03][D][nextion_upload:209]: Updating Nextion NX4832F035_011C...
[10:49:03][D][nextion_upload:235]: Waiting for upgrade response
[10:49:03][E][uart:015]: Reading from UART timed out at byte 0!
[10:49:03][E][uart:015]: Reading from UART timed out at byte 0!
[10:49:03][E][uart:015]: Reading from UART timed out at byte 0!
[10:49:03][D][nextion_upload:239]: Upgrade response is 4
[10:49:03][D][nextion_upload:242]: Available 0 : 0x00
[10:49:03][D][nextion_upload:242]: Available 1 : 0x00
[10:49:03][D][nextion_upload:242]: Available 2 : 0x00
[10:49:03][D][nextion_upload:242]: Available 3 : 0x05
[10:49:03][D][nextion_upload:246]: preparation for tft update done
[10:49:03][D][nextion_upload:283]: Allocating buffer size 65536, Heap size is 98732
[10:49:03][D][nextion_upload:287]: Could not allocate buffer size: 65536 trying 4096 instead
[10:49:03][D][nextion_upload:289]: Allocating 4096 buffer
[10:49:03][D][nextion_upload:305]: Updating tft from "https://raw.githubusercontent.com/Blackymas/NSPanel_HA_Blueprint/main/nspanel_us.tft" with a file size of 8065492 using 4096 chunksize, Heap Size 83380
[10:49:03][D][nextion_upload:044]: Requesting range: bytes=0-4095
[10:49:04][E][uart:015]: Reading from UART timed out at byte 0!
[10:49:04][E][uart:015]: Reading from UART timed out at byte 0!
[10:49:05][E][uart:015]: Reading from UART timed out at byte 0!

@edwardtfn
Copy link
Collaborator

Uploading the file directly from GitHub increases a lot the chances for something in the network to fail, making the whole process too fragile, given the long time it takes.

I would highly suggest to host the TFT files locally and use that local url instead.
By the way, since you already have seen the TFT download screen once, that means you don't that old library (external component) anymore. You can safely remove that.
And.you don't have to compile EAPHome again, just go to Developer Tools > Services, look for the service ESPHome: nspanel01_upload_tft_url ad the url for the TFT you want to upload and click `Call service'. It should work.

@haywiremk
Copy link

haywiremk commented Apr 16, 2023

I get the following when trying to do a remote pull of the blank tft. I generally do a local load of the TFT files but was trying remote to see if the local file had any issues.

[10:57:21][D][button:013]: 'livingnsp Update TFT display' Pressed.
[10:57:21][D][nextion_upload:169]: Connected
[10:57:21][D][nextion_upload:175]: Requesting URL: https://github.com/Blackymas/NSPanel_HA_Blueprint/raw/main/custom_configuration/nspanel_blank.tft
[10:57:23][W][nextion_upload:186]: HTTP Request failed; URL: https://github.com/Blackymas/NSPanel_HA_Blueprint/raw/main/custom_configuration/nspanel_blank.tft; Error: , retrying (1/5)
[10:57:24][W][nextion_upload:186]: HTTP Request failed; URL:

I did a local download and was able to load this blank file. Once loaded switched back to the nspanel_us.tft and it loaded from 0% to done successfully. Maybe this is something to do with the CRC checking to skip the first 90% (had 3.2.0 previously) as the external_compents did not help until I flashed the blank file from a local HA file. Also do still see time outs when loading but they go away. Maybe just timing for UART setup. There seems to be a few posts on this nextion issue. As I mentioned in another before finding this one I have 3 units. 1 loaded tft just fine. Second timed out with Panel Mismatch and a power cycle and tft load second time fixed. Third went from 90->93 and hung for and hour then a power cycle showed System Data ERROR! A tft update afterwards would speed to 90% and then hang with the UART timed out error. This was the one I loaded the blank tft on and then could load the us tft file again successfully all using local files.

Below is log from the blank file load.

[11:04:10][D][button:013]: 'livingnsp Update TFT display' Pressed.
[11:04:10][D][nextion_upload:169]: Connected
[11:04:10][D][nextion_upload:175]: Requesting URL: https://.duckdns.org:8123/local/nspanel_blank.tft
[11:04:11][D][nextion_upload:209]: Updating Nextion NX4832F035_011C...
[11:04:12][D][nextion_upload:235]: Waiting for upgrade response
[11:04:12][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:12][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:12][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:12][D][nextion_upload:239]: Upgrade response is 4
[11:04:12][D][nextion_upload:242]: Available 0 : 0x00
[11:04:12][D][nextion_upload:242]: Available 1 : 0x00
[11:04:12][D][nextion_upload:242]: Available 2 : 0x00
[11:04:12][D][nextion_upload:242]: Available 3 : 0x05
[11:04:12][D][nextion_upload:246]: preparation for tft update done
[11:04:12][D][nextion_upload:283]: Allocating buffer size 65536, Heap size is 99656
[11:04:12][D][nextion_upload:287]: Could not allocate buffer size: 65536 trying 4096 instead
[11:04:12][D][nextion_upload:289]: Allocating 4096 buffer
[11:04:12][D][nextion_upload:305]: Updating tft from "https://.duckdns.org:8123/local/nspanel_blank.tft" with a file size of 263492 using 4096 chunksize, Heap Size 107980
[11:04:12][D][nextion_upload:044]: Requesting range: bytes=0-4095
[11:04:13][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:13][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:13][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:14][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][E][uart:015]: Reading from UART timed out at byte 0!
[11:04:15][D][nextion_upload:316]: Heap Size 111844, Bytes left 259396
[11:04:15][D][nextion_upload:044]: Requesting range: bytes=4096-8191
[11:04:16][D][nextion_upload:316]: Heap Size 113424, Bytes left 255300

@edwardtfn
Copy link
Collaborator

edwardtfn commented Apr 16, 2023

Are you all good now? With final TFT and panel working properly?

@rploeg
Copy link
Author

rploeg commented Apr 16, 2023 via email

@edwardtfn
Copy link
Collaborator

Great! Thanks for sharing.

@pitoganzado
Copy link

Yes! Sent from Outlook for Androidhttps://aka.ms/AAb9ysg

________________________________ From: Edward Firmo @.> Sent: Sunday, April 16, 2023 8:41:36 PM To: Blackymas/NSPanel_HA_Blueprint @.> Cc: Remco Ploeg @.>; Author @.> Subject: Re: [Blackymas/NSPanel_HA_Blueprint] Problems updating - blank tft good, but rest not (Issue #680) Are you all good now? With fi Al TFT and pa El working properly? — Reply to this email directly, view it on GitHub<#680 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AL3SSDLR56Q477A3JFNAEPLXBQ4OBANCNFSM6AAAAAAW7J26BA. You are receiving this because you authored the thread.Message ID: @.***>

hi @rploeg how are you? how do you fix the "Nextion reported variable name invalid!" message?

@edwardtfn
Copy link
Collaborator

how do you fix the "Nextion reported variable name invalid!" message?

This message can be related to an incorrect TFT file installed or a know bug that is already fixed on dev. If you have your device working properly, don't worry about this message.

@pitoganzado
Copy link

how do you fix the "Nextion reported variable name invalid!" message?

This message can be related to an incorrect TFT file installed or a know bug that is already fixed on dev. If you have your device working properly, don't worry about this message.

Yes, the device is working without issues :)
I already install the "https://github.com/Blackymas/NSPanel_HA_Blueprint/raw/dev/nspanel_eu.tft" but I'm getting the same message.

@edwardtfn edwardtfn linked a pull request Apr 25, 2023 that will close this issue
@rploeg
Copy link
Author

rploeg commented May 1, 2023

Yes! Sent from Outlook for Androidhttps://aka.ms/AAb9ysg

________________________________ From: Edward Firmo @.> Sent: Sunday, April 16, 2023 8:41:36 PM To: Blackymas/NSPanel_HA_Blueprint _@**._> Cc: Remco Ploeg _@.>; Author @._> Subject: Re: [Blackymas/NSPanel_HA_Blueprint] Problems updating - blank tft good, but rest not (Issue #680) Are you all good now? With fi Al TFT and pa El working properly? — Reply to this email directly, view it on GitHub<#680 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AL3SSDLR56Q477A3JFNAEPLXBQ4OBANCNFSM6AAAAAAW7J26BA. You are receiving this because you authored the thread.Message ID: _@_.*>

hi @rploeg how are you? how do you fix the "Nextion reported variable name invalid!" message?

my problem was that I used a 'save as' in GitHub on the EU TFT file (and did not downloaded the full repo). This became a smaller version of the original file. Downloading the whole repo and use the TFT file from their did the trick for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants