SORACOM LTE-M Button と AWS IoT Core の ThingShadow で「呼び出しシステム」

SORACOM LTE-M Button と AWS IoT Core の ThingShadow で「呼び出しシステム」:


展示会で困る事

それは展示会場で担当者が不在だった時ですよね。呼び出したいけどどうすれば?という問題を「あのボタン」で解決しようとした試みです。


こんな感じ

JAWS FESTA 2018 OSAKA でお披露目しました。

こんな感じのSPA (Single Page Application) です。

あのボタン「SORACOM LTE-M Button」を押すと、担当者に Slack のメンションが飛びます。

また、担当者が「OK ...」と Slack 上でメッセージ送信すると「現場急行中!」となる仕組みです。



web.png


名前のとなりに状況が表示されてますね。


実装

考え方ですが、担当者を "モノ" として扱い、そのステータス (= Shadow) を MQTT over Websocket でブラウザに表示するという仕組みです。



jaws-festa-2018 / architecture


各担当者は、このように「モノ」扱いです。もちろんソラコムはそういう会社じゃないですよ!便宜上、やむを得ず、しかたなく、断腸の思いでこのような実装になってるだけです!

aws-iot-core-things.png

Shadow はこの通りです。



shadow.png



アーキテクチャ

大きく2系統あります。


1系統目: SORACOM LTE-M Button から Slack へ!

Slack の Incoming Webhook を利用しています。

メンションを飛ばす方法は SlackのIncoming Webhooksでメンションを飛ばす方法 に助けていただきました。

同時に Shadow を「呼び出し中...」に update します。これは Websocket を通じてブラウザにリアルタイムでpushされます。


2系統目: Slack から AWS IoT Core の Shadow を更新

Slack の Outgoing Webhook を利用しています。

トリガーキーワードに "ok" を指定し、担当者は ok ... と入れてもらうようにしました。

受けは API Gateway です。Slack からは Content-Type:application/x-www-form-urlencoded で送信されるので、本来は API Gateway 上で JSON 化したかったのですが、私には難しかったので Lambda proxy としてそのまま Lambda 関数に引き渡し、その関数内(Python3.6)上で urllib.parse.parse_qs(event['body']) としてパースする軟弱実装です。

その後 Shadow を「現場急行中!」に update します。先ほど同様、ブラウザにリアルタイム push されます。


共通してやってること

Shadow が「現場急行中!」や「呼び出し中...」のままだと格好悪いので、一定期間で「呼び出しOK!」に戻してあげたかったので、Lambda 関数を作っています。

各 Lambda 関数から呼び出される形のコードです。

しかも time.sleep(sec) をつかうという実装。。。これでいいのかな。


TIPS


Lambda 関数から Lambda 関数を呼ぶ

boto3.client("lambda").invoke

WIP


あとがき

さっきまで作ってた。

そのうちコードは公開します。

EoT

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)