用語
- デバイス ID (deviceId) - SORACOM Inventory においてデバイスを一意に識別する ID です。後述の Bootstrap の際に SORACOM Inventory より払い出しが行われます。
- endpoint - LwM2M の仕様においてデバイスを一意に識別する ID であり、前述のデバイス ID と 1:1 の関係を持ちます。Bootstrap 時にデバイス側から任意の endpoint を申告します。endpoint はオペレータ (SORACOM アカウントのこと) ごとにユニークな識別子として取り扱われます。SORACOM Inventory は、Bootstrap 時にデバイスから申告された endpoint が未知のものであった場合、新規にデバイス ID の払い出しを行い、処理を進めます。一方、既知の endpoint であった場合、同一のデバイスとして取り扱い、処理を進めます。
- Resource model - Inventory ではデバイス上の情報を「Resource Model (リソースモデル)」という形式で管理しています。Resource Model は LwM2M で規定 されており、Object、Object Instance、Resource のツリー構造になっています。各要素には番号が割り当てられ、/3/0/0 のようになります。
- Agent - Inventory での管理対象のデバイスで動作する実行可能なバイナリもしくは SDK です。管理対象のデバイスは当 Agent が動作していることが必須となります。
- Bootstrap - Inventory を利用するにあたり、最初に行われるデバイス登録と鍵交換です。Bootstrap が完了すると、デバイスが Inventory に登録され、ユーザーコンソールのデバイス一覧に表示されるようになります。また、Wifi や有線などのインターネット経由でデバイス管理 (デバイス情報の読み書き、実行) が可能になります。
VPG に所属する IoT SIM を利用して Bootstrap (デバイス登録) するには
Bootstrap する際は、IoT SIM を利用してインターネットに接続できる必要があります。そのため、たとえばインターネットゲートウェイを OFF (インターネットアクセスを無効化) にした VPG に所属する IoT SIM では、IoT SIM を利用した Bootstrap (デバイス登録) はできません。
Inventory の仕組みと構成
Inventory では、デバイス管理の仕組みとして OMA DM LwM2M (以下、LwM2M) を利用します。
コアとなるコンポーネントは、以下の 3 つです。
- Bootstrap Server: 主にデバイスとの接続確立のための認証情報の確認や鍵の交換などの機能を提供します。
- Device Management Server: Inventory のサーバーコンポーネントとして、主要な機能の多くを提供するコンポーネントです。
- Agent: 実行可能なバイナリもしくは SDK として提供され、デバイス上で Agent として動作し、Bootstrap Server、Device Management Server と通信します。
Inventory を利用するにあたって、最初に行われる処理は SORACOM プラットフォームへのデバイス登録と鍵交換 (bootstrap) です。認証を行うために IoT SIM で通信を行い、デバイス上の Agent で bootstrap を実行します。このとき、Agent は Bootstrap Server と通信を行い、デバイスの情報を SORACOM のプラットフォームに登録すると共に今後の通信のために鍵交換を行います。たとえばソラコムより配布している C 言語版のクライアントでは以下のような操作となります。
$ lwm2mclient -n $(hostname) -b -h bootstrap.soracom.io -p 5683 -4 -c
bootstrap が完了すると、-n
で指定した endpoint 名 (LwM2M の仕様上、デバイスをユニークに識別する ID) に対して d-xxxxxxxxxxxxxxxxxxxx
という SORACOM Inventory のデバイス ID が払い出され、ユーザーコンソールのデバイス一覧に表示されるようになります。(クライアントによっては bootstrap 実行時に自動で endpoint 名を生成するものもあります。)
Inventory に登録済みのデバイスは、ユーザーコンソールや API を使ってデバイス上のデータの読み書き (Read, Write) をしたり、デバイス側で値に変化があったら通知を受けたり (Observe)、コマンドを実行 (Execute) したりするために、Agent を通じて Device Management Server と通信を行います。最初に行った bootstrap の段階でデバイスの認証や鍵交換しているため、bootstrap 済みのデバイスは WiFi などで通信していても Inventory を使ってデバイスをリモート管理できます。
リソースモデル
Inventory ではデバイス上の情報を「Resource Model」という形式で管理しています。リソースモデルは LwM2M で規定されており、オブジェクト (Object)、オブジェクトインスタンス (Object Instance)、リソース (Resource) のツリー構造になっています。各要素には番号が割り当てられ、/3/0/0
のように表現できます。
たとえば /3/0/0
はデバイスの製造元 (Manufacturer) を表すリソースであり、Agent はサーバーからの Read リクエストに対して、自分の製造元情報を返します。また、/3/0/4
は (Reboot) を表します。この Execute リクエストが Device Management Server から送信されると、デバイス自身の再起動が行われます。
定義済みのリソースモデルは、OMA LightweightM2M (LwM2M) Object and Resource Registry から確認できます。
なお、LwM2M では、リソースへのオペレーション呼び出しとレスポンスが定義されています。呼び出されたオペレーションの動作は Agent 側で実装します。たとえば、先に挙げた例の /3/0/0
(製造元情報) への Read に対して、どのように製造元情報を取得するかについては Agent の実装に任されています。
ソラコムでは、参照実装として以下の Agent を提供しています。
- Linux 向けサンプルエージェント (C クライアント)
- サンプルエージェント (SORACOM Inventory Agent for Java)