Raspberry Pi USB Schnittstelle einlesen mit Python

Gast #4456059
Hallo,

habe folgendes Problem.

Ich lese eine USB Schnittstelle ein mit folgendem Code:
1
ser = serial.Serial("/dev/ttyUSB0", 9600, timeout=1)
2
        Zeichen=""
3
        Zeichen = ser.read(1000)               
4
        ser.close()
5
        
6
        
7
        print (Zeichen)

Die Daten stehen nun in folgender Anzeige zur Verfügung.
b'\xaf\xb2\xb8\xc5\x8d\n\x8d\n\xb1-0:0.0.0\xaa\xb255(\xb20\xb836\xb2\xb7 
\xb8\xa9\x8d\n\xb1-0:\xb1.\xb8.\xb1\xaa\xb255(0\xb10\xb7\xb8\xb4.9099\xa 
9\x8d\n\xb1-0:\xb2.\xb8.\xb1\xaa\xb255(0\xb2395\xb2.5\xb8\xb25\xa9\x8d\n 
\xb1-0:96.5.5\xaa\xb255(\xb8\xb2\xa9\x8d\n0-0:96.\xb1.\xb255\xaa\xb255(0 
00\xb2\xb4\xb7\xb765\xb2\xa9\x8d\n!\x8d\n'

Wie bekomme ich die Daten in Hex-Dez dargestellt? Oder kann ich die 
Daten auch binär empfangen?
Gast #4456148
Die Daten sind binär empfangen. read() gibt ein bytes-Objekt zurück 
(steht in der Doku).
1
print(Zeichen)
2
print('----------------------')
3
for z in Zeichen:
4
    print("0x%x" % z)
5
print('----------------------')
6
for z in Zeichen:
7
    print(z)
8
print('----------------------')
9
print(Zeichen.decode('cp850'))
Gast #4456590
Das waren nur Beispiele, was man mit dem bytes-Objekt machen kann. 
Nächster Schritt: Doku lesen zu dem Gerät, das du ausliest, und zu den 
relevanten Python-Funktionen (print, String-Formatierung, wie iteriert 
man über eine sequence, ...)
#4456607
Sicher, daß bei der Dichte an Sonderzeichen in den "Daten", sowas wie " 
"Baudrate" korrekt ist? Immerhin scheint ja alles, was ASCII ist, 
richtig dargestellt zu werden.
Gibt es ein Beispiel der erwarteten Daten?
Gast #4456931
Hallo,

die Daten kommen aus einem Zähler und sollten wenn möglich so aussehen:
Quelle des SML Beispiels:
http://wiki.volkszaehler.org/software/sml
Beispiel 1: EMH ED300L


◾ 1B 1B 1B 1B - Start Escape Zeichenfolge


◾ 01 01 01 01 - Start Übertragung Version 1


◾ 76 - jetzt kommt eine SML-Message


◾ 02 - Länge (inkl. Längenbyte)


◾ 85 - transactionId


◾ 62 00 - groupNo


◾ 62 00 - abortOnError


◾ 72 63 01 01 - messageBody


◾ 76 - jetzt kommt eine SML-Message


◾ 01 - Länge (inkl. Längenbyte)


◾ 01 07 00 06 00 00 yy yy - transactionId


◾ 0b - Länge serverId (inkl. Längenbyte) (0b → 11 → 1 Längenbyte + 10 
Byte serverId)


◾ xx xx xx xx xx xx xx xx xx xx - serverId → Seriennummer


◾ 01 - listName (not set)


◾ 72 62 01 65 00 00 1c 94 - actSensorTime + secIndex


◾ 79 - ?


◾ 77 07 81 81 c7 82 03 ff 01 01 01 01 04 xx xx xx xx - 
Herstelleridentifikation


◾ 77 07 01 00 00 00 09 ff 01 01 01 01 0b xx xx xx xx xx xx xx xx xx xx 
01 - serverId


◾ 77 07 01 00 01 08 00 ff 63 01 80 01 62 1e 52 ff 56 00 00 00 29 85 01 - 
1.8.0 (= Wirkarbeit Bezug (+) Zählerstand Total): 10.629 kWh ?


◾ 77 07 01 00 02 08 00 ff 63 01 80 01 62 1e 52 ff 56 00 00 00 11 f0 01 - 
2.8.0 (= Wirkarbeit Lieferung (-) Zählerstand Total): 4.592 kWh ?


◾ 77 07 01 00 01 08 01 ff 01 01 62 1e 52 ff 56 00 00 00 29 85 01 - 1.8.1 
(= Wirkarbeit Bezug (+) Zählerstand Tarif 1): 10.629 kWh (?)


◾ 77 07 01 00 02 08 01 ff 01 01 62 1e 52 ff 56 00 00 00 11 f0 01 - 2.8.1 
(= Wirkarbeit Lieferung (-) Zählerstand Tarif 1): 4.592 kWh (?)


◾ 77 07 01 00 01 08 02 ff 01 01 62 1e 52 ff 56 00 00 00 00 00 01 - 1.8.2 
(= Wirkarbeit Bezug (+) Zählerstand Tarif 2): 0 kWh (?)


◾ 77 07 01 00 0f 07 00 ff 01 01 62 1b 52 ff 55 00 00 01 11 01 - 15.7.0 
(Wirkleistung Total) 2.73?


◾ 77 07 81 81 c7 82 05 ff 01 01 01 01 83 02 b8 02 a5 - 
Herstelleridentifikation


◾ 62 b1 c7 5d 18 20 e2 3d b8 dc 4e 43 5f ce 90 26 6d 64 4e c9 1c 12 85 
6b d8 ac 42 01 bb 61 22 22 99 52 f2 f3 43 d7 63 80 5e 38 cb 11 22 01 01 
01 - ?


◾ 63 82 40 00 - ?


◾ 76 - jetzt kommt eine SML-Message


◾ 07 - Länge (inkl. Längenbyte)


◾ 00 06 00 00 23 ec - transactionId


◾ 62 00 - groupNo


◾ 62 00 - abortOnError


◾ 72 63 02 01 - ?


◾ 71 01 63 ae 55 00 00 - ?
Gast #4456939
Inter schrieb:
> die Daten kommen aus einem Zähler

Sieht aber nicht so aus, als ob Deine Daten dem Gewünschen entsprächen. 
Sende mal mit einem Terminalprogramm vom PC aus Daten, dann weißt Du, 
was Du aussendest - und damit auch, was dann am RasPi ankommen sollte.
Gast #4456954
Inter schrieb:
> Und woher weiß ich das es sich um einen cp850 Code handelt?

Das siehst du den Binärdaten, die über die Schnittstelle kommen, nicht 
an.

Was die Daten bedeuten, wirst du dem Handbuch des Gerätes entnehmen 
müssen, von dem du die Daten empfängst.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.