IoT Central の外部でデータを変換する

IoT デバイスから送信されるデータにはさまざまな形式があります。 デバイス データをご自分の IoT Central アプリケーションで使用するには、以下を行うために変換が必要になる場合があります。

  • IoT Central アプリケーションと互換性があるデータ形式にする。
  • 単位を変換する。
  • 新しいメトリックを計算する。
  • 他のソースのデータをエンリッチする。

この記事では、イングレスまたはエグレス時のいずれかで、IoT Central の外部でデバイス データを変換する方法について説明します。

Note

IoT Central は、データを内部的に変換することもできます。詳細については、「IoT Central での受信時にテレメトリをマップする」および「IoT Central アプリケーション内のデータをエクスポート用に変換する」を参照してください。

次の図は、変換が含まれるデータの 3 つのルートを示しています。

イングレスとエグレスの両方のデータ変換ルートの概要

次の表は、3 つの変換の種類の例を示しています。

変換 説明 メモ
メッセージの形式 JSON メッセージに変換または操作します。 CSV から JSON イングレス時。 IoT Central で行われるのは、値の JSON メッセージの受け入れのみです。 詳細については、「テレメトリ、プロパティ、およびコマンドのペイロード」を参照してください。
計算を Azure Functions で実行できる数学関数。 華氏から摂氏への単位変換。 IoT Central への直接接続を介して、デバイスのスケーラブルなイングレスを活用するために、エグレス パターンを使用して変換します。 データを変換すると、視覚化やジョブなどの IoT Central 機能を使用できるようになります。
メッセージの強化 デバイスのプロパティやテレメトリにはない外部データソースからのエンリッチメント。 内部エンリッチメントの詳細については、Azure Blob Storage を使用してクラウドに IoT データをエクスポートするを参照してください。 デバイスの場所データを使用して気象情報をメッセージに追加する。 IoT Central への直接接続を介して、デバイスのスケーラブルなイングレスを活用するために、エグレス パターンを使用して変換します。

前提条件

この攻略ガイドの手順を完了するには、次が必要です。

イングレス時のデータ変換

デバイス データをイングレス時に変換するには、次の 2 つのオプションがあります。

  • IoT Edge: IoT Central アプリケーションにデータを送信する前に、IoT Edge モジュールを使用してダウンストリーム デバイスのデータを変換します。

  • IoT Central デバイス ブリッジ: IoT Central デバイス ブリッジを使って、Sigfox、Particle、The Things Network などの他の IoT デバイス クラウドを IoT Central に接続します。 デバイス ブリッジによって、データの転送に Azure 関数が使用されます。この関数をカスタマイズして、デバイス データを変換することができます。

IoT Edge を使用してデバイス データを変換する

イングレス時に IoT Edge を使用するデータ変換

このシナリオでは、ダウンストリーム デバイスのデータを IoT Central アプリケーションに転送する前に IoT Edge モジュールを使用して変換します。 このシナリオを構成する手順の概要は次のとおりです。

  1. IoT Edge デバイスを設定する: IoT Edge デバイスをインストールしてゲートウェイとしてプロビジョニングし、このゲートウェイを IoT Central アプリケーションに接続します。

  2. ダウンストリーム デバイスを IoT Edge デバイスに接続する: ダウンストリーム デバイスを IoT Edge デバイスに接続し、IoT Central アプリケーションにプロビジョニングします。

  3. IoT Edge 内でデバイス データを変換する: データを変換する IoT Edge モジュールを作成します。 このモジュールを IoT Edge ゲートウェイ デバイスに配置し、ここから、変換されたデバイス データが IoT Central アプリケーションに転送されます。

  4. 検証: ダウンストリーム デバイスからゲートウェイにデータを送信し、変換されたデバイス データが IoT Central アプリケーションに到達することを確認します。

以降のセクションで説明する例では、ダウンストリーム デバイスから、次の形式の JSON データを IoT Edge ゲートウェイ デバイスに送信します。

{
  "device": {
      "deviceId": "<downstream-deviceid>"
  },
  "measurements": {
    "temp": <temperature>,
    "pressure": <pressure>,
    "humidity": <humidity>,
    "scale": "celsius",
  }
}

IoT Edge モジュールを使用してデータを変換し、温度値を Celsius から Fahrenheit に変換してから、IoT Central に送信します。

