Bin Neuling bez. Python und versuche, ein eigenes Skript aus AutoIt auf Linux zu portieren. Das Skript nimmt Daten eines Gerätes entgegen, welche im LAN über ein Siena Nemo10 RS232-Ethernet-Modul verschickt werden. Die Daten kommen in Python auch an, doch habe ich Probleme bei der Umwandlung.
Verschickt werden die Hex-Daten
06 3B 04 9B 06 9C 04 D6 05 05 00 00 0D BA 02 00 D4 F7
und empfangen kann ich
Received '\x06"\x04\x9b\x06\x9c\x04\xd6\x05\x05\x00\x00\r\xba\x02\x00\xd5\x10'
Man erkennt die Umwandlung von 3B zu " und 0D zu \r . Die restlichen Daten müsste ich mit binascii.unhexlify umwandeln können, nicht?
Wie komme ich an die korrekten Daten? Gefragt ist schlussendlich der Dezimalwert von immer vier Hex-Ziffern, also 063B wird 1595, danach führt eine Teilung durch 64 zum vom Gerät gemessenen Temperaturwerte (hier 24.9°), mit Ausnahme der letzten 4 Hex-Ziffern, das sind Statuscodes und eine Prüfziffer.
Mit folgendem Beispielprogramm empfange ich die Daten:
Code: Alles auswählen
# Echo client program
import socket
import sys
HOST = '192.168.20.103' # The remote host
PORT = 6001 # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
except socket.error as msg:
s = None
continue
try:
s.connect(sa)
except socket.error as msg:
s.close()
s = None
continue
break
if s is None:
print 'could not open socket'
sys.exit(1)
data = s.recv(1024)
s.close()
print 'Received', repr(data)
Den Beitrag http://www.python-forum.de/viewtopic.php?f=3&t=33921 habe ich gesehen, aber dort ist (noch) keine Lösung erkennbar.
Danke.
Felix