はじめに
位置情報を持つデバイスのデバイス管理を手軽にやってみる為、Azure IoT Central のマップ表示を使ってみます。
想定しているデバイスは、数時間に数回程度しかデータを送ってこず、特定の場所に設置したままが基本運用となるデバイスを考えています。それでも、どのデバイスがどのタイミングでちゃんと通信出来ているかどうかを確認できるようにしておくことはとても大切なので、今回は、マップ表示を使ってデバイス管理をしやすくなる環境を作ります。
この記事で分かること
- デバイスの位置情報を Azure IoT Central にアップロードするデータ形式
- Azure IoT Central のマップ表示を使って、デバイスの状態を一目で分かるようにする
こんなイメージです。
12時間以内に受信したデータの位置を表示するようにしているので、あるタイミングで数が減っていたりすると、通信不具合やバッテリなしになっているかが一目で分かります。
Azure IoT Central 側の設定
1. デバイステンプレート:モデルの設定
- [表示名] :任意(今回は、DeviceLocationとしています)
- [名前] :任意(今回は、DeviceLocationとしています)
- [機能の種類] :Telemetry
- [セマンティックの種類]:Location ←これ大切(ここで位置情報を受けるテレメトリを指定します)
- [スキーマ] :Geopoint(セマンティックの種類で、Location を選択するとこれが入ると思います)
2. デバイステンプレート:ビューの設定
[デバイスの視覚化] から、デバイス毎のマップ表示のビューを設定します。
[マップ(プロパティ)] [マップ(テレメトリ)] の2種類がありますが、今回はテレメトリを使用します。(デバイス側からも位置情報はテレメトリとしてアップロードします)
[設定] から [マップの構成] を開きます。
[場所] を選択すると、先ほど [セマンティックの種類] で Location を指定したモデルのみが選択できます。
ここに何も出てこない場合は、上記の設定が正しくできていないと思います。
上記の手順でデバイステンプレートに、位置情報のテレメトリを作成して、デバイス管理がしやすくなるように [ビュー] にマップ情報を可視化できるような準備ができました。あとは、デバイステンプレートから、デバイスの生成は行っておきます。
デバイス側
デバイス側から送信するペイロードは、次のようなJSON形式とする必要があります。
{
"DeviceLocation": {
"lat": 47.64263,
"lon": -122.13035,
"alt": 0
}
}
以下は、Node.js で記述したサンプルになります。
本来はデバイスの位置情報を入れるのですが、今回は例ということで適当な固定値を入れています。
var latitude = 36.571120795849;
var longitude = 136.6644938866354;
var DeviceLocation = '{"lat":' + latitude + ', "lon":' + longitude + ', "alt": 0}';
var telemetryPayload = '{"DeviceLocation":' + DeviceLocation + '}';
Azure IoT Central のデバイス情報
各デバイスのデバイス情報から、デバイステンプレートで設定したマップ情報を見ることができます。
こんな感じで見れます(マップ自体は少し寂しい気はしますがw)
Azure IoT Central のダッシュボード
複数デバイスがある場合は、1つのマップ表示で複数台の位置情報をマッピングすることもできます。
地図がまだまだ発展途上ですが、これだけでもどのあたりに設置したデバイスがちゃんと通信出来ているかどうかを一目で確認することが出来ます。
まとめ
位置情報を持つデバイスのデバイス管理を、Azure IoT Central のマップ機能を使って試してみました。
数時間に数回程度しかデータを送ってこないような特定の場所に設置するデバイスならば、このような管理を行うことでどのあたりに設置したデバイスが正常に動いているかどうかは一目で確認できるようになります。
また、日本における地図自体の向上はまだまだ期待したいところではありますが、そのうち更新されていくことを記載しながらも現状でもそれなりには使えるシーンがあると思います。
私の場合は、少なくてもこれで設置した3台が無事に過去12時間以内に通信があったかどうかが一目で確認できるようになったので、使い勝手は良いと思っています。
公式ドキュメント