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 エントリポイントの設定で、Beam の TCP → HTTP/HTTPS エントリポイント を参照してください。 | をオンにします。詳しくは、
Funnel の TCP エントリポイント | Funnel を有効化する際、SORACOM Funnel を有効化する を参照してください。 | で任意のサービスを選択し、 で「SORACOM Binary Format v1」を選択します。詳しくは、
Funk の TCP エントリポイント | Funk を有効化する際、SORACOM Funk を有効化する を参照してください。 | をオンにします。詳しくは、
Harvest Data の TCP エントリポイント | Harvest Data を有効化する際、SORACOM Harvest Data を有効化する を参照してください。 | をオンにします。詳しくは、
Unified Endpoint の TCP エントリポイント | Unified Endpoint の設定で Unified Endpoint の動作を設定する を参照してください。 | をオンにします。詳しくは、
SORACOM Binary Format v1 の設定はエントリポイントごとに行います
SORACOM Binary Format v1 を利用する場合は、エントリポイントごとに設定します。たとえば、以下のように設定すると、Unified Endpoint の TCP エントリポイントにデータを送信したときは、SORACOM Binary Format v1 は利用できません。
- Beam の TCP → HTTP/HTTPS エントリポイントで をオンにする。
- Unified Endpoint の をオフにする。
デバイスからエントリポイントに送信したデータの処理順序について
エントリポイントに送信したデータは、まず、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 に準拠して送信するには、メッセージ長フィールドとチェックサムを以下のように算出します。
「メッセージ長フィールド」に指定する値を決定します。
送信するバイナリデータは 6 バイトのため、「メッセージ長フィールド」は以下のとおりです。
0x00 0x06
「メッセージ長フィールド」と「メッセージボディ」を結合します。
0x00 0x06 0x01 0x02 0x03 0x04 0x05 0x06
このデータの「チェックサム」(CRC-16 CCITT) を計算します。
簡易的に計算する場合は、https://crccalc.com/ のようなサイトでチェックサムを計算できます。
0x4917
ここまでのバイト列を連結して、SORACOM Binary Format v1 を利用できるエントリポイント に送信します。
以下の例では、Funnel の TCP エントリポイントに送信します。
$ echo "00060102030405064917" | xxd -r -p | nc -4 -u funnel.soracom.io 23080 -w 1
200
送信先のクラウドサービスでデータを確認します。
{ : "payloads": "AAYBAgMEBQZJFw==", : }
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 の設定で Unified Endpoint の動作を設定する を参照してください。
をオンにして、Unified Endpoint の TCP エントリポイントを利用してください。詳しくは、