spezifisches Protokoll mit pyserial verarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du scheinst hexdarstellung mit binären Daten zu verwechseln. Das ist in jedem Fall falsch. Alles wo du hexlify benutzt ist also schon mal fragwürdig. Das serial.to_bytes sieht sinnvoller aus.

Für mehr Hilfe wäre eine Beschreibung/Verlinkung des Protokolls hilfreich.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann werd mal das hexlify los & benutz b“\x00“ stattdessen. Und für das inquiry die to_bytes Variante.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte zeigen was du versuchst. Wie sonst soll man das denn beurteilen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso benutzt du denn mal bytestrings und mal to_bytes? Und warum fügst du an das 0-Byte CR & newline an? Stand doch so nicht im Beispiel deiner Webseite.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na vor allem musst du die newline und CR Zeichen loswerden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit Verlaub - aber du musst mal aufhören zu Cargo culten und dich mit der Verarbeitung von bytes Strings in python beschäftigen.

Diese von-hinten-durch-die-Brust-ins-Auge dekodiere von hex werte liefert EXAKT was da vorher stand:

Code: Alles auswählen

>>> codecs.decode('00', 'hex_codec')
b'\x00'
Das Problem waren also die eingestreuten anderen Zeichen, die du danach eingefügt hast.

In Python kannst du problemlos b'\xAB' schreiben um den Wert 171 als genau ein Byte zu erhalten. Und mehrere Hexwerte als '\x12\x34' etc.
Sirius3
User
Beiträge: 18269
Registriert: Sonntag 21. Oktober 2012, 17:20

Die anderen Hex-Werte sind zum Großteil schön lesbare Buchstaben:

Code: Alles auswählen

b'S1000\x05'
b'1020F90X'
b'/N90S\x00\x03\x06'
Antworten