Wie man stxetx Daten in python entpackt

Ich empfange ein Datenpaket, das von einem seriellen RS485-Bus zu einem ESeye gesendet wird

Hammerkop Sender, der dann URL die Daten kodiert und an meinen Server sendet. Die Anfrage sieht wie folgt aus:

at=info method=GET path="/write/?type=stxetx&packet=ArcYX%01%00%00%00%00%00%00%03%00%F0%00%06%00%F0%008%0E%B0%27%00%00%E85&localpackettime=2016-12-20+16%3A00%3A27&serial=868324023356343&packettime=2016-12-20+16%3A00%3A27&receivetime=2016-12-20+16%3A00%3A28&timezone=UTC" host=dry-hollows-46605.herokuapp.com request_id=4d5bec23-0676-4e32-ae66-af26e26f0394 fwd="81.94.198.91" dyno=web.1 connect=1ms service=232ms status=500 bytes=63266 

Ich benutze Django 1.9 als mein Framework und um die Paketdaten zu bekommen, die ich verwende:

 packet_data = request.GET.getlist('packet') 

Die Daten, die ich empfange, sind die folgenden:

 packet_data = [u"A\x90cYX\x01\x00\x00\x00\x00\x00\x00\x03\x00\xf0\x00\x06\x00\xf0\x008\x0e\xb0'\x00\x00\xe85"] 

Ich muss das dann in Bytes teilen, der erste Buchstabe ist ein ascii Buchstabe, der gerade vorwärts ist und ignoriert werden kann, der Rest sind Bytes. Ich versuche, diese Unicode-String in die Werte aufzuteilen, die ich zum Beispiel die ersten 4 Bytes benötige, nachdem die 'A' ein Byte-Int-Zeitstempel sind.

Ich habe versucht, die Werte zu codieren, zum Beispiel:

 a = packet_data[1].encode('utf-8') b = packet_data[2].encode('utf-8') c = packet_data[3].encode('utf-8') d = packet_data[4].encode('utf-8') 

Die sie in str als unicode umwandelt und dann packe sie aus:

 timestamp = unpack('i',a+b+c+d) 

Aber das funktioniert nur einige der zeit und manchmal bekomme ich den fehler:

 error: unpack requires a string argument of length 4 

Ich habe den Fehler für diese Zeitstempelwerte zum Beispiel:

 before encoding u'\x90', u'c', u'Y', u'X' after encoding '\xc2\x90', 'c', 'Y', 'X' 

Und Vorschläge wäre so hilfreich, dass ich schon seit Tagen hierher gehe.

Mein einziger Gedanke ist, dass ich nicht packen / entpacken die Daten richtig, vielleicht bin ich fehlt die richtige Polsterung, aber ich habe versucht, verschiedene [Polster-Typen und sie scheinen nicht zu helfen, entweder. Was würde jemand als nächstes versuchen?

One Solution collect form web for “Wie man stxetx Daten in python entpackt”

Django hat den GET-Parameter nicht einfach als Text anstelle von Binärdaten decodiert. Sie müssen den Inhalt von request.META['QUERY_STRING'] selbst parsen.

 >>> import urlparse >>> urlparse.parse_qs('...&packet=ArcYX%01%00%00%00%00%00%00%03%00%F0%00%06%00%F0%008%0E%B0%27%00%00%E85&...')['packet'][0] "ArcYX\x01\x00\x00\x00\x00\x00\x00\x03\x00\xf0\x00\x06\x00\xf0\x008\x0e\xb0'\x00\x00\xe85" 
  • Django-cart oder Satchmo?
  • Probleme bei der Installation von factory_boy mit Pip
  • Wie beschränke ich Fremdschlüssel auf verwandte Objekte nur in django
  • Falsch konfiguriert: Das enthaltene urlconf <projekt> .urls hat keine muster in ihm
  • ImportError: DLL-Last fehlgeschlagen: - beim Versuch, psycopg2-Bibliothek zu importieren
  • Union und schneiden in Django
  • Wie benutzt man Formen in django-cms?
  • Generiere iframe von django tag
  • Django 1.6 funktioniert nicht
  • Wie kann ich programmgesteuert die max_length eines Django-Modellfeldes erhalten?
  • Wie kann ich auf hochgeladene Dateien in Django zugreifen?
  • Python ist die beste Programmiersprache der Welt.