Ich bin gerade von Python2 auf 3 umgestiegen. Ich habe eigentlich nur ein Projekt. Das ist jedoch etwas größer. Das meiste funktioniert wieder top. Nur ein Script will nicht.
Es liest, per Serieller Schnittstelle, einen Victron Batteriemonitor aus. (ve.direct)
Der Fehler scheint darin zu liegen das serial.read jetzt Byte zurück gibt. Bei Python2 war es wohl einfach ein String.
Soweit ich gelesen habe ist der Fix dafür das Decoden des Bytes. Also habe ich folgende Zeile hinzugefügt:
Code: Alles auswählen
byte = self.ser.read(1)
byte = byte.decode("utf-8")
Es kommen also Bytes rein die nicht in UTF-8 decodiert werden können. Also ist einfach "decode("utf-8")" nicht das non plus ultra.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Soweit ich gesehen habe kommen diese Zeichen immer in der Checksum rein. Kann aber auch jetzt nur Zufall sein. Der byte variiert auch.
Gibt es einen besseren Weg?