FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Kalendermodule => Thema gestartet von: the ratman am 07 Januar 2026, 16:29:30

Titel: 57_Calendar.pm und umlaute in windows
Beitrag von: the ratman am 07 Januar 2026, 16:29:30
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?
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: betateilchen am 07 Januar 2026, 16:56:13
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.
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: the ratman am 08 Januar 2026, 09:34:59
soll ich irgendwo irgendwas tun, den herrn doktor ansprechen, oder geht alles automatisch seiner wege?
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: betateilchen am 08 Januar 2026, 09:49:15
Einfach Geduld haben.
Boris liest das sicher irgendwann.
Bis dahin kannst Du doch den von Dir vorgeschlagenen Workaround bei Dir nutzen.
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: the ratman am 08 Januar 2026, 10:13:09
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*
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: betateilchen am 08 Januar 2026, 11:54:07
Du könntest den Thread allerdings eine Stufe tiefer in den Bereich "Kalendermodule" verschieben.
Den Button dazu findest Du unten auf der Seite.
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: betateilchen am 08 Januar 2026, 11:55:18
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 &lt;name&gt; Calendar ical url &lt;URL&gt; [&lt;interval&gt;]</code><br>
     <code>define &lt;name&gt; Calendar ical file &lt;FILENAME&gt; [&lt;interval&gt;]</code><br>
+    <code>define &lt;name&gt; Calendar ical configdb &lt;FILENAME&gt; [&lt;interval&gt;]</code><br>
     <br>
     Defines a calendar device.<br><br>
 
@@ -4200,6 +4200,7 @@
   <ul>
     <code>define &lt;name&gt; Calendar ical url &lt;URL&gt; [&lt;interval&gt;]</code><br>
     <code>define &lt;name&gt; Calendar ical file &lt;FILENAME&gt; [&lt;interval&gt;]</code><br>
+    <code>define &lt;name&gt; Calendar ical configdb &lt;FILENAME&gt; [&lt;interval&gt;]</code><br>
     <br>
     Definiert ein Kalender-Device.<br><br>
 
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: the ratman am 08 Januar 2026, 16:03:41
falls ich irgendwas probieren soll ... bin ja bekannt für meine fatale fehlerfinderei *g*
aber bitte bedenken: "idiot inside"
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: Dr. Boris Neubert am 08 Januar 2026, 18:59:24
Ich werde mich kümmern.

Einen Patch von Udo nehme ich gerne!
Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: betateilchen am 08 Januar 2026, 20:04:06
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

Titel: Aw: 57_Calendar.pm und umlaute in windows
Beitrag von: the ratman am 08 Januar 2026, 21:21:21
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 ...