Seite 2 von 3

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: So Jan 16, 2022 9:45 am
von cjungde
Hallo yankee,

Danke für die Hilfe mit Python.
Jetzt kommt alles richtig. Beide 'ä' werden angezeigt.

Code: Alles auswählen

pi@openWB:/var/www/html/openWB $ python3 ./modules/_senec/Test.py 
ääpi@openWB:/var/www/html/openWB $ 

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 10:21 am
von LutzB
Dürfte ein allgemeines Problem in Python < 3.7 sein. Wurde mit PR #1932 in der Nightly behoben.

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 3:04 pm
von derNeueDet
Das /xe4 Problem habe ich seit heute auch auf meiner Standard+ nachdem ich auf .251 gewechselt habe.

Bei mir ist es das Wort Json Zähler, das das ganze auslöst.

Auf der original openWB unter Stretch:

Code: Alles auswählen

pi@openWB:~ $ python -V
Python 2.7.13
pi@openWB:~ $ python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import sys
>>>
>>> sys.stdout.write("ä")
ä>>> sys.stdout.write("\xe4")
▒>>>
pi@openWB:~ $ python3 -V
Python 3.5.3
pi@openWB:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>>
>>> sys.stdout.write("ä")
ä1
>>> sys.stdout.write("\xe4")
ä1
>>>
auf einem Raspi unter Buster:

Code: Alles auswählen

pi@raspi4:~ $ python -V
Python 2.7.16
pi@raspi4:~ $ python
Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>>
>>> sys.stdout.write("ä")
ä>>> sys.stdout.write("\xe4")
▒>>>
pi@raspi4:~ $ python3 -V
Python 3.7.3
pi@raspi4:~ $ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>>
>>> sys.stdout.write("ä")
ä1
>>> sys.stdout.write("\xe4")
ä1
>>>
Sieht so aus, als ob beim Aufruf des Loggings Python 2 gezogen wird.

Edit: Nee, kann es nicht sein. Auf dem Raspi4 mit Buster kommt im openWB.log kein Fehler. OpenWB Versionen auf beiden Systemen ist identisch.

Meiner Meinung nach muss es mit dem legacy_run_server unde der Python Version unter Stretch zusammen hängen. Auf meiner openWB Standard+ war davor eine ältere .250 Version. Bereits mit den neuen JSON Modulen, aber noch ohne legacy_run_server installiert.

VG
Det

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 4:00 pm
von derNeueDet

Code: Alles auswählen

--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.5/logging/__init__.py", line 983, in emit
stream.write(msg)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 55: ordinal not in range(128)
Call stack:
File "/usr/lib/python3.5/threading.py", line 882, in _bootstrap
self._bootstrap_inner()
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/var/www/html/openWB/packages/legacy_run_server.py", line 56, in handle_connection
self.__callback(read_all_bytes(connection))
File "/var/www/html/openWB/packages/legacy_run_server.py", line 77, in handle_message
importlib.import_module(parsed[0]).main(parsed[1:])
File "/var/www/html/openWB/packages/modules/json/device.py", line 100, in main
{"bat": read_legacy_bat, "counter": read_legacy_counter, "inverter": read_legacy_inverter}, argv
File "/var/www/html/openWB/packages/helpermodules/cli/_run_using_positional_cli_args.py", line 34, in run_using_positional_cli_args
args.RUN(args)
File "/var/www/html/openWB/packages/helpermodules/cli/_run_using_positional_cli_args.py", line 19, in <lambda>
parser.set_defaults(RUN=lambda args: function(*[getattr(args, argument_name) for argument_name in arg_spec.args]))
File "/var/www/html/openWB/packages/modules/json/device.py", line 90, in read_legacy_counter
jq_exported=jq_exported
File "/var/www/html/openWB/packages/modules/json/device.py", line 77, in read_legacy
dev.update()
File "/var/www/html/openWB/packages/modules/json/device.py", line 60, in update
self._components[component].update(response.json())
File "/var/www/html/openWB/packages/modules/json/counter.py", line 35, in update
log.MainLogger().debug("Komponente "+self.component_config["name"]+" auslesen.")
File "/var/www/html/openWB/packages/helpermodules/log.py", line 40, in debug
self.logger.debug(message, exc_info=exception)
Message: 'Komponente Json Z\xe4hler auslesen.'
Arguments: ()
--- Logging error ---
Traceback (most recent call last):
File "/usr/lib/python3.5/logging/__init__.py", line 983, in emit
stream.write(msg)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 55: ordinal not in range(128)
Call stack:
File "/usr/lib/python3.5/threading.py", line 882, in _bootstrap
self._bootstrap_inner()
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/var/www/html/openWB/packages/legacy_run_server.py", line 56, in handle_connection
self.__callback(read_all_bytes(connection))
File "/var/www/html/openWB/packages/legacy_run_server.py", line 77, in handle_message
importlib.import_module(parsed[0]).main(parsed[1:])
File "/var/www/html/openWB/packages/modules/json/device.py", line 100, in main
{"bat": read_legacy_bat, "counter": read_legacy_counter, "inverter": read_legacy_inverter}, argv
File "/var/www/html/openWB/packages/helpermodules/cli/_run_using_positional_cli_args.py", line 34, in run_using_positional_cli_args
args.RUN(args)
File "/var/www/html/openWB/packages/helpermodules/cli/_run_using_positional_cli_args.py", line 19, in <lambda>
parser.set_defaults(RUN=lambda args: function(*[getattr(args, argument_name) for argument_name in arg_spec.args]))
File "/var/www/html/openWB/packages/modules/json/device.py", line 90, in read_legacy_counter
jq_exported=jq_exported
File "/var/www/html/openWB/packages/modules/json/device.py", line 77, in read_legacy
dev.update()
File "/var/www/html/openWB/packages/modules/json/device.py", line 60, in update
self._components[component].update(response.json())
File "/var/www/html/openWB/packages/modules/json/counter.py", line 35, in update
log.MainLogger().debug("Komponente "+self.component_config["name"]+" auslesen.")
File "/var/www/html/openWB/packages/helpermodules/log.py", line 40, in debug
self.logger.debug(message, exc_info=exception)
Message: 'Komponente Json Z\xe4hler auslesen.'
Arguments: ()

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 5:34 pm
von derNeueDet
Seltsam, jetzt war ich weg und komme wieder und die Fehler aus dem Logging sind weg.

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 7:52 pm
von yankee
cjungde hat geschrieben: So Jan 16, 2022 9:45 amJetzt kommt alles richtig. Beide 'ä' werden angezeigt.
Also du meinst bei meinem Programm kommt alles richtig, ja? Nicht im openWB-Log, oder? Oder hast du jetzt magischerweise im openWB.log "Komponente HTTP Zähler auslesen." drin stehen?

