Nextion Display

Pfingsten 2021 steht immer noch im Zeichen des Lockdown und das Wetter ist auch beschissen, also hatte ich mal Zeit für ein Projekt wo ich schon länger dran bin. Nämlich die Einbindung von Nextion Touch Displays. diese tollen Displays haben den großen Vorteil, eine eigene Entwicklungsumgebung und eine eigene Firmware zu haben. Das mühsame Programmieren entfällt daher.

Diese tollen Displays gibt es in verschiedenen Größen (und damit auch Preisen). Ich hab mich für die 2,4" Variante entschieden und diese bei Ali Express für gut 20 Euro hier geschossen.

 

Um Das Ding zu programmieren benötigt ihr den kostenlosen Editor, den ihr Euch hier runterladen könnt.

wie der Editor im Detail funktioniert ist in dieses Youtube Tutorial toll erklärt.

Hier meine Kurzfassung. Ihr könnt Schaltflächen und Anzeigelelemente definieren. Diese werden über die Komponent ID in ESP Home an-gesprochen. Die Doku für das Diplay in ESPHome findet ihr hier, die Doku für die Schaltflächen sind hier.

Es gibt aber noch ein paar Feinheiten, zu denen ich später komme. Man kann irgendwie online das Display mit Eurer Firmware betanken, ich nutze aber immer den Weg, die Firmware auf eine CF Karte zu speichern. Display vom Strom nehmen, karte rein und er datet sich automatisch ab.

Da ich ja nicht einfach die Doku nachplappern möchte hier nun meine Erfahrungswerte.

 

Display Auto off

 

Zuerst hat es mich gestört, dass das Display immer an war. Dies kann man aber abstellen. Erst "on Touch" wacht das Display auf.

Dazu muss folgendes in die Startroutine geschrieben werden:

 

Mehrere Seiten im Display

 

Natürlich kann man auch mehrere Seiten anlegen. Aber wie navigiert man ? Ganz einfach, man referenziert auf den Seiten Namen.


Werte von HA anzeigen lassen 

 

Um "fremde" Werte auf dem Display angezeigt werden können, muss sich der Wert erstmal auf den ESP "reingeholt" werden..

Hier als Beispiel der Wasserstand der Zisterne, der von einem anderen ESP an Home Assistant gemeldet wird:

 


 # ------HA Werte ---------------------------
  
  - platform: homeassistant
    id: level_zisterne
    entity_id: sensor.tank_level  

  #  ---- NEXTION Display -------------------    
    
display:
  - platform: nextion
    id: dim_level
    lambda: |-
        it.set_wait_for_ack(false);    
        auto time_text = id(homeassistant_time).now().strftime("%H:%M");
        it.set_component_text("time", time_text.c_str());
        it.set_component_text_printf("temp","%.1f C",id(temp_garten).state);
        it.set_component_value("tlevel",id(level_zisterne).state);
        it.set_component_text_printf("dlevel","%.0f %%",id(level_zisterne).state);

Im unteren Teil seht ihr, wie der Text (hier das Beispiel dlevel )an das Display übergeben wird:

 

 

Das Problem mit den Dual State Button

 

Man möchte mit den Touch Knöppen natürlich Dinge ein und ausschalten. Dich das gestaltete sich doch nicht so einfach wie ich dachte.

Der Klassische Weg ist über die Komponent ID, (Send Komponent ID on Press) also :

 


  - platform: nextion
    name: nextion_licht_holz
    page_id: 2
    component_id: 2
    id: licht_holz
    filters:
      - delayed_on: 30ms
      - delayed_off: 30ms      

 (hab mit den delayed die Tasten entprellt) aber leider klappt das klassische "on Press" und toggle.switch nicht. Ich habe lange gestestet und gegooglet. Mein Licht ging immer an, aber nie aus. Dies Lösung brachte erst ein Eintrag ganz tief in den Developer Forum von ESP Home und zwar hier

Man muss die Werte, die das Display an ESPHome sendet überschreiben :

65 = Touch Event
00 = Page No.
0B = ID 11
01 = Press or 00=Release

 

In meinem Fall sieht das für Button bt0, Page 2, ID 2 so aus:

Und siehe da, dann klappt es. Der ganze kram dann in die automations.yaml von HA:

 


# nextion Button Licht Holzlager

#an
  - alias: Display Licht holz an
    trigger:
       platform: state
       entity_id: binary_sensor.nextion_licht_holz
       to: 'on'
    action:  
       service: switch.turn_on
       entity_id: switch.hausschen_seite

#aus
  - alias: Display Licht holz aus
    trigger:
       platform: state
       entity_id: binary_sensor.nextion_licht_holz
       to: 'off'
    action:  
       service: switch.turn_off
       entity_id: switch.hausschen_seite           
Kommentare: 0