Patch für HttpUtils

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

Vorheriges Thema - Nächstes Thema

rob

Hallo zusammen.

Zitat von: rudolfkoenig am 11 Januar 2023, 08:52:19
Ich habe aber eine zusaetzliche Log-Asusgabe eingebaut:
Diese verweist mich seit einigen Tagen hartnäckig einmal täglich auf diesen Thread. Weil ich anscheinend der einzige User damit bin, überlege ich seit Tagen, ob ich mich hier outen soll  :-\

Das Log sagt:

2023.02.24 11:16:21 1: Encoding problem in data/header (not UTF-8), check Forum #131207
2023.02.24 11:16:21 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 756.
2023.02.24 11:16:21 1: stacktrace:
2023.02.24 11:16:21 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (756)
2023.02.24 11:16:21 1:     main::__ANON__                      called by fhem.pl (791)
2023.02.24 11:16:21 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 757.
2023.02.24 11:16:21 1: stacktrace:
2023.02.24 11:16:21 1:     main::__ANON__                      called by FHEM/HttpUtils.pm (757)
2023.02.24 11:16:21 1:     main::__ANON__                      called by fhem.pl (791)


Die Uhrzeit korreliert mit keiner Telegram-Aktion. Ich habe auch nirgends Probleme mit Umlauten bemerkt. Nur mein Log ist überzeugt ein Problem haben zu wollen  ;D

Eigentlich würde ich das wegignorieren wie in manch anderem Fall ...
Nach etwas Suche habe ich per Zeitstempel nur eine Korrelation gefunden, welche auch genau zu 1xtgl. passt: mein Müllkalender (via 57_Calendar.pm). Die dort für url definierte Adresse enthält das 'ß'. Nur Indizien, kein Beweis.

Ich könnte also auf "...strasse" statt "...straße" umstellen, dann ist die Meldung ggf. auch weg, dachte aber ich melde mich doch hier (s.u.) :)

Viele Grüße
rob



Zum Reproduzieren:
define myCalender Calendar ical url https://web.c-trace.de/augsburglandkreis/abfallkalender/cal?Gemeinde=Ellgau&Ort=Ellgau&Strasse=Mühlstraße&Hausnr=6&Jahr=%Y&abfall=9|2|3|4|8| 82800
attr myCalender cutoffOlderThan 06:00:00
attr myCalender defaultFormat "starts $T1 - ends $T2 $S $M"
attr myCalender defaultTimeFormat %d.%m.%Y
attr myCalender hideLaterThan 30d
attr myCalender hideOlderThan 06:00:00
attr myCalender synchronousUpdate 0
attr myCalender verbose 0
#   DEF        ical url https://web.c-trace.de/augsburglandkreis/abfallkalender/cal?Gemeinde=Ellgau&Ort=Ellgau&Strasse=Mühlstraße&Hausnr=6&Jahr=%Y&abfall=9|2|3|4|8| 82800
#   FUUID      63f8a6ba-f33f-47bb-440b-291b9ba09a38b372
#   FVERSION   57_Calendar.pm:0.263440/2022-08-22
#   NAME       myCalender
#   NOTIFYDEV  global
#   NR         52
#   NTFY_ORDER 50-myCalender
#   STATE      triggered
#   TYPE       Calendar
#   eventCount 5
#   READINGS:
#     2023-02-24 13:02:08   calname         Abfuhrdaten Landkreis AugsburgLandkreis
#     2023-02-24 13:02:08   lastUpdate      2023-02-24 13:02:06
#     2023-02-24 13:02:08   nextUpdate      2023-02-25 12:02:06
#     2023-02-24 13:02:08   nextWakeup      2023-02-25 00:00:00
#     2023-02-24 13:02:08   state           triggered
#
setstate myCalender triggered
setstate myCalender 2023-02-24 13:02:08 calname Abfuhrdaten Landkreis AugsburgLandkreis
setstate myCalender 2023-02-24 13:02:08 lastUpdate 2023-02-24 13:02:06
setstate myCalender 2023-02-24 13:02:08 nextUpdate 2023-02-25 12:02:06
setstate myCalender 2023-02-24 13:02:08 nextWakeup 2023-02-25 00:00:00
setstate myCalender 2023-02-24 13:02:08 state triggered

