Patch für HttpUtils

Begonnen von CoolTux, 28 Dezember 2022, 12:34:16

Vorheriges Thema - Nächstes Thema

CoolTux

Habe mit dem Patch getestet. Es kommt

2022.12.29 16:59:21.811 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"} / {"msgtype":"m.text", "body":"t(195)(164)st"}
2022.12.29 16:59:21.815 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 752.
2022.12.29 16:59:21.815 1: stacktrace:
2022.12.29 16:59:21.815 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (752)
2022.12.29 16:59:21.815 1:     main::__ANON__                      called by fhem.pl (791)
2022.12.29 16:59:21.815 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 753.
2022.12.29 16:59:21.815 1: stacktrace:
2022.12.29 16:59:21.815 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (753)
2022.12.29 16:59:21.815 1:     main::__ANON__                      called by fhem.pl (791)


Ich teste mal auf einem zweiten System
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ok also das ist jetzt ober peinlich.

Auf meinem Produktivsystem geht es. Keine Fehlermeldung und es kommen die Nachrichten an. Nun muss ich mal schauen was da anders ist. Ich hatte schon den Ansatz mit locale mir angeschaut, hatte da aber nichts feststellen können. Diesen werde ich nun noch einmal genauer prüfen.


Danke Rudi, sorry für den Aufwand. Tut mir echt Leid.  :-[
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#17
Interessant. Ich habe auf dem Testsystem zusätzlich noch en_US.utf8 als locale hinzugefügt. Ausserdem habe ich die locale Einstellungen noch mal neu abgespeichert und die locale generieren lassen.

Und nun habe ich das Problem auf meinem Produktivsystem auch. Wo es bis eben aber geklappt hat

root@p-fhem:/opt/fhem/lib/FHEM/Devices/Matrix# locale -a
C
C.UTF-8
de_DE.utf8
en_US.utf8
POSIX


Gesetzt mit
dpkg-reconfigure locales

und de_DE.utf8 als Standard.


2022.12.29 17:24:33 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"täst"}
2022.12.29 17:24:33 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"} / {"msgtype":"m.text", "body":"t(195)(164)st"}
2022.12.29 17:24:33 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 749.
2022.12.29 17:24:33 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 750.

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Brauchst kein Mitleid zu haben: mein "encoding unicode" Fix in HttpUtils.pm war nicht sauber.
Das scheint aber jetzt auch zu funktionieren.

In Client.pm steht:
        header => 'User-Agent: HttpUtils/2.2.3\r\nAccept: application/json'

Ich fuerchte das ist zu viel, weil \r\n damit nicht in <cr><nl> gewandelt wird, sondern verbatim \r\n bleibt.
Ich habe die Quotes getauscht: header => "...", und so getestet.


Und nun habe ich das Problem auf meinem Produktivsystem auch.
Auf was steht $LANG? Und "env | grep LC_"?

CoolTux

env sagt

SHELL=/bin/bash
SUDO_GID=1000
SUDO_COMMAND=/bin/bash
SUDO_USER=marko
PWD=/opt/fhem
LOGNAME=root
HOME=/root
LANG=de_DE.UTF-8
TERM=xterm-256color
USER=root
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SUDO_UID=1000
MAIL=/var/mail/root
_=/usr/bin/env
OLDPWD=/root
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

"env | grep LC_"

sagt gar nichts
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Strange. Vmtl. neumodisches Zeug.
Und sehr verwirrend, dass das FHEM beeinflusst.
Wie schaut es mit "attr global encoding unicode" aus?

CoolTux

#22
Habe ich auf beiden Systemen nicht gesetzt.

Was mir noch aufgefallen ist.


Auf dem Produktivsystem sieht die Fehlermeldung so aus
2022.12.29 17:37:42 1: !!!DEBUG - Def: msg ParamValue: urlPath Resp: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_YVwrRypJFSBfAnJJTRrQ_1obFJx / r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_YVwrRypJFSBfAnJJTRrQ_1obFJx
2022.12.29 17:37:42 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"täst"}
2022.12.29 17:37:42 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"} / {"msgtype":"m.text", "body":"t(195)(164)st"}
2022.12.29 17:37:42 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 752.
2022.12.29 17:37:42 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 753.



Auf dem Testsystem so
2022.12.29 17:37:06.645 1: !!!DEBUG - Def: msg ParamValue: urlPath Resp: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_JKlYtnmEtiOFEVDSujZq_28R8Ew / r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_JKlYtnmEtiOFEVDSujZq_28R8Ew
2022.12.29 17:37:06.645 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"täst"}
2022.12.29 17:37:06.645 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"} / {"msgtype":"m.text", "body":"t(195)(164)st"}
2022.12.29 17:37:06.649 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 752.
2022.12.29 17:37:06.649 1: stacktrace:
2022.12.29 17:37:06.649 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (752)
2022.12.29 17:37:06.649 1:     main::__ANON__                      called by fhem.pl (791)
2022.12.29 17:37:06.649 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 753.
2022.12.29 17:37:06.649 1: stacktrace:
2022.12.29 17:37:06.649 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (753)
2022.12.29 17:37:06.649 1:     main::__ANON__                      called by fhem.pl (791)



