Neues Modul: ESPEInk für e-Paper Displays (Name geändert, war ESP8266EInk)

Begonnen von eki, 02 Oktober 2019, 10:24:53

Vorheriges Thema - Nächstes Thema

Borkk

Zitat von: eki am 21 März 2022, 15:18:16
OK (stimmt, noch ne Baustelle, die ich aktuell nicht bearbeiten kann, weil ich selber kein funktionierendes Display zum Testen mehr habe).

Was passiert, wenn Du den Interval Wert setzt (also z. B.: attr <display> interval 60). Sind die Fehler dann weg?

Ja, mit interval = 60 sind die Fehler weg. Kann es sein, das die Trigger zu schnell kommen? Ich lasse die Messwerte von Netatmo Thermostate anzeigen, die aktualisieren sich eigentlich nur alle 15 min. Es kann natürlich sein, das der Messintervall verschiedener Messstellen dennoch kurz hintereinander aktualisieren.
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

eki

Das Problem ist voraussichtlich, dass von den Netatmo Devices quasi immer gleichzeitig mehrere Events kommen (z. B. temperatur, humidity und CO2). Jedes dieser Events löst ein Update aus und, weil ich bei jedem Update eventuell noch laufende Prozesse kille, kommt dann die Fehlermeldung aus dem Blocking Modul (ist nämlich gar kein Timeout sondern ein manuelles Abschießen des Prozesses aus meinem Modul). Wenn ich mehrere parallele Konvertierungsprozesse zulasse, dann zerschießt es die Anzeige auf den Displays (wahrscheinlich so ähnlich, wie wenn man 2 Instanzen des Moduls laufen hat, obwohl ich diesen Fall noch nicht so ganz verstehe, zumindest, es sei denn, die beiden Devices sind über die gleich URL angebunden).

Die Alternative wäre, dass ich anstatt den alten Prozess zu killen, den Neuen nicht zulasse, dann würde aber die Anzeige immer hinterher hinken.

Borkk

Das ist definitiv so wie du schriebst. Die Werte werden ja zyklisch aus der Cloud geladen oder gepusht, das weiss ich nicht genau. Aber natürlich kommen dann alle Werte aller Module auf einmal. Ich lasse das jetzt mal auf einem Interval von 600 laufen, es kommen ohnehin nur alle 15 min neue Werte.
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

maltejahn

Hallo,

ich bekomme sehr viele Fehlermeldungen im log, vielleicht liegt es daran:

Ist es eigentlich möglich den Upload zu "deaktivieren".

Ich will ein Inkplate 6 nutzen und hole mir die erzeugte Bilddatei selbst ab. Aber da es ja kein Empfänger gibt, bekomme ich die Fehlermeldung "Error uploading image to device, max retries (3) reached"

Ansonsten, wie kann ich das hier "debuggen?" Die Log ist pwo tag irgendwo um 300mb groß....

z.B:
2022.03.27 00:00:54 1: PERL WARNING: Use of uninitialized value $text in split at ./FHEM/89_ESPEInk.pm line 621.
2022.03.27 00:00:54 3: eval: my $SELF=   $evalSpecials->{'%SELF'};{ DrKWetter() }
2022.03.27 00:00:54 1: stacktrace:
2022.03.27 00:00:54 1:     main::__ANON__                      called by ./FHEM/89_ESPEInk.pm (621)
2022.03.27 00:00:54 1:     main::ESPEInk_Notify                called by fhem.pl (3930)
2022.03.27 00:00:54 1:     main::CallFn                        called by fhem.pl (3843)
2022.03.27 00:00:54 1:     main::DoTrigger                     called by fhem.pl (4945)
2022.03.27 00:00:54 1:     main::readingsEndUpdate             called by fhem.pl (5128)
2022.03.27 00:00:54 1:     main::readingsSingleUpdate          called by ./FHEM/98_dummy.pm (73)
2022.03.27 00:00:54 1:     main::dummy_Set                     called by fhem.pl (3925)
2022.03.27 00:00:54 1:     main::CallFn                        called by fhem.pl (1955)
2022.03.27 00:00:54 1:     main::DoSet                         called by fhem.pl (1987)
2022.03.27 00:00:54 1:     main::CommandSet                    called by fhem.pl (1272)
2022.03.27 00:00:54 1:     main::AnalyzeCommand                called by fhem.pl (1123)
2022.03.27 00:00:54 1:     main::AnalyzeCommandChain           called by fhem.pl (3970)
2022.03.27 00:00:54 1:     main::fhem                          called by ./FHEM/99_myUtils.pm (39)
2022.03.27 00:00:54 1:     main::DrKWetter                     called by (eval 358971) (1)
2022.03.27 00:00:54 1:     (eval)                              called by fhem.pl (1167)
2022.03.27 00:00:54 1:     main::AnalyzePerlCommand            called by fhem.pl (1196)
2022.03.27 00:00:54 1:     main::AnalyzeCommand                called by fhem.pl (1123)
2022.03.27 00:00:54 1:     main::AnalyzeCommandChain           called by ./FHEM/90_at.pm (199)
2022.03.27 00:00:54 1:     main::at_Exec                       called by fhem.pl (3458)
2022.03.27 00:00:54 1:     main::HandleTimeout                 called by fhem.pl (702)

