Microsoft Flow経由でWioNodeに接続したリレーを制御してLED表示灯を点灯してみる【前編】

Microsoft Flow経由でWioNodeに接続したリレーを制御してLED表示灯を点灯してみる

年度が替わって、ほげほげと仕事をしていたところ

「某社、FAXの運用やめるってよ」

という話がきました。自分の担当は24h/365dな環境で連絡があってもメールなどに目を向けてほしくない(監視作業)ので、可能であれば そういう確認の作業には時間を割きたくないのでFAXのほうが作業が楽です。(どうせ内職することがわかっていて且つ質が落ちる)でも、個人の意見としては伝送手段にFAX使わなくてもよいので撤廃も時代なんだろうなという点では納得はしています。

業務としては、連絡があったときにブザーが鳴って紙面に印刷してくれればこだわりはありませんし、最悪、情報の確認の忘れさえ防げれば問題はありません。 つまりブザーや音声、パトランプだけでもいい割り切りができます。(音声も監視しているので、できればブザーや音声は鳴らしたくないけど電話はあるのでそこは目を瞑ります)

んじゃ作ってみるか

要素としては単純なので、まあできるかなーとは思っていたのですが仕事なので以下の点が引っかかります。

  • 手持ちの機材でなんとかできるといいなあ
  • コードは書きたくないなあ(嘘くさいけど)
  • メンテナンス(ハード・ソフトともに)はあんまりしたくないなあ
  • 少しはセキュリティ関連にも配慮がしたいなあ

うちの会社にはなんちゃって技術者っぽい人しかいない(弊社には一般にいう開発者はいません、キリッ!)ので 引き継ぎのことも考えると、コードを書くなんていう愚行行為は薦めることができません。 ちなみに、自社でプログラミングするという雰囲気をみせると絶命する拒絶反応を見せる人が多いです。

こういう前提がある中で採用するものの候補を考えてみました。

要素としては

  1. 定期的なメールの受信確認
  2. 受信時にリレーの制御

これだけが抑えられればいいので、ハードとしてはWioNodeGroveでリレーを付ければよさそうです。

WioNodeはWebへのPOSTメソッドでのアクセスができればいいので

  1. 定期的なメールの受信確認
  2. 受信時にWebアクセス(→リレー制御)

こんな感じになります。

さて、次にメールの受信検知に関してなのですが、Office365なメールを使用しているので、そちらを使用し、IFTTTMicrosoft Flowを選択肢として考えました。 (実質にたようなサービスはありますので類似したサービスでもいい感じがします。)Microsoft Flowでは認証がOffice365上でできることもあるので、今回はこちらを採用することにしました。

  1. 定期的なメールの受信確認(Microsoft FlowのOffice365メールの受信をトリガとする)
  2. メール受信時にWebアクセス(→リレー制御)(Microsoft FlowのWebアクセスをアクションとする)

ほぼこれで処理が出来上がったような気がします。

WioNodeの設定

ハードウエアはこちらを準備しました。(家に転がっていたので)

【WioNode】

【GROVE - リレー】

まずは使用するWioNodeの設定を行います。

設定に関しては基本的に過去のエントリーを参照してもらえればいいかなと思います。

uepon.hatenadiary.com

今回は、以前設定を行ったWioNodeWiFiのアクセスポイントの変更処理を行う必要があったので、その部分を記載しておきます。 (デバイスを削除して新規に行っても問題はありません)

ネットワークの再設定

スマートフォンのアプリを使用してデバイスの設定のハンバーガーボタンを押し、その中から【Change WiFi Network】を選びます。

f:id:ueponx:20180501172635p:plain

ここで確認のダイアログが表示されるので、変更を行う場合には【Confirm】を選択します。

f:id:ueponx:20180501172645p:plain

【Confirm】を押すとネットワークの変更手順を最初から行うことになります。ただし、この画面からでも設定中断するとネットワークの設定は変更されないようです。

f:id:ueponx:20180501172654p:plain

リレーの設定

WiFiの設定が変更できたら、今度は接続デバイスの設定を変更します。メニューのOutputから【Relay】を探し出し、

f:id:ueponx:20180501172729p:plain

Groveの端子にドラッグ&ドロップします。

f:id:ueponx:20180501172743p:plain

設定の変更が行われると画面の下に【Update Firmware】というボタンが表示されるのでクリックすると、

f:id:ueponx:20180501172751p:plain

接続されたセンサーなどのファームウェアWioNodeにダウンロードされて

f:id:ueponx:20180501172759p:plain

センサーが使用可能な状態になります。 続いては設定後のテストを行ってみます。

APIの確認

設定と同様に右上のハンバーガーボタンをクリックし、その中から【View API】を選びます。

f:id:ueponx:20180501172635p:plain

するとAPIの説明とテストページが表示されるのでこれを使ってテストを行います。

f:id:ueponx:20180501172806p:plain

リレーのモジュールには状態の確認用のAPIと状態(ON/OFF)の変更のAPIの2つがあります。

f:id:ueponx:20180501172814p:plain

ページ内からもAPIへのアクセスができるのでこれで動作を確認することができます。