{
  "device": {
      "deviceId": "<downstream-deviceid>"
  },
  "measurements": {
    "temp": <temperature>,
    "pressure": <pressure>,
    "humidity": <humidity>,
    "scale": "fahrenheit"
  }
}

コードを参照

次の手順は、このシナリオを設定して構成する方法を示しています。

カスタム モジュールをビルドする

このシナリオでは、IoT Edge デバイスで、ダウンストリーム デバイスのデータを変換するカスタム モジュールを実行します。 IoT Edge デバイスを配置して構成する前に、次のことを行う必要があります。

  • カスタム モジュールをビルドします。
  • カスタム モジュールをコンテナー レジストリに追加します。

IoT Edge ランタイムを使って、Azure コンテナー レジストリや Docker Hub などのコンテナー レジストリからカスタム モジュールをダウンロードします。 Azure Cloud Shell には、コンテナー レジストリの作成、モジュールのビルド、モジュールのレジストリへのアップロードに必要なすべてのツールが用意されています。

コンテナー レジストリを作成するには、次のようにします。

  1. Azure Cloud Shell を開き、Azure サブスクリプションにサインインします。

  2. Bash シェルを選択します。

  3. 次のコマンドを実行して、Azure コンテナー レジストリを作成します。

    REGISTRY_NAME="{your unique container registry name}"
    az group create --name ingress-scenario --location eastus
    az acr create -n $REGISTRY_NAME -g ingress-scenario --sku Standard --admin-enabled true
    az acr credential show -n $REGISTRY_NAME
    

    usernamepassword の値を書き留めておきます。これらは後で使用します。 コマンドの出力に表示されるパスワードの 1 つだけが必要です。

Azure Cloud Shell でカスタム モジュールをビルドするには、次のようにします。

  1. Azure Cloud Shell で、モジュールのソース コードが含まれている GitHub リポジトリをクローンします。

    git clone https://github.com/iot-for-all/iot-central-transform-with-iot-edge
    
  2. カスタム モジュールをビルドするため、Azure Cloud Shell で次のコマンドを実行します。

    cd iot-central-transform-with-iot-edge/custommodule/transformmodule
    az acr build --registry $REGISTRY_NAME --image transformmodule:0.0.1-amd64 -f Dockerfile.amd64 .
    

    これらのコマンドの実行には数分かかる場合があります。

IoT Edge デバイスを設定する

このシナリオでは、IoT Edge ゲートウェイ デバイスを使用して、ダウンストリーム デバイスのデータを変換します。 このセクションでは、IoT Central アプリケーション内でゲートウェイ デバイス用の IoT Central デバイス テンプレートを作成する方法について説明します。 IoT Edge デバイスにより、配置マニフェストが使用され、そのモジュールが構成されます。

この例では、ダウンストリーム デバイスにデバイス テンプレートは不要です。 ダウンストリーム デバイスは IoT Central に登録されるため、IoT Edge デバイスに接続するために必要な資格情報を生成できます。 IoT Edge モジュールでデータが変換されるため、すべてのダウンストリーム デバイス テレメトリは、IoT Edge デバイスによって送信されたかのように IoT Central で受信されます。

IoT Edge ゲートウェイ デバイス用のデバイス テンプレートを作成するには、次のようにします。

  1. 配置マニフェスト moduledeployment.json のコピーをローカルの開発用コンピューターに保存します。

  2. moduledeployment.json マニフェスト ファイルのローカル コピーをテキスト エディターで開きます。

  3. registryCredentials セクションを見つけて、プレースホルダーを Azure コンテナー レジストリの作成時に書き留めた値に置き換えます。 address 値は {your username}.azurecr.io のようになります。

  4. transformmodulesettings セクションを見つけます。 {your username} を前の手順で使ったのと同じ値に置き換えます。 変更を保存します。

  5. IoT Central アプリケーションで、[エッジ マニフェスト] ページに移動します。

  6. [+新規] を選択します。 配置マニフェストの名前 (Transformer など) を入力し、前にダウンロードした moduledeployment.json ファイルをアップロードします。 配置マニフェストには、transformmodule というカスタム モジュールが含まれています。

  7. [次へ][作成] の順に選択します。

  8. IoT Central アプリケーションで、[デバイス テンプレート] ページに移動します。

  9. [+ 新規作成] を選択し、[Azure IoT Edge] を選択して、[次へ: カスタマイズ] を選択します。

  10. デバイス テンプレート名として「IoT Edge gateway device」と入力します。 [This is a gateway device]\(これはゲートウェイ デバイスです\) を選択します。

  11. [次へ: 確認] を選択して、[作成] を選択します。

  12. [モデルの作成] ページで、[カスタム モデル] を選びます。

  13. モデルで、[モジュール][マニフェストからモジュールをインポート] の順に選択します。 [Transformer] 配置マニフェストを選択して、[インポート] を選択します。

