GPSトラッカーを購入しました。SMSを携帯電話に送信できます。また、GPRSを介したサーバーへのレポートもサポートしています。
ポート8123で自分のサーバーに接続するようにデバイスをセットアップしました。これはFreeBSDサーバーであり、そのポートでパケットを受信することを確認しました。
PHPで記述されたリスナーサーバーのセットアップに成功し、デバイスからデータを受信できます。しかし、部分的なHEXデータを有用なもの(ASCII)に変換するにはどうすればよいですか?
データ文字列の例:
$$ ^ @ T ^ @ E Y'^WÿU210104.000、A、5534.4079、N、01146.2510、E、0.00、、170411 ,, * 10 | 1.0 |72|0000á
残念ながら、HEXパーツをコピーして貼り付ける方法がわかりません
ID部分を取り出すにはどうすればよいですか?私が試してみましたecho hexdec(mb_substr($data, 4, 7));
データはこのプロトコルに従っています
ドキュメントから:
GPRSパケットのコマンド形式は次のとおりです。 サーバーからトラッカーへ: @@ \ r \ n トラッカーからサーバーへ: $$ \ r \ n ノート: コマンドを書くときは''を入力しないでください。 すべてのマルチバイトデータは、次のシーケンスに準拠しています。下位バイトの前の上位バイト。 GPRSパケット(データを含む)のサイズは約100バイトです アイテム仕様 @@2バイト。これは、サーバーからトラッカーへのパケットのヘッダーを意味します。 ASCIIコード(16進コード:0x40)です $$2バイト。トラッカーからサーバーへのパケットのヘッダーです。 ASCIIコード(16進コード:0x24)です L2バイト。これは、パケット全体の長さを意味します。 ヘッダーと終了文字で、16進コードです ID 7バイト、IDは1桁で、14桁を超えてはなりません。未使用のバイトです。 'f'または'0xff'が詰め込まれます。16進コードの形式です。 たとえば、IDが13612345678の場合、次のように表示されます。 次のとおりです:0x13、0x61、0x23、0x45、0x67、0x8f、0xff。 7バイトすべてが0xffの場合、それはブロードキャストコマンドです。IDは16進コードです コマンド2バイト。コマンドコードは16進コードです。を参照してください 以下のコマンドリスト。 データ最小0バイトおよび最大100バイト。「データ」の説明については、付録1を参照してください。 チェックサム2バイト。これは、CRC-CCITT(デフォルトは0xffff)のチェックサムを示します。 すべてのデータ(CRC自体と終了文字を含まない)。 16進コードです。 例: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 \n2バイト。これは終了文字であり、16進コードです (16進コードの0x0d、0x0a)
アップデート
アノミエからの返事で、これをつなぎ合わせることができました
$arr = unpack('H4length/H14id/H4cmd/H4crc/H4end', mb_substr($data, 2, 11) . mb_substr($data, -4));
var_dump($arr);
これは次のようなものを出します
array(5){ ["長さ"]=> string(4) "0054" ["id"] => string(14) "004512345678ff" ["cmd"] => string(4) "9955" ["crc"] => string(4) "c97e" ["終了"]=> string(4) "0d0a" }