Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi USB Schnittstelle einlesen mit Python


von Inter (Gast)


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?

von Tom (Gast)


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'))

von Inter (Gast)


Lesenswert?

Hallo,

jetzt wandelt er zwar um, aber bekomme ich das auch im hex Format 
irgendwie? Und woher weiß ich das es sich um einen cp850 Code handelt?

von Tom (Gast)


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, ...)

von Carl D. (jcw2)


Lesenswert?

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?

von Inter (Gast)


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 - ?

von radiostar (Gast)


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.

von Carl D. (jcw2)


Lesenswert?

Da liegen die gelesenen Daten noch "etwas" daneben.
Und wenn man die verlinkten Doku überfliegt, dann wurde dieses Protokol 
nicht für einfache Les-/Implementier-barkeit entwickelt.

von W.A. (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.