[JAVA] GPS Tracker met binary formaat decoderen (Traccar)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Topicstarter
Ik werk regelmatig met GPS trackers die via TCP/UDP hun data naar mijn server sturen waar een tooltje op draait met als basis Traccar: http://traccar.org.

Normaal sturen deze apparaten een String, soms in HEX formaat maar meestal gewoon een plain string waar de coordinaten, IMEI etc. van een GPS staan. Nu heb ik echter een apparaatje die zijn gegevens via binary opstuurt.

Ik heb een klein voorbeeldje van de fabrikant ontvangen, maar ze willen me geloof ik niet echt een code sample geven van hoe ik het beste de gegevens kan omzetten naar een String.
Ik kan helaas ook niet teveel informatie over het apparaat weggeven, maar het is een vrij onbekend ding (anders had ik wel wat op Google gevonden natuurlijk).

Hier staat in ieder geval een klein stukje informatie uit hun documentatie, om het IMEI nummer uit de HEX string die ik ontvang te toveren, het is een tracker uit Litouwen dus het Engels is een beetje brak.

packed arrived through UDP or TCP
"085a629c834601008600a59b41c760ed5c0bc0d39204201909de41f95a5742001c72e400000000008000ed030101010903570b003000000040110583040d001200001f0c1a03c605004d690b0000416766ed5c0bc0d39204201909de41f95a5742001b72e400000000008000ee030101010903570b003000000040110583040d001200001f0c1a03c605004d690b0000a0"

08 5a 62 9c 83 46 01 00 (IMEI 0x146839c625a08 = 359006055062024)

86 00 (packet len 0x86 = 134 bytes)
a5 (Service FlashStack)
9b (Service 0xA5 confirmation key)


###(Start of structure #1 in packet)
41 (structure len 65 bytes)
c7 60 ed 5c (DT=7 Time=0x5ced60c*0x02+0x47798280=0x53172E98=1394028184= "GMT: Wed, 05 Mar 2014 14:03:04 GMT")
##(start of parsing detected DT=7 structure Masks)
0b c0 (Mask1 0xC00B = 0b1100000000001011 )
d3 92 (Mask2,becasue most significant bit in Mask1 set, Mask2 present 0x92d3 = 1001001011010011)
04 20 (Mask3,becasue most significant bit in Mask2 set, Mask3 present 0x2004 = 0010000000000100)

Mijn vraag is nu dus eigenlijk, om te beginnen, hoe komen zij van:
08 5a 62 9c 83 46 01 00 naar 359006055062024

Volgens mij is het wel vrij basic programmeren maar ik kom er niet uit :/

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:12

Creepy

Tactical Espionage Splatterer

08 5a 62 9c 83 46 01 00 moet je dus eerst omdraaien naar 000146839c625a08, die nullen aan het beginnen vallen uiteraard weg. En 0146839c625a08 hexadecimaal (vandaar de 0x in je post) is decimaal 359006055062024. Precies hetzelfde, maar dan anders opgeschreven ;)

Zie ook Programming FAQ - Getallen en talstelsels

[ Voor 8% gewijzigd door Creepy op 31-07-2014 10:13 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Topicstarter
Helemaal duidelijk dankjewel :)

Ik heb echt niet gezien dat de 08 5a "verkeerd om" stond.

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Heeft minder met getalstelsels te maken (ik neem aan dat Afvalzak wel gezien had dat het om hexadecimale data/bytes gaat) dan met endianness/byte order. Deze informatie is little endian.

"Any sufficiently advanced technology is indistinguishable from magic."