デプロイ マニフェストからは、モジュールから送信されるテレメトリは指定されません。 デバイス テンプレートにテレメトリの定義を追加するには:

  1. IoT Edge ゲートウェイ デバイス テンプレートの [モジュール] セクションで [Module transformmodule] を選択します。

  2. [機能の追加] を選択し、次のテーブルに含まれる情報を利用して新しいテレメトリの種類を追加します。

    設定
    表示名 デバイス
    名前 device
    機能の種類 テレメトリ
    セマンティックの種類 なし
    [スキーマ] Object

    オブジェクト定義:

    [表示名] 名前 [スキーマ]
    Device ID deviceId String

    変更を保存。

  3. [機能の追加] を選択し、次のテーブルに含まれる情報を利用して新しいテレメトリの種類を追加します。

    設定
    表示名 測定
    名前 測定
    機能の種類 テレメトリ
    セマンティックの種類 なし
    [スキーマ] Object

    オブジェクト定義:

    [表示名] 名前 [スキーマ]
    温度 温度 倍精度浮動小数点型
    "圧力" 気圧 倍精度浮動小数点型
    湿度 湿度 倍精度浮動小数点型
    拡大縮小 scale String

    変更を保存。

  4. モデルで、[リレーションシップ] を選びます。 transformmodule モジュールでは [リレーションシップ] を選ばないでください。

  5. [リレーションシップの追加] を選びます。

  6. 表示名として「Downstream Sensor」、名前として「sensor」と入力し、ターゲットとして [任意] を選びます。 [保存] を選択します。

  7. [発行] を選択して、デバイス テンプレートを発行します。

IoT Central にゲートウェイ デバイスを登録するには、次のようにします。

  1. IoT Central アプリケーションで、 [デバイス] ページに移動します。

  2. [IoT Edge ゲートウェイ デバイス] を選び、[+ 新規作成] を選びます。 デバイス名として「IoT Edge gateway device」と入力し、デバイス ID として「gateway-01」と入力し、デバイス テンプレートとして IoT Edge gateway device が選択され、[このデバイスをシミュレートする][いいえ] になっていることを確認します。 エッジ マニフェストとして [Transformer] を選択します。 [作成] を選択します

  3. デバイスの一覧で、IoT Edge gateway device をクリックし、[接続] を選択します。

  4. IoT Edge gateway deviceID スコープデバイス ID主キーの値を書き留めておきます。 これらは後で使用します。

IoT Central にダウンストリーム デバイスを登録するには、次のようにします。

  1. IoT Central アプリケーションで、 [デバイス] ページに移動します。

  2. デバイス テンプレートを選択しないでください。 [+新規] を選択します。 デバイス名として「Downstream 01」と入力し、デバイス ID として「downstream-01」と入力し、デバイス テンプレートが未割り当て、および [このデバイスをシミュレートする][いいえ] になっていることを確認します。 [作成] を選択します

  3. デバイス一覧の [Downstream 01] デバイスをクリックし、[マネージド デバイス] > [Attach to gateway] (ゲートウェイにアタッチ) を選びます。

  4. [Attach to a gateway] (ゲートウェイにアタッチ) ダイアログで [IoT Edge ゲートウェイ デバイス] デバイス テンプレートと [IoT Edge ゲートウェイ デバイス] デバイス インスタンスを選びます。 [接続] を選択します。

  5. [Downstream 01] デバイスで [接続] を選びます。

  6. Downstream 01 デバイスの ID スコープデバイス ID主キーの値を書き留めておきます。 これらは後で使用します。

ゲートウェイとダウンストリーム デバイスを配置する

