スタティック設定ガイド

目次

概要

このガイドでは、スタティック構成で IoT Agent を使用するプロセスを示します。この使用例では、デバイスの所有者は、各デバイスを接続する前に、各デバイスの種類ごとにスタティックな設定を作成します。デバイスが登録されると、設定されたタイプの1つに割り当てられ、そこからすべての設定データが取得されます。

このガイドでは、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つあります。まず、 IoT Agentを Context Broker の適切なインスタンスに接続するには、次の属性を編集する必要があります :

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

Context Broker の接続情報を設定したら、システムにあるデバイス・タイプに関する情報を設定する必要があります。この手順を実行するには、2つの属性を変更する必要があります :

  • config.lwm2m.types : URL をタイプにマップする方法に関する情報とともに、この配列に項目を追加する必要があります。次の例に示すように、その情報を追加して設定ファイルを編集します :
    config.lwm2m = {
    
        [...]
    
        types: [
            {
                name: 'Robot',
                url: '/robots'
            }
        ]
    };
  • config.ngsi.types : 設定しようとしているタイプに関するすべての情報とともに、この配列にエントリを追加する必要があります。この情報には、属性名の LWM2M URIs へのアドホック・マッピングが含まれます。次の例に示すように、config ファイルを編集します :
    config.ngsi = {
    
        [...]
    
        types: {
            'Robot': {
                service: 'Factory',
                subservice: '/robots',
                commands: [
                  {
                    "name": "Position",
                    "type": "location"
                  }            
                ],
                lazy: [
                  {
                    "name": "Message",
                    "type": "string"
                  }            
                ],
                attributes: [
                  {
                    "name": "Battery",
                    "type": "number"
                  }
                ],
                lwm2mResourceMapping: {
                  "Battery" : {
                    "objectType": 7392,
                    "objectInstance": 0,
                    "objectResource": 1
                  },
                  "Message" : {
                    "objectType": 7392,
                    "objectInstance": 0,
                    "objectResource": 2
                  },
                  "Position" : {
                    "objectType": 7392,
                    "objectInstance": 0,
                    "objectResource": 3
                  }
                }
            }
        },
    
        [...]
    };

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

使用方法

エージェントを起動

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

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

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

bin/iotagent-lwm2m-client.js

プロビジョニング

この場合、エージェントで作業するために必要なすべての情報は、スタティック設定ファイルですでに設定されているため、デバイスも設定も提供する必要はありません。

デバイスの使用

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

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

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 /robots
このコマンドに関するいくつかの注意事項 :

  • まず、使用されるエンドポイント名 robot1 は、事前にプロビジョニングのリクエストでプロビジョニングされたものと同じであることに注意してください
  • 使用されるURLは /robots であることに注意してください。 これは、config.lwm2m.types 属性で設定した URL です

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

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

サーバを 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": "robot1:Robot"
        }
    ]
}
EOF
Context Broker へのリクエストのヘッダーは、デバイスのプロビジョニングで使用したものと一致する必要があります。

アクティブな属性の更新

属性の値を更新するには、次のような新しいコマンド 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": "robot1:Robot"
        }
    ],
    "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": "robot1:Robot",
            "attributes": [
            {
                "name": "Position",
                "type": "location",
                "value": "[18,3]"
            }
            ]
        }
    ],
    "updateAction": "UPDATE"
}
EOF