デバイス・プロビジョニング・ガイド

目次

概要

このガイドでは、デバイスの事前プロビジョニングで IoT Agent を使用するプロセスを示します。この使用例では、デバイスの所有者は、各デバイスを接続する前に、デバイス情報をエージェントにプロビジョニングします。その後、デバイスはサーバに自身を登録し、エージェントで使用を開始できます。

このガイドでは、Lightweight M2M クライアントを使用してデバイスとのやりとりをシミュレートします。必要に応じて、このクライアントのインストールと使用について説明します。

このガイドでは、"はじめに" のセクション での Robot の例を使用して、すべてのデバイス属性の明示的なマッピングを提供します。OMA レジストリの自動マッピングを使用して自動的にマッピングされるものもありますが、その他のステップ・バイ・ステップ・ガイドで説明しています。

インストール

エージェントのインストール

エージェントをインストールするには、まず Github リポジトリをクローンします :

git clone https://github.com/telefonicaid/lightweightm2m-iotagent.git
リポジトリがクローニングされたら、プロジェクトのルートフォルダから次のコマンドを実行して依存関係をダウンロードします :
npm install

クライアントのインストール

クライアントをインストールするには、次の Github リポジトリをクローンします :

git clone https://github.com/telefonicaid/lwm2m-node-lib.git
プロジェクトのルートフォルダから依存関係をダウンロードして実行します :
npm install

設定

リポジトリに付属するデフォルトの config.js ファイルのほとんどは、このガイドのニーズを満たしますが、調整する必要のある、2つ属性があります :

  • config.ngsi.contextBroker.host : IoT Agentで使用する ContextBroker のホスト IP
  • config.ngsi.providerUrl : IoT Agent が ContextProvider リクエストをリスンする URL 。通常、これは利用しているマシンの IP とデフォルトポートですが、外部 context broker または 仮想マシンにデプロイされている context broker を使用している場合は、異なる場合があります

少なくともログレベルを DEBUG に変更する必要があります。他のレベルでは、実行時の状況に関する情報は表示されません。

使用方法

エージェントを起動

エージェントを開始するには、リポジトリのルートフォルダから次のように入力します :

bin/lwm2mAgent.js
フォアグラウンドで IoT Agent が実行されるので、何が起きているのかのログを見ることができます。

エージェントがまだ開いている状態で、他の端末でクライアントを開き、クライアントのルートフォルダから次のコマンドを入力します :

bin/iotagent-lwm2m-client.js

デバイスのプロビジョニング

デバイスを使用する前に、デバイスをプロビジョニングする必要があります。このステップでは、'Robot' デバイスの事前プロビジョニング・リクエストを送信します。事前プロビジョニング・リクエストを送信するには、Unix ライクな OS にインストールされている curl コマンドを使用します。

このリクエストは、Lightweight M2M ポートではなく、IoT Agent の管理ポート(デフォルト値 4041) に送信する必要があります。

次のリクエストはデバイスにデバイスID robot1 を提供します :

(curl localhost:4041/iot/devices -s -S --header 'Content-Type: application/json' \
  --header 'Accept: application/json' --header 'fiware-service: Factory' --header 'fiware-servicepath: /robots' \
  -d @- | python -mjson.tool) <<EOF
{
  "devices": [
      {
        "device_id": "robot1",
        "entity_type": "Robot",
        "attributes": [
          {
            "name": "Battery",
            "type": "number"
          }
        ],
        "lazy": [
          {
            "name": "Message",
            "type": "string"
          }
        ],
        "commands": [
          {
            "name": "Position",
            "type": "location"
          }
        ],
      "internal_attributes": {
        "lwm2mResourceMapping": {
          "Battery" : {
            "objectType": 7392,
            "objectInstance": 0,
            "objectResource": 1
          },
          "Message" : {
            "objectType": 7392,
            "objectInstance": 0,
            "objectResource": 2
          },
          "Position" : {
            "objectType": 7392,
            "objectInstance": 0,
            "objectResource": 3
          }
        }
      }
    }
  ]
}
EOF

デバイスの使用

デバイスを使用するには、クライアントが起動している端末に変更します。

クライアントでのオブジェクトの作成

