Nextion - günstiges Touch-Display an FHEM (auch remote)

Begonnen von viegener, 24 März 2016, 00:06:06

Vorheriges Thema - Nächstes Thema

Pf@nne

Zitat von: kvo1 am 12 April 2016, 23:19:14
Wie hast DU die Anbindung des Display an den ESP gelöst ? level shifter oder so wie Johannes (BSN10A etc).
(bin immer noch unterschlossen und auf der Suche nach DER Lösung für mich).

Moin,

ich habe ein wenig gemogelt.... :-)
Vor den RxD des ESP habe ich zwei Dioden in Reihe geschaltet.... 5V - 1,5V = 3,5V.
Das sollte der ESP überleben. Das Display kommt mit den 3V3 scheinbar gut klar,
ob das den GPIO überlastet habe ich noch nicht gemessen.

Aus Platzgründen würde ich wahrscheinlich auch die Spannungsteiler- / Transistor-Variante nehmen.
Ein MAX ist vielleicht nicht notwendig.

Es gibt auch diverse Berichte über direkten Anschluss, wie langzeitstabil dass ist bleibt aber fragwürdig....


Gruß
Pf@nne
FHEM auf: DS415+ (Master), Raspberry Pi 2

bloodybeginner

Hi,

mal aus der gestrigen Instructables email eine Idee für eine augen(ge)fällige Aufstellvariante eines solchen Displays:
http://www.instructables.com/id/Acrylic-Sheet-RGB-Glowing-Weather-Station-With-Ind/

//bb

viegener

Zitat von: ext23 am 13 April 2016, 09:56:08
Hast du das mal nachgemessen? Würde mich jetzt wundern.

/Daniel

Ja ich habe eigentlich einen 10k und 15k Widerstand genommen, damit ich auf 3V komme. Habe das auch oben im Text geändert.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

ext23

10k und 15k, wenn da zu viel fließt, heb die an... Aber darum geht es ja eigentlich nicht oder? Das ist ja die 5V zu 3,3V Richtung, das passt so. Du meintest doch wenn du mit dem 3,3V des ESP das Display steuern möchtest, was ja 5V erwartet, fließt da zu viel Strom. Oder habe ich da was falsch verstanden?

Aber ich kann mir nicht vorstellen, dass aus dem ESP zu viel Strom gezogen wird wenn du die Eingänge des Displays mit 3,3V anstelle von 5V ansteuerst. Es kann sein, dass eventuell Querströme fließen aber dann nur innerhalb des LCD, nicht aus dem ESP. Also irgendwie verstehe ich nicht was du da meinst ;-) Das LCD schaltet bei 3,3V jedenfalls sauber durch.

Nichts desto trotz ist ein anständiger levelshifter natürlich die bessere Art, das steht ja außer Frage.

Ich hab mein 5er jetzt auch bekommen, schon nicht schlecht! Nur mit der Software muss man sich ein bissel rein arbeiten. Ich habe auch das Gefühl, dass die Demo auf meinem Display nicht mit der Demo die man runterladen kann 1:1 übereinstimmt.

Gruß
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

viegener

Zitat von: ext23 am 14 April 2016, 08:08:26
10k und 15k, wenn da zu viel fließt, heb die an... Aber darum geht es ja eigentlich nicht oder? Das ist ja die 5V zu 3,3V Richtung, das passt so. Du meintest doch wenn du mit dem 3,3V des ESP das Display steuern möchtest, was ja 5V erwartet, fließt da zu viel Strom. Oder habe ich da was falsch verstanden?

Aber ich kann mir nicht vorstellen, dass aus dem ESP zu viel Strom gezogen wird wenn du die Eingänge des Displays mit 3,3V anstelle von 5V ansteuerst. Es kann sein, dass eventuell Querströme fließen aber dann nur innerhalb des LCD, nicht aus dem ESP. Also irgendwie verstehe ich nicht was du da meinst ;-) Das LCD schaltet bei 3,3V jedenfalls sauber durch.

Nichts desto trotz ist ein anständiger levelshifter natürlich die bessere Art, das steht ja außer Frage.

Ich hab mein 5er jetzt auch bekommen, schon nicht schlecht! Nur mit der Software muss man sich ein bissel rein arbeiten. Ich habe auch das Gefühl, dass die Demo auf meinem Display nicht mit der Demo die man runterladen kann 1:1 übereinstimmt.

Gruß
Daniel

Ja der Spannungsteiler ist für die "Richtung" Display TX --> ESP-RX, da der ESP ja nicht 5V tolerant ist.

