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 ...
Zitat von: the ratman am 08 Januar 2026, 21:21:21also ich kenn da zufällig jemanden ...
Du kennst Leute, mit denen hätte ich als Kind nicht spielen dürfen, ohne zuhause Ärger zu bekommen... 8)
@ratman: sag bitte Bescheid, ob der Patch bei dir das Umlaut-Problem löst.
Ich checke danach das verbesserte Modul mit Patch ein.
kann ich bitte ein fertiges file haben? will da nix falsch einbauen
Zitat von: the ratman am 09 Januar 2026, 17:42:21kann ich bitte ein fertiges file haben?
Daran soll es nicht scheitern.
schaut gut aus ...
versuch:
1) fhem starten: umlaute im modul abfall sind falsch
2) neues calender modul einspielen / fhem neu starten
3) im calender modul ein reload gemacht --> umlaute im modul abfall sind richtig
4) keinerelei einträge im log (vorher gab's für jeden falschen umlaut eine meldung)
scheint also soweit in ordnung.
falls ich noch was probieren soll, nur sagen!
und auf jeden fall mal ein großes DANKE an euch 2!
Danke fürs Testen.
dumme frage: habt ihrs schon eignepflegt?
Das kannst Du doch selbst rausfinden.
- hast Du eine neue Version per update erhalten?
- wurde überhaupt eine neue Version bereitgestellt?
Zu 1: sicher nicht.
Zu 2: Hier https://forum.fhem.de/index.php?board=57.0 kannst Du sehen, wann welche Änderung bereitgestellt wurde. Da sehe ich nichts von 57_Calendar.pm, insofern ist das Ergebnis von 1.) logisch erklärbar.
gutti - dann hab ich nix übersehen. will nur nicht anfangen auf meiner test-nas module vom update auszunehmen und dann hintenan eventuell vergessen, sie wieder in den updateprozess aufzunehmen - wäre so typisch ich *g*.
Kann es sein, dass Du Dir gerade selbst im Weg stehst?
Warum willst Du das Modul vom update ausschließen?
Du hast doch eine funktionierende Modulversion, warum verwendest Du nicht einfach die solange, bis das offizielle Update kommt? Bis dahin wird mit der "Übergangsversion" nichts passieren, sie wird einfach laufen.
genau das tue ich ja. dachte, ein update würde mir die "offizielle" version wieder über "meine" drüber bügeln.
wobei "nutzen" derzeit ein starkes wort ist. muss noch so viel ausprobieren, bis ich mir die neue nas im echtbetrieb gönne ... nie wieder schnellschüsse!
Zitat von: the ratman am 13 Januar 2026, 11:26:28dachte, ein update würde mir die "offizielle" version wieder über "meine" drüber bügeln.
Aber doch nur, wenn im Update überhaupt eine neue "offizielle" Version enthalten ist. Und die nächste "offizielle" Version sollte die gleiche Funktionalität beinhalten wie "Deine" Übergangsversion. Insofern verstehe ich nicht, wo Du ein Problem vermutest.
tatsächlich hab' ich obiges vermutet und wäre einfach auf nummer sicher durch "nicht updaten" gegangen. aber dank dir, mach ich mir da jetzt weniger gedanken.
ich spiele mich ja g'rade mit einem programmierer mit div. helferchens für fhem<-->win. da will ich nicht auf einmal wieder alte fehler im log. ist für mich so schon herausfordernd genug, das alles zu kapieren.
langsam denke ich, für win mit utf-8 müsste man sich generell was einfallen lassen. ich war leider zu sehr fixiert auf fehler im log. somit ist mir folgendes verhalten im modul abfall nicht gleich aufgefallen.
teilweise fehlen einfach die umlaute, teilweise sind sie richtig.GrneTonne_date 13.02.2026
GrneTonne_days 23
GrneTonne_description Grüne Tonne nicht vergessen!im log steht nichts. und welches modul das verursacht, weiß ich natürlich nicht.
Zitat von: the ratman am 21 Januar 2026, 15:34:13teilweise fehlen einfach die umlaute, teilweise sind sie richtig.
im log steht nichts. und welches modul das verursacht, weiß ich natürlich nicht.
Das ist ein komplett anderes Thema und gehört nicht hier in den Thread.
Du musst unterscheiden zwischen "readingName" und "readingValue".
Im Namen von readings sind Umlaute nicht zulässig, deshalb fehlt da da ü.
Für die Prüfung von readingName stellt FHEM selbst interne Funktionen zur Verfügung.
Es gibt auch eine Funktion, die das ü automatisch durch ue ersetzen würde. Aber nicht jeder Modulentwickler nutzt das. Oft geht man den "einfacheren" Weg, Umlaute einfach per regex zu löschen.
Das, was Du da siehst, ist also kein Fehler, deshalb auch kein Eintrag im Log.
Aus welchem Modultyp kommen denn die readings, die Du da gepostet hast?
Moin Ratte
Zitat von: the ratman am 21 Januar 2026, 15:34:13langsam denke ich, für win mit utf-8 müsste man sich generell was einfallen lassen. ich war leider zu sehr fixiert auf fehler im log. somit ist mir folgendes verhalten im modul abfall nicht gleich aufgefallen.
teilweise fehlen einfach die umlaute, teilweise sind sie richtig.
Das sind die Namen der Readings. So weit ich weiß, dürfen für fhem dort keine Umlaute stehen und müssen im Modul abgefangen werden und in ae, oe und ue umgewandelt werden.
$ReadingsName =~ s/\xc3\x84/Ae/ug; #Special Character "Ä"
$ReadingsName =~ s/\xc3\xa4/ae/ug; #Special Character "ä"
$ReadingsName =~ s/\xc3\x96/Oe/ug; #Special Character "Ö"
$ReadingsName =~ s/\xc3\xb6/oe/ug; #Special Character "ö"
$ReadingsName =~ s/\xc3\x9c/Ue/ug; #Special Character "Ü"
$ReadingsName =~ s/\xc3\xbc/ue/ug; #Special Character "ü"
$ReadingsName =~ s/\xc3\x9f/sz/ug; #Special Character "ß"
Die Values werden ja richtig mit Umlaute dargestellt.
Gruß
Sailor
Zitat von: Sailor am 21 Januar 2026, 17:29:53müssen im Modul abgefangen werden und in ae, oe und ue umgewandelt werden.
Zum Glück nimmt einem fhem.pl die Arbeit mittels der Funktion makeReadingName() komplett ab.
Man muss halt die Funktion auch verwenden...
Zitat von: betateilchen am 21 Januar 2026, 17:27:27Aus welchem Modultyp kommen denn die readings, die Du da gepostet hast?
die kommen aus dem modul "abfall", dass seine daten vom modul "calendar" bezieht.
das ical liegt als file im fhem-verzeichnis und wurde direkt von der hiesigen abfallwirtschaft bereit gestellt.
Zitatdas ical liegt als file im fhem-verzeichnis und wurde direkt von der hiesigen abfallwirtschaft bereit gestellt.
Du könntest oben in der Kommandozeile einfach ein
"sed -i 's/GrüneTonne/GrueneTonne/g' dateiname.ics" ausführen, dann wird im Modul auch nix ersetzt. Mein Verständnis.
sed is doch nur linux?
und ... kann doch keine lösung sei
Zitatsed is doch nur linux?
Kann ich net mitreden, muss wer anderes was zu sagen.
Zitatund ... kann doch keine lösung sei
Warum soll mer die Datei net ä mol im Johr so schreiwwe kenne, wie mer se brauch?
Zitat von: TomLee am 21 Januar 2026, 19:37:22Warum soll mer die Datei net ä mol im Johr so schreiwwe kenne, wie mer se brauch?
Jo mei, wo kemst denn du daher? 8)
Sailor
Ausm Gmiisegarte vun Deitschland, de Palz 8)
Zitat von: the ratman am 21 Januar 2026, 19:25:35sed is doch nur linux?
Auch die Powershell kann sowas wie sed, heißt dort "get-content" oder so ähnlich.
Zitat von: the ratman am 21 Januar 2026, 19:25:35und ... kann doch keine lösung sei
Nein, die Lösung lautet
s/Windows/Linux/ig
Zitat von: the ratman am 13 Januar 2026, 10:32:14dumme frage: habt ihrs schon eignepflegt?
Ich lebe aber ich war seit einiger Zeit kaum zuhause und nicht an der Entwicklung. Ich checke es bald ein.
Endlich ist es eingecheckt.
Ab morgen 8 Uhr per Update verfügbar.