以下のフォーマットに従った複数のパケット (厳密には 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 でデータを送信する
バイナリデータ「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
ここまでのバイト列を連結して、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 エントリポイント の をオンにすると、TCP で送信されたバイナリデータが、SORACOM Binary Format v1 に準拠するものとして処理され、転送先に転送されます。
送信先のクラウドサービスでデータを確認します。
{ : "payloads": "AAYBAgMEBQZJFw==", : }
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 に準拠したデータとして処理されません。