grüß euch,
im zuge meines umzugs von fhem auf win11pro mit strawberry perl ist ein problem mit den umlauten in ics-dateien aufgetreten.
selbige umlaute bringen fehler nach der art:2026.01.07 14:44:54 1: PERL WARNING: UTF-8 "\xF6" does not map to Unicode at c:/fhem/fhem.pl line 5795, <$FH> line 101.
2026.01.07 14:44:54 1: PERL WARNING: UTF-8 "\xFC" does not map to Unicode at c:/fhem/fhem.pl line 5795, <$FH> line 134.
im fhem log. die umlaute werden dann natürlich auch nicht korrekt angezeigt.
ein bekannter hätte dafür eine lösung gefunden:
im modul 57_Calendar.pm würden folgende zeilen in zeile 2721 abhilfe schaffen:<<< if(open(ICSFILE, $url)) {
>>> if(open(ICSFILE, '<:encoding(UTF-8)', $url)) {
könnte da was gemacht werden?
Noch einfacher wäre es vermutlich, die von FHEM selbst bereitgestellte Funktion FileRead() zum Einlesen zu verwenden. Dabei wird automatisch das korrekte encoding berücksichtigt.
soll ich irgendwo irgendwas tun, den herrn doktor ansprechen, oder geht alles automatisch seiner wege?
Einfach Geduld haben.
Boris liest das sicher irgendwann.
Bis dahin kannst Du doch den von Dir vorgeschlagenen Workaround bei Dir nutzen.
gutti, thx
ich hab's ned eilig - ist ja nur für meine zukünftige nas ... wollte nur ned wieder an der falschen ecke was gemeldet haben und keiner kriegt's mit *g*
Du könntest den Thread allerdings eine Stufe tiefer in den Bereich "Kalendermodule" verschieben.
Den Button dazu findest Du unten auf der Seite.
Zitat von: betateilchen am 07 Januar 2026, 16:56:13Noch einfacher wäre es vermutlich, die von FHEM selbst bereitgestellte Funktion FileRead() zum Einlesen zu verwenden. Dabei wird automatisch das korrekte encoding berücksichtigt.
Die Verwendung von FileRead() hätte den Charme, dass man mit überschaubarem Aufwand auch meine lange im Hinterkopf rumschwirrende Idee umsetzen könnte, eine Kalenderdatei auch aus der configDB lesen zu können.
Da werde ich mich wohl mal hinsetzen und einen patch vorbereiten...
Index: /opt/fhem/FHEM/57_Calendar.pm
===================================================================
--- /opt/fhem/FHEM/57_Calendar.pm (revision 30692)
+++ /opt/fhem/FHEM/57_Calendar.pm (working copy)
@@ -1825,8 +1825,9 @@
my @a = split("[ \t][ \t]*", $def);
return "syntax: define <name> Calendar ical url <URL> [interval]\n".\
- " define <name> Calendar ical file <FILENAME> [interval]"
- if(($#a < 4 && $#a > 5) || ($a[2] ne 'ical') || (($a[3] ne 'url') && ($a[3] ne 'file')));
+ " define <name> Calendar ical file <FILENAME> [interval]\n".\
+ " define <name> Calendar ical configdb <FILENAME> [interval]"
+ if(($#a < 4 && $#a > 5) || ($a[2] ne 'ical') || !contains_string($a[3],('url','file','configdb')));
$hash->{NOTIFYDEV} = "global";
readingsSingleUpdate($hash, "state", "initialized", 1);
@@ -2715,15 +2716,18 @@
});
Log3 $hash, 4, "Calendar $name: Getting data from URL <hidden>"; # $url
- } elsif($type eq "file") {
+ } elsif($type eq "file" || $type eq "configdb") {
- Log3 $hash, 4, "Calendar $name: Getting data from file $url";
- if(open(ICSFILE, $url)) {
- while(<ICSFILE>) {
- $ics .= $_;
- }
- close(ICSFILE);
+ Log3 $hash, 4, "Calendar $name: Getting data from $type $url";
+ my %f = ('FileName' => $url,'ForceType' => ($type eq 'file')?'file':'configdb');
+ my ($err,@content) = FileRead({%f});
+ if ($err) {
+ Log3 $hash, 1, "Calendar $name: $err";
+ readingsSingleUpdate($hash, "state", "error ($err)", 1);
+ return 0;
+ } else {
+ $ics = join("\n",@content);
my $paramhash;
$paramhash->{hash} = $hash;
$paramhash->{removeall} = $removeall;
@@ -2731,11 +2735,6 @@
$paramhash->{type} = 'caldata';
Calendar_ProcessUpdate($paramhash, '', $ics);
return undef;
-
- } else {
- Log3 $hash, 1, "Calendar $name: Could not open file $url";
- readingsSingleUpdate($hash, "state", "error (could not open file)", 1);
- return 0;
}
} else {
# this case never happens by virtue of _Define, so just
@@ -2787,7 +2786,7 @@
readingsBulkUpdate($hash, "state", "retrieved");
readingsBulkUpdate($hash, 'lastResponse', 'OK');
}
- } elsif($type eq "file") {
+ } elsif($type eq "file" || $type eq "configdb") {
Log3 $name, 5, "Calendar $name: file retrieval successful";
readingsBulkUpdate($hash, "state", "retrieved");
readingsBulkUpdate($hash, 'lastResponse', 'OK');
@@ -3462,6 +3461,7 @@
<ul>
<code>define <name> Calendar ical url <URL> [<interval>]</code><br>
<code>define <name> Calendar ical file <FILENAME> [<interval>]</code><br>
+ <code>define <name> Calendar ical configdb <FILENAME> [<interval>]</code><br>
<br>
Defines a calendar device.<br><br>
@@ -4200,6 +4200,7 @@
<ul>
<code>define <name> Calendar ical url <URL> [<interval>]</code><br>
<code>define <name> Calendar ical file <FILENAME> [<interval>]</code><br>
+ <code>define <name> Calendar ical configdb <FILENAME> [<interval>]</code><br>
<br>
Definiert ein Kalender-Device.<br><br>
falls ich irgendwas probieren soll ... bin ja bekannt für meine fatale fehlerfinderei *g*
aber bitte bedenken: "idiot inside"
Ich werde mich kümmern.
Einen Patch von Udo nehme ich gerne!
Zitat von: Dr. Boris Neubert am 08 Januar 2026, 18:59:24Einen Patch von Udo nehme ich gerne!
Der patch, den ich oben vorgeschlagenen habe
- sollte das Windows-Umlaute-Problem lösen - mangels fhem@windows kann ich das nicht testen
- erfüllt meine Idee, auch aus configdb lesen zu können
- wurde von mir sowohl für "ical file" als auch "ical configdb" erfolgreich getestet
- enthält die Ergänzung für commandref
Zitat von: betateilchen am 08 Januar 2026, 20:04:06sollte das Windows-Umlaute-Problem lösen - mangels fhem@windows kann ich das nicht testen
also ich kenn da zufällig jemanden ...