Der Mosfet wurde notwendig, da der ESP nicht sauber gestartet ist wenn der Anschluss ESP-TX -> Display RX angeschlossen war. Also wenn eine direkte Verbindung beim Start des ESP-8266 geschaltet war startete der ESP nicht mehr. Wenn man die Verbindung kurzzeitig unterbrochen hat und dann den ESP (neu) gestartethat konnte die Verbindung auch direkt gehen. Das kurzzeitige TRennen ist aber keine Lösung für die Schaltung, deshalb habe ich ohne den Stromfluss zu analysieren, die Lösung mit dem Mosfet eingebaut und damit läuft und startet es stabil.
(Ob Stromfluss oder anliegendes Signal vom Display oder etwas anderes kann ich nicht sagen, es trat aber mit verschiedenen ESP-01 auf)

Ich habe das auch nicht weiter ausprobiert, da ich nicht riskieren wollte, dass dann im Betrieb irgendwann ein Problem auftritt. Der Pegelwandler ist hier auf jeden Fall die saubere Lösung


Ja die Software ist noch etwas ungeschliffen. Ich habe auch relativ viele Experimente gebraucht bis ich akzeptable Ergebnisse hatte.

Ein paar Tipps:
- Die Debug-Umgebung ist extrem hilfreich, denn hier kann man die Kommandos direkt eintippen und ausprobieren was passiert und zurückkommt
- Send me auf Seiten benutzen, damit FHEM erkennen kann das die Seite angesteuert wurde (und man mit Werten aktualisieren kann)
- Bei komplexen Seiten habe ich noch ein "Please Wait" picture über das UI gelegt, dass dann mit dem letzten Kommando der Initialisierung unsichtbar gemacht wird
- Man sollte sich einen Satz Icons (ohne Transparenz in einer einheitlichen Auflösung/Grösse) zurechtlegen, damit man einheitliche UIs bauen kann
- Ich habe entsprechende Ausgaben bei Buttons etc ins UI eingebaut, damit ich leicht in FHEM auf das Drücken reagieren kann

Bei Fragen kann ich gerne auch helfen
Für Anregungen bin ich natürlich ebenfalls dankbar.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Ich wollte ja immer ein Beispiel aufbauen, damit man etwas hat womit man anfangen kann. Dazu habe ich jetzt mal meinen aktuellen Stand etwas ausgedünnt.

Das Beispiel besteht aus mehreren Teilen:


  • Der Nextion-Displayteil zum Hochladen ins Display Example.hmi (für ein 2.4 Zoll Display)
  • Die initPage-Attribute für das nextion-Device in FHEM
  • Eine Routine zum Umsetzen des (Yahoo-)Wetterstatus in ein Wettericon auf dem FHEM-Display (für myUtils)

Lasst mich wissen ob das so funktioniert oder noch zu komplex für ein Beispiel ist?
Johannes



initPage1

p0.pic={(MapWeatherToNextionIcon(ReadingsVal("wetter","fc1_code",100)))};
t0.txt="[wetter:fc1_date]\rTemp [wetter:fc1_low_c]-[wetter:fc1_high_c]";
p1.pic={(MapWeatherToNextionIcon(ReadingsVal("wetter","fc2_code",100)))};
t1.txt="Morgen\rTemp [wetter:fc2_low_c]-[wetter:fc2_high_c]";
text.txt="Aktuell [wetter:state]\r  [wetter:condition] am [wetter:day_of_week]";
door.val={(return ( ( ReadingsVal("terassentuer","state","off") eq "on" )?1:0)  )};
lock.val={(return ( ( ReadingsVal("tuer","state","unlocked") =~ /^locked.*/ )?1:0)  )};
wind.val={(return ( ( ReadingsVal("fenster","state","open") eq "open" )?1:0)  )};
vis poverlay,0


initPage4

door.val={(return ( ( ReadingsVal("terassentuer","state","off") eq "on" )?1:0)  )};
lock.val={(return ( ( ReadingsVal("tuer","state","unlocked") =~ /^locked.*/ )?1:0)  )};
wind.val={(return ( ( ReadingsVal("fenster","state","open") eq "open" )?1:0)  )};
text.txt="Mehr Details";
warn.txt="Eine Warnung ...";


initPage6

door.val={(return ( ( ReadingsVal("terassentuer","state","off") eq "on" )?1:0)  )};
lock.val={(return ( ( ReadingsVal("tuer","state","unlocked") =~ /^locked.*/ )?1:0)  )};
wind.val={(return ( ( ReadingsVal("fenster","state","open") eq "open" )?1:0)  )};




Die Routine für myUtils


