Soracom

Users

ドキュメント
Home ドキュメント

SORACOM Binary Format v1 (Public beta)

デバイスから送信された複数のパケットを SORACOM で結合して 1 つのメッセージとして転送

以下のフォーマットに従った複数のパケット (厳密には TCP セグメント) を Beam の TCP → HTTP/HTTPS エントリポイント または Funnel の TCP エントリポイント に TCP で送信することで、最大 65535 バイトのバイナリデータを 1 つのメッセージとして転送先に転送できます。このフォーマットを、SORACOM Binary Format v1 と呼びます。

項目バイト数説明
メッセージ長フィールド2 バイトメッセージボディのバイト数を指定します。0x0001 の場合は 1 バイト、0xffff の場合は 65535 バイトを表します。
メッセージボディメッセージ長フィールドに指定したバイト数送信対象のバイナリデータを指定します。
チェックサム2 バイトメッセージ長フィールドとメッセージボディを結合したもののチェックサムです。CRC-16 CCITT に従って計算してください。
SORACOM Binary Format v1 は Public beta です

Public beta の位置づけは 用語集 を参照してください。

SORACOM Binary Format v1 でデータを送信する

バイナリデータ「0x01 0x02 0x03 0x04 0x05 0x06」を SORACOM Binary Format v1 に準拠して送信するには、メッセージ長フィールドとチェックサムを以下のように算出します。

  1. 「メッセージ長フィールド」に指定する値を決定します。

    送信するバイナリデータは 6 バイトのため、「メッセージ長フィールド」は以下のとおりです。

    0x00 0x06
    
  2. 「メッセージ長フィールド」と「メッセージボディ」を結合します。

    0x00 0x06 0x01 0x02 0x03 0x04 0x05 0x06
    
  3. このデータの「チェックサム」(CRC-16 CCITT) を計算します。

    簡易的に計算する場合は、https://crccalc.com/ のようなサイトでチェックサムを計算できます。

    0x4917
    
  4. ここまでのバイト列を連結して、Funnel の TCP エントリポイント に送信します。

    $ echo "00060102030405064917" | xxd -r -p | nc -4 -u funnel.soracom.io 23080 -w 1
    
    200
    
    Beam の TCP → HTTP/HTTPS エントリポイントでも SORACOM Binary Format v1 を利用できます

    Beam の TCP → HTTP/HTTPS エントリポイント[SORACOM Binary Format v1 形式のデータを受け取る] をオンにすると、TCP で送信されたバイナリデータが、SORACOM Binary Format v1 に準拠するものとして処理され、転送先に転送されます。

  5. 送信先のクラウドサービスでデータを確認します。

    {
        :
      "payloads": "AAYBAgMEBQZJFw==",
        :
    }
    
  6. AAYBAgMEBQZJFw== を Base64 でデコードして、ファイルに保存します。

    $ echo 'AAYBAgMEBQZJFw==' | base64 --decode > received.bin
    
  • この手順で保存された received.bin には、「メッセージ長フィールド」(先頭 2 バイト) と「チェックサム」(末尾 2 バイト) が含まれます。
  • SORACOM では、最初の TCP セグメントを受け取った時点でタイマーを起動し、次の TCP セグメントを待ち受けます。タイマーは約 10 秒に設定されており、この時間内に期待される次のパケットが届かない場合、クライアントにタイムアウトを表すメッセージを返し、それまで SORACOM でバッファしていたメッセージの断片を破棄します。なお、このタイマーは各 TCP セグメントの到着ごとにリセットされます。
SORACOM Binary Format v1 の制限について
  • バイナリパーサー とは併用できません。バイナリパーサーを利用する場合は、JSON 形式のデータとして処理されます。
  • Unified Endpoint とは併用できません。Unified Endpoint に SORACOM Binary Format v1 に準拠したデータを送信しても、SORACOM では SORACOM Binary Format v1 に準拠したデータとして処理されません。