Microsoft Flowの設定

以下のURLにアクセスをします。認証が必要であることもあるのでその際はログインをしてください。

japan.flow.microsoft.com

画面上部に【マイフロー】をクリックします。

f:id:ueponx:20180501133512p:plain

すると自分の作成したフロー処理の一覧が表示されます。

f:id:ueponx:20180501133734p:plain

この画面上でウインドウの上の方にある【一から作成】をクリックして新しいフロー処理を作成します。

f:id:ueponx:20180501134409p:plain

すると画面が以下のように変わるので更に【一から作成】ボタンをクリックします。

f:id:ueponx:20180501134644p:plain

これでフロー処理を作成する準備ができました。ウインドウ内にコネクタとトリガーの候補が並んでいます。

f:id:ueponx:20180501134754p:plain

表示されていない場合には検索バーにサービス名を入力することになりますが、今回はOffice365 Outlookがトリガーになりますのでこれを選択します。

f:id:ueponx:20180501135218p:plain

ユーザによっては候補一覧の並びが異なっていると思いますので、その場合には検索バーにOutlookと入力することで選択肢を絞ることができます。今回はOffice365 Outlookを選択します。(以下のアイコンのものになります。)

f:id:ueponx:20180501135343p:plain

アイコンをクリックすると、サービスに含まれるトリガーが一覧として表示されます。 今回は【Office365 Outlook メールが届いたとき】のトリガーをこの中から選択します。

f:id:ueponx:20180501135709p:plain

すると以下のような表示にかわります。デフォルトではInboxフォルダにメールが受信メールが保存されたことがトリガーになっています。

f:id:ueponx:20180501135843p:plain

【新しいメールが届いたとき】ボックスの中の【詳細オプションを表示する】をクリックすると設定を詳細にすることができます。

f:id:ueponx:20180501140148p:plain

詳細項目は以下のようになっています。

  • フォルダー
  • 宛先
  • 開始
  • 重要度
  • 添付ファイルあり
  • 添付ファイルを含める
  • 名フィルター

今回はメーリングリストから送信されたメールのfromアドレスと件名を確認することでトリガーとして設定を行いますので以下のオレンジ色の部分に関係する情報を入力します。(宛先は不要かも)

f:id:ueponx:20180501140711p:plain

テストだけをおこなうのであれば、【宛先】【開始】は自分のメールアドレスでもいいかなと思います。今回はテストなので、グレーアウトしている部分は自分のアドレスにしてみました。件名はML_Titleが含まれるものとしています。

f:id:ueponx:20180501141054p:plain

これでメールの受信した際のトリガーが作成できました。そのトリガーに対応するアクションを記述していきます。トリガー設定の下にある【新しいステップ】ボタンをクリックします。

f:id:ueponx:20180501141300p:plain

すると、【アクションの追加】、【条件の追加】、【さらに追加】と選択肢が出るので今回はこの中から【アクションの追加】をクリックします。

f:id:ueponx:20180501141448p:plain

クリックすると今度はアクションの選択画面になります。メール受信後にWebアクセスを行うことになるので検索BOXにHTTPと入力し、絞り込みを行います。

f:id:ueponx:20180501141638p:plain

絞り込みを行うと次のような画面になります。コネクタのHTTPをクリックし

f:id:ueponx:20180501141841p:plain

f:id:ueponx:20180501141928p:plain

さらにアクション一覧の中からHTTPをクリックします。

f:id:ueponx:20180501141950p:plain

一覧から下のものを選びます。

f:id:ueponx:20180501142117p:plain

するとWebアクセスの設定画面になります。

f:id:ueponx:20180501142142p:plain

設定項目は

  • 方法
  • URI
  • ヘッダー(KeyとValueのペア)
  • 本文

となります。WioNodeのリレーのアクセス設定は以下のようになっているので

f:id:ueponx:20180501172814p:plain

  • 方法:POST
  • URIhttps://us.wio.seeed.io/v1/node/GroveRelayD1/onoff/1?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(XXXXXXXXXXX…の部分は固有のキーになりますので各自のものに修正をお願いします。)

f:id:ueponx:20180501142618p:plain

こんな感じでOKです。

あとはこのフロー処理に名前を付けて保存をします。画面上部の無題のところを今回はMail_WioNode_Relayとしてみました。日本語名でも問題はありません。名前を変更したら上部にある【保存】ボタンをクリックします。

f:id:ueponx:20180501143653p:plain

保存したら名前の部分の左側にある【←】をクリックします。こんな風に表示されていればOKです。Office365との接続ができていないと画面の右側が少し違うかもしれません。事前に接続用の認証を行えば問題ないかと思います。また、画面右上の【このフローはオン】になっていればテストもできるようになっています。

作成中に認証ができていない場合はこんな風に表示されます。

f:id:ueponx:20180502002841p:plain

フロー作成後に認証が完了していない場合はこんな風に表示されます。

f:id:ueponx:20180502002918p:plain

f:id:ueponx:20180501144156p:plain

では、テストを行ってみます。

テストしてみる!

