MotionBoardで可視化した温度センサーの値が閾値を超えたらTwilio経由でSMSを投げる


1. はじめに

Webiotセンサーを使ってMotionBoardで最速で可視化してみるで温度センサーの値を可視化をしてみたところ、温度がリアルタイムに見れるのはいいのですが画面をずっと見てるわけにはいかず、どうしたものかと思っていたところ、普段使っているTwilioにアラートを飛ばせないかと思いいろいろやっていたらできたので、私自身の備忘録を兼ねて手順を書こうと思います。

2. Twilioとは

電話の発着信やSMS送受信をサービス化したもので、HTTPを使って接続したり、公開されているライブラリで簡単に接続できちゃうgoodなサービスです。プログラム次第で、サーバーのアラートに使ったり自宅にコールセンターもどき建てたり、あんなことやこんなことができてしまいそうなサービス。

Qiita上にもいっぱい記事があります。

3. MotionBoardとは

データベースやセンサーデータなどを可視化できるソフトウェアです。
商用ソフトウェアですが、各種データベースとの接続や高度な可視化・分析機能が使用できます。

4. 構成イメージ

5. 必要なもの

  • MotionBoard
  • Twilioのアカウント
    • アカウントSIDとAUTHTOKEN、SMS送信が可能なTwilio電話番号(米国番号)
  • node-redが動く環境
    • 今回はテスト用なのでIBM Cloud(旧Bluemix)の無償ライセンス(ライト・アカウント)を利用

6. 連携手順

Twilio接続情報確認

Twilio Consoleにログインします。
後で使うのでアカウントSIDとAUTHTOKENを控えておきます。

IBM Cloud(旧Bluemix) +NodeRED準備

IBM Cloud(旧Bluemix)にログイン
検索窓などから[Node-RED Starter]にアクセスします。

アプリ名やホスト名を入力します。
続いて、Node.jsからCloudantか選択します。
容量や停止・削除のルールが違うので規約をよく読んでおくといいと思います。
ちょっと試すぐらいであればどちらでも大丈夫ですが、無償版の場合、どちらを選んでも一定時間何もしないと停止や削除されますので注意が必要です。

作成が完了すると、Node-REDにアクセスできるようになります。

Node-REDの使い方は書きませんが、フロー(シナリオ)のインポート機能がありますので、[メニュー]->[読み込み]->[クリップボード]の順でクリックします。

下をまるごとコピーして、貼り付けます。

[{"id":"ed8a071f.1c01a8","type":"http in","z":"427f42ab.efec4c","name":"","url":"/sms","method":"get","upload":false,"swaggerDoc":"","x":240,"y":280,"wires":[["c8b7d081.e9a91","96eb2ea.c3ec1d"]]},
  {"id":"acde86dc.191d98","type":"twilio out","z":"427f42ab.efec4c","service":"_ext_","twilio":"","from":"","number":"","name":"","x":690,"y":280,"wires":[]},
  {"id":"c8b7d081.e9a91","type":"http response","z":"427f42ab.efec4c","name":"","statusCode":"","headers":{},"x":500,"y":220,"wires":[]}, 
  {"id":"96eb2ea.c3ec1d","type":"function","z":"427f42ab.efec4c","name":"","func":"msg.payload = msg.payload.val;\n\n\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":380,"wires":[["13f8eec7.cfbde1","acde86dc.191d98"]]},
 {"id":"13f8eec7.cfbde1","type":"debug","z":"427f42ab.efec4c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":770,"y":380,"wires":[]}]

[twilioノード]をダブルクリックし、編集します。鉛筆アイコンをクリックします。

[Twilio Console]で控えた、アカウントSID(Account SID)とAUTHTOKEN(Token)をそれぞれ入力します。
電話番号をFromに入力しますが、形式は+1123456xxxxのようにします。

最後に[SMS to]に送りたい相手の(SMS送信テスト端末の)SMS番号を入力して保存します。
形式は+81801234xxxxのようにします。

設定が終わったら[デプロイ]ボタンを押下して、変更を適用します。

MotionBoardの設定

MotionBoardにログインします。

事前準備

連携対象の[データソースエディタ]を開き、[アラート]画面からアラートを設定しておきます。
画面は[temp]が[30以上]になった場合をアラート条件に設定しています。

閾値を超えたときに他システムと連携できるのは[チャートアイテム]となります。
あとで使うので、連携対象の[チャートアイテム]の[プロパティ]から[名前]を確認しておきます。

名前を控えておきます。

リアルタイムアラートの設定

[ボード管理]->[リアルタイムアラート]タブと順にクリックし、[リアルタイム連携を有効にする]にチェックを入れます。アラートの実行ユーザーをログインユーザーに設定します。

[監視アイテム設定]タブで、先ほど控えた対象となるチャートアイテムにチェックを入れます。

[アラートアクション設定]タブで、[Webリクエストを実行する]にチェックを入れ、[詳細設定]をクリックします。[URL]に[Node-REDのURL/SMS]と入力し、[パラメータ名]にval、値に${alert_item_last_summary_values}と入れて保存すれば設定は完了です。
${alert_item_last_summary_values}はチャートアイテムの最後値に置き換わるMotionBoardの変数です。

閾値を超えたときにNode-REDで設定したSMS電話番号にtemp=25.4などと値が飛べば成功です。
下は実際にSMSで受信した例。

7. 参考