「SORACOM Advent Calendar 2018」 10日目の記事になります。https://qiita.com/advent-calendar/2018/soracom2
IoTでデータの可視化を行う際にWebのダッシュボードを簡単に手早く作りたいと思っていました。
実運用を考えれはWebサーバを立てて画面を作りこんだりしますが、デモやPoCでサクッと見た目の良いダッシュボードを作るツールは無いものか?
ありました! SORACOM Lagoon!
先日のTechnology Campで知ったのですが、Harvest/LagoonにはSORACOM Air以外のからのデータも送信できるとか。
WiFi接続しているラズパイやら有線LAN接続しているデバイスデータもhttp POSTでOKです。Inventoryでキーを発行すれば
これなら、種々のデータまとめてLagoonで可視化できそうです。
今週2018/12/12-14のスマートビルディングEXPOに出展するデモ装置「IoT鉄道模型」のダッシュボードとして次のデータを表示するようにしました。
1. SORACOM Air 経由のEnOceanセンサーデータ
2. SORACOM LTE-M Button のクリック
3. AWS Greengrass からのデモ装置のカウンタデータ
SORACOM Air 経由のEnOceanセンサーデータ
Harvest/Lagoonの基本的な使い方です。EnOceanの環境センサで取得したCO2, 温度, 湿度データです。
EnOceanセンサ -> OpenBlocks (EnOcean受信モジュール + SORACOM Air)-> SORACOM回線 -> Harvest/Lagoon
SORACOM LTE-M Button
SORACOM回線なのでそのままHarvestでも受信できるのかと思いきや、コンソールに項目が見当たらず。httpを使用したSORACOM以外から送信する方法でLambdaから送信する必要があるようです。
@masato_ka さんが「SORACOM LTE-M Buttonで家庭内PoCをやってみた話 」で詳細に記事にされています。参考になりました。ありがとうございます。
まずはSORACOM Inventryでデバイスを作成して、デバイスIDとシークレットキーを生成しておきます。
[公式ガイド] デバイスIDとデバイスシークレットを使用してHarvestにデータを送信する
https://dev.soracom.io/jp/start/inventory_harvest_with_keys/
これを使用して、AWS Lambdaからhttp POSTするとHarvestへ入ります。
import json, requests DEVICE_ID = 'your device id' SECRET_KEY = 'your secret key' URL = 'https://api.soracom.io/v1/devices/{}/publish'.format(DEVICE_ID) def post_soracom(): payload = { "device_name": "temp_sensor_1", "temp": 20 } request_header = {'x-device-secret':SECRET_KEY, 'Content-Type':'application/json'} r = requests.post(URL, headers=request_header, data=json.dumps(payload)) logger.info(r)
LTE-Mボタンは展示会のために先人のアイデア、知恵をパクってお借りして、イイとこ取りで使用します。
- Single : 「いいね」物理ボタン。クリック数をカウントしてLagoonで表示します。
- Double : 「呼び出し」ボタン。自分がブースに居ない時に呼び出してもらいます。かえるボタンと同様にLINE Notifyで通知します。
- Long : 今の時点では用途未定
AWS Greengrass からのデモ装置のカウンタデータ
Nゲージの鉄道模型を制御対象としてエッジサーバのAWS GreengrassのLambdaに制御シーケンスを実装しています。
列車が光センサ通過ごとに周回数データを、LTE-Mボタンと同じ様にLambdaからhttp POSTしてHarvestへ送信します。
構成
・列車制御用LonWorksデバイス(ラズパイ): LonWorksのSDKであるIzoT SDKをインストールしてLonWorksのデバイスとしてアプリケーションをpythonで作成しています。
・制御回路: ラズパイのGPIOに接続する速度制御用のモータドライバICとポイント切換え用のリレーで構成
・エッジサーバ(ラズパイ): AWS Greengrass Coreをインストール。制御プログラムLambdaをデプロイしています。
シーケンス
線路に埋め込んだ光センサーで位置検出します。
光センサ -> ESP32からUART -> ラズパイ -> AWS Greengrass Lambda へpublish
Greengrass Lambdaから速度のリクエストをpublishするので、列車制御用LonWorksデバイス(ラズパイ)はsubscribeにより受信したそのリクエストに従いGPIOのPWM出力を制御します。
鉄道模型制御については先日のこちらの記事 「ラズパイでIoT鉄道模型をつくってみる」を参照ください。
制御の様子がこちら。この動画はテスト用にGreengrassではなくローカル制御していますが、見た目の動作は変わらないのでご参考に。
Lagoon によるダッシュボード
Harvestにさえデータが上がれば、公式ガイドやQiitaを参考にすれば簡単にダッシュボードが作成できます。
詳細な手順よりも1回触ってみる方が早いと思います。
今回Lagoonは初めて使いましたが、1時間ぐらいで折れ線グラフと数点のデータ表示ができました。
こちらの画面は見栄えを色々試していますが、それでも数時間です。
気付き
- 折れ線グラフはY軸が左右2軸設定できる。
- テキストがmarkdownで書ける。
- データ表示の際に単位も選択できる。
- コンポーネントの配置が自由
- 画面を自動更新できる。
- データを任意のテキストにマップできる。センサーの0/1を、「空」「満」にできる。
- 現在値以外に、平均値、合計値での表示が可能。つまり回数のカウントが簡単に可能。ボタンの受信回数で使用しました。
- なにより見た目がクール
まだ使いこなせていませんが、痒い所に手が届く機能が満載です。
注意点
データの表示がデフォルトは平均値になっているので注意。最初0/1のバイナリセンサの値がなぜ0.3とかに表示されるのだろうと思いました。
現在値に変更して解決です。
おわりに
このSORACOM Lagoonによるダッシュボード、LTE-Mボタンによる「いいね」兼「呼び出し」ボタンを使ったLonWorksとAWS Greengrassによるエッジサーバによる設備制御デモ
略して「IoT鉄道模型」を今週12/12-14のスマートビルディングEXPOで展示します。
実物にご興味がありましたら、お立ち寄りの上、LTE-M「いいね」ボタンを押してもらえると嬉しいです。
第3回スマートビルディングEXPO 2018/12/12-14 東京ビッグサイト
https://www.smartbuilding.jp/ja-jp.html
東6 小間7-26 (株)リードシステム社ブース内
https://d.urban-innovation.jp/Tokyo-2018/booth/?position_x=1327&position_y=1401
3日間無事に動作しますように。
“SORACOM Lagoon でLTE-MボタンやAWS Greengrassからのデータを表示する展示会用のダッシュボードを作った” への1件の返信