Seit neustem Probleme mit Umlauten

Begonnen von bruece-lee, 20 April 2017, 19:30:00

Vorheriges Thema - Nächstes Thema

bruece-lee

Hallo,

seit kurzem habe ich Probleme, dass Umlaute zum Teil in Smartvisu nicht richtig dargestellt werden (siehe Anhänge). In diesem Fall handelt es sich um ein basic.symbol, welches angezeigt werden soll, wenn der Torstatus "Geöffnet" heißt. Seit neustem wird jedoch das "ö" nicht richtig dargestellt und daher schlägt die Anzeige fehl.


{{ basic.symbol(id~'windowopen', gad_window, '', 'fts_door_open.svg','Geöffnet', '', 'icon1') }}

Bei der Definition des GAD's ist als Konverter "Direct" eingestellt.


Kann dies auch mit UTF8-Problemen zusammenhängen? Kann mir jemand einen Tipp geben wo das Problem liegen könnte?

Vielen Dank und viele Grüße,
Bruece-Lee

dev0

Eine mögliche Ursache könnte sein, dass Du SV Konfigdateien mit BOM gespeichert hast.

bruece-lee

Kannst du mit kurz erklären was BOM ist? Wie kann ich die Konfigdateien prüfen? Müsste ich am Inhalt dann irgendwas sehen?

dev0

Erklärung findest Du hier: https://de.wikipedia.org/wiki/Byte_Order_Mark
Prüfe, dass Dein Editor diese Markierung nicht speichert.

bruece-lee

Hallo dev0,
danke für die Erläuterung. Ich habe mich in das Thema BOM eingelesen und sämtliche Dateien von Smartvisu mit folgenden Linux Befehl gecheckt:

grep -rl $'\xEF\xBB\xBF' .

Im FHEM-Ordner befinden sich zwar einige Dateien, bei denen UTF-8 mit BOM als Kodierung gesetzt ist, aber sämtliche Smartvisu Programm und Konfig-Dateien inkl. der selbst erstellten HTML Dateien im SV Projekt haben dies nicht. Daher scheint dies keine Spur zu sein.

Ich hatte in den letzten Tagen noch ein anderes Problem mit dem Zeichensatz, da brachte dieser Tipp von herrmannj die Lösung:

Zitat von: herrmannj am 17 April 2017, 14:20:59
json und utf8 sind leider natürlich Feinde ...

Es gab dazu leider Gottes auch eine Änderung am JSON perl modul (nicht fhem, perl selber).

Probiere mal die #733 so zu modifizieren:

$msg = decode_json($msg);

zu

use Encode;
$msg = JSON->new->utf8->decode(encode('UTF-8', $msg));

...

vg
Joerg


Gibt es für die Übertragung der Daten von FHEM in die Gegenrichtung, also Richtung Smartvisu evtl. ebenfalls noch Code-Stellen, die ähnlich verändert werden müssten?
Ich habe noch nicht verstanden, wo meine Probleme plötzlich herkommen. Smartvisu läuft schon lange fehlerfrei bei mir und ich habe zuvor weder Linux-Updates gemacht, noch kurz vor dem Auftreten der Fehler FHEM-Updates.

dev0

Zitat von: bruece-lee am 21 April 2017, 16:54:03
grep -rl $'\xEF\xBB\xBF' .

Du schreibst, das nur manche Widgets betroffen sind, daraus folgt für mich, dass es kein generelles Problem (in Fronthem) ist. Vielleicht lohnt es sich auch noch nach den anderen Kennungen (UTF-16, etc) zu suchen? Vielleicht hilft es auch herauszufiden welche Gemeinsamkeiten bei den betroffenen Widgets bestehen: gleicher Raum, html-Datei, Konverter, ...

bruece-lee

Ich habe die Suche wie folgt erweitert:


grep -rl $'\xEF\xBB\xBF' .
grep -rl $'\xFE\xFF' .
grep -rl $'\xFF\xFE' .
grep -rl $'\xFF\xFE\x00\x00' .
grep -rl $'\x2B\x2F\x76' .
grep -rl $'\xF7\x64\x4C' .
grep -rl $'\xDD\x73\x66\x73' .
grep -rl $'\x0E\xFE\xFF' .
grep -rl $'\xDD\x73\x66\x73' .
grep -rl $'\x0E\xFE\xFF' .
grep -rl $'\xFB\xEE\x28' .
grep -rl $'\x84\x31\x95\x33' .
grep -rl $'\x00\x00\xFE\xFF' .


Ergebnis: Keine Kennung gefunden.

Das Problem tritt raumübergreifend auf, sowie in allen Widgets. Ich habe dazu den Test gemacht, dass ich einen Dummy in FHEM definiert habe und diesem verschiedene Werte mit Umlauten zugewiesen habe. Dann habe ich Widgets in Smartvisu definiert, z.B. basic.value, basic.symbol etc.

Bei allen kommen die Sonderzeichen nicht korrekt an. Daraus schließe ich im Moment, dass die einzige Gemeinsamkeit, die ich aktuell finden kann, der Konverter "Direct" ist.

dev0

Und wie kommt die richtige Anzeige aus "richtig.PNG" zustande?

bruece-lee

Unter dem Symbol gibt es die zwei Buttons. Diese sind dazu gedacht, den Status zu korrigieren, wenn das Signal von dem eigentlichen Sensor mal nicht korrekt übermittelt wurde. Der Smartvisu Button ist mittels GAD "set_window_status.sw" verbunden, welches ebenfalls als Konverter "Direct" benutzt und unter FHEM "set_window_status" ansteuert.

Der Code sieht so aus, wobei window.door_state von mir erstellt wurde:


Smartvisu:
{{ window.door_state('fenster_garage_tuer_vorne_widget', 'fenster_garage_tuer_vorne.sw', 'set_window_status.sw', 'fenster_garage_tuer_vorne Geöffnet', 'fenster_garage_tuer_vorne Geschlossen', 'fenster_garage_tuer_vorne_timestamp.sw') }}

FHEM in einem Notify:
set_window_status:.* setstate $EVTPART0 $EVTPART1;sleep 0.1;trigger $EVTPART0 $EVTPART1


Das ist der einzige Weg, wie Sonderzeichen richtig angezeigt werden. D.h. das Kommando wird in Smartvisu generiert, an FHEM übertragen und setzt dann den Status für die Fenster und Türen wieder in Smartvisu.

Selbst wenn ich das gleiche Kommando: setstate fenster_garage_tuer_vorne Geöffnet;sleep 0.1;trigger fenster_garage_tuer_vorne Geöffnet direkt in FHEM eintippe gehts schief und das Sonderzeichen kommt nicht korrekt in SV an!

dev0

Vielleicht hat Jörg oder jemand anderes noch eine Idee, sonst fronthem code lesen und debuggen. Vornehmlich an zentralen Stellen, an den von/in JSON umgewandelt wird.

bruece-lee

@Jörg: Hast Du evtl. noch eine Idee? Ich bin leider bei der Fehlersuche bislang nicht zu einer Lösung gekommen.

Ansonsten werde ich einen Workaround machen und "geöffnet" überall in "offen" ändern.