Bitte führe einmal mit ssh auf deinem Pi den Befehl "locale" aus und poste das Ergebnis.

EDIT: Und ob der folgende Befehl erfolgreich und ein "ä" ausgibt würde mich auch interessieren:

Code: Alles auswählen

python3 -c 'print("ä")' 2>&1 | while read -r line; do echo $line; done

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 8:34 pm
von cjungde
Hallo Yankee,

Ich meinte dein Test Programm.
Der Fehler erscheint mir jetzt behoben. Wie LutzB geschrieben hat, kommt der Fehler im Log nicht mehr.

Die Rückmeldung von locale kann ich erst nächste Woche ermitteln.

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Mo Jan 17, 2022 8:40 pm
von yankee
cjungde hat geschrieben: Mo Jan 17, 2022 8:34 pm Der Fehler erscheint mir jetzt behoben. Wie LutzB geschrieben hat, kommt der Fehler im Log nicht mehr.
Ich habe die Vermutung, dass es ein Fehler ist, dass der Fehler im Log nicht kommt. So ironisch das auch ist. Das versuche ich in #1935 zu beheben. Wenn der gemergt ist kommt der Fehler vermutlich wieder.

Der Gegenbeweis wäre, wenn die Meldung "Komponente HTTP Zähler auslesen." im Log auftauchen würde. Dann wäre wirklich alles in Ordnung. Deswegen nochmal:

Kommt der Text "Komponente HTTP Zähler auslesen." in deinem Log vor?

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Di Jan 18, 2022 8:11 am
von LutzB
Bei mir seit der Änderung schon. War mir bei der Umstellung des SonnenBatterie Moduls aufgefallen.

Re: RamDisk lesen und schreiben: Nightly 1.9.250

Verfasst: Sa Jan 22, 2022 2:54 pm
von cjungde
@yankee:

Der Vollständigkeit halber:
Hier der Test, den Du noch von mir wolltest:

Code: Alles auswählen

pi@openWB:/var/www/html/openWB $ python3 -c 'print("ä")' 2>&1 | while read -r line; do echo $line; done
ä
pi@openWB:/var/www/html/openWB $ 
und hier noch die Ausgabe von locale

Code: Alles auswählen

pi@openWB:/var/www/html/openWB $ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8
Das initiale Problem diese Threads scheint inzwischen auch gelöst zu sein. Ich bekomme meine Werte jetzt mit den HTTP Modulen in die OpenWb eingelesen.

Im "Rückmeldungen Nightly 1.9.251" Thread schreibst Du, dass die PV Leistung immer negativ ankommen muss, ausser sie kommt per MQTT. Bedeutet das, das ich ein Vorzeichen einbauen muss ?