sub MapWeatherToNextionIcon($)
{
  my ( $val ) = @_;
 
#00, 20, 'storm'
#01, 20, 'storm'
#02, 20, 'storm'
#03, 21, 'thunderstorm'
#04, 21, 'thunderstorm'
#05, 22, 'rainsnow'
#06, 23, 'sleet'
#07, 24, 'snow'
#08, 25, 'drizzle'
#09, 25, 'drizzle'
  return 20 if ( $val == 0 );
  return 20 if ( $val == 1 );
  return 20 if ( $val == 2 );
  return 21 if ( $val == 3 );
  return 21 if ( $val == 4 );
  return 22 if ( $val == 5 );
  return 23 if ( $val == 6 );
  return 24 if ( $val == 7 );
  return 25 if ( $val == 8 );
  return 25 if ( $val == 9 );

#10, 26, 'icy'
#11, 27, 'chance_of_rain',
#12, 27, 'chance_of_rain'
#13, 28, 'snowflurries'
#14, 29, 'chance_of_snow'
#15, 30, 'heavysnow'
#16, 24, 'snow'
#17, 25, 'sleet'
#18, 25, 'sleet'
#19, 31, 'dust'
  return 26 if ( $val == 10 );
  return 27 if ( $val == 11 );
  return 27 if ( $val == 12 );
  return 28 if ( $val == 13 );
  return 29 if ( $val == 14 );
  return 30 if ( $val == 15 );
  return 24 if ( $val == 16 );
  return 25 if ( $val == 17 );
  return 25 if ( $val == 18 );
  return 31 if ( $val == 19 );

#20, 32, 'fog'
#21, 33, 'haze'
#22, 34, 'smoke'
#23. 35, 'flurries'
#24, 36, 'windy'
#25, 26, 'icy'
#26, 37, 'cloudy'
#27, 38, 'mostlycloudy_night'
#28, 39, 'mostlycloudy'
#29, 40, 'partly_cloudy_night'
  return 32 if ( $val == 20 );
  return 33 if ( $val == 21 );
  return 34 if ( $val == 22 );
  return 35 if ( $val == 23 );
  return 36 if ( $val == 24 );
  return 26 if ( $val == 25 );
  return 37 if ( $val == 26 );
  return 38 if ( $val == 27 );
  return 39 if ( $val == 28 );
  return 40 if ( $val == 29 );


#30, 41, 'partly_cloudy'
#31, 42, 'sunny'
#32, 42, 'sunny'
#33, 43, 'mostly_clear_night'
#34, 44, 'mostly_sunny'
#35, 45, 'heavyrain'
#36, 43, 'sunny'
#37, 46, 'scatteredthunderstorms'
#38, 46, 'scatteredthunderstorms'
#39, 46, 'scatteredthunderstorms'
  return 41 if ( $val == 30 );
  return 42 if ( $val == 31 );
  return 42 if ( $val == 32 );
  return 43 if ( $val == 33 );
  return 44 if ( $val == 34 );
  return 45 if ( $val == 35 );
  return 43 if ( $val == 36 );
  return 46 if ( $val == 37 );
  return 46 if ( $val == 38 );
  return 46 if ( $val == 39 );


#40, 47, 'scatteredshowers'
#41, 30, 'heavysnow'
#42, 29, 'chance_of_snow'
#43, 30, 'heavysnow'
#44, 41, 'partly_cloudy'
#45, 45, 'heavyrain'
#46, 29, 'chance_of_snow'
#47, 47, 'scatteredshowers'
  return 47 if ( $val == 40 );
  return 30 if ( $val == 41 );
  return 29 if ( $val == 42 );
  return 30 if ( $val == 43 );
  return 41 if ( $val == 44 );
  return 45 if ( $val == 45 );
  return 29 if ( $val == 46 );
  return 47 if ( $val == 47 );

return 48;
}

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

kvo1

#51
Hallo Johannes,
Wow, danke das Du das hier so ausführlich beschreibst.
Leider warte ich immer noch auf meine Level Shifter .....

Aber das Example.hmi könnte ich ja mal spasseshalber ins Display laden  ;)


//EDIT//
wobei ich zugegeben bei Punkt 2 (Die initPage-Attribute für das nextion-Device in FHEM) ein Verständnisproblem habe ? , sorry  :-[
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

kvo1

ZitatAber das Example.hmi könnte ich ja mal spasseshalber ins Display laden  ;)
scheint wohl doch nicht so einfach zu gehen, oder ich habe das falsch verstanden.

Hatte, so meine ich, gelesen, dass man das HMI - File einfach auf eine SD-Karte (FAT32) laden kann , karte rein, display starten und das wir dann von da geladen ? Hmmmmm?
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Pf@nne

Moin,

hat jemand Interesse ein 2,4" gegen ein 2,8" zu tauschen.
Ich würde mir gerne das kleinere bezüglich Größe mal anschauen.

Die Versandkosten würde ich übernehmen.