.................
2022.03.27 00:02:27 1: PERL WARNING: Use of uninitialized value $text in split at ./FHEM/89_ESPEInk.pm line 622.
2022.03.27 00:02:27 1: stacktrace:
2022.03.27 00:02:27 1:     main::__ANON__                      called by ./FHEM/89_ESPEInk.pm (622)
2022.03.27 00:02:27 1:     main::ESPEInk_Notify                called by fhem.pl (3930)
2022.03.27 00:02:27 1:     main::CallFn                        called by fhem.pl (3843)
2022.03.27 00:02:27 1:     main::DoTrigger                     called by fhem.pl (4945)
2022.03.27 00:02:27 1:     main::readingsEndUpdate             called by ./FHEM/98_expandJSON.pm (189)
2022.03.27 00:02:27 1:     main::expandJSON_decode             called by ./FHEM/98_expandJSON.pm (164)
2022.03.27 00:02:27 1:     main::__ANON__                      called by fhem.pl (3458)
2022.03.27 00:02:27 1:     main::HandleTimeout                 called by fhem.pl (702)
.......
2022.03.27 00:07:06 5: inkplate6_1: callback from command EPD, URL http:///EPD status code
2022.03.27 00:07:06 1: PERL WARNING: Use of uninitialized value in numeric ne (!=) at ./FHEM/89_ESPEInk.pm line 2094.
2022.03.27 00:07:06 3: eval: {ESPEInk_ConvertDone('inkplate6_1|1')}
2022.03.27 00:07:06 1: stacktrace:
2022.03.27 00:07:06 1:     main::__ANON__                      called by ./FHEM/89_ESPEInk.pm (2094)
2022.03.27 00:07:06 1:     main::ESPEInk_HTTPCallbackA         called by FHEM/HttpUtils.pm (1021)
2022.03.27 00:07:06 1:     main::HttpUtils_NonblockingGet      called by ./FHEM/89_ESPEInk.pm (2102)
2022.03.27 00:07:06 1:     main::ESPEInk_HTTPCallbackA         called by FHEM/HttpUtils.pm (1021)
2022.03.27 00:07:06 1:     main::HttpUtils_NonblockingGet      called by ./FHEM/89_ESPEInk.pm (2102)
2022.03.27 00:07:06 1:     main::ESPEInk_HTTPCallbackA         called by FHEM/HttpUtils.pm (1021)
2022.03.27 00:07:06 1:     main::HttpUtils_NonblockingGet      called by ./FHEM/89_ESPEInk.pm (2298)
2022.03.27 00:07:06 1:     main::ESPEInk_PostToDeviceImage     called by ./FHEM/89_ESPEInk.pm (2404)
2022.03.27 00:07:06 1:     main::ESPEInk_Upload                called by ./FHEM/89_ESPEInk.pm (1671)
2022.03.27 00:07:06 1:     main::ESPEInk_ConvertDone           called by (eval 359576) (1)
2022.03.27 00:07:06 1:     (eval)                              called by fhem.pl (1167)
2022.03.27 00:07:06 1:     main::AnalyzePerlCommand            called by fhem.pl (1196)
2022.03.27 00:07:06 1:     main::AnalyzeCommand                called by fhem.pl (1123)
2022.03.27 00:07:06 1:     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (263)
2022.03.27 00:07:06 1:     main::telnet_Read                   called by fhem.pl (3930)
2022.03.27 00:07:06 1:     main::CallFn                        called by fhem.pl (780)



