ESP8266 WiFi Color Display mit FHEM verwenden

Begonnen von kingmathers, 27 November 2018, 17:44:29

Vorheriges Thema - Nächstes Thema

kingmathers

Hallo,

Ich habe das ESP8266 WiFi Color Display Kit von ThingPulse gekauft. Es besteht aus einem ESP8266 mit Wemos D1 Mini und einem 2.4″ ILI9341 Touchscreen. Es gibt dazu ein paar Beispielprojekte von Thingpulse (Wetterstation und Spotify Remote), ich wollte das ganze aber natürlich mit FHEM nutzen.

Ich habe mir den Quellcode von der Wetterstation angeschaut und das ganze etwas abgeändert, sodass es stattdessen Informationen vom FHEM Server anzeigen und Daten an FHEM senden kann. Dazu habe ich (basierten auf den Beispielprojekten von Thingpulse) eine FHEM-Anwendung erstellt.

Text und einfache Symbole kann man recht leicht anzeigen und auch auf Touch Events reagieren, entweder mit der Anzeige von einem anderen Bildschirm oder mit dem Senden von Befehlen an FHEM. Basic Auth und CSRF Token werden unterstützt, SSL und Zertifikate aktuell nicht.

Bei mir zeigt der Bildschirm Daten von meiner Solaranlage an und kann die Waschmaschine starten. Ein vereinfachtes, einfarbiges FHEM Logo für den Ladebildschirm habe ich ebenfalls integriert.

Den Code werde ich bei Interesse gerne bereitstellen, ein paar Anpassungen muss ich aber noch vornehmen.

Update: Code ist jetzt bei GitHub verfügbar: ESP8266 FHEM Display
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

PeMue

Hallo,

ist das das Display von locutus' Wetterstation? Cool wäre, abwechselnd das Wetter bzw. Daten von FHEM darstellen zu können. Und: ja, ich bin an Deinem Quellcode interessiert  :).

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

CarstenF

Finde es auch sehr spannend und melde auch mal Interesse an Deinem Projekt.


Gesendet von iPhone mit Tapatalk
Raspberry Pi4
CUL 868, CUL 433, LaCrosse Gateway, Zigbeetomqtt2, HUE, Homematic
Max-Cube umgeflasht
MAX!, FhemtoFhem, Homebridge, FhemConnector, IR_Gateway und sonst auch noch allerlei Spielzeug....

kingmathers

#3
Zitat von: PeMue am 27 November 2018, 19:13:17
Hallo,

ist das das Display von locutus' Wetterstation? Cool wäre, abwechselnd das Wetter bzw. Daten von FHEM darstellen zu können. Und: ja, ich bin an Deinem Quellcode interessiert  :).

Gruß Peter

Die Bauteile sind mit dieser Wetterstation quasi identisch.

Ich muss meinen Code noch ein bisschen aufräumen, danach werde ich ihn hochladen.
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

PeMue

RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

kingmathers

Zitat von: PeMue am 27 November 2018, 19:13:17
Cool wäre, abwechselnd das Wetter bzw. Daten von FHEM darstellen zu können.

Das sollte gut möglich sein. Die Wetterstation definiert 5 Bildschirme (screens), die nacheinander angezeigt werden. Meine FHEM screens basieren auf dem gleichen Prinzip und ersetzen die der Wetterstation. Prinzipiell kann man die FHEM screens natürlich auch im Anschluss an die Wetter screens (oder davor oder zwischendrin) anzeigen.

Man müsste dann nur anpassen, wie auf ein Touch Event reagiert wird. Die Wetterstation geht bei einem Touch Event zum nächsten Screen, der FHEM Hauptscreen reagiert nur wenn der "Start Button" gedrückt wird. Aber das ist natürlich jetzt nur so wie ich es angepasst habe, natürlich kann man das an seinen Bedarf anpassen.
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

kingmathers

