◇はじめに
最近、Azure logic Appsをさわり始めたので、勉強がてらM5Stackと組み合わせて呼出しアプリをつくりました。
◇開発環境等
- 使用デバイス
- M5Stack Core2
- 使用ツール:
- Azure Logic Apps
- Teams
- UIFlow1.0
- Postman
Azure Logic AppsはAzure版Power Automateといった形でPower Automate使ったことがあればそこまで戸惑わずに使えました。
個人的に、プレミアムコネクタが従量制で使えるのが使い勝手がよかったです。
Azure Logic Appsの概要は以下のサイトが参考になりました。
◇最終的にできたアプリ
作成したアプリの各画面です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Faa205cf7-e961-359e-e48f-bbce30ff5328.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=35bbef7d5413ed9caa541b1899b123f0)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F008e7aec-6aa1-eef8-8af2-35e7ffecce3e.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e3e18661482457bde534fa70410e9365)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fda43e56b-7f79-6a8f-d28b-844d4a035ab7.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=79529c5eaf25d214142ca6bfd973dd1d)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fc3a61ef5-18c4-9a99-d6e8-65379bcdaacb.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8ea145efba4e42c6ab7300a9b3b07d52)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fdb0007cc-8f7d-3fc9-20a6-7cd22c186993.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=84edc9db666f37fa0e7f179a35bf4558)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F7160949b-6df6-722a-12ae-7fe52809aec8.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=be8dc7d5ad28a2aa79d27773288b6db5)
選択画面から、呼び出したいユーザー名の右にある呼出しボタンをタッチしOKを押すと、Azure Logic Apps経由でTeams上のチャネルにメンション付きの通知がアダプティブカード形式で送られます。
(Teamsでの通知は受付に来客がきたという仮定の通知内容になります)
また、選択画面に表示されるユーザー名についても、Azure Logic Apps経由でOffice365 Groupのユーザー一覧を取得しています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F4e19fb61-223d-1c9e-e2c6-4d792f6c1445.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6c5ed2a2e1ef0146c6d025c8f5115e07)
◇全体構成
全体の構成にM5Stackの画面遷移を加えたものを図にしました。
今回は、事前に画面遷移の設計をしていなかったので、完成したM5Stackの実際の画面を載せています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fc5b8ff60-e4f9-66b6-a542-bfbd81bb05a6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=fdf9621b6955f7c43b3e7543c4292127)
Teams通知までの流れとしては、
- M5Stackが起動すると、Azure Logic Appsその1にアクセスし、Azure Logic Apps経由でOffice365のユーザー情報をjson形式で取得
- 受け取った情報を基に、M5Stack上にユーザー名を表示
- ユーザー名の右側にある「呼出し」ボタンを押して、「OK」ボタンを押すと、Azure Logic Appsその2にHTTPリクエストを送る
- Azure Logic Appsその2では、受け取ったUPNを基に、ユーザー情報の詳細を取得
- Teamsのチャネル上にメンション付きで通知を送る
という形になります。
◇実装
処理順とは異なりますが、Azure Logic Appsその1⏩Azure Logic Appsその2⏩M5Stackの順序で実装内容について記載します。
Azure Logic Appsその1(ユーザー情報取得)
まず、Azure Logic Appsでユーザー情報を取得するワークフローを記載していきます。
なお、今回はAzure Logic Appsのリソース作成方法については割愛します。
リソース作成方法は公式ドキュメントに手順が載っているので、こちらを参考にしてください。
なお、Azure Logic Appsには、Standardプランと従量課金プランがありますが、今回は従量課金プランを選択しています。
フロー作成
全体のフローは以下のようになります。今回はトリガは「HTTP要求の受信時」トリガを使用しました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fc6256a7d-7655-4ef9-e464-383ca5592f4b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=da8813507fd2b31a5de840b283ad62b8)
グループメンバーの一覧表示フローでは、指定したグループのメンバー一覧を取得します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F1f3cd70e-6996-09d7-8cfd-e78cdebcedbc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=37083cb48cc954af7150a766dbe3352d)
次に、取得したメンバー情報から必要な項目の抜き出しとjson形式への変換を行っていきます。
ユーザー毎のjson形式データをリスト化し、最後にリスト全体をemployee
キーのvalueとしてjsonの形にしています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F1a21be58-114b-27d9-1220-506f0b0206cc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6d6a4a4e70b414a3af9aec0935538882)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F0217268c-7bee-f613-3640-021adf59cb97.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f71cf122d28659b693cdd034eb161caa)
単体テスト
まず、このAzure Logic Appsが問題なく動作するかをテストしますが、この時点でM5Stack側は未実装のため、別の方法で確認を行う必要があります。
Python等のプログラミング言語で確認する方法もありますが、今回はAPIプラットフォームであるPostmanを使用しました。
Postmanの使い方については、過去に実施されたセミナー資料がたくさん公開されていますので、こちらを参考にしてもらえればと思います。
また、私も過去にPostmanとSwitchBotの記事を書いてますので、良かったら読んでみてください。
Postman上で、テスト用のコレクションを作成します。そのコレクション内に、2つのPOSTメソッドのリクエストを追加します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F6bbd15bb-e89f-8b42-9262-96a033cb6a27.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=446821ea3d436de8c3d96e19b720c561)
まず、コレクション内の変数設定で'baseUrl'という変数を追加し、現在値にはAzure Logic Appsで生成されたURLを入力します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fd0398e9b-61c8-277b-76d8-6b85ceda3a79.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=524d268da82dcc0f3258909fb48a2acf)
次に、「ユーザー情報取得」リクエストを選択した状態で、「ボディ」項目内にパラメータを入力していきます。
この際、データ形式はRaw
-JSON
を選択します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Ff648ab51-f6a2-5d35-ea47-d03175eb6d34.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6766bb275c566f16f1f051957f8f9af8)
また、「ヘッダー」項目内でContent-Type
がapplication/json
になっているかを確認し、もしなっていない場合は修正します。
※Content-Type
項目がない場合は新規追加
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F58e9bd59-db37-a62f-d1a2-6417f7bf9f5d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1caaa3eea7182ba85f06093070315025)
この状態で、「送信」ボタンを押してHTTPリクエストを実行し、応答にユーザー情報が取得できればテスト完了です。
Azure Logic Appsその2(Teamsメンション通知)
次に、Azure Logic AppsでTeams上に通知するワークフローを記載していきます。
なお、こちらのアプリも従量課金プランを選択しています。
フロー作成
全体のフローは以下のようになります。今回はトリガは「HTTP要求の受信時」トリガを使用しました。
グループメンバーの一覧表示フローでは、指定したグループのメンバー一覧を取得します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F5fd119e9-21af-9f79-71d1-2400df22c845.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=82684740a50e9648752237d151e34d76)
リクエストに含まれているUPNデータからそのユーザーの情報取得を行っています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fcb8f0c38-10ef-9bca-5c34-514f3d97b081.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=108f9a4b639fbf5ef3944a57f0ac8007)
取得したユーザー情報を使ってメンショントークンを取得し、チャネル上にアダプティブカード形式で通知します。
アダプティブカード形式で通知を行う方法は、以前に別で記事をまとめていますので、参考にしてもらえればと思います。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F717a491e-5c82-dadd-d95d-47949fa79fe2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e0a0c2fb42b8822a298e1593b099c949)
単体テスト
こちらのAzure Logic Appsについても、先ほどと同様にPostmanを使ってテストします。
基本的には、先ほどと発行されるURLが変わりますので、コレクション内の変数設定内の'baseUrl'を修正します。
次に、「Teams通知」リクエストを選択した状態で、「ボディ」項目内にパラメータを入力していきます。
データ形式はさっきと同じRaw
-JSON
です。
このとき、UPN
のvalueは、実際に自テナント内で有効なものを入力してください。
なお、nickName
については、ボディには含めていますが、今回Azure Logic Apps内では特に参照していません(UPNからユーザープロフィールを取得させているため)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F1315006e-2f08-07ce-ba85-dea7953b3220.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=cbe7be48d4f107b0a1a2d983cf1b3c13)
この状態で、「送信」ボタンを押してHTTPリクエストを実行し、応答が「○○を呼び出しました。」となっていればテスト完了です。
M5Stack
最後にM5Stack側のUIFlowの実装内容について記載していきます。
今回はタッチパネル機能をもつM5Stack Core2を使用しています。
全体としては、下の画像のようになります。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F1d18b92b-127b-0f77-15e9-6c71df6bc917.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2d4b5b5810b4329fe5ee57d601a879c6)
ボリュームが多いため、処理毎に分けて説明していきます。
初期化処理
起動後、変数の初期化とトップ画面表示のための画面初期化を行っています。
それらの初期化処理が完了後、起動画面用のテキスト(lblBoolTexg
)とスクリーン(lblBoolScreen
)をクリアしています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fd5b81f39-e018-c6c2-60ed-a14c2c788041.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8d067d2eeaf375759ffcdab854577cd1)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Faa205cf7-e961-359e-e48f-bbce30ff5328.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=35bbef7d5413ed9caa541b1899b123f0)
変数初期化関数では、画面表示用の各種フラグ変数の初期化を行い、前述のAzure Logic Appsその1(ユーザー情報取得)を呼び出しています。
レスポンスのjsonデータをM5Stack内で処理しやすいように、社員リスト
、社員名リスト
、社員数
、最大ページ数
といったデータを取り出しています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F997ca9a9-ea2c-bf70-2090-ad8c0400a865.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2a97a40ca032506c7d441ec5136dcf89)
トップ画面表示
初期化処理が完了すると、トップ画面を表示します。
この画面では、「呼出」ボタンを表示するだけの画面を表示し、ボタンを押すと、選択画面の1ページ目に遷移します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F054f49b3-ee6b-ca83-f717-40f451be5172.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7a407243b46e14d4feebd506bc607cc0)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F008e7aec-6aa1-eef8-8af2-35e7ffecce3e.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e3e18661482457bde534fa70410e9365)
選択画面表示
選択画面では、社員名リスト
変数から1ページにつき2ユーザー分を取り出し、表示しています。
ボタンA(M5Stack左下)、ボタンC(M5Stack右下)にはページ移動ボタンに割り当て、表示するユーザーを切り替えています。なお、最大ページ数を超えないようにクリップしています。
ボタンB(M5Stack下)を押すと、先ほどのトップ画面に戻ります。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F9065e24c-da14-35a9-bc85-859aca2b7c63.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0d6e4f5627968e28a4bb684f83f21679)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fda43e56b-7f79-6a8f-d28b-844d4a035ab7.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=79529c5eaf25d214142ca6bfd973dd1d)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fc3a61ef5-18c4-9a99-d6e8-65379bcdaacb.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8ea145efba4e42c6ab7300a9b3b07d52)
ユーザー名の右側にある「呼出し」ボタンを押すと、呼出し確認画面に遷移します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fcf6e6463-f22b-be48-54ec-05f288ed45f0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=49ddd8b0712fad5e35abd4c5c42ac0bc)
呼出し確認画面表示
呼出し確認画面では、先ほど選択したユーザー名を表示し、呼出し確認用の「OK」、「Cancel」ボタンを配置しています。
「Cancel」ボタンを押した場合は先ほどの選択画面に戻ります。
「OK」ボタンを押した場合は、Azure Logic Appsその2(Teamsメンション通知)を呼び出しています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F623b17c7-3d0f-aad3-f9fe-e09bfebc4382.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1e49064049d793b7289635321d41a8e7)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2Fdb0007cc-8f7d-3fc9-20a6-7cd22c186993.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=84edc9db666f37fa0e7f179a35bf4558)
呼出し実行
関数の中では、先ほど選択したユーザー名の社員リスト要素番号をキーとした社員データをbody内に入れています。関数実行後に呼出し完了画面に遷移します。
実際にテストしたところ、Azure Logic Apps側を無効にした状態でもHTTPリクエストが成功時側に倒れてしまったので、応答内容でチェックする必要がありそうです。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F283c68ab-d459-3800-dcad-cd9d13baab6f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6113a2fa771be3659d0f46d54f351bc8)
呼出し完了画面表示
完了画面では、予め設定したテキストと「HOME」ボタンを配置しています。
「HOME」ボタンを押すと、選択画面に戻ります。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F199239c8-2776-5f0e-21aa-fb24f0acc66e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=290a9754f2ef332217fd784a09541ab5)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F7160949b-6df6-722a-12ae-7fe52809aec8.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=be8dc7d5ad28a2aa79d27773288b6db5)
結合テスト
最後に、全体を通してテストを行い、Teamsで通知されれば完了です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F371217%2F4e19fb61-223d-1c9e-e2c6-4d792f6c1445.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6c5ed2a2e1ef0146c6d025c8f5115e07)
もし、うまく動作しない場合、
- Azure Logic Apps側の実行履歴がある場合、その中身をチェック
- Azure Logic Apps側の実行履歴がない場合(Azure Logic AppsまでHTTPリクエストが届いていない場合)、M5Stack側でデバッグ(UIFlow上でシリアル表示など)していく
といった切り分けで進めるのがいいと思います。
◇おわりに
今回は、マイコンボード(M5Stack)とiPaaS(Azure Logic Apps)の連携事例について記事を書いてみました。どなたかの参考になれば幸いです。