[/quote]





eki

Kannst Du mal die Definition des entsprechenden EInk FHEM devices hier posten.

maltejahn

Guten Morgen,

ja, das wäre sinnvoll gewesen  ::) : Und ich schreibe das hier komplett neu, da ich heute morgen alles was mit dem Display zu tun hatte deaktiviert habe und somit versuchte das Log ruhig zu bekommen. Ich habe zeitgleich ein zweites (Waveshare) Display das ich jetzt komplett raus geworfen habe (inkl. display_doif, display_status_doif). Zusätzlich einige "Spieldevices" rausgeworfen. Zusätzlich ein Update samt restart

Somit gibt es nur noch das eigentliche Device "Inkplate6_1" und ein nicht aktives AT das eigentlich gedacht war alle 5 Minuten die Bilddatei zu erzeugen. Jetzt arbeite ich nur noch im Device Inkplate mit set convert.

Trotzdem gibt es eine Art Eigenleben, siehe Log anbei. Um 12:12:02 habe ich das Convert manuell angestoßen - auch hier Fehlermeldungen. Zusätzlich aber auch um 12:17 ind 12:22 ein " Start forked process to convert output picture"


Das Modul ist dieses, wobei sollte das nicht aktueller sein. Zumindest stand im Log das es hier ein Update gab
# $Id: 89_ESPEInk.pm 25054 2021-10-07 09:38:45Z eki $

