データハブ
データハブは、Gateway API で受信したセンサーデータを外部システムへ転送する機能です。
転送先をデバイス単位でコントロールすることが可能になるため、ゲートウェイデバイス側の送信先を IoTサービスにしておけば、いつでも送信先を制御・変更することができます。
また、データハブで外部転送する際に HTTPS にプロトコル変換することで、ゲートウェイデバイスにかかる暗号化処理をプラットフォーム側へオフロードすることが可能です。
利用シーン
1つのデバイスから発生するセンサデータを、東日本と西日本の2つのシステムへミラーリングして転送しバックアップとして保管できます。
検証システムと本番システムにミラーリングしてデータを転送することで、1つのデバイスで 検証・確認用途、本番用途の2つを同時並行で稼働させられます。
対応プロトコル
センサーデータ送信時プロトコル(Gateway API 参照) | データハブ転送時プロトコル |
---|---|
HTTP | HTTP/HTTPS |
TCP | HTTP/HTTPS |
UDP | HTTP/HTTPS |
データハブ仕様
- IoTサービスプラットフォームで受信したデータを、コントロールパネルのデータ転送先設定で設定した内容に基づき転送が行われます。
- 受信したリクエストボディとリクエストヘッダが HTTP POST で転送先に送信されます。
- リクエストヘッダを受信できるのはGateway APIのHTTPで転送した場合のみです。
- TCPやUDPではリクエストヘッダをデバイスから送信できません。
- 転送先でエラーが発生した場合、1回のみ再転送処理が行われます。
- 再転送処理は以下の状態が発生した場合に実行されます。
- 転送先に接続できない場合や、転送先から一定時間応答がないとき (タイムアウト)。
- 500 Internal Server Error などのサーバ異常を示す 5xx HTTP ステータスコードが応答されたとき。
- データハブで送信されるリクエストのHTTPヘッダは、データハブ設定のヘッダに指定した項目が追加され転送されます。
- デバイスから受信したリクエストヘッダと重複した場合、データハブ設定のヘッダが優先され上書きされます。
出力フォーマット
出力フォーマットは、「未加工」「JSON形式」「カスタム」の3つを選択できます。
「未加工」以外の出力フォーマットを使用する場合、デバイスからGateway APIへデータを送信する時に必ず「テキストデータ」で送信してください。 「バイナリデータ」で送信した場合、出力フォーマットの設定にかかわらず、常に「未加工」で転送先に送信されます。 |
未加工
「未加工」は、送信データのまま転送されます。
JSON形式
「JSON形式」は、以下のフォーマットで転送されます。
{ "timestamp": (受信時刻:unix時刻形式), "serviceCode": "(iotサービスコード)", "id": "(デバイスID)", "simId": "(電話番号)", "destination": "(転送先URL)", "payload": "(転送データ)" }
項目 | 説明 |
---|---|
timestamp | IoTサービスが受信した時刻が設定されます。 |
serviceCode | IIJ IoTサービス の契約 ID |
id | システム上でデバイスを一意に識別するための「デバイスID」 |
simId | 電話番号 ※ |
destination | データハブ「転送先設定」で指定した送信先アドレス |
payload | ゲートウェイデバイスから送信したセンサデータ |
※「IIJモバイルサービス/タイプI」ご利用の場合「simId」は付与されません。
カスタム
「カスタム」は、カスタムフォーマット機能を使用して転送されます。
出力オプション
JSON配列展開
JSON配列展開を有効にすると、デバイスからデータをJSON配列※で送信したときに、それぞれの配列の要素に対して出力フォーマットを適用し、再度JSON配列化して送信します。
※JSON配列は、テキストデータとしてJSON形式で送信し、そのJSONのルート要素が配列の場合を指します。それ以外の形式で送信した場合はJSON配列展開は動作せず、JSON配列展開無効時と同様にフォーマットされます。
使用例は以下の通りです。例は出力フォーマットに「JSON形式」を指定した場合です。なお、「カスタム」も同様に処理されます。
送信するデータ | [{ "name": "temp1", "value": 25 }, { "name": "temp2", "value": 81 }] デバイスからJSON配列で送信するデータです。ルート要素に配列を指定します。 |
---|---|
JSON配列展開: 有効 | [{ "timestamp": (受信時刻:unix時刻形式), "serviceCode": "(iotサービスコード)", "id": "(デバイスID)", "simId": "(電話番号)", "destination": "(転送先URL)", "payload": { "name": "temp1", "value": 25 } }, { "timestamp": (受信時刻:unix時刻形式), "serviceCode": "(iotサービスコード)", "id": "(デバイスID)", "simId": "(電話番号)", "destination": "(転送先URL)", "payload": { "name": "temp2", "value": 81 } }] 個々の配列要素を取り出しフォーマットした後、全体をJSON配列化します。 |
JSON配列展開: 無効 | { "timestamp": (受信時刻:unix時刻形式), "serviceCode": "(iotサービスコード)", "id": "(デバイスID)", "simId": "(電話番号)", "destination": "(転送先URL)", "payload": [{ "name": "temp1", "value": 25 }, { "name": "temp2", "value": 81 }] } 送信されたデータは常に1つとみなし、そのデータを用いて全体をフォーマットします。 |
出力フォーマットが「未加工」の場合は、JSON配列展開機能は動作しません。また、同様にデバイスからバイナリデータで送信した場合も機能しません。 |
データハブ転送時のContent-Typeヘッダについて
データハブ転送時に使用されるContent-Typeヘッダは、出力フォーマットの設定やデバイスのデータ送信時の設定によって自動的に設定されます。
判定方法は下記の通りで、上から優先で判定されます。
- データハブ設定のHTTPヘッダにてContent-Typeヘッダを指定している。
- データハブ設定で指定されたContent-Typeヘッダの値が最優先で使用されます。
- テキストデータを送信しており、かつ、出力フォーマット「JSON形式」を使用している。
- Content-Typeにapplication/json;charset=UTF-8が使用されます。
- テキストデータを送信しており、かつ、出力フォーマット「カスタム」を指定しており、出力がJSONとしてパースできる。
- Content-Typeにapplication/json;charset=UTF-8が使用されます。
- デバイスのデータ送信時のContent-Typeヘッダを指定している。
- HTTPでGateway APIに送信された時にContent-Typeヘッダの指定がある場合、その値が使用されます。
- バイナリデータを送信している。
- Content-Typeにapplication/octet-streamが使用されます。
- 上記の条件にいずれも一致しなかった場合
- Content-Typeにtext/plain;charset=UTF-8が使用されます。
HTTPを使用してデータを送信する時、curlやwgetなどの汎用的なWebクライアントツールを使用すると自動的にContent-Typeヘッダが付与されることがあります。 もし意図しないContent-Typeヘッダがデータハブのリクエストに付与される場合、クライアントツールにてConent-Typeヘッダを上書きするか、データハブ設定でContent-Typeヘッダを登録することをお試しください。 |
注意事項
- 転送処理の順序は前後する場合があります。したがって後から受信したデータが先に転送される場合があります。
- 転送先にて送信順序を把握したい場合は、ゲートウェイデバイスからデータを送信する際に「timestamp」を付与することで確認できます。
データ転送時の転送元 IP アドレス
外部システムへの転送はインターネット経由で行われます。
データ転送先でアクセス制限などを行う場合は、以下のIPアドレスを設定してください。
転送元 IP アドレス | 160.13.190.72 160.13.190.73 |
プライベートコネクタをご契約いただき、プライベートネットワークを介してデータ転送を行う場合、お客様専用のゲートウェイ IP アドレスがデータ転送元 IP アドレスです。
お客様専用のゲートウェイ IP アドレスは プライベートコネクタ画面 の情報を参照ください。
ミラーリング機能
1つのデバイスから発生するセンサーデータを、複数のシステムへミラーリングして転送できます。
シンプルなデータのバックアップ用途に加え、検証・本番環境の両システムにセンサデータを転送して利用用途を分けるなどの使い方ができます。