SORACOM Lagoon でLTE-MボタンやAWS Greengrassからのデータを表示する展示会用のダッシュボードを作った

「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件の返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です