Ein kleines Update: Ich habe die FHEM Funktionalität (Kommunikation mit dem Server) in eine eigene Arduino Library gepackt und auf Github gestellt. Sobald das ganze auch in der Arduino IDE über den Library Manager installiert werden kann, werde ich dafür nochmal einen eigenen Post erstellen. Im Moment ist es nur über Github verfügbar:

https://github.com/kingmathers313/FHEM_Arduino

Über folgenden Code kann die eingebundene Library dann in Arduino genutzt werden um mit einem FHEM Server über HTTP zu kommunizieren:


FHEM fhemclient("http://192.168.1.1:8083/fhem", "User", "Password");
String result = fhemclient.LoadFromServer("{SomeSub()}");


Vielleicht hat ja sonst noch irgendjemand Verwendung dafür.

Den Code für die Wetterstation mit Anzeige der Infos wie auf den Fotos zu sehen lade ich hoch sobald die Library bei Arduino verfügbar ist. Das sollte noch maixmal ein paar Tage dauern.

Grüße,
Philipp
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

kingmathers

#7
Den Code habe ich jetzt auf Github bereitgestellt. Voraussetzung ist unter anderem meine FHEM Library, welche in Arduino verfügbar ist.

Angepasst werden müssen in settings.h die WLAN Einstellungen (SSID und Password) sowie die FHEM Einstellungen (Server, ggfs. User und Password).

In der Datei ESP8266_FHEM_Display.ino sind die  Zeilen 281 und 282 anzupassen:
Status1 = fhemclient.LoadFromServer("{ESP8266GetResponse2()}");   //first 3 lines
Status2 = fhemclient.LoadFromServer("{ESP8266GetResponse()}");  //second 2 lines, with Start button


Bei ESP8266GetResponse() und ESP8266GetResponse2() handelt es sich um subs, die ich in 99_myUtils definiert habe. Theoretisch kann dort auch irgendetwas anderes eingesetzt werden (ReadingsVal/Value etc.), es sollte nur einen Rückgabewert liefert, welcher dann angezeigt wird.

In Zeile 357-359 kann der Text der 3 Buttons angepasst werden und in Zeilen 228, 234 und 240 kann der jeweils an FHEM zu sendende Befehl angepasst werden.

Den gesamten Code, der sich auf die Wetterstation bezieht (Kommunikation mit dem Wetterdienst, entsprechende Icons, Anzeige der verschiedenen Bildschirme etc.) habe ich komplett entfernt, da ich nur Daten aus FHEM anzeigen möchte. Ebenso habe ich die Farben verändert (es können nur 4 gleichzeitig verwendet werden) um das FHEM Logo in grün darstellen zu können. Die Datums/Uhrzeitanzeige habe ich ebenfalls für meine Wünsche angepasst (Zeitzone wird nicht angezeigt)

Daher würde ich folgende Vorgehensweise empfehlen:
1. Nur Daten aus FHEM: Mein Projet benutzen und entsprechend anpassen
2. Daten aus FHEM + Wetterstation: Wetterstation von ThingPulse benutzen (Github) und benötigten Code aus meinem Projekt rüberkopieren. Folgender Code aus meinem Projekt kann z.B. zum Anzeigen von Text verwendet werden:
void Draw(int16_t x, int16_t y, String text, const char *font, uint16_t color, TEXT_ALIGNMENT alignment)
{
gfx.setFont(font);
gfx.setColor(color);
gfx.setTextAlignment(alignment);
gfx.drawString(x, y, text);
}


Mit Hilfe meiner FHEM Library lässt sich der Text ja relativ einfach aus FHEM laden, sodass mit beiden zusammen das Anzeigen von Text aus FHEM recht überschaubar wird.

Über Feedback oder Beteiligung würde ich mich sehr freuen. Bei Fragen stehe ich ebenfalls gerne zur Verfügung, bin aber auch kein Arduino Experte und habe nur begrenzt Zeit. Wo und wann ich helfen kann, werde ich dies aber gerne tun!

Viel Spaß beim ausprobieren,
Philipp
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

