Patch für HttpUtils

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

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo Rudi,

Ich hatte Probleme mit Umlauten im param->{data}  Value beim senden über HttpUtils_BlockingGet.
Fehlermeldung war

substr outside of string at FHEM/HttpUtils.pm line 749

Folgende Änderung in der HttpUtils.pm hat mir geholfen den Fehler zu beseitigen und die Daten ohne Fehler zu übertragen.

@@ -738,7 +738,7 @@ HttpUtils_Connect2($)

     $data = $hdr.(defined($data) ? $data:"");
     $hash->{directWriteFn} = sub($) { # Nonblocking write
-      my $ret = syswrite $hash->{conn}, $data;
+      my $ret = syswrite $hash->{conn}, Encode::decode("UTF-8", $data);
       if(!defined($ret) || $ret <= 0) {
         return if($! == EAGAIN);
         my $err = $!;



Grüße
Marko
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

In der Voreinstellung (attr global encoding bytestream) darf diese Zeile nicht notwendig sein, da per Definition in diesem Modus interne Datenstrukturen als UTF-8 Bytestrom gespeichert sind.

ALLERDINGS ist eine Dekodierung nach UTF-8 notwendig, falls "attr global encoding unicode" gesetzt ist (die globale Variable $unicodeEncoding ist dann 1)
Das habe ich nachgeholt.

CoolTux

Hallo Rudi,

Ich hatte das Attribut encoding global nicht gesetzt. Sollte also bytestream dann sein.
Aber wenn ich nun versuche das Attribut zu setzen, egal mit welchen Wert dann macht FHEM ein neustart.

Log verbose 5 anbei.
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

Leider klappt es auch mit der aktuell im svn vorhandenen HttpUtils nicht.

Log


2022.12.28 18:24:01.498 1: !!!DEBUG - MsgcreateParamRef: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd
2022.12.28 18:24:01.498 1: !!!DEBUG - Def: msg ParamValue: urlPath Resp: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd
2022.12.28 18:24:01.498 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"test"}
2022.12.28 18:24:01.498 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"test"}
2022.12.28 18:24:01.534 1: !!!DEBUG - TOKEN aus Hash: syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd
2022.12.28 18:24:12.894 1: !!!DEBUG - MsgcreateParamRef: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd
2022.12.28 18:24:12.894 1: !!!DEBUG - Def: msg ParamValue: urlPath Resp: r0/rooms/!FEMjJvKtkZzFnrnUZH:matrix.cooltux.net/send/m.room.message?access_token=syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd
2022.12.28 18:24:12.894 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"täst"}
2022.12.28 18:24:12.894 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"täst"}
2022.12.28 18:24:12.897 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 752.
2022.12.28 18:24:12.898 1: stacktrace:
2022.12.28 18:24:12.898 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (752)
2022.12.28 18:24:12.898 1:     main::__ANON__                      called by fhem.pl (791)
2022.12.28 18:24:12.898 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 753.
2022.12.28 18:24:12.898 1: stacktrace:
2022.12.28 18:24:12.898 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (753)
2022.12.28 18:24:12.898 1:     main::__ANON__                      called by fhem.pl (791)
2022.12.28 18:24:12.899 1: !!!DEBUG - TOKEN aus Hash: syt_c3lzdGVtbWVzc2FnZV9ib3Q_lvlxzTClcdnRBUkTQhSr_028fVd


Siehe einmal test und einmal täst
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

ZitatIch hatte das Attribut encoding global nicht gesetzt. Sollte also bytestream dann sein.
In diesem Fall muss derjenige, der $data liefert, dafuer sorgen, dass die Daten in UTF-8 Format (bytestream, bereits "dekodiert") vorliegen.

ZitatAber wenn ich nun versuche das Attribut zu setzen, egal mit welchen Wert dann macht FHEM ein neustart.
Wieso aber?
encoding
Set the internal encoding used for storing strings. Possible values: bytestream (default) and unicode.
Notes:
Since not all modules were checked, if they work correctly with the internal unicode encoding, this feature is experimental.
Changing the attribute value triggers a save and a shutdown restart



ZitatLeider klappt es auch mit der aktuell im svn vorhandenen HttpUtils nicht.
Diese Version sollte auch nur den Fall "attr global encoding unicode" fixen, und da Du ihn nicht gesetzt hast, duerfte sie in deinem Fall keine Auswirkung haben.

CoolTux

Zitat von: rudolfkoenig am 28 Dezember 2022, 18:47:56
In diesem Fall muss derjenige, der $data liefert, dafuer sorgen, dass die Daten in UTF-8 Format (bytestream, bereits "dekodiert") vorliegen.
Wieso aber?
encoding
Set the internal encoding used for storing strings. Possible values: bytestream (default) and unicode.
Notes:
Since not all modules were checked, if they work correctly with the internal unicode encoding, this feature is experimental.
Changing the attribute value triggers a save and a shutdown restart


Diese Version sollte auch nur den Fall "attr global encoding unicode" fixen, und da Du ihn nicht gesetzt hast, duerfte sie in deinem Fall keine Auswirkung haben.

OK das mit dem Attribut habe ich verstanden.

