Soracom

Users

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

SORACOM Binary Format v1

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

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

SORACOM Binary Format v1 を利用しない場合

SORACOM Binary Format v1 を利用しない場合は、デバイスのアプリケーションが TCP で送信したデータは、次の処理に進むときに分割 / 結合されることがあります。詳しくは、TCP → HTTP/HTTPS エントリポイント を参照してください。

SORACOM Binary Format v1 を利用できるエントリポイント:

エントリポイント設定方法
Beam の TCP → HTTP/HTTPS エントリポイントTCP → HTTP/HTTPS エントリポイントの設定で、[SORACOM Binary Format v1 でデータを受信] をオンにします。詳しくは、Beam の TCP → HTTP/HTTPS エントリポイント を参照してください。
Funnel の TCP エントリポイントFunnel を有効化する際、[転送先サービス] で任意のサービスを選択し、[送信データ形式] で「SORACOM Binary Format v1」を選択します。詳しくは、SORACOM Funnel を有効化する を参照してください。
Funk の TCP エントリポイントFunk を有効化する際、[SORACOM Binary Format v1 でデータを受信] をオンにします。詳しくは、SORACOM Funk を有効化する を参照してください。
Harvest Data の TCP エントリポイントHarvest Data を有効化する際、[SORACOM Binary Format v1 でデータを受信] をオンにします。詳しくは、SORACOM Harvest Data を有効化する を参照してください。
Unified Endpoint の TCP エントリポイントUnified Endpoint の設定で [SORACOM Binary Format v1 でデータを受信] をオンにします。詳しくは、Unified Endpoint の動作を設定する を参照してください。
SORACOM Binary Format v1 の設定はエントリポイントごとに行います

SORACOM Binary Format v1 を利用する場合は、エントリポイントごとに設定します。たとえば、以下のように設定すると、Unified Endpoint の TCP エントリポイントにデータを送信したときは、SORACOM Binary Format v1 は利用できません。

  • Beam の TCP → HTTP/HTTPS エントリポイントで [SORACOM Binary Format v1 でデータを受信] をオンにする。
  • Unified Endpoint の [SORACOM Binary Format v1 でデータを受信] をオフにする。
デバイスからエントリポイントに送信したデータの処理順序について

エントリポイントに送信したデータは、まず、SORACOM Binary Format v1、バイナリパーサー、Orbit で処理されます。データの処理順序については、SORACOM のエントリポイントに送信したデータの処理順序 を参照してください。

SORACOM Binary Format v1 のフォーマット:

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

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. ここまでのバイト列を連結して、SORACOM Binary Format v1 を利用できるエントリポイント に送信します。

    以下の例では、Funnel の TCP エントリポイントに送信します。

    $ echo "00060102030405064917" | xxd -r -p | nc -4 -u funnel.soracom.io 23080 -w 1
    
    200
    
  5. 送信先のクラウドサービスでデータを確認します。

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

    $ echo 'AAYBAgMEBQZJFw==' | base64 --decode > received.bin
    

SORACOM では、最初の TCP セグメントを受け取った時点でタイマーを起動し、次の TCP セグメントを待ち受けます。タイマーは約 10 秒に設定されており、この時間内に期待される次のパケットが届かない場合、クライアントにタイムアウトを表すメッセージを返し、それまで SORACOM でバッファしていたメッセージの断片を破棄します。なお、このタイマーは各 TCP セグメントの到着ごとにリセットされます。

Funnel の TCP エントリポイントの制限について

Funnel の TCP エントリポイントで SORACOM Binary Format v1 を利用する場合は、以下の制限があります。

  • 上記の手順で Funnel の TCP エントリポイントに送信したデータを転送先で received.bin として保存した場合、received.bin には「メッセージ長フィールド」(先頭 2 バイト) と「チェックサム」(末尾 2 バイト) が含まれます。

    一方で、Beam、Funk、Harvest Data、また Unified Endpoint (Funnel を利用した場合も含む) を利用した場合は、received.bin に「メッセージ長フィールド」(先頭 2 バイト) と「チェックサム」(末尾 2 バイト) は含まれません。

  • バイナリパーサー を利用できません。

    一方で、Beam、Funk、Harvest Data、また Unified Endpoint (Funnel を利用した場合も含む) を利用した場合は、バイナリパーサーを利用できます。

Funnel を利用しながら制限を回避するには、Unified Endpoint の設定で [SORACOM Binary Format v1 でデータを受信] をオンにして、Unified Endpoint の TCP エントリポイントを利用してください。詳しくは、Unified Endpoint の動作を設定する を参照してください。