(Gelöst) I2C_LCD/FRM_I2C, ° Zeichen kann nicht ausgegeben werden

Begonnen von schka17, 06 März 2015, 13:35:55

Vorheriges Thema - Nächstes Thema

schka17

Hallo,

Ich habe hier ein Problem bei dem ich einfach nicht weiterkomme, vielleicht hat jemand eine Idee:

Es geht darum ein ° Zeichen auf ein LCD Display über I2C_LCD/FRM_I2C auszugeben.
Lt. Datenblatt ist das der ASCII Charcater 0xDF oder 223 dezimal. Wenn ich das als ASCII Character über die Tastatur eingeben wird ß angezeigt.

Gebe ich jetzt diese Befehl über Telnet ein

set NANO_I2C_LCD  writeXY 17,0,2,1 ßC

Wird am Display das ° Zeichen korrekt angezeigt.

Gebe ich den selben Befehle über die FHEM Befehlszeile ein, bzw. bei Verwendung im notify, wird das Zeichen auf der 2. Zeile im angehängten Bild angezeigt. Ich nehme an die Eingabe übers Web ist nicht transparent und die codepage schlägt hier durch, wie kann ich das umgehen?

---beginn scherz---
in der fhem.cfg ändern?
---ende scherz

PS: Ich habe übers Webinterface alle ASCII Character ausprobiert.

Danke und Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

rudolfkoenig

ASCII ist mWn von 0-127 definiert (0x00-0x80), und das erwaehnte Zeichen ist in ASCII nicht enthalten.
FHEM selbst ist der Zeichensatz egal, FHEMWEB verwendet UTF-8 (das gezeigte Zeichen, DEGREE SIGN, hat den Code C2B0), das telnet modul kann auf UTF-8 oder ISO 8859-1/Latin1 eingestellt werden, in ISO 8859-1 wird das Zeichen mit 0xb0 kodiert.

MAn muss also zunaechst den Zeichensatz rauskriegen, dann eine Funktion bauen, die von UTF-8 konvertiert, und diese Funktion entweder in das notify selbst, in I2C_LCD oder in FRM_I2C einbauen. Fuer den Benutzer bleibt vorerst nur notify.

schka17

Du hast natürlich Recht, der ASCII Zeichensatz hat nur 7 Bit also 0-127 dec.

Das encode attribut von Telnet habe ich nicht gesetzt, sollte also lt. comandref auf UTF-8 konfiguriert sein. Mein Putty-Terminal ist allerdings auf ISO-8859-1:1998 (Latin-1, West Europe) eingestellt, wenn ich eben 223 decimal eingebe bekomme ich ß zurück, soweit so gut.
lt. LCD Datenblatt hat das ° Zeichen den code 1101 1111 = 223 dec = 0xDF.
Wie du geschrieben hast, im UTF-8 hat das degree sign 0xc2 0xb0, also wenn ich das richtig verstanden müsste ich irgendwie aus C2B0 DF machen?






M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

Wzut

du nutzt doch das 52_I2C_LCD.pm ? schon mal in die commandref geschaut ?
ich denke Norbert hat das attr replaceRegex genau für so einen Fall eingebaut :

Zitat
Attributes
    restoreOnReconnect <on|off>
    replaceRegex ä=ae,cd+=ef,g=\x{DF}
    specify find=replace regex pattern eg for non-printable characters. \x{DF} will become char 223, which is º on my lcd.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

schka17

oh mann,

ich wäre ohne commandref gar nie so weit gekommen, allerdings ist Fülle an Informationen so groß das ich das einfach überlesen habe, hätte mich auch gewundert das ich der erste bin der diese Problem hat.

danke für den Tip.

so gehts:

replaceRegex ->    ß=\x{DF}

Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000