Markus.

Klasse Sache... :-)

Kannst Du mal ein Beispiel deiner MyUtils Subs posten?

Gruß

Markus

kingmathers

#9

sub SomeSub
{
  my $response = Value("WaschmaschineDummy");
  $response = "Waschmaschine\nStatus: " . $response;
  return $response;
}


Beispielsweise so. Es ist halt wichtig, eine Variable zu definieren (my $response) und diese am Ende zurückzugeben (return $response). Zwischendrin kann alles mögliche hinzugefügt werden, z.B. mit ReadingsVal oder Value. Mit "\n" wird ein Zeilenumbruch realisiert. Wenn der STATE der Waschmaschine "fertig" ist kommt dabei also zurück:

Waschmaschine
Status: fertig


Alternativ dazu kann man auch direkt die einzelnen Werte abfragen und dann Text mit Arduino hinzufügen. Also im Projekt, Zeile 282 statt
Status2 = fhemclient.LoadFromServer("{ESP8266GetResponse()}");
kann man natürlich auch hier direkt mit Value etc. Werte aus FHEM abfragen:
Status2 = "Waschmaschine\nStatus: " + fhemclient.LoadFromServer("{Value(\"WaschmaschineDummy\")}");
Hier ist darauf zu achten, dass Anführungszeichen den Textanfang und -ende signalisieren. Daher muss, um Anfühungszeichen im Text selbst zu verwenden, vorher ein \ eingefügt werden (ecape character).

Beides liefert das gleiche Ergebnis, ich finde es jedoch einfacher, die Sachen in myUtils zu verändern als immer eine neue Software über Arduino auf den ESP zu spielen.

Ich hoffe, Du kommst damit ein bisschen weiter.

Grüße,
Philipp
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

Markus.

Ja vielen Dank :-)

Ich hab noch so ein Wemos Shield TFT Touch

https://wiki.wemos.cc/products:d1_mini_shields:tft_2.4_shield

Irgendwie bekomme ich damit den Sketch nicht ans laufen. Die Lötjumper auf der Rückseite sind alle offen.
Dieses Board hat MOSI / MISO Anschlüsse. Hast du da eine Idee wie man das ans laufen bekommt. Laut seriall Log macht er
die WLAN Verbindungaber zeigt auf dem Display nichts an. Kann es sein, das ich die FHEM Readings erst richtig eintagen muss im Sketch?

Gruß

Markus

kingmathers

Kannst du denn irgendeinen Text (der nicht von FHEM kommt) auf dem Bildschirm anzeigen oder kannst du Text von FHEM ins Serial Log schreiben?

Du musst in settings.h natürlich FHEM Server, Port und ggfs. User/Password angeben.
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html

Markus.

ich glaub das ist "noch" ein Anschlussproblem. Beim Start oder restet zeigt er nur einen weißen Bildschirm.
Werde da mal nachforschen das ich überhaupt was angezeigt bekomme.

Gruß

Markus

Markus.

so ..nun habe ich das ding soweit das er die erste Seite Anzeigt, also das FHEM Logo und conencted to WiFI mit dem Balken :-)
Ich glaube ich hab noch einen Fehler mit dem TFT_RST.
Welcher D-Pin kann das denn sein? Kann man den irgendwo in den includes finden?

Gruß

Markus

kingmathers

#14
Da bin ich um ehrlich zu sein überfragt da ich das Kit zusammengebaut erworben habe.

Als Anleitung zum Aufbau sollte aber die Anleitung von ThingPulse funktionieren: https://github.com/ThingPulse/esp8266-weather-station-color

Edit: Evtl. bei den auskommentierten includes? Wie lautet denn die genaue Fehlermeldung?
Raspberry Pi B+, FS20, 1-Wire, HM
FHEM Home Control (App für Windows 10): https://forum.fhem.de/index.php/topic,49891.0.html
FHEM Arduino Library: https://forum.fhem.de/index.php/topic,94093.0.html