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

eki

Zitat von: hajo23 am 23 September 2021, 16:04:30
Hallo Borkk,

mit dem Modul aus #361 und den folgenden Ergänzungen von mir sollten die Warnings verschwinden (ausgenommen die bei FHEM-Start auftreten).
Du solltest das Modul aus dem Update-Prozess nehmen, damit es dabei nicht durch die eingecheckte Version überschrieben wird, bis eki eine neue Version einstellt.

Könntest Du mir mal deine letzte Version hier posten (oder auch per mail, wenn Du das hier nicht öffentlich machen willst). Dann kann ich das mit meiner zusammen führen und freigeben. Dann werden updates auch wieder mit der letzten Version gefüttert.

hajo23


eki

Die Version mit allen hier diskutierten Änderungen ist jetzt ofiziell eingescheckt.

bhaal

Hallo eki,

vielen Dank für das Modul, läuft bei mir fast von Beginn an sehr zuverlässig. Aktuell habe ich aber ein Problem mit der Version vom 07.10 (89_ESPEInk.pm 25054 2021-10-07 09:38:45Z eki). Das Log ist voll von Fehlermeldungen und das Display aktualisiert sich nicht:
2021.10.12 13:50:00 1: PERL WARNING: Use of uninitialized value $value in pattern match (m//) at ./FHEM/89_ESPEInk.pm line 402.
Can't locate object method "alpha" via package "GD::Image" at ./FHEM/89_ESPEInk.pm line 1388.


Bis auf ein Update habe ich nichts geändert in letzter Zeit.
Habt ihr eine Idee?

Viele Grüße
Max

eki


eki


hajo23

Du brauchst eine GD mit alpha Kanal Unterstützung. Bei mir ist 2.73 installiert.

Deine Version kannst du z.B. mit

sudo cpan -D GD


anzeigen lassen.

Auf meinem PI läuft noch Stretch. Möglicherweise gibt es unter Stretch nur ältere GD Versionen. Mir ist das Update jedenfalls nur mit cpan gelungen.

bhaal

Ah vielen Dank für die Tipps, das hat schonmal geholfen (Update libgd bzw GD). Die Konvertierung klappt wieder und das Display aktualisiert sich.

Die Warnung bleibt:
2021.10.13 19:17:07 1: PERL WARNING: Use of uninitialized value $value in pattern match (m//) at ./FHEM/89_ESPEInk.pm line 402.

Dann probiere ich als nächstes die Version von dir eki.

Edit: Fehler bzw. Warnung bleibt gleich.

eki

Um die Warnung hatte ich mich gar nicht gekümmert, die ist ja nicht wirklich kritisch. Ich habe nur dafür gesorgt, dass das Fehlen der Alpha Unterstützung nicht mehr zum Absturz führt.

hajo23

Zitat von: bhaal am 13 Oktober 2021, 19:37:59
Ah vielen Dank für die Tipps, das hat schonmal geholfen (Update libgd bzw GD). Die Konvertierung klappt wieder und das Display aktualisiert sich.

Die Warnung bleibt:
2021.10.13 19:17:07 1: PERL WARNING: Use of uninitialized value $value in pattern match (m//) at ./FHEM/89_ESPEInk.pm line 402.

Dann probiere ich als nächstes die Version von dir eki.

Edit: Fehler bzw. Warnung bleibt gleich.

Überprüfe mal bitte deine Definitionen hinsichtlich der Vollständigkeit der Parameter. Ich vermute , in irgendeiner Zeile fehlt oder passt etwas nicht.

eki

So ganz verstehe ich die Warnung nicht (nach meinem Verständnis sollte das nur auftreten, wenn ich als Übergabeparameter and die Funktion "undef" habe, was ich aber nirgends sehe), aber probier mal ob die Warnung mit der angehängten Version weg ist.

hajo23

Zitat von: eki am 14 Oktober 2021, 17:29:26
So ganz verstehe ich die Warnung nicht (nach meinem Verständnis sollte das nur auftreten, wenn ich als Übergabeparameter and die Funktion "undef" habe, was ich aber nirgends sehe), aber probier mal ob die Warnung mit der angehängten Version weg ist.

Es reicht schon, wenn einer der Werte in "@_" (bzw. @values) gleich "undef" ist.

Wenn du die Fehler abfangen willst, zum Beispiel

($type, $text, $x, $y, $size, $ang, $col, $fnt, $linegap, $blockwidth) = split("#",$line);
if (!defined $fnt) {$fnt = ''}; # Hajo 6
if (!defined $linegap) {$linegap = ''}; # Hajo 7
if (!defined $blockwidth) {$blockwidth = ''}; # Hajo 8
($x, $y, $size, $ang, $col, $fnt,$linegap,$blockwidth) = ESPEInk_FetchReadings($x, $y, $size, $ang, $col, $fnt,$linegap,$blockwidth);


dann solltest du vor dem Aufruf der Funktion " ESPEInk_FetchReadings" prüfen, ob alle erforderlichen Parameter vorhanden (defined) sind. Wenn nicht, dann setzt du einen default-Wert, oder schreibst einen log-Eintrag für den fehlenden Wert, damit der Anwender seinen Fehler leichter findet..

bhaal

Zitat von: hajo23 am 14 Oktober 2021, 11:20:59
Überprüfe mal bitte deine Definitionen hinsichtlich der Vollständigkeit der Parameter. Ich vermute , in irgendeiner Zeile fehlt oder passt etwas nicht.

Tatsächlich, auch noch direkt in der ersten Zeile. Das hat immerhin die Suche vereinfacht. Bei Addicon haben die Angaben Angle und Color gefehlt.

Der Rest war offensichtlich vollständig, jetzt läuft es ohne Warnung. Besten Dank!

eki

Zitat von: hajo23 am 14 Oktober 2021, 17:41:07
Es reicht schon, wenn einer der Werte in "@_" (bzw. @values) gleich "undef" ist.

Wenn du die Fehler abfangen willst, zum Beispiel

($type, $text, $x, $y, $size, $ang, $col, $fnt, $linegap, $blockwidth) = split("#",$line);
if (!defined $fnt) {$fnt = ''}; # Hajo 6
if (!defined $linegap) {$linegap = ''}; # Hajo 7
if (!defined $blockwidth) {$blockwidth = ''}; # Hajo 8
($x, $y, $size, $ang, $col, $fnt,$linegap,$blockwidth) = ESPEInk_FetchReadings($x, $y, $size, $ang, $col, $fnt,$linegap,$blockwidth);


dann solltest du vor dem Aufruf der Funktion " ESPEInk_FetchReadings" prüfen, ob alle erforderlichen Parameter vorhanden (defined) sind. Wenn nicht, dann setzt du einen default-Wert, oder schreibst einen log-Eintrag für den fehlenden Wert, damit der Anwender seinen Fehler leichter findet..

Was der Grund sein kann war mir schon klar, allerdings rufe ich diese Funktion ja selbst auf und war der Meinung, dass ich da als Übergabeparameter immer etwas aus "ReadingsVal" drin habe und dort steht immer ein default Wert drin. Allerdings gibt es an einer Stelle (hatte ich übersehen) auch die direkte Eingabe von Werten und die können natürlich "undefined" sein (wie man ja auch aus der Antwort von bhaal und aus Deinem Code Zitat sieht).

Egal, ich habe das auf jeden Fall jetzt nicht vor dem Aufruf sondern in der Routine abgefangen (siehe Post oben).

Shortie

Mir kam gerade eine Idee, da ich den Display Inhalt gerne etwas dynamischer gestalten möchte und auch Teile für verschiedene Räume wiederverwenden auf dem gleichen Display.

Wäre es möglich das an als definition auch eine Perl Funktion übergeben könnte, die dann als Rückgabe die definition liefert?

Das ganze würde ich dann als eine Art Experten Modus sehen:
Dann könnte man sich z.B. Funktionen bauen, die einen Raum repräsentieren und Temperatur, Feuchte, .... anzeigen und diese dann für verschiedene Räume auf dem Display nutzen und per relativen Koordinaten jeweils platzieren.
Aktuell hab ich 6 Kästchen geplant, welche sich nur durch die verschiedenen Readings und die Überschriften unterscheiden. Mache ich eine Änderung muss ich sie an allen Stellen vornehmen und die ganzen Koordinaten immer neu rechnen.
Oder halt sowas wie dynamische Status Icons hintereinander. Also z.B. eine Zeile im Raum Wohnzimmer die von vorne auffüllt wenn bestimmte Stati vorhanden sind, ansonsten aber nichts anzeigt. Wie Fenster auf, es wird dafür ein Icon vorne angezeigt, Fenster zu kein Icon (geht ja aktuell auch schon soweit ich das gesehen hab, allerdings nur mit festen Koordinaten), wenn jetzt aber das Fenster zu ist und kein Icon angezeigt wird und ich einen weiteren Status anzeigen will kann ich dafür ja nicht den Platz des Fenster Icons nehmen, da ja der Status Fenster auf und ein anderer Status auch potentiell gleichzeitig auftreten könnten. Mit Perl würde sich sowas aber dynamisch händeln lassen und dann die Definition entsprechend dem Plugin übergeben.