Zurück zu meinem HttpUtils Problem. Ich bin ja selbst der jenigen der Data liefert, oder besser gesagt das FHEMWEB. Der String wird auch nicht mehr angefasst und genau so an HttpUtils geliefert.
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

Kannst Du mir ein Beispiel zeigen?

CoolTux

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

Irgendwas, womit ich das Problem nachstellen kann.

CoolTux

#9
https://git.cooltux.net/FHEM/fhem-matrix/src/branch/patch-CoolTux

Du benötigst
lib/FHEM/Devices/Matrix/Client.pm
FHEM/70_Matrix.pm

defmod matrix Matrix matrix.cooltux.net <USER_BEKOMMST_DU_PER_SMS>
attr matrix matrixMessage <BEKOMMST_DU_PER_SMS>
attr matrix matrixSender <BEKOMMST_DU_PER_SMS>
attr matrix room Test
attr matrix verbose 1


Damit solltest Du testen können.
Nach dem anlegen musst Du noch das Passwort vergeben welches Du per SMS bekommst.

set matrix setPassword pass=<BEKOMMST_DU_PER_SMS>

Dann kannst Du testen

set matrix msg Dies ist ein Test

das geht keine Fehlermeldung im Log

set matrix msg Dies ist ein Täst

Fehlermeldung im Log und es kommt nichts an.



Grüße
Marko
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

Auf der verlinkten Seite gibt es kein Client.pm, nur ein Matrix.pm.
Wenn ich die nach Client.pm umbenenne, kriege ich
Undefined subroutine &FHEM::Matrix::GP_Import called at lib/FHEM/Devices/Matrix/Client.pm line 27.

JoWiemann

Zitat von: rudolfkoenig am 29 Dezember 2022, 16:08:36
Auf der verlinkten Seite gibt es kein Client.pm, nur ein Matrix.pm.
Wenn ich die nach Client.pm umbenenne, kriege ich
Undefined subroutine &FHEM::Matrix::GP_Import called at lib/FHEM/Devices/Matrix/Client.pm line 27.


Hallo Rudi,

ist ja auch im lib - Verzeichnis: https://git.cooltux.net/FHEM/fhem-matrix/src/branch/patch-CoolTux/lib/FHEM/Devices/Matrix

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

CoolTux

#12
Zitat von: rudolfkoenig am 29 Dezember 2022, 16:08:36
Auf der verlinkten Seite gibt es kein Client.pm, nur ein Matrix.pm.
Wenn ich die nach Client.pm umbenenne, kriege ich
Undefined subroutine &FHEM::Matrix::GP_Import called at lib/FHEM/Devices/Matrix/Client.pm line 27.


Ist das Thema noch aktuell Rudi? Habe gesehen das Du schon Nachrichten versendet hast.

Du warst aber im Branch patch-CoolTux? Oder bist Du im falschen Branch irgendwann gelandet?

Grüße
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

Zitatset matrix msg Dies ist ein Täst
Ich sehe keine Fehlermeldung, nur sehr viele !!!DEBUG Meldungen, und Täst kommt in meinem Fall auch als Bytestream im Modul an:
2022.12.29 16:24:39 1: !!!DEBUG - MsgcreateParamRef: {"msgtype":"m.text", "body":"Dies ist ein Täst"}
2022.12.29 16:24:39 1: !!!DEBUG - Def: msg ParamValue: data Resp: {"msgtype":"m.text", "body":"Dies ist ein Täst"} / {"msgtype":"m.text", "body":"Dies ist ein T(195)(164)st"}
2022.12.29 16:24:39 3: matrix 2 msg Request Busy/Sync 1 / 0
2022.12.29 16:24:39 3: matrix 2 msg Result 200
2022.12.29 16:24:39 1: !!!DEBUG - TOKEN aus Hash: syt_c3lzdGVtbWVzc2FnZV9ib3Q_vLiDPMClbVjtzPvDnbgI_00cPh9



Um Klarheit zu haben, habe ich die DEBUG Ausgabe in Client.pm mit dem folgenden Patch erweitert:
--- /home/rudi/Downloads/Client.pm 2022-12-29 16:27:00.853159346 +0100
+++ lib/FHEM/Devices/Matrix/Client.pm 2022-12-29 16:24:16.691586249 +0100
@@ -908,13 +908,16 @@
     ::Log( 1,
         '!!!DEBUG - MsgcreateParamRef: ' . $paramref->{$def}->{$paramValue} );

+    my $dbg = $paramref->{$def}->{$paramValue};
+    $dbg =~ s/([^ -~])/"(".ord($1).")"/ge;
     ::Log( 1,
             '!!!DEBUG - Def: '
           . $def
           . ' ParamValue: '
           . $paramValue
           . ' Resp: '
-          . $paramref->{$def}->{$paramValue} );
+          . $paramref->{$def}->{$paramValue}
+          . " / $dbg");
     return (
         exists( $paramref->{$def}->{$paramValue} )
           && $paramref->{$def}->{$paramValue}

CoolTux

Und Du musstest nichts ändern das es geht?

Ich habe es sogar über telnet direkt auf dem FHEM Server gemacht und bekam die Fehlermeldung.
Auf jeden Fall vielen vielen Dank für's testen. Dann muss ich schauen und mal Deinen Patch nehmen für Ausgaben.
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