ステップ
1: IoT Connect Gateway を設定する
ここでは、パソコンのブラウザ上で「Swagger」を利用して API コマンドを利用する場合を例 としてご説明します。Arcstar Universal One モバイル SIM を利用しての通信となります。
1. Swagger にアクセスする
○ Swagger URL: https://api.icgw.ntt.com/api/index.html
2. 認証 Token を作成する
○ [POST] /api/v1/users/credentials を開く ○ [Try it out] を押す ○ Request body 欄に以下を追加 { "userName": "お客様のユーザ名", "password": "お客様のパスワード" } ○ [Execute] を押すと token が作成される※curl で送信したいユーザは、 [Execute] 押下後 curl 欄に表示されるコマンドを ご使用ください。
3. 作成した Token を使用し、Authorize を実施する
○ [Authorize] を押す
○ Value 欄に「Bearer(半角スペース)」を入力して 2 で作成した token を貼り付 け、 [Authorize] を押す
以降、Swagger 上で API を送信すると token 情報が付与される
プロトコル変換設定(
HTTP/GCP IoT Core の場合)
上記のAuthorize を実施したあと、下記手順を Swagger 上で実施して設定を行います。 (設定を実施する際にはToken 情報が付加されている必要があります。)
1. 新規グループを作成し、SIM をグループへ追加する
○ [POST] /api/v1/groups を開き、 [Try it out] を押す
○ Request body 欄に以下を追加し、 [Execute] を押す *は必須項目
項目 説明
name * 任意のグループ名
sims * 本グループに追加するSIM の IMSI 番号 Request 例: { "name": "グループ1", "sims": [ "44010123456789"] } Response 例: { "id": "5fd19167c653f932439cc9ca", "name": "グループ1", "userId": "5fd19166c653f932439cc9c9", "sims": ["44010123456789"], "protocolConversion": [] } → 作成したグループの ”id” を取得
2. GCP IoT Core の認証情報を作成する
○ [POST] /api/v1/authentications/{type} を開き、 [Try it out] を押す
○ [type] に以下を入力
項目 説明
type gcp-iot-credentials
○ Request body 欄に以下を追加し、 [Execute] を押す *は必須項目 項目 説明 name 任意の認証情報名 description 任意の設定概要 projectId * GCP のプロジェクト ID region * GCP で作成したレジストリの region registryId * GCP で作成したレジストリの ID deviceId * GCP で作成したデバイスの ID algorithm * RS256 または ES256 privateKey * 「公開鍵・秘密鍵のペアを作成する」で作成した秘密鍵 ※下記参照 key の内容はそのままでは使えないため、以下の変更を加えて使用 ■ 改行するところに \n を挿入 ■ 改行を無くし、一行の文字列にする 元の内容:
---BEGIN PRIVATE KEY--- xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx ---END PRIVATE KEY---
編集後:
---BEGIN PRIVATE
KEY---\nxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxx xxxxxxxxxxxxxxxxxxxxxxxx\n---END PRIVATE KEY---
○ region, registryId, deviceId:ステップ 1 で設定した内容を登録 Request 例: { "name": "GCP AUTH", "projectId": "gcp1-3-2", "region": "asia-east1", "registryId": "pconv-gcp-customer", "deviceId": "pconv_gcp_client_01", "algorithm": "RS256",
"privateKey": "---BEGIN PRIVATE KEY---\nMIIEvQI(省略)---END PRIVATE KEY---"
} Response 例: { "description": "GCP IoT", "projectId": "gcp1-3-2", "region": "asia-east1", "registryId": "pconv-gcp-customer", "deviceId": "pconv_gcp_client_01", "algorithm": "RS256",
"privateKey": "---BEGIN PRIVATE KEY---\nMIIEvQI(省略)---END PRIVATE KEY---",
"id": "3bf96636-bc7a-4f51-b0e9-ed16f1a23fcf", "name": "NTT KEYS AUTH TEST",
"type": "gcp-iot-credentials" }
→ 作成した認証情報の “id” を取得
3. グループに対してプロトコル変換設定を追加する
○ [POST] /api/v1/groups/{groupId}/pconv/{pconvType} を開き、 [Try it out] を押す
○ groupId と pconvType に以下を入力
項目 説明
groupId 「1. 新規グループを作成し、SIM をグループへ追加す る」で取得したGroup ID
pconvType http
○ Request body 欄に以下を追加し [Execute] を押す
*は必須項目
項目 説明
name * 任意のプロトコル変換設定名
enabled true または false(デフォルト:true)
プロトコル変換設定を有効化する場合はtrue を設定する path * 本 GW の送信先パスとして任意に設定可能。グループ内 で一意の値(送信先パスを変更すれば一つのグループで複 数の HTTP設定を設定可能)。設定しない場合も「/」の み入力する必要あり serviceType * gcp-iot
authenticationId * 「2. GCP IoT Core の認証情報を作成する」で取得した Authentication ID subfolder 任意 GCP 上で確認できる method * 次のいずれか: getConfig: デバイスの設定を取得 publishEvent: イベントの送信 setState: デバイスの状態を設定 appendImsi true または false(デフォルト:true)
subfolder に IMSI を追加する場合は true を設定する (※1)参照
appendImei true または false(デフォルト:false)
subfolder に IMEI を追加する場合は true を設定する (※1)参照
appendMsisdn true または false(デフォルト:true)
subfolder に MSISDN を追加する場合は true を設定する (※1)参照
appendDeviceName true または false(デフォルト:false)
subfolder に DeviceName を追加する場合は true を設定す る (※1)参照 (※1)ユーザが true に設定したヘッダは、以下の形で subFolder に追加される その際、 {} 内は実際の SIM 情報に置き換えられる ■ データの順番は固定 ■ データ間は ”/” でつなげるが、この場合の ”/” は文字列であり、subfolder の階層は1 階層とする ■ subfolder: string が設定されている場合 string/{IMSI}/{IMEI}/{MSISDN}/{DeviceName} ■ subfolder が設定されていない場合 {IMSI}/{IMEI}/{MSISDN}/{DeviceName} ■ ヘッダの設定が無効化されている場合、パラメータ自体がなくなる string/{IMSI}/{MSISDN}/{DeviceName} ■ ヘッダの設定が有効化されているが、データが存在しない場合、データ の値をNA とする string/{IMSI}/NA/{MSISDN}/{DeviceName} Request 例: { "name": "GCP HTTP", "entrypoint": { "path": "/gcp-test/publish" }, "destination": { "serviceType": "gcp-iot", "authenticationId": "{gcpIotAuthenticationId}", "subfolder": "test", "method": "publishEvent" } } Response 例: { "entrypoint": { "path": "/gcp-test/publish" }, "destination": { "serviceType": "gcp-iot", "authenticationId": "b263b828-7825-491g-b57e-bf8cab5e0ca2", "subfolder": "test", "method": "publishEvent" }, "headers": { "appendImsi": true, "appendImei": false, "appendMsisdn": true, "appendDeviceName": false, }, "id": "ffcb54f4-552f-4778-b94c-c6abd05f99a2", "type": "http", "name": "GCP HTTP", "enabled": true }
ステップ
2: IoT Connect Gateway を使用して
Google IoT Core にデータを送信する
1. サブスクリプションを作成する
○ Google Cloud Platform のメニューから [Pub/Sub] > [トピック] を選択
○ ステップ 1 で設定した Pub/Sub トピックを選択 ○ [サブスクリプションを作成] を選択
○ 任意のサブスクリプション ID を入力し、 [Create] を押す
2. デバイスからデータを送信する
○ curl コマンドを用いて、デバイスからクラウドへ HTTPリクエストを送信 ○ 送信先:http:// an1.icgw.ntt.com/{path}
送信例:
curl -X POST -i http://an1.icgw.ntt.com/gcp-test/publish -d 'Hello world'
IoT Connect Gateway では受信データを変換して GCP に送信する Method によって変換方法は以下の通り異なる (1)Method = publishEvent の場合:受信したデータを下記フォーマットの "binaryData" に埋め込んで送信する { "subFolder": string, "gatewayInfo": { object(GatewayInfo) },
"binaryData": 'Hello world' } (2)Method = setState の場合:受信したデータを下記フォーマットの "DeviceState" に埋め込んで送信する { "state": { object(DeviceState) }, "gatewayInfo": { object(GatewayInfo) } } 以下のようなレスポンスが返ってくる HTTP/1.1 200 OK X-Powered-By: Express
Content-Type: application/json; charset=UTF-8 Vary: X-Origin, Referer, Origin,Accept-Encoding Date: Thu, 18 Mar 2021 01:16:27 GMT
Server: ESF Cache-Control: private X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Accept-Ranges: none Connection: close Transfer-Encoding: chunked {}
3. データを確認する
○ Google Cloud Platform のメニューから [Pub/Sub] > [トピック] を選択
○ ステップ1で設定した Pub/Sub トピックを選択 ○ [メッセージを表示] を押す ○ 1 で作成したサブスクリプションを選択し [PULL] を押すと、デバイスから送信 したメッセージが表示される ※一度では全て表示されないことがあるため、何度か押す ○ データを右にスクロールし subFolderを見ると、ヘッダに設定した情報などを確 認できる