* Adresse ist äquivalent, aber nicht meine - hier habe ich absichtlich eine Straße ganz woanders gewählt, die auch noch das 'ü' enthält  :P Warum? Weil umschreiben auf '...strasse' nicht reicht und ändern des ü auf '...Muehlstrasse' keinen Kalender mehr bringt.
Mit 'get myCalender update' kann ich die Log-Meldung also provozieren.

FHEM ist aktuell, läuft im Docker-Container und "locale -a" bringt dort:

C
C.UTF-8
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
deutsch
dutch
en_DK
en_DK.iso88591
en_DK.iso885915
en_DK.utf8
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
en_IE
en_IE.iso88591
en_IE.iso885915
en_IE.utf8
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
es_ES
es_ES@euro
es_ES.iso88591
es_ES.iso885915@euro
es_ES.utf8
french
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
german
italian
it_IT
it_IT@euro
it_IT.iso88591
it_IT.iso885915@euro
it_IT.utf8
nl_NL
nl_NL@euro
nl_NL.iso88591
nl_NL.iso885915@euro
nl_NL.utf8
pl_PL
pl_PL.iso88592
pl_PL.utf8
polish
POSIX
spanish

Prof. Dr. Peter Henning

#31
Was soll denn "locale -a" bewirken ? Das zeigt doch nur alle möglichen Werte, aber eben nicht den eingestellten. Siehe hier: https://forum.fhem.de/index.php/topic,131207.msg1257843.html#msg1257843

LG

pah

rob

Gute Frage. Habs hier im Fred aufgeschnappt und als sinnvolle Info unterstellt ;) - für meinen Fall bitte ignorieren

VG
rob

rudolfkoenig

ZitatWeil ich anscheinend der einzige User damit bin, überlege ich seit Tagen, ob ich mich hier outen soll  :-\
Vielen Dank fuer den Hinweis.

Grund:
- Calendar.pm ruft ResolveDateTime() in fhem.pl auf, um %Y zu wandeln
- da wird POSIX::strftime() aufgerufen, was bei LC_TIME=de_DE.UTF-8 das UTF-8 Input ungefragt nach widechar Output konvertiert.

Ich habe fhem.pl jetzt angepasst, damit das Output wieder zurueckkonvertiert wird.


Eigentlich(TM) darf im URL nur ASCII vorkommen, es exisitert eine URL-Kodierung um andere Zeichen unterzubringen.
Der Haken: Mühlstraße wird nach der URL-Kodierung zu M%C3%BChlstra%C3%9Fe, was strftime wiederum zu M203FebruaryChlstra2032023-02-24e aendert.
D.h. die URL-Kodierung hilft dem Benutzer nicht, hier muss der Modulautor eingreifen.

rob

Vielen Dank für den Fix + Erläuterung  8)
Ich habe kurzerhand zum Kalendermodul einen Fred eingestellt (https://forum.fhem.de/index.php/topic,132475.0.html), falls wer hier stolpert/ aufschlägt  ;)

VG
rob

andies

Zitat von: Prof. Dr. Peter Henning am 10 Januar 2023, 16:22:52Schließlich habe ich noch utfspecial=1 gesetzt beim TelegramBot => Keine Fehlermeldung, Nachricht mit Umlauten geht raus
Kann ich mal nachfragen, was Du alles insgesamt gemacht hattest? Dieses Attribut gesetzt plus
dpkg-reconfigure localesund dann UTF8-deutsch auswählen? Bei mir reichen beide Sachen nämlich nicht, ich kann weiter keine Nachrichten über den Bot mit Umlauten senden.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Prof. Dr. Peter Henning

Na, genau in der Reihenfolge wie beschrieben: locale gesetzt, dann kamen erst die ordentlichen Fehlermeldungen. Dann utfspecial = 1 - und sonst gar nichts.

LG

pah