Weiter verwundet: Die Template Datei und Ergebnisdatei sind in diesem Verzeichnis
Zitat12:22:52 5: inkplate6_1: Event received from device inkplate6_1 (events are: result_picture: <html><img src=/fhem/images/inkplate6_1.result.png
Wo kommt das her?

Definition Display
defmod inkplate6_1 ESPEInk /opt/fhem/www/images/inkplate6_template_1.png
attr inkplate6_1 convertmode dithering
attr inkplate6_1 definitionFile /opt/fhem/FHEM/inkplate6_1.cfg
attr inkplate6_1 disable 0
attr inkplate6_1 height 600
attr inkplate6_1 room Display
attr inkplate6_1 verbose 5
attr inkplate6_1 width 800

setstate inkplate6_1 Error uploading image to device, max retries (3) reached
setstate inkplate6_1 2022-03-28 12:07:35 deftexts 0
setstate inkplate6_1 2022-03-28 12:12:52 result_picture <html><img src=/fhem/images/inkplate6_1/result.png?dummy=124345.308202571></img><div>/fhem/images/inkplate6_1/result.png</div></html>
setstate inkplate6_1 2022-03-28 12:07:27 source_picture <html><img src=/fhem/images/inkplate6_1/inkplate6_template_1.png?dummy=939955.375853586></img><div>/fhem/images/inkplate6_1/inkplate6_template_1.png</div></html>
setstate inkplate6_1 2022-03-28 12:12:52 updatestart 1648462372.79522



Die Konfiguration des Display, also die /opt/fhem/FHEM/inkplate6_1.cfg habe ich zusammengestaucht
Zitat
addtext#Wetter#10#540#11#0#000000#/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf#0#0

eki

Anbei mal eine neue Version, bei der die Warnings (hoffentlich) abgefangen sind. Dass die Warnings mehrfach kommen, liegt einfach daran, dass die Notify Funktion des Modules immer dann aufgerufen wird, wenn Events generiert werden (das ist einfach bei FHEM so) und im Rahmen der Prüfung dieser Events dann die Warnung aufläuft. Probiers bitte mal aus, falls es läuft und ansonsten keine anderen Merkwürdigkeiten auftreten, würde ich das dann auch freigeben.

ZitatDas Modul ist dieses, wobei sollte das nicht aktueller sein. Zumindest stand im Log das es hier ein Update gab
# $Id: 89_ESPEInk.pm 25054 2021-10-07 09:38:45Z eki $
Das ist die letzte offizielle Version, alle seit dem gemachten Änderungen sind in der angehängten Datei.

ZitatWeiter verwundet: Die Template Datei und Ergebnisdatei sind in diesem Verzeichnis
Zitat

    12:22:52 5: inkplate6_1: Event received from device inkplate6_1 (events are: result_picture: <html><img src=/fhem/images/inkplate6_1.result.png

Wo kommt das her?
Das kommt daher, dass diese Meldung für alle Events ganz am Anfang der Notify Funktion des Moduls erzeugt wird (ist ja auch verbose 5)

maltejahn

Hallo,

das ist ein massive Erleichterung.

Ein Problem hatte ich noch mit der Formatierung einer Zahl "%2.f%" Fehler ins 1320; "%2.f%%" -> kein Fehler mehr

Da ich kein "Endgerät" habe: Hier unter maxretries null eingestellt. Somit kommt nur eine Meldung im Log inkplate6_1: problems with communication to device, max retries (0) reached

Oder macht es sine ein "nonUpload" device anzulegen (Aufwand zu groß)? Ergänzend zum ESP32 + ESP8266 - oder eben bei maxretries==0 nicht als Fehler sondern Infomäßig auf "Done"


Aber vielen Dank für die schnelle Lösung!

eki

ZitatDa ich kein "Endgerät" habe: Hier unter maxretries null eingestellt. Somit kommt nur eine Meldung im Log
Code: [Auswählen]

inkplate6_1: problems with communication to device, max retries (0) reached

Oder macht es sine ein "nonUpload" device anzulegen (Aufwand zu groß)? Ergänzend zum ESP32 + ESP8266 - oder eben bei maxretries==0 nicht als Fehler sondern Infomäßig auf "Done"

Probier mal das Attribut "interval" auf -1 zu setzen (die Meldung möchte ich nicht wegnehmen, da ja auch bei maxretries=0 einmal ein Fehler aufgetreten ist).

Dirk070

Hallo zusammen,

das Projekt hier klingt ja spannend, vielen Dank erstmal dafür.

ich bin auf der Suche nach einem Status-Display für FHEM, bzw. mehrere im Haus und dies können auch unterschiedliche Größen sein, da ich teils nur wenige Infos anzeigen müsste.

Bei Amazon finden sich die Waveshare-Produkte. Welche Kombination aus Driver-Board und Displays könntet ihr mir empfehlen?
Optimal wäre dazu ein Gehäuse und die Möglichkeit, das Display mit Akkus zu betreiben.

Danke Euch vorab und schöne Grüße
Dirk

Dirk070

Vielleicht war ich dann doch zu vage mit meiner Frage.

Etwas konkreter, wenn ich diese Hardware nutze, ist dann alles, was benötigt wird und würdet Ihr diese Kombination empfehlen?
Beide benötigen 5V, die liefert z.B. ein iPhone-Ladegerät. Per USB funktioniert das wahrscheinlich nicht, sondern nur über die beiden ausgewiesenen Pins auf dem Board?
Also Kabel anlöten?

Es gibt auch Boards wie dieses hier LOLIN32 Lite, direkt mit Lithium Battery Interface. Daher meine Frage.
Link dazu https://www.amazon.de/LOLIN32-Bluetooth-Development-MicroPython-Bluetooth-Entwicklungsboard/dp/B07MC4Y73P/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3N016RVHB8EC5&keywords=LOLIN32+Lite&qid=1649679243&sprefix=lolin32+lite%2Caps%2C84&sr=8-3

Danke Euch und schöne Grüße
Dirk


eki

Du brauchst nur das Display ohne HAT (der ist nur für eine direkte Anbindung an den Raspberry). Also statt 1 das da:
https://www.amazon.de/HAT-Resolution-Electronic-Controller-Three-Color/dp/B075YVYT1Z/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2GYJPOJZ6YB1N&keywords=waveshare%2B7.5&qid=1649677111&sprefix=waveshare%2B7.5%2Caps%2C84&sr=8-3&th=1

Das ESP32 hat einen Mikro USB Anschluss, den kannst Du mit einem entsprechenden USB Netzteil versorgen und mehr brauchst du nicht. Wenn Du das Ganze per Batterie betreiben willst, dann musst Du den ESP zwischendurch schlafen legen (sonst hält die Batterie nicht lang) und dann z.B. über einen GPIO oder über das Einschalten der Stromversorgung rechtzeitig aufwecken, bevor Du neue Daten auf das Display schieben willst (könnte man über eine entsprechend geschaltete Stromversorgung oder eben über einen Schalter, der einen Interrupt fähigen GPIO schaltet machen). Das Display selbst braucht keinen Strom, solange das Bild nicht geändert wird, das Bild bleibt auch ohne Strom stehen.

Du musst schon das ESP32 von Waveshare verwenden, das Lolin32 hat ja gar keinen Anschluss für das Display.

Dirk070

Hallo eki,

vielen Dank für Deinen Hinweis, ich habe die Hardware entsprechend bestellt. Ich bin gespannt.

Um den Stromverbrauch zu reduzieren, hatte ich auf die Lösung von Icinger gehofft:

Zitat von: Icinger am 09 Dezember 2019, 21:34:52
Mal eine kleine Info:

In Vorbereitung auf einen evtl. Akku-Betrieb habe ich die Software von meinem ESP32 jetzt dahingehend verändert, dass der ESP nach einem empfangenen Bild in den Deep-Sleep geht, und nach (aktuell 10 Minuten) wieder aufwacht.
Danach wartet er einfach auf das nächste Bild und geht wieder pennen.
Zusätzlich habe ich noch einen MQTT-Client eingebaut, der ein "online" sendet, bzw. als LWT halt "offline".
Somit könnte ich jetzt sogar die Bildübertragung direkt anstoßen und wäre nicht auf ein Intervall-Attribut angewiesen.
....

Dann wäre die Idee, wir hier auch schon mal angedacht, einen dickeren Bilderrahmen mit dünner Powerbank zu nutzen.
Ist die Software für den ESP32 von Icinger eigentlich hier im Forum vefügbar, im Thread habe ich sie noch nicht gesehen (oder übersehen?)

Danke nochmals und viele Grüße
Dirk

Dirk070

Noch eine Frage zu GD:
welcher der 4 Klassen müssen installiert werden?

gd::Image
gd::Font
gd::Polygon
gd::Simple

EDIT: hab's im Sourcecode gefunden, es wird nur "GD::Image" aufgerufen.

Danke und schöne Grüße
Dirk

maltejahn

Hallo,

nach einigen Wochen läuft es soweit stabil. Ein "-1" reduziert allerdings nicht wirklich, aber erträglich:
2022.05.20 03:57:44 3: inkplate_6_hallway: sending HTTP request to http:///EPD with data: aa
2022.05.20 03:57:44 1: inkplate_6_hallway: problems with communication to device, max retries (-1) reached



Was komisch ist, vermutlich ist das schon immer vorhanden. Ab und zu kommt etwas in diese Richtung:
2022.05.20 04:00:30 1: Timeout for ESPEInk_DoConvert reached, terminated process 23624
2022.05.20 04:00:30 1: Timeout for ESPEInk_DoConvert reached, terminated process 23625
2022.05.20 04:00:30 1: Timeout for ESPEInk_DoConvert reached, terminated process 23626
2022.05.20 04:00:30 1: Timeout for ESPEInk_DoConvert reached, terminated process 23627
2022.05.20 04:00:30 1: Timeout for ESPEInk_DoConvert reached, terminated process 23628

Verbose zur Zeit auf 3


Neues Problemchen:

In Proplanta lasse ich mir per Userreadings ein neuen Eintrag erstellen der x (y) mit x= Windgeschwindigkeit, y= Wind in Boen
sein soll:
fc0_windboen_18 {ReadingsVal("WetterProplanta","fc0_wind18",0).' ('.ReadingsVal("WetterProplanta","fc0_gust18",0).')'},

Es wird auch ein reading erstellt, z.B.
Zitatfc0_windboen_18 25.2 (61.2)

Allerdings, wenn ich darauf wie auf jedes andere Reading zugreife erhalte ich diese Meldung:
2022.05.20 14:27:04 1: PERL WARNING: Argument "25.2 (61.2)" isn't numeric in sprintf at ./FHEM/89_ESPEInk.pm line 1320.
mit
textreading#WetterProplanta:fc0_windboen_18{%2.1f}#360#585#11#0#000000#/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf#0#0

Das wollte ich deshalb so machen, weil ich ja Reading1 + " (" + Reading2 + ")" als string erstellen möchte, wobei die Readings variabel in deren Breite sind(Anzahl Zeichen)

Danke für die Unterstützung bisher!
Malte