あとはメールを送信して、RelayがONになるかをテストしてみます。今回はfromもtoも自分でsubjectにML_Titleが含まれるようなメールを送信しています。

f:id:ueponx:20180501145331p:plain

送信し、受信が行われると

f:id:ueponx:20180501145720j:plain

リレー基板にあるLEDが点灯します。(結構時間がかかるので2-3分ぐらいかかっても目をつぶってください)

f:id:ueponx:20180501145833j:plain

一応、動作してくれました。ログ上にも成功(Succeeded)として表示されています。

f:id:ueponx:20180501150123p:plain

制御は成功したんのですが、これ点灯したLEDどうやって消そうw。

どうやって消灯させよう

基本的には、備忘的な表示灯なので一定時間ついていたら消灯するという感じでもいいのかなとは思いますが、Groveにはボタンもあるのでそれを使おうかと思っていました。ですが、ボタンの押下処理はWebSocketを使用するため、常時アクセスのようなものが必要になってしまいます。(Arduino化すればいいのかもしれないけど…後任が引き継げなくなるのでそれはやめたい。)

一定時間光ったり、点滅させることで今回は妥協しようかと思います。

IFTTTではループ処理などができなかったような気がしましたが、Microsoft Flowではループ処理も問題なく作成することができます。

こんな感じで処理を考えました。

  • メールの受信トリガー
  • カウンタ変数初期化
  • ループ処理(カウンタ値が5以上になったら抜ける)
    • リレーON
    • 5秒ウエイト
    • リレーOFF
    • 5秒ウエイト
    • カウンタ変数をインクリメント

上記にするためのポイントだけを抜粋します。

変数を追加する

フロー処理に変数を追加する場合にはアクションの追加で検索Boxに変数と入力します。

f:id:ueponx:20180501153354p:plain

変数のアクションの一覧から【変数の初期化】をクリックします。

f:id:ueponx:20180501153432p:plain

すると以下のように表示されるので、【名前】(変数名)【種類】(型)【値】(初期値)を設定していきます。

f:id:ueponx:20180501153504p:plain

今回は変数名をcount、型を整数、値を0として初期化を行いました。

f:id:ueponx:20180501153631p:plain

変数をインクリメントする

同様に定義した変数を更新するには フロー処理に変数を追加する場合にはアクションの追加で検索Boxに変数と入力します。

f:id:ueponx:20180501153354p:plain

変数アクションの中から【変数の値を増やす】などのアクションを選択します。

f:id:ueponx:20180501163940p:plain

すると以下のように表示が変更されるので

f:id:ueponx:20180501164100p:plain

既に定義済みの変数の値を変更する形になるので、【名前】には定義済みの変数名、【値】はインクリメントをする増分値を設定します。

先ほど作成した変数値を+1する場合には以下のような設定をすることになります。

f:id:ueponx:20180501164429p:plain

ループを生成する

ループを生成するには【新しいステップ】>【さらに追加】>【Do Untilの追加】を選択します。

f:id:ueponx:20180501154023p:plain

すると設定画面が表示されます。

f:id:ueponx:20180501154231p:plain

【値の選択】を行おうとするとこれまでに使用したトリガやアクションで使用されている値が候補として表示されます。今回はループ制御に先ほど初期化したcount変数を用いますので【以前の手順からパラメータを挿入】>【変数count】をクリックして選択を行います。

f:id:ueponx:20180501154510p:plain

クリックすると以下のようになります。

f:id:ueponx:20180501154646p:plain

今回は5回の処理を行うことを考えていたので以下のように設定を完了させます。

f:id:ueponx:20180501154818p:plain

ループの中の処理に関してはループ内の【アクションの追加】などを追加していくことになります。ちなみにBox内はループの処理、外部はループを抜けてからの処理になります。ループの外にある処理をドラッグ&ドロップして移動することも可能です。

f:id:ueponx:20180501155313p:plain

HTTPの処理をループ内にドラッグ&ドロップさせると

f:id:ueponx:20180501155144p:plain

上記のようになります。このようにして処理をネストさせていくことになります。

タイマー処理を行う(Delay)

タイマー処理のアクション名がスケジュールなのに気が付くまでに2時間ぐらいかかりました。タイマーとかの方が探しやすい…アクションの検索Boxにスケジュールと入力して候補を絞ります。

f:id:ueponx:20180501155439p:plain

その中から【スケジュール - 待ち時間】を選択すると

f:id:ueponx:20180501155500p:plain

以下のような設定画面になります。

f:id:ueponx:20180501155529p:plain

5秒間の待ち時間(wait)を今回は使用するため、以下のように設定しました。

f:id:ueponx:20180501155553p:plain

最終形

最終的な処理のフローはこんな感じになります。

f:id:ueponx:20180501164741p:plain

おわりに

一応、これでやりたいことはできた感じです。点灯と消灯の間隔を5秒にしていますが、処理時間にかなり誤差があります。それより短い値にしても動作に大きく変化がないので5秒としています。(この部分に関して言えば、正確さを求めてはいけないかなと思います)

長くなったので、回路部分に関しては次回のエントリーにしようと思います。

/* -----codeの行番号----- */