LWM2M サーバに接続する前にまず行うべきことは、クライアントが提供するオブジェクトを作成することです。このステップを他の前に(特に登録前に) 実行する理由は、クライアントの登録中に、使用可能なすべてのオブジェクトのリストをサーバに送信するので、サーバはクライアントによって設定されたリソースをアクティブとしてサブスクライブすることができます。

クライアントコンソールから、次のコマンドを入力します :

LWM2M-Client> create /7392/0
オブジェクトが作成されたら、各属性のデフォルト値を指定します :

  • バッテリー属性 :
    LWM2M-Client> set /7392/0 1 89
  • メッセージ属性 :
    LWM2M-Client> set /7392/0 2 "First robot here"
  • 位置属性 :
    LWM2M-Client> set /7392/0 3 "[0, 0]"

サーバへの接続

すべてのオブジェクトがデバイスに作成されたら、次のコマンドを使用してサーバに接続します :

LWM2M-Client> connect localhost 5684 robot1 /
このコマンドに関するいくつかの注意事項 :

  • まず、使用されるエンドポイント名 robot1 は、プロビジョニングのリクエストで事前にプロビジョニングされたものと同じであることに注意してください。
  • 使用されている URL は、/ であることに注意してください。これはデフォルト URL であり、特定の設定に含まれていないデバイスで使用する必要があります。設定の使用例については、"設定プロビジョニング・ガイド"を参照してください。

次の情報をクライアントのコンソールに表示する必要があります :

Connected:
--------------------------------
Device location: rd/1
これは、サーバが接続要求を受け入れ、クライアントの要求に rd/1 の場所を割り当てたことを示します。この正確な場所は、デバイスによって異なる場合があります。 すべてのデバイスに固有の場所があります。

サーバを DEBUG モードで構成した場合は、標準出力を調べて、クライアント登録で何が起きたかを確認します。

Context Broker でエンティティを見ることができるはずです。次のコマンドでそれを行うことができます :

(curl http://192.168.56.101:1026/v1/queryContext -s -S --header 'Content-Type: application/json' \
 --header 'Accept: application/json' --header 'fiware-service: Factory' --header 'fiware-servicepath: /robots' \
 -d @- | python -mjson.tool) <<EOF
{
    "entities": [
        {
            "type": "Robot",
            "isPattern": "false",
            "id": "Robot:robot1"
        }
    ]
}
EOF
Context Broker へのリクエストのヘッダは、デバイスのプロビジョニングで使用したものと一致する必要があります。注意すべきもう一つは、エンティティ ID です。これは、タイプ と Device ID の連結によって形成され、コロンで区切られています。この規則は、プロビジョニングのリクエストで上書きできます。

アクティブな属性の更新

属性の値を更新するには、次のような新しい set コマンドを発行します :

LWM2M-Client> set /7392/0 1 67
これにより、Context Broker の情報の更新がトリガーされます。 Context Broker に格納された情報の新しいリクエストが更新を表示する必要があります。

遅延属性の読み込み

遅延属性を読み取るには、次のように、読み込みたい属性を指定するエンティティにクエリを実行します :

(curl http://192.168.56.101:1026/v1/queryContext -s -S --header 'Content-Type: application/json' \
 --header 'Accept: application/json' --header 'fiware-service: Factory' --header 'fiware-servicepath: /robots' \
 -d @- | python -mjson.tool) <<EOF
{
    "entities": [
        {
            "type": "Robot",
            "isPattern": "false",
            "id": "Robot:robot1"
        }
    ],
    "attributes" : [
        "Message"
    ]
}
EOF

デバイスにコマンドを送信

デバイスへのコマンドの送信は、遅延属性の更新とほぼ同じです。新しいコマンドを送信するには、Context Broker のエンティティ内のコマンド属性を次のコマンドで更新します :

(curl http://192.168.56.101:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \
 --header 'Accept: application/json' --header 'fiware-service: Factory' --header 'fiware-servicepath: /robots' \
 -d @- | python -mjson.tool) <<EOF
{
    "contextElements": [
        {
            "type": "Robot",
            "isPattern": "false",
            "id": "Robot:robot1",
            "attributes": [
            {
                "name": "Position",
                "type": "location",
                "value": "[18,3]"
            }
            ]
        }
    ],
    "updateAction": "UPDATE"
}
EOF

このアクションは、クライアントで Execute アクションをトリガーします。また、エンティティの "_status"フィールドを "PENDING" 値で更新し、Execute がクライアント結果を保留中であることを示します。