便宜上、この記事では、Azure 仮想マシンを使用してゲートウェイとダウンストリーム デバイスを実行します。 2 つの Azure 仮想マシンを作成するには、次の表の後に表示される [Azure に配置する] ボタンを選びます。 表の情報を使って [カスタム デプロイ] フォームに入力します。

フィールド
リソース グループ ingress-scenario
[DNS Label Prefix Gateway]\(DNS ラベル プレフィックス ゲートウェイ\) このマシンの一意の DNS 名 (例: <your name>edgegateway)
[DNS Label Prefix Downstream]\(DNS ラベル プレフィックス ダウンストリーム\) このマシンの一意の DNS 名 (例: <your name>downstream)
スコープ ID 前に書き留めておいた ID スコープ
[Device ID IoT Edge Gateway]\(デバイス ID IoT Edge ゲートウェイ\) gateway-01
[Device Key IoT Edge Gateway]\(デバイス キー IoT Edge ゲートウェイ\) 前に書き留めておいた主キーの値
認証の種類 Password
管理者パスワードまたはキー 両方の仮想マシンの AzureUser アカウントのパスワードを選択します。

[Azure へのデプロイ] ボタン

[確認および作成][作成] の順に選択します。 ingress-scenario リソース グループに仮想マシンを作成するには数分かかります。

IoT Edge ゲートウェイ デバイスが正常に動作していることを確認するには、次の手順を実行します。

  1. IoT Central アプリケーションを開きます。 次に、[デバイス] ページのデバイスの一覧で、IoT Edge Gateway device に移動します。

  2. [モジュール] タブを選択し、3 つのモジュールの状態を確認します。 仮想マシンで IoT Edge ランタイムが起動するまでに数分かかります。 仮想マシンが実行されている場合、3 つのモジュールの状態は [実行中] です。 IoT Edge ランタイムが起動しない場合は、「IoT Edge デバイスのトラブルシューティング」を参照してください。

IoT Edge デバイスがゲートウェイとして機能するためには、あらゆるダウンストリーム デバイスに対してその ID を証明するための証明書がいくつか必要です。 この記事ではデモ証明書を使用します。 運用環境では、利用している証明機関からの証明書を使用してください。

