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
elrogalo (Dienstag, 01 November 2022 18:07)
Hi Ingo,
zu der letzten Funktion mit dem Switch - der Service-Call switch.toggle von HA funktioniert einwandfrei, wenn man bei den beiden Events (Press und Release) das Häkchen bei "Send Component ID" setzt.
mfG
Marcin