SORACOM Inventoryを使用してデバイスを管理し情報を収集する
はじめに
当ガイドでは、Inventory を使ってデバイスを登録し、リモートでデバイスを管理する手順を以下のステップにそって解説します。リモートでデバイス管理する手順の例としては、デバイス上のデータの読み取り(Read)とデバイスに対するコマンド実行(Execute)を行います。
当ガイドの前提は以下のとおりです。
- SORACOM のアカウントを作成済みであること
- SORACOM Air SIMとデバイス(OS:Linux)が準備されており、通信可能であること
- デバイスにアプリケーションをインストールできる権限があること
ステップ 1:デバイスにエージェントをインストールする
Inventory は LwM2M をもとにデバイス管理機能を提供しています。LwM2M に対応したエージェントの実装用ライブラリとして代表的なものには、Eclipse WakaamaやEclipse Leshanがあり、これらを利用してエージェントを作成するとInventoryからデバイスを管理できるようになります。
当ガイドでは、ソラコムがサンプルとして提供しているEclipse Wakaamaを利用してC言語で実装したLinux向けサンプルエージェント(C クライアント)、Eclipse Leshanを利用してJavaで実装したサンプルエージェント(SORACOM Inventory Agent for Java)のインストールを行います。
- 当ガイドで紹介するエージェントは、参照実装となります。
- エージェント、および Eclipse Wakaama, Leshan 等のライブラリの利用方法や実装については当社技術サポートの対象外となります。実装に関するご質問は受け付けできかねますので予めご了承ください。技術情報は各ライブラリの公式ドキュメントを参照ください。
なお、当ガイドでは、AirSIM を利用してデバイスの登録を行います。デバイス自身が Air SIM を使用して通信していることを前提とします。デバイスの登録が完了するとデバイスに接続用の鍵が生成されます。以降はこのファイルを使って Inventory と通信できるため、Wifiや有線など Air SIM 以外の通信を使用してデバイスを管理できます。 (Air SIMを使用せず Inventory を利用する場合は、デバイス登録時に払い出されたKeyでデバイスを管理するを参照してください。)
ステップ1-1: Linux向けサンプルエージェント(C クライアント)
ここではRaspberry Pi向けのLinuxディストリビューションRaspbian Jessie Lite (June 2017)を例に Linux向けサンプルエージェント(C クライアント)のインストールの手順を解説します。他のディストリビューションではコマンドが異なる場合があります。
インストールとデバイスの登録
ビルド用のスクリプト build_wakaama.sh
を用意しています。
当シェルをダウンロードし、ビルドを実行します。以下のコマンドを実行してください。
Air SIM で接続していることを確認してください。
$ curl soracom-files.s3.amazonaws.com/build_wakaama.sh | bash
$ sudo cp inventory/build/lwm2mclient /usr/local/bin
$ lwm2mclient -n $(hostname) -b -h bootstrap.soracom.io -p 5683 -4 -c
当コマンドを実行すると bootstrap が実行され、SORACOM Inventoryにデバイスが登録され、d-xxxxxxxxxxxxxxxxxxxxx
という形式のSORACOM InventoryのデバイスIDが払い出されます。
なお、このとき利用したendpoint名(-n
で指定したもの)もデバイスをユニークに識別するIDであり、同一のendpoint名を使って別デバイスのbootstrapを実行すると、先に払い出されたSORACOM Inventoryのデバイスと同一デバイスとみなされてしまいますのでご注意ください。
ユーザーコンソールから「デバイス一覧」画面をリロードして確認してください。うまく登録できていない場合には、コマンドオプションやネットワークの接続状況を確認してください。
ソラコムのユーザーコンソールから SORACOM Inventory にデバイスを登録し、その際に払い出されたデバイスIDとシークレットキーを使用してデバイスを管理することも可能です。この場合、AirSIM を使用してなくても接続が可能です。 詳細は、デバイス登録時に払い出されたKeyでデバイスを管理するをご確認ください。
コマンドオプションの詳細はwakaama READMEを参照してください。
ステップ1-2: サンプルエージェント(SORACOM Inventory Agent for Java)
ここでは Raspberry Pi 向けの Linux ディストリビューション Raspbian Jessie Lite (June 2017)を例に SORACOM Inventory Agent for Java のインストールからデバイス登録の手順を解説します。他のディストリビューションではコマンドが異なる場合があります。
ビルド済みのサンプルエージェントは、「デバイスの登録」「日付などのデータのRead」「コマンド(ping/shutdown)の実行のみが実装されたものになります。また配布するソースコードのサンプルエージェントをベースに各デバイス向けに実装を増やすことで、デバイスに合わせた拡張が可能です。
ビルド済みエージェントのインストール
SORACOM Inventory Agent for Java では、soracom-inventory-agent-example-xxx.zip(xxxはバージョン番号)が、エージェント用のビルド済みファイルとなります。エージェントを動作させるために、まずはデバイスにJava(JRE7以上) をインストールします。既にJavaがインストール済みであれば、version 7 以上であることを確認してください。
$ sudo apt-get install oracle-java8-jdk
$ java -version
SORACOM Inventory agent for Javaからsoracom-inventory-agent-example-xxx.zip(xxxはバージョン番号)をダウンロードしてください。
続いて、ビルド済みエージェントのzipファイルを適当なディレクトリで展開すればインストール完了です。
デバイスの登録(bootstrap)
インストールが完了したら、続いてデバイスの登録(bootstrap)を行います。まず、Raspberry Piを Air SIM でネットワーク接続します。
次に下記のコマンドを実行し、bootstrapを実行します。
$ cd ~/soracom-inventory-agent-example-x.x.x/bin/
$ ./soracom-inventory-agent-example-start
デバイス登録時のエンドポイント名は、自動設定されます。
bootstrapが完了すると、ログ中の “2017-06-28 11:15:31,270 INFO SORACOMInventoryAgentExample - using endpoint [My-Device.local-ACDE99999999]”のように出力されているエンドポイント名でデバイスがコンソールに表示されます。
また、エージェントと同じ場所に .soracom-inventory-credentials.dat
というファイルが作成されます。bootstrap以降はこのファイルを使ってbootstrapなしでSORACOM Inventoryと通信できるため、wifiなどSIM以外経由でも通信を行うことができます。再度ブートストラップしたい場合は、このファイルを消して再度実行するか、実行時に -b オプションを付けてください。
サンプル実装の拡張については、カスタムオブジェクトを定義して、エージェントをカスタマイズする、およびSORACOM Inventory Agent for Javaを参照してください。
ステップ2:デバイスを管理する
ステップ2-1:デバイス情報の参照
エージェントのbootstrapが完了したら、ユーザーコンソール左上のメニューボタンから「デバイス管理」をクリックし、デバイス一覧画面に移動します。
登録済みデバイス一覧の中にステップ2で登録したデバイスが表示されていることを確認してください。一覧からデバイスをクリックするとデバイス詳細画面が表示されます。Inventoryでは、このページを使ってリモート管理を行います。
ステップ2-2:デバイス上のデータのObserve
bootstrapが完了し、ユーザーコンソールでデバイスの登録完了が確認できたら、リモートでデバイスのデータを取得してみましょう。例として、ここではデバイス上の現在時刻をObserveしてデバイス上のデバイス側で値に変化があったら通知を受けてみます。以下の手順に沿ってObserveの動作確認をしてみましょう。
- デバイス上でエージェントが起動していることを確認します。
- ユーザーコンソールのInventoryの画面から、先ほど登録したデバイスの詳細ページを開きます。
- ページ中ほどの
Current Time
(/3/0/13) の項目右側にあるアイコンをクリックすると、Observeが開始されます。
- 画面上にデバイス上の時刻が表示されます。表示内容が更新されることを確認してください。
- Observeでデータ読み取りできることを確認したら、もう一度アイコン
をクリックしてObserveを停止してください。
ステップ3: デバイスの情報を SORACOM Harvest に収集する
Inventory では、デバイス側で値に変化があった場合の通知(Observe)を SORACOM アプリケーションサービスと連携できます。例えば、電波強度を Observe しておき、SORACOM Harvest に送ることで電波強度の推移を確認できます。 また、SORACOM Beam、SORACOM Funnelを使用することで、お客様のサーバーやクラウドサービスにデータを送信することが可能です。
ここでは、 Latitude
と Longitude
を Observe して Harvest にデータを収集します。
SORACOM Inventory Agent for Java のサンプルでは、定期的に Latitude
と Longitude
の値をインクリメントしています。
ステップ3-1: デバイスのグループ設定
コンソールからデバイスグループを選択します。
デバイスグループを追加します。
グループ名を指定してください。
続いてグループ一覧からグループ名をクリックして詳細を開きます。
HarvestをONにします。
次にデバイスを選択して、グループを変更してください。
ステップ3-2: デバイス情報のObserve
デバイスをObserveします。 対象のデバイスを選択して、[詳細]ボタンをクリックします。
Latitude
と Longitude
を Observe します。
ステップ3-3: データを確認する
Harvestでデータを確認します。
デバイス一覧から対象のデバイスを選択して、[操作]->[データを確認]をクリックします。 以下のようにデータを確認できます。
「SORACOM Inventoryを使用してデバイスを管理し情報を収集する」は以上です。
Inventoryを使用することで、デバイスの情報を読み書き、実行することが可能です。また Observe した属性は、SORACOMアプリケーションサービスを使用して、クラウド連携や Harvest にデータを蓄積できます。これにより、デバイスの状態の履歴を確認できます。
なお、デバイス側にはクライアントエージェントが必要です。クライアントエージェントはサンプルとして提供しています。これらを実装することで利用にあったデバイス管理が可能になります。