IoT(ESP32)とRPA(Power Automate Desktop)
私はUNIX エンジニアを長くしていましたので何かシステムを組む際はUNIX(Linux)系OS の方が気楽なんですが、今年に入ってWindows10 タブレットを何枚か購入して、これらをサーバー運用してみようと思い立ちました。
何をどう作ろうと色々と考えて、そういえば最近マイクロソフトのロボティクス(RPA)ツール「Power Automate Desktop」(PAD)が無料で使える様になった事を思い出し、一時期話題になったロボティクスを試してみる事にしました。
1. システム概要
システムとしては室内の温度・湿度・気圧を定期的に測定し、計測値を記録するような物を作成してみました。
同様な機能はLinux(CentOS)上にMunin という統合監視システム上の一部として既に実装していました。
Munin での室内温度計測記録例
今回は大部分がWindows10で完結するように構築してみました。
ハード的には2部(計測 - ESP32、記録 - Windows10) に別れています。
そして記録をPADで行い、データはCSV 形式で出力する事にして、分析やグラフ化はExcel 等のツールを使うようにしました。
最初はPower BI Desktop を使って分析まで自動化を視野に入れていましたが、中々ハードルが高かったので今回は記録まで...
1.1 測定(ESP32)
測定はESP32にBME280 をI2C 接続した機器にて行います。
機能一覧
- 温度・湿度・気圧を測定しオンボードのLCD に随時表示
- mDNS/Webサーバー機能を有し、ブラウザにて測定値を取得可能
1.2 データー収集・記録(PAD)
データーの収集はWindows 10 タブレットのPAD にてブラウザでESP32 にアクセス、計測値を取得し結果をテキストファイル(CSV)に追記するようにします。
仕様
- 測定間隔 約5分
- 計測値はOneDrive 上のCSV ファイルに追記
2. システム詳細
2.1 測定(ESP32)
ESP32 TTGO + BME280
下記一番左側のデバイスがBME280 で、真ん中が5V<->3.3V のレベル変換、右端がESP32 TTGO です。
実際の動作動画
順次切り替えつつ情報を表示するようにしています
ESP32 はWiFi で自宅のLAN に接続されています。
IPアドレスはDHCPにて取得し、ローカルネットワークからWEBサーバーとして'http://esp32ttgo.local' でアクセス出来るようにプログラムしています。
ブラウザでアクセスすると下記のように計測結果を返します。
2.2 データー収集・記録(PAD)
実装
ブラウザでアクセスし、表示されたデータをファイルに追記して行くという簡単な動作ですので実際のステップ自体は多くはありません。
ブラウザを毎回立ち上げ・立ち下げする方法と、一回ブラウザを立ち上げ後は再ロードする方法の2つを試してみました。基本的に結果は同じでしたが、エラーが発生した場合後者の方がリカバリーが困難でしたので、結局毎回ブラウザを立ち上げる様にしました。
PADフローは最終的に下記の様に落ち着きました。
1. 初期WEBアクセス
Edge を起動し'http://esp32ttgo.local/' にアクセスする
2. WEBからデータ取得
3. 格納された変数の内容をCSV ファイルへ上書きする
今回CSV ファイルはOneDrive に置いてあります。
この際にコラム名も含める様に'Include column names;' にチェックと入れています。
これでCSV ファイルは、下記のような2行(コラム名とデータ)となります。
DateTime,Temperature(C),Humidity(%),Pressure(hPa)
2021/06/16(Wed) 18:55:06,30.08,44.67,1007.51
4. Edge を閉じる
5. ループの開始
無限ループでも良かったのですが、今回はループ回数を100万回(5分x100万= 約9.5年)にしてみました。
6. 待ち処理
最初は単純なWait にて300秒(5分)待つ様にしていましたが、ループ状態が判り易いようにメッセージボックスで待ち処理を代用するようにしました。
下記の様にループ番号と、取得したデータを表示し300秒待ち次のステップへ移動します。
7. WEBアクセス
Edge を起動し'http://esp32ttgo.local/' にアクセスする
8. WEBからデータ取得
9. 格納された変数の内容をCSV ファイルへ追記する
10. Edge を閉じる
11. ステップ5へ戻る
2.3 PAD(RPA)ならではの操作
今回PADにて一番手間取ったのは'Extract data from web page' でした。
備忘録も兼ねてこのステップ作成詳細を記述しておきます。
ActionsパネルからMainフローにドラグ&ドロップすると下記設定画面が表示されます。
ここで予め対象URL にアクセスしていたブラウザ画面を最前面に表示するようにします。
そうすると今回は一つのテーブルだけしかないので、テーブル全体が緑色に囲われて、新たに下記ウィンドウがポップアップします。
ここで項目とデータが正しく取得出来ている事を確認できましたら”Finish" ボタンを押します。
そうすると下記設定画面に戻りますので"Save" を押します。
以上でこのステップの設定が完了です。
直感的では無い操作なので、この部分は少々手こずりました。
注:CSVに書き出す際の項目名は、ここで取り込んだ名前が使用されます。
後にWEB 側で項目名を変更しても反映されないのでご注意下さい。
私はこれで少し悩みました...
3. PAD(RPA)を使ってみての感想
この手のプログラミングレスとか、プログラムの知識無しに使えるツールというのは以前からも4GL(4th Generation Language)とか、RAP(Rapid Application Programing) 等々、あの手この手で手を変え品を変え、呼び名を変えて流行っては消えてを繰り返してきたように思います。RPA の想定している使い方に合えば簡単に業務の自動化等行える分野は確かにあると思います。
ただ実際の現場では何が不変で何が変わりうるか、という事を明確に理解している人の割合はかなり少ないと思います。安定して長期間稼働可能なフローの作成はかなりハードルが高いだろうというのが実感です。
一回フローが期待通りに動作するまでの労力は前提知識があったとしてもそれなりに掛かりますし、安定して動作するかどうかの検証や修正、そしてそのフローが僅かな仕様変更で修正せざる得ない頻度はおそらく予想より多く、はたしてフロー化に見合うだけのリターンが望めるか疑問を感じてしまいました。
実際にこういった処理自動化ツールが広範囲にて実用になるのは、AI技術が充分進んで、「AIにこれとこれを元にレポート作っておいて、纏め方はこの手順書に従ってね」(不明点や確認が必要な場合はAIが質問する)という指示で事足りるようになるまで待つ必要があるだろうと予想しています。😁