Unicode FritzBox
Problem
FHEM beendet sich bzw. Module funktionieren nicht richtig, wenn Daten verarbeitet werden, die Umlaute verwenden. Dies ist in einigen FHEM Modulen der Fall. Aufgefallen bzw. beschrieben wurde der Fehler im Forum bezüglich HUEBridge Beitrag und GDSBeitrag.
Dokumentierte Fehlermeldungen über die Linux console (Meldung war nicht im FHEM Log zu sehen):
Can't locate unicore/Heavy.pl in @INC (@INC contains: /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2 /var/InternerSpeicher/fhem/lib/perl5/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/5.12.2/mips-linux /var/InternerSpeicher/fhem/lib/perl5/5.12.2 /opt/lib/perl5/site_perl/5.12.2/mips-linux /opt/lib/perl5/site_perl/5.12.2 /opt/lib/perl5/5.12.2/mips-linux /opt/lib/perl5/5.12.2 . ./FHEM) at /var/InternerSpeicher/fhem/lib/perl5/5.12.2/utf8_heavy.pl line 96.
Vermutung
Es scheint so zu sein, dass die Perl Version auf den fritzboxen unvollständig ist, was aber nur auffällt, sobald Encode oder Decode auf Daten trifft, die wirklich Unicode bzw UTF8 sind. Das schlägt natürlich auch dann, zu wenn ein Modul, das Encode/Decode nicht direkt verwendet sondern nur indirekt wie z.b. bei hue über JSON, beim iTunes Modul über DAAP::DMAP und bei dem Swap Modul und scheinbar bei GDS über XML::Simple.
Eine Funktion in utf8_heavy.pl versucht auf .\unicore\Heavy.pl zuzugreifen. Diese Datei ist auf der Fritz!Box nicht vorhanden und das führt zum Absturz von FHEM.
Lösung
- Datei Heavy.pl runterladen [1]
- Verzeichnis "unicore" erstellen unter /var/InternerSpeicher/fhem/lib/perl5/5.12.2/
- Datei Heavy.pl erstellen in /var/InternerSpeicher/fhem/lib/perl5/5.12.2/unicore/
- ggf. Dateirechte ändern
- fhem restart
Wichtig: das große "H" am Anfang des Datei-Namens
In der aktuelle FHEM Version 5.5 sind die entsprechenden perl Komponenten enthalten. Diese werden aber nur bei einer neu Installation installiert. Nicht beim update über das update Kommando.