Beide Systeme habe ich eben upgedatet.






Ok, ich habe auf dem Testsystem stacktrace aktiv.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: rudolfkoenig am 29 Dezember 2022, 17:30:40
Brauchst kein Mitleid zu haben: mein "encoding unicode" Fix in HttpUtils.pm war nicht sauber.
Das scheint aber jetzt auch zu funktionieren.

In Client.pm steht:
        header => 'User-Agent: HttpUtils/2.2.3\r\nAccept: application/json'

Ich fuerchte das ist zu viel, weil \r\n damit nicht in <cr><nl> gewandelt wird, sondern verbatim \r\n bleibt.
Ich habe die Quotes getauscht: header => "...", und so getestet.


Und nun habe ich das Problem auf meinem Produktivsystem auch.
Auf was steht $LANG? Und "env | grep LC_"?

Die Quotes habe ich im übrigen geändert bei mir
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

2022.12.29 17:37:42 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 753.

Die Meldung kommt, wenn in HttpUtils.pm Daten auftauchen (header order data), die nicht als UTF-8 Bytestrom kodiert sind, und "attr global encoding unicode" auch nicht gesetzt ist. Eigentlich(TM) muessen die Module je nach Attributwert die Daten "richtig" liefern.

CoolTux

2022.12.29 18:06:09.330 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"täst"}
2022.12.29 18:06:09.330 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"} / {"msgtype":"m.text", "body":"t(195)(164)st"}
2022.12.29 18:06:09.333 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 751.
2022.12.29 18:06:09.333 1: stacktrace:
2022.12.29 18:06:09.333 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (751)
2022.12.29 18:06:09.334 1:     main::__ANON__                      called by fhem.pl (791)
2022.12.29 18:06:09.334 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 752.
2022.12.29 18:06:09.334 1: stacktrace:
2022.12.29 18:06:09.334 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (752)
2022.12.29 18:06:09.334 1:     main::__ANON__                      called by fhem.pl (791)



Ich habe mal die neuste HttpUtils installiert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Prof. Dr. Peter Henning

Also, ganz scheint es noch nicht zu stimmen. Ich habe mir am Wochenende einen Wolf gesucht, weil mein TelegramBot nach dem Umzug auf einen Mini-Server partout keine Umlaute mehr senden wollte.

Ganz sicher hat das aufrufende Perl-Programm UTF8 gesendet. Aber sobald ich damit den TelegramBot (und damit die HttpUtils...) aufgerufen habe, stieg das mit der Fehlermeldung

ZitatNonBlockingGet timed out on read ... after 30s

aus. Wie ich hier beschrieben habe https://forum.fhem.de/index.php/topic,131467.msg1256479.html#msg1256479
funktionierte es aber, wenn man die Umlaute direkt eingetippt hat, also vollkommen wirre Sache.

Erst nach den Hinweisen von JoWiemann und CoolTux habe ich zuerst die Locale überprüft und korrekt auf de_DE.UTF8 gesetzt. Dann trat der Fehler wenigstens mit ordentlicher Meldung auf:

Zitat2023.01.10 16:05:48 1: PERL WARNING: substr outside of string at /opt/fhem/FHEM/HttpUtils.pm line 752.
2023.01.10 16:05:48 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at /opt/fhem/FHEM/HttpUtils.pm line 753.

Schließlich habe ich noch utfspecial=1 gesetzt beim TelegramBot => Keine Fehlermeldung, Nachricht mit Umlauten geht raus

Die Fehlermeldungen wegen der Zeile 752 und 753 könnte man aber sicher noch abfangen.

LG

pah

rudolfkoenig

ZitatDie Fehlermeldungen wegen der Zeile 752 und 753 könnte man aber sicher noch abfangen.
Um festzustellen, wer das Problem verursacht, muesste man ein stacktrace haben, am besten optional.
Das muss man entweder explizit programmieren, oder man laesst das WARNING passieren, so wie jetzt.
Ich habe aber eine zusaetzliche Log-Asusgabe eingebaut:
Encoding problem in data/header (not UTF-8), check Forum #131207

Prof. Dr. Peter Henning

Ich dachte eigentlich, dass Stacktrace da überflüssig sei - weil ich den Kontext vorher genannt habe. Das ist irgendein fieses locale-Problem, das auftritt, wenn man die Locale auf C.UTF-8 hat und einen UTF8-String mit deutschen Umlauten vom TelegramBot an HttpUtils weiterleitet.

Ich seh zu, dass ich das bei Gelegenheit noch nachliefere.

LG

pah

rudolfkoenig

ZitatIch dachte eigentlich, dass Stacktrace da überflüssig sei
In diesem Fall sicher, aber es gibt vmtl. noch Faelle, wo HttpUtils aus einem anderen Modul aufgerufen wird.