Zum Testen habe ich ein Display mal ohne Levelshifter an meinen ESP12e angeschlossen.
Funktioniert zum Testen auch erstmal.
Muss natürlich nicht mit jedem ESP funktionieren und ob der ESP davon keinen Langzeitschaden bekommt oder gleich kapput geht, kann ich natürlich auch nicht sagen. Wer aber keinen Lvl - shifter zur Hand hat und einen ESP zum Opfern über hat, der kann es natürlich mal probieren.

Gruß
Pf@nne
FHEM auf: DS415+ (Master), Raspberry Pi 2

kvo1

Zitathat jemand Interesse ein 2,4" gegen ein 2,8" zu tauschen.
Ich würde mir gerne das kleinere bezüglich Größe mal anschauen.

Habe leider (bisher) nur ein 2,4"  !

RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

ext23

Moin,

hat sich schon jemand mit dem Nextion Editor näher beschäftigt? Ist ja ein ganz schönes gefummel. Ich wollte gerade oben schöne Buttons machen "Status", "Licht", "Multimedia". Wenn ich den anklicke ändert sich das Bild und die entsprechende Seite wird geladen. ich habe es mit Pic gemacht da man beim Button nicht das Bild ändern kann und ich möchte das man den aktiven Screen erkennt.

Da bin ich über vscope gestolpert, ich dachte wenn ich den auf global setze sehe ich die pics überall, auf allen screens, aber das ist nicht so. Jetzt habe ich die manuell kopiert aber irgendwie haut das nicht hin. Alles etwas komisch. Ich hab im Anhang mal mein Beispiel. Vielleicht kennt ja einer den Trick.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

viegener

Zitat von: ext23 am 19 April 2016, 16:03:53
Moin,

hat sich schon jemand mit dem Nextion Editor näher beschäftigt? Ist ja ein ganz schönes gefummel. Ich wollte gerade oben schöne Buttons machen "Status", "Licht", "Multimedia". Wenn ich den anklicke ändert sich das Bild und die entsprechende Seite wird geladen. ich habe es mit Pic gemacht da man beim Button nicht das Bild ändern kann und ich möchte das man den aktiven Screen erkennt.

Da bin ich über vscope gestolpert, ich dachte wenn ich den auf global setze sehe ich die pics überall, auf allen screens, aber das ist nicht so. Jetzt habe ich die manuell kopiert aber irgendwie haut das nicht hin. Alles etwas komisch. Ich hab im Anhang mal mein Beispiel. Vielleicht kennt ja einer den Trick.

/Daniel

Habe jetzt gerade keinen Zugriff auf mein Nextion-Umgebung:

Ich habe für Statusinfos dualbuttons verwendet (und darüber eine anclickbare Fläche gelegt, damit der Status nur aus FHEM geändert wird und nicht durch anclicken)
Mit globla gab es bei mir auch ein Problem, deshalb habe ich das momentan nicht im Einsatz

Für die Anzeige des aktiven Screens kan man am einfachsten ein festes Bild auf dem jeweiligen Screen anbringen, das heisst antürlich verschiedene Screens zu bauen.

Ich habe grundsätzlich eine Mischung aus Interaktion im Nextion-Display und Steuerung aus FHEM gemacht.
  Direkte Navigation zu Seiten geht einfacher in Nextion
  Status-Infos zu Deivces kann man nur aus FHEM holen/setzen

nicht sicher ob Dir das jetzt hilft?

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

ext23

Ich hab mich noch nicht mit der Schnittstelle nach außen beschäftigt, aber ich verstehe was du meinst. Das hat mir schon ein bissel geholfen ja. Nicht bei dem eigentlichen Problem aber dafür bei einem anderem ;-) Für mein "Menü" oben brauch ich FHEM nicht, aber für die anzeige der Buttons, das stimmt, macht Sinn wenn der erst geändert wird wenn FHEM das auch so meldet.

Danke.

Gruß
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

viegener

Ich habe mal die aktuelle Version in github und im ersten Post eingechecked.

Jetzt kann man Kommandos abhängig von der aktuellen Seite ausführen oder die Seite mit page setzen.
Ausserdem habe ich die (englische) command ref mal vervollständigt.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

rippi46

Hallo viegener,

ich habe mir auch ein Display (3,2") gekauft.
Leider bekomme ich dein Beispiel nicht so richtig zum laufen.
Habe dann einfach eine Seite mit dual-state-buttons angelegt.
Mit einem DOIF frage ich den Status ab. Eine Lampe kann ich auch schon damit schalten.
Leider habe ich das Problem, dass bei einem reopen oder wenn das Display auf Seite 1 wechselt die Lampe ein und ausgeschaltet wird.

Wie kann ich das verhindern?
Wie bekomme ich den aktuellen Status der Lampe im Display angezeigt?

Gruß rippi

FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa