Hallo Zusammen,
ich habe nun seit ca. einen Monat n' Problem mit meiner Programmierung bezüglich Python...
Das Forum und auch Google konnte mir leider nicht weiterhelfen..
Zum Hintergrund:
Ich habe ein Steca Tarom Laderegler, welcher mir Daten über eine offene Uart 3.3V Schnittstelle schickt.
Diese möchte ich mit meinem Rpi3 auslesen.
Die Daten werden werden jede Minute ASCII Codiert geschickt und sehen ca so aus:
1;2019/08/05;19:32;12.7;13.4;#;99.0;#;1.2;2.1;#;2.1;1.2;0.8;0.8;33.8;0;F;1;1;0;89.6;43069.2;13.0;5504.1;0;85FD
Am Ende der Datenausgabe wird immer CR + LF ausgegeben.
Soweit so gut.
Nun habe ich in Python folgendermaßen gelöst:
#!/usr/bin/env python3
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
import sys
from _thread import start_new_thread
import serial
import time
import codecs
from time import sleep
import RPi.GPIO as GPIO
# WebSever zu Datenausgabe lasse ich mal codetechnisch weg
def read_uart():
global solar
global s_datum, s_zeit, s_batteriespannung, s_soc, s_soh, s_gesamtstrom, s_eingangsstrom, s_ladestrom, s_laststrom, s_temperatur, s_error, s_loadtoday, s_loadt$
ser = serial.Serial ("/dev/ttyS0", timeout=None, baudrate=4800)
while True:
try:
ser.flushInput()
response = ser.readline()
uart_return = response.decode("ascii")
solar.clear()
solar = uart_return.split(';')
logging.info("---- UART: Data Recieved: {}".format(uart_return))
# Daten in Variable
s_datum = solar[1]
s_zeit = solar[2]
s_batteriespannung = solar[3]
s_soc = solar[6]
s_soh = solar[7]
s_gesamtstrom = solar[8]
s_eingangsstrom = solar[9]
s_ladestrom = solar[11]
s_laststrom = solar[13]
s_temperatur = solar[15]
s_error = solar[16]
s_loadtoday = solar[21]
s_loadtotal = solar[22]
except Exception as e:
logging.info("---- UART: Unexpected error: {0}, {1}".format(e.message, e.args))
time.sleep(10)
Alles anzeigen
Das Funktioniert auch soweit und ich kriege auch immer die Aussage, dass er die Daten empfangen hat.
Nun kommen wir zu dem Problem:
Nach einer zufälligen Zeit stützt der Thread zusammen und empfängt auch keine Daten mehr. Lustigerweise ist dies immer unterschiedlich. Mal nach 1 Minute, mal nach 1 Std und manchmal läuft dieser auch 5 Tage durch, bis ich wieder den kompletten rpi neustarten muss um wieder eine ausgabe zu erhalten.
Das Python script läuft über ein Service, sodass dieser automatisch gestartet wird.
Laut Log erhalte ich immer diese Fehlermeldung:
ZitatAlles anzeigenAug 04 21:51:05 PiPower python3[398]: Unhandled exception in thread started by <function read_uart at 0xb68a8660>
Aug 04 21:51:05 PiPower python3[398]: Traceback (most recent call last):
Aug 04 21:51:05 PiPower python3[398]: File "solar.py", line 68, in read_uart
Aug 04 21:51:05 PiPower python3[398]: uart_return = response.decode("ASCII").strip()
Aug 04 21:51:05 PiPower python3[398]: UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 34: ordinal not in range(128)
Aug 04 21:51:05 PiPower python3[398]: During handling of the above exception, another exception occurred:
Aug 04 21:51:05 PiPower python3[398]: Traceback (most recent call last):
Aug 04 21:51:05 PiPower python3[398]: File "solar.py", line 87, in read_uart
Aug 04 21:51:05 PiPower python3[398]: logging.info("---- UART: Unexpected error: {0}, {1}".format(e.message, e.args))
Aug 04 21:51:05 PiPower python3[398]: AttributeError: 'UnicodeDecodeError' object has no attribute 'message'
Der Fehler mit der Loging info ist mir bekannt, allerdings wenn ich nach dem UART Fehler google, bekomme ich lösungen präsentiert, die meist nur für csv Datein zuständig sind. Wenn ich das .decode weglasse, bekomme ich sofort eine andere Fehlermeldung "TypeError: a bytes-like object is required, not 'str'"
Vielleicht habt ihr eine Idee woran es liegt.
Ich bin momentan echt am Verzweifeln und sitze an dieser Fehlermeldung schon > 1 Monat dran, aber nichts bringt mich zu dem gewünschten Ergebnis
Für jede Hilfe, wäre ich euch dankbar!