デモ証明書を生成してゲートウェイ デバイスにインストールするには、次のようにします。

  1. SSH を使用して、ゲートウェイ デバイスの仮想マシンに接続してサインインします。 この仮想マシンの DNS 名は Azure portal で確認できます。 ingress-scenario リソース グループ内の edgegateway 仮想マシンに移動します。

    ヒント

    SSH を使用してローカル コンピューターまたは Azure Cloud Shell から接続する前に、場合により、両方の仮想マシンで SSH アクセス用にポート 22 を開く必要があります。

  2. 次のコマンドを実行して、IoT Edge リポジトリをクローンし、デモ証明書を生成します。

    # Clone the repo
    cd ~
    git clone https://github.com/Azure/iotedge.git
    
    # Generate the demo certificates
    mkdir certs
    cd certs
    cp ~/iotedge/tools/CACertificates/*.cnf .
    cp ~/iotedge/tools/CACertificates/certGen.sh .
    ./certGen.sh create_root_and_intermediate
    ./certGen.sh create_edge_device_ca_certificate "mycacert"
    

    上記のコマンドを実行すると、後続の手順で下記のファイルを使用する準備が整います。

    • ~/certs/certs/azure-iot-test-only.root.ca.cert.pem - IoT Edge シナリオをテストするための、その他すべてのデモ用証明書を作成するために使用されるルート CA 証明書。
    • ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem - config.yaml ファイルから参照されるデバイス CA 証明書。 ゲートウェイのシナリオでは、IoT Edge デバイスはこの CA 証明書によって、ダウンストリーム デバイスに対して自らの ID を検証します。
    • ~/certs/private/iot-edge-device-mycacert.key.pem - デバイス CA 証明書に関連付けられた秘密キー。

    これらのデモ証明書の詳細については、「IoT Edge デバイスの機能をテストするためのデモ用の証明書を作成する」を参照してください。

  3. config.toml ファイルをテキスト エディターで開きます。 次に例を示します。

    sudo nano /etc/aziot/config.toml
    
  4. 次のように、証明書の設定をコメント解除して変更します。

    trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem"
    
    ...
    
    [edge_ca]
    cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem"
    pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
    

    前の例では、AzureUser としてサインイン済みであり、"mycacert" という名前のデバイス CA 証明書が作成済みであると想定しています。

  5. 変更を保存し、次のコマンドを実行して、config.toml ファイルが正しいことを確認します。

    sudo iotedge check
    
  6. IoT Edge ランタイムを再起動する:

    sudo iotedge config apply
    

変更後に IoT Edge ランタイムが正常に起動すると、$edgeAgent および $edgeHub モジュールの状態が [実行中] に変わります。 これらの状態値は、IoT Central で、ゲートウェイ デバイスの [モジュール] ページで確認できます。

ランタイムが起動しない場合は、config.toml で行った変更を確認し、「IoT Edge デバイスのトラブルシューティング」を参照してください。

ダウンストリーム デバイスを IoT Edge デバイスに接続する

ダウンストリーム デバイスを IoT Edge ゲートウェイ デバイスに接続するには、次のようにします。

  1. SSH を使用して、ダウンストリーム デバイスの仮想マシンに接続してサインインします。 この仮想マシンの DNS 名は Azure portal で確認できます。 ingress-scenario リソース グループ内の leafdevice 仮想マシンに移動します。

    ヒント

    SSH を使用してローカル コンピューターまたは Azure Cloud Shell から接続する前に、場合により、両方の仮想マシンで SSH アクセス用にポート 22 を開く必要があります。

  2. サンプル ダウンストリーム デバイスのソース コードを使用して GitHub リポジトリをクローンするため、次のコマンドを実行します。

    cd ~
    git clone https://github.com/iot-for-all/iot-central-transform-with-iot-edge
    
  3. ゲートウェイ デバイスから必要な証明書をコピーするため、次のscp コマンドを実行します。 この scp コマンドにより、ホスト名 edgegateway を使用してゲートウェイ仮想マシンが識別されます。 パスワードの入力を求められます。

    cd ~/iot-central-transform-with-iot-edge
    scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem leafdevice/certs
    
  4. leafdevice フォルダーに移動し、必要なパッケージをインストールします。 次に、build および start スクリプトを実行して、デバイスをプロビジョニングしてゲートウェイに接続します。

    cd ~/iot-central-transform-with-iot-edge/leafdevice
    sudo apt update
    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
    sudo apt-get install nodejs
    npm install
    npm run-script build
    npm run-script start
    

    sudo apt-get install nodejs コマンドの実行中 にインストールを許可するように求められる場合があります。ダイアログが表示されたら Y を押します。

  5. 先ほど作成したダウンストリーム デバイスのデバイス ID、スコープ ID、および SAS キーを入力します。 ホスト名に「edgegateway」と入力します。 コマンドの出力は次のようになります。

    Registering device downstream-01 with scope 0ne00284FD9
    Registered device downstream-01.
    Connecting device downstream-01
    Connected device downstream-01
    Sent telemetry for device downstream-01
    Sent telemetry for device downstream-01
    Sent telemetry for device downstream-01
    Sent telemetry for device downstream-01
    Sent telemetry for device downstream-01
    Sent telemetry for device downstream-01
    

わかりやすくするために、ダウンストリーム デバイスのコードによって IoT Central にデバイスがプロビジョニングされます。 通常、ダウンストリーム デバイスはインターネットに接続できず、Device Provisioning Service エンドポイントに接続できないため、ゲートウェイを介して接続します。 詳細については、IoT Edge の透過的なゲートウェイを使用してデバイスを接続する方法に関するページを参照してください。

確認

シナリオが実行されていることを確認するには、IoT Central で IoT Edge gateway device に移動します。

デバイス ページに変換されたデータが示されているスクリーンショット。

  • [モジュール] を選択します。 3 つの IoT Edge モジュール $edgeAgent$edgeHub、および transformmodule が実行されていることを確認します。

  • [生データ] を選択します。 [デバイス] 列のテレメトリ データは次のようになります。

    {"deviceId":"downstream-01"}
    

    [測定] 列のテレメトリ データは次のようになります。

    {"temperature":85.21208,"pressure":59.97321,"humidity":77.718124,"scale":"farenheit"}
    

気温は華氏で送信されます。 IoT Edge デバイスによって、ダウンストリーム デバイスのデータが変換されるため、テレメトリは、IoT Central 内で、ゲートウェイ デバイスに関連付けられています。 変換されたテレメトリを視覚化するには、IoT Edge ゲートウェイ デバイス テンプレートでビューを作成し、それを再発行します。

エグレス時のデータ変換

デバイスを IoT Central に接続し、デバイス データをコンピューティング エンジンにエクスポートして変換した後、デバイスの管理と分析を行えるように、変換されたデータを IoT Central に戻すことができます。 次に例を示します。

  • 位置情報データが、デバイスから IoT Central に送信されます。
  • データは IoT Central からコンピューティング エンジンにエクスポートされ、そこで、気象情報を使って位置情報データが拡張されます。
  • 拡張されたデータは、コンピューティング エンジンによって IoT Central に戻されます。

コンピューティング エンジンとして IoT Central デバイス ブリッジを使用して、IoT Central からエクスポートされたデータを変換できます。

エグレス時にデータを変換する利点は、デバイスが IoT Central に直接接続されることです。これにより、デバイスにコマンドを送信したり、デバイスのプロパティを更新したりすることが簡単になります。 ただし、この方法では、使用するメッセージが毎月の割り当てよりも多くなり、Azure IoT Central の使用コストが増加する可能性があります。

IoT Central デバイス ブリッジを使用してデバイス データを変換する

エグレス時に IoT Edge を使用するデータ変換

このシナリオでは、IoT Central からエクスポートされたデバイス データが、コンピューティング エンジンによって変換された後、IoT Central アプリケーションに戻されます。 このシナリオを構成する手順の概要は次のとおりです。

  1. コンピューティング エンジンを設定する: データ変換のためのコンピューティング エンジンとして機能する IoT Central デバイス ブリッジを作成します。

  2. デバイス ブリッジのデバイス データを変換する: データ変換のユース ケースに合わせてデバイス ブリッジ関数コードを変更して、デバイス ブリッジのデータを変換します。

  3. IoT Central からデバイス ブリッジへのデータ フローを有効にする: 変換のために IoT Central からデバイス ブリッジにデータをエクスポートします。 次に、変換されたデータを IoT Central に戻します。 データのエクスポートを作成するとき、メッセージ プロパティ フィルターを使用して、変換されていないデータのみをエクスポートします。

  4. 確認: デバイスを IoT Central アプリに接続し、IoT Central で、生のデバイス データと変換されたデータの両方を確認します。

以降のセクションで説明する例では、デバイスから、次の形式の CSV データを IoT Edge ゲートウェイ デバイスに送信します。

"<temperature in degrees C>, <humidity>, <latitude>, <longitude>"

デバイス ブリッジを使用して、以下を行ってデバイス データを変換します。

  • 気温の単位を摂氏から華氏に変更する。
  • Open Weather サービスから、緯度と経度の値に対して取得した気象データを使用して、デバイス データをエンリッチする。

変換されたデータは、デバイス ブリッジによって、次の形式で IoT Central に送信されます。

{
  "temp": <temperature in degrees F>,
  "humidity": <humidity>,
  "lat": <latitude>,
  "lon": <logitude>,
  "weather": {
    "weather_temp": <temperature at lat/lon>,
    "weather_humidity": <humidity at lat/lon>,
    "weather_pressure": <pressure at lat/lon>,
    "weather_windspeed": <wind speed at lat/lon>,
    "weather_clouds": <cloud cover at lat/lon>,
    "weather_uvi": <UVI at lat/lon>
  }
}

次の手順は、このシナリオを設定して構成する方法を示しています。

IoT Central 接続設定を取得する

このシナリオを設定する前に、IoT Central アプリケーションからいくつかの接続設定を取得する必要があります。

  1. ご使用の IoT Central アプリケーションにサインインします。

  2. [アクセス許可] > [デバイス接続グループ] に移動します。

  3. ID スコープ を書き留めておきます。 この値は後で使用します。

  4. SaS-IoT-Devices 登録グループを選択します。 Shared Access Signature の主キーを書き留めておきます。 この値は後で使用します。

コンピューティング エンジンを設定する

このシナリオでは、IoT Central デバイス ブリッジと同じ Azure Functions 配置を使用します。 デバイス ブリッジをデプロイするには、次の表の後に表示される [Azure に配置する] ボタンを選びます。 表の情報を使って [カスタム デプロイ] フォームに入力します。

フィールド
リソース グループ egress-scenario という名前で新しいリソース グループを作成します
リージョン 最も近いリージョンを選択します。
スコープ ID 前に書き留めておいた ID スコープを使用します。
[IoT Central SAS Key]\(IoT Central SAS キー\) SaS-IoT-Devices 登録グループの Shared Access Signature の主キーを使用します。 この値は、前に書き留めてあります。

Azure に配置する

[確認および作成][作成] の順に選択します。 egress-scenario リソース グループに Azure 関数と関連リソースを作成するには数分かかります。

デバイス ブリッジでデバイス データを変換する

エクスポートされたデバイス データを変換するようにデバイス ブリッジを構成するには、次のようにします。

  1. Open Weather サービスからアプリケーション API キーを取得します。 アカウントは無料で、サービスの利用に制限があります。 アプリケーション API キーを作成するには、Open Weather サービス ポータルでアカウントを作成し、指示に従います。 Open Weather API キーは後で使用します。

  2. Azure portal で、egress-scenario リソース グループの関数アプリに移動します。

  3. 左側のナビゲーションの [開発ツール] で、[App Service Editor (プレビュー)] を選択します。

  4. [移動 →] を選択して [App Service Editor] ページを開きます。 次の変更を行います。

    1. wwwroot/IoTCIntegration/index.js ファイルを開きます。 このファイル内のすべてのコードを index.js のコードに置き換えます。

    2. 新しい index.js で、先ほど取得した Open Weather API キーを使用して openWeatherAppId 変数ファイルを更新します。

      const openWeatherAppId = '<Your Open Weather API Key>'
      
    3. 関数から IoT Central に送信されるデータにメッセージ プロパティを追加します。 このプロパティは、変換されたデータをエクスポートしないように IoT Central によって使用されます。 この変更を行うには、wwwroot/IoTCIntegration/lib/engine.js ファイルを開きます。 次のコードを見つけます。

      if (timestamp) {
        message.properties.add('iothub-creation-time-utc', timestamp);
      }
      

      次のコードを前のスニペットのコードのすぐ下に追加します。

      // add a message property that we can look for in data export to not re-compute computed telemetry
      message.properties.add('computed', true);
      

      参考のため、engine.js ファイルの完全な例を確認できます。

  5. App Service Editor の左側のナビゲーションで、[コンソール] を選択します。 次のコマンドを実行して、必要なパッケージをインストールします。

    cd IoTCIntegration
    npm install
    

    このコマンドの実行には、数分かかる場合があります。

  6. [Azure Function Overview]\(Azure 関数の概要\) ページに戻り、関数を再起動します。

    関数を再起動する

  7. 左側のナビゲーションで、[関数] を選択します。 次に、IoTCIntegration を選択します。 [Code + Test](コード + テスト) を選択します。

  8. 関数の URL をメモしておきます。この値は後で必要になります。

    関数の URL を取得する

IoT Central からデバイス ブリッジへのデータ フローを有効にする

このセクションでは、Azure IoT Central アプリケーションを設定する方法について説明します。

まず、デバイス モデル ファイルをローカル コンピューターに保存します。

IoT Central アプリケーションにデバイス テンプレートを追加するには、IoT Central アプリケーションに移動してから、次のようにします。

  1. IoT Central アプリケーションにサインインし、[デバイス テンプレート] ページに移動します。

  2. [+ 新規作成] を選択し、[IoT デバイス] を選択して、[次へ: カスタマイズ] を選択し、テンプレート名として「Compute model」と入力します。 確認\) をクリックします。 [作成] を選択します。

  3. [モデルのインポート] を選択し、先にダウンロードした model.json ファイルを参照します。

  4. モデルをインポートした後、[発行] を選択して Compute model デバイス テンプレートを発行します。

データのエクスポートを設定して、デバイス ブリッジにデータを送信します。

  1. IoT Central アプリケーションで、[データのエクスポート] を選択します。

  2. [+ New destination]\(+ 新しい変換先\) を選択して、デバイス ブリッジで使用する変換先を作成します。 変換先に「Compute function」という名前を指定し、[ターゲットの種類][Webhook] を選択します。 [コールバック URL] には、前に書き留めておいた関数の URL の貼り付けを選択します。 [認証][No Auth]\(認証なし\) のままにします。

  3. 変更を保存します。

  4. [+ 新しいエクスポート] を選択し、「Compute export」というデータ エクスポートを作成します。

  5. 使用しているデバイス テンプレートのデバイス データのみをエクスポートするフィルターを追加します。 [+ フィルター] を選択し、項目 [デバイス テンプレート] を選択します。等号演算子を選択し、作成した Compute model デバイス テンプレートを選択します。

  6. 変換されたデータと変換されていないデータを区別するメッセージ フィルターを追加します。 このフィルターを使って、変換された値がデバイス ブリッジに戻らないようにします。 [+ Message property filter]\(+ メッセージ プロパティ フィルター\) を選択し、名前値「computed」を入力して、演算子 [存在しません] を選択します。 文字列 computed は、デバイス ブリッジのサンプル コードでキーワードとして使用されます。

  7. 変換先として、先ほど作成した Compute function 変換先を選択します。

  8. 変更を保存します。 1 分ほど経過すると、[エクスポートの状態][正常] が表示されます。

確認

シナリオのテストに使用するサンプル デバイスは Node.js で記述されています。 ローカル コンピューターに Node.js と npm がインストールされていることを確認します。 これらの前提条件をインストールしない場合は、それらがプレインストールされている Azure Cloud Shell を使用します。

シナリオをテストするサンプル デバイスを実行するには、次のようにします。

  1. サンプル コードが含まれている GitHub リポジトリをクローンし、次のコマンドを実行します。

    git clone https://github.com/Azure/iot-central-compute
    
  2. サンプル デバイスを IoT Central アプリケーションに接続するため、iot-central-compute/device/device.js ファイルの接続設定を編集します。 スコープ ID とグループ SAS キーを、前に書き留めておいた値に置き換えます。

    // These values need to be filled in from your Azure IoT Central application
    //
    const scopeId = "<IoT Central Scope Id value>";
    const groupSasKey = "<IoT Central Group SAS key>";
    //
    

    変更を保存します。

  3. 次のコマンドを使用して、必要なパッケージをインストールし、デバイスを実行します。

    cd ~/iot-central-compute/device
    npm install
    node device.js
    
  4. このコマンドの結果は、次の出力のようになります。

    registration succeeded
    assigned hub=iotc-2bd611b0....azure-devices.net
    deviceId=computeDevice
    Client connected
    send status: MessageEnqueued [{"data":"33.23, 69.09, 30.7213, -61.1192"}]
    send status: MessageEnqueued [{"data":"2.43, 75.86, -2.6358, 162.935"}]
    send status: MessageEnqueued [{"data":"6.19, 76.55, -14.3538, -82.314"}]
    send status: MessageEnqueued [{"data":"33.26, 48.01, 71.9172, 48.6606"}]
    send status: MessageEnqueued [{"data":"40.5, 36.41, 14.6043, 14.079"}]
    
  5. IoT Central アプリケーションで、computeDevice というデバイスに移動します。 [生データ] ビューに、2 つの異なるテレメトリ ストリームが約 5 秒ごとに表示されます。 モデル化されていないデータを含むストリームが元のテレメトリで、モデル化されたデータを含むストリームが関数によって変換されたデータです。

    元のデータと変換された生データを示すスクリーンショット。

リソースをクリーンアップする

このガイドの手順に従って作成した Azure リソースが不要になった場合は、Azure portal でリソース グループを削除します。

このガイドで使用した 2 つのリソース グループは、ingress-scenarioegress-scenario です。

次のステップ

この記事では、IoT Central に対して、イングレスとエグレスの両方で、デバイス データを変換するためのさまざまなオプションについて説明しました。 次の 2 つの個別のシナリオについてのチュートリアルを記事で紹介しました。

  • IoT Central アプリケーションにデータを送信する前に、IoT Edge モジュールを使用してダウンストリーム デバイスのデータを変換します。
  • Azure Functions を使用して、IoT Central の外部でデータを変換します。 このシナリオでは、IoT Central で、データのエクスポートを使用して、変換される Azure 関数に受信データを送信します。 変換されたデータは、関数によって、IoT Central アプリケーションに戻されます。

Azure IoT Central アプリケーションの外部でデバイス データを変換する方法を説明したので、次は、IoT Central でデータ エクスプローラーを使用してデバイス データを分析する方法について説明します。