Hallo,
ich benutze ein TRMNL-Display, und wollte via FHEM + HTTPSRV .png-Dateien für das Display bereitstellen.
Leider wurden die Dateien nie angezeigt.
Ich habe jetzt den Grund gefunden:
HTTPSRV sendet als Content-Type:
Content-Type: image/png; charset=utf-8
Die Browser kommen damit klar, und andere Geräte vielleicht auch, aber TRMNL hat damit ein Problem. Charset ergibt bei Medientypen keinen wirklichen Sinn.
Ich habe meine lokale 02_HTTPSRV.pm angepasst:
--- 02_HTTPSRV.pm.org 2026-09-06 16:44:20.600686186 +0200
+++ 02_HTTPSRV.pm 2026-09-06 16:31:54.459730714 +0200
@@ -174,6 +174,14 @@
$filename= AttrVal($name,"directoryindex","index.html") unless($filename);
$filename =~ s/\?.*//;
my $MIMEtype= filename2MIMEType($filename);
+
+ # Add charset only for text/* or application/json, xml, etc.
+ my $header;
+ if ($MIMEtype =~ m!^(text/|application/(json|xml))!) {
+ $header = "$MIMEtype; charset=utf-8";
+ } else {
+ $header = $MIMEtype;
+ }
my $directory= $defs{$name}{fhem}{directory};
$filename= "$directory/$filename";
#Debug "read filename= $filename";
@@ -182,7 +190,7 @@
binmode(INPUTFILE);
@contents= <INPUTFILE>;
close(INPUTFILE);
- return("$MIMEtype; charset=utf-8", join("", @contents));
+ return($header, join("", @contents));
} else {
return("text/plain; charset=utf-8", "File not found: $filename");
}
Damit werden die PNGs jetzt auch korrekt auf meinem Display angezeigt.
Es gibt noch jede Menge anderer Content-Types, die das charset u.U. benötigen.
Vielleicht sollte man die Logik umdrehen und für (audio|image|video)/... das charset weglassen.