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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren