🚨

SOSした同僚を確実にお助けするためのIoTパトランプを作った

2021/12/03に公開

この記事は SORACOM Advent Calendar 2021 3日目の記事です。

昨年と同様、今年もSORACOMを使ったIoTシステムを開発したので紹介したいと思います。
今年作ったのはズバリ、 「SOSした同僚を確実にお助けするためのIoTパトランプ」 です。

完成したシステムの動画をTwitterに上げていますので、ぜひご覧になられてください。

背景

私が所属する 株式会社Fusic のIoTチームには、少し変わった文化があります。
それは、 開発に行き詰まったり何か相談事があるとき、Slackで「会話を求めます!」 と発言するというものです。

これは韓国出身で流暢な日本語を話す @cheekykorkind が生み出した文化です。

リモートワーク開始当初は「全員常にオンライン」「いきなりSlack CallしてOK」「会話できる状態の人は常にDiscordに入っておく」等いろいろな運用を試したのですが、我々のチームでは話したい人が「会話を求めます!」と呼びかけることが丁度いい温度感だったようでこの文化が定着しました。


ただ、この運用にはいくつかの欠点があります。

  • 会話を求められた側が作業に没頭していて、メンションに気づかないことがある
  • 別のミーティングに出席していて、Slackで応答できないことがある
  • そもそもSlackで応答するのが面倒

気づくのに遅れた例:

ミーティング中の例:

これら問題を解決すべく、IoTシステムを開発することにしました。

ソリューション

問題を一気に解決する手段として、以下のようなIoTパトランプを考案しました。

ポイントとしては

  1. パトランプが明明と点灯することで、確実にメンションに気づける
  2. ワンタッチでSOSに応答できる
  3. 「話しましょう」だけではなく「5分待って」「後で連絡します」といった応答も可能

といった点です。

実現方法

ハードウェア(筐体・回路の設計・開発)

ハードウェアは昨年と同様、カッコいいプロダクトを作ることで定評のある弊チームの後輩、@njl7502l に製作を依頼しました。

デバイスをどこでも気軽に使えるようにしたかったので、開発当初からSORACOM SIMを使うことを前提としていました。
今回のソリューションである「ワンタッチでSOSに応答できる」という要件を満たすため、ディスプレイを搭載していて全面に複数のボタンがあるM5Stackをマイコンモジュールとして使うことにしました。

パトランプはAmazonで購入したこちらの品を使っています。
もともとはAC100Vで動作する製品なのですが、DC9Vで点灯しかつM5Stackの出力信号でリレー制御できるよう改造しました。

https://www.amazon.co.jp/dp/B0026XD2RM

筐体は3Dプリンターで製作されています。
パトランプのカバー、M5Stackがぴったりとフィットしていて素敵ですね✨

ソフトウェア

ソフトウェア側は以下のような構成です。
AWSのサーバーレスなサービスのみを使っているのでAWS SAMを使って開発・デプロイしています。

AWS IoT CoreとデバイスはSORACOM Beamを経由して接続しています。

クラウド側、デバイス側ともにソースコードを以下リポジトリで公開していますので、興味のある方は覗いてみてください。
https://github.com/yuuu/iot-mayday

Slackへの投稿の監視

クラウド側はSlack Event SubscriptionsとAWSを連携させることで実現しています。
今回用のSlack appをSlackチャンネルにインストールしておくと、そのチャンネルへのメッセージポスト時にAWSのAPI Gatewayにリクエストが飛びます。

API Gatewayの後ろにいるLambada関数にて、「そのメッセージが自分宛のSOSか?」を判定しています。
自分宛のSOSだった場合はAWS IoT Coreへpublishします。

ちなみに、Slack Event SubscriptionはSlack appをインストールしたチャンネルでのみ有効化されるので、メンバーが助けを求めるであろうチャンネルに予めインストールしておく必要があります。

該当するソースコードは こちら

パトランプの点灯

デバイス側はArduino(ほぼC言語)で開発しています。
起動時にAWS IoT Coreに対してMQTTSで接続・サブスクライブし、メッセージがパブリッシュされたらパトランプを点灯させます。

該当するソースコードは こちら

レスポンスの送信

ボタンを押された場合はレスポンスを再びIoT Coreへpublishします。
レスポンスがpublishされたら、別のLambda関数にてSlackへポストする、という仕組みです。

該当するソースコードは こちら

動作確認

冒頭の動画の通りです。

パトランプの存在感がすごいですね🚓

考察

同僚のSOSに確実に応答できるようになった

どれだけ作業に没頭していても、パトランプが光れば同僚がSOSを出していることに気づけます。
すぐに話せないシチュエーションでもワンタッチでレスポンスができるので、SOSを無視することが無くなりました🎉

SIMを使うことで電源を挿すだけで使えるプロダクトになった

このプロダクトは基本的に屋内で使う想定なので、当初はWi-Fi通信の利用を検討していました。
SIMを搭載したことで電源を供給すれば煩わしい設定をしなくてもすぐに使えるので、結果的には使いやすいプロダクトになったと思います👍

SORACOMを使うことでAWS IoT Coreとシームレスに連携ができた

AWS IoT Coreに対してデバイスから接続するためにはX.509証明書による認証が原則必要なのですが、SORACOM Beamを使ったことで認証をSORACOMに任せることができました。
証明書を各実機に書き込む必要がありませんし、SIMのimsiを使って送受信先を区別することは可能です。

仮に、このプロダクトをメンバー全員に配布することになっても、容易に対応できそうです😄

まとめ

動機の半分くらいは「今年もSORACOM Advent Calendarに何か面白いネタを投下しないと...」という切迫感だったのですが、当初考えていた以上に実用的なものを作り上げることができました。
今回は通知に特化していますが、各メンバーが助けを求めた回数・助けた回数を記録して可視化すると面白いかもしれませんね。

みなさんもぜひ真似してみてください🙌

GitHubで編集を提案
Fusic 技術ブログ

Discussion