I have just bought a GPS Tracker, it can send SMS to cellphone just fine. It also supports reporting to a server via GPRS.
I have setup the device to contact my own server on port 8123, it's a FreeBSD server and i have checked that i recieve packets on that port.
I successfully have setup a listener server written in PHP, and i can receive data from the device. But how do i convert the partial HEX data to something usefull (ASCII)?
Example data string:
$$^@T^@E Y'^WÿU210104.000,A,5534.4079,N,01146.2510,E,0.00,,170411,,*10|1.0|72|0000á
Unfortunately i don't know how i can copy-paste the HEX parts
Now how do i get the ID part out? I have tried echo hexdec(mb_substr($data, 4, 7));
The data is following this protocol
From the document:
Command format of GPRS packets are as follows: From server to tracker: @@\r\n From tracker to server: $$\r\n Note: Do NOT input ‘’ when writing a command. All multi-byte data complies with the following sequence: High byte prior to low byte. The size of a GPRS packet (including data) is about 100 bytes Item Specification @@ 2 bytes. It means the header of packet from server to tracker. It is in ASCII code (Hex code: 0x40) $$ 2 bytes. It is the header of packet from tracker to server. It is in ASCII code (Hex code: 0x24) L 2 bytes. It means the length of the whole packet including the header and ending character and it is in hex code ID 7 bytes, ID must be digit and not over 14 digits, the unused byte will be stuffed by ‘f’ or ‘0xff’. It is in the format of hex code. For example, if ID is 13612345678, then it will be shown as follows: 0x13, 0x61, 0x23, 0x45, 0x67, 0x8f, 0xff. If all 7 bytes are 0xff, it is a broadcasting command. ID is in hex code command 2 bytes. The command code is in hex code. Please refer to the command list below. data Min 0 byte and max 100 bytes. See Annex 1 for description of ‘data’. checksum 2 bytes. It indicates CRC-CCITT (default is 0xffff) checksum of all data (not including CRC itself and the ending character). It is in hex code. For example: 24 24 00 11 13 61 23 45 67 8f ff 50 00 05 d8 0d 0a 0x05d8 = CRC-CCITT (24 24 00 11 13 61 23 45 67 8f ff 50 00) \r\n 2 bytes. It is the ending character and in hex code (0x0d,0x0a in hex code)
Update
With the answer from Anomie, i was able to piece this together
$arr = unpack('H4length/H14id/H4cmd/H4crc/H4end', mb_substr($data, 2, 11) . mb_substr($data, -4));
var_dump($arr);
This will out put something like
array(5) { ["length"]=> string(4) "0054" ["id"]=> string(14) "004512345678ff" ["cmd"]=> string(4) "9955" ["crc"]=> string(4) "c97e" ["end"]=> string(4) "0d0a" }