Raspberry Pi USB Schnittstelle einlesen mit Python

Gast #4456059
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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, ...)
Gast #4456931
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.