AWS IoTで「会社のトイレ混雑」を可視化し「生命の波動」に触れた
清水亮輔
はじめまして,清水と申します。リクルートテクノロジーズでエンジニアとして働いています。
今日は「Recruit Engineers Advent Calendar 2018 その2」19日目の記事として社内で行なったことの一つを紹介したいと思います。
tl;dr
何をしたのか
オフィスの個室トイレ混雑状況をリモートで把握し、データを得られる仕組みをAWS IoT 1-Clickを利用して作成しました。
学び
- AWS IoTを使うことで簡単にデータを得られるようになったこと。
- データを見ると トイレの事情を通して「あぁ我々も生命なんだなぁ」と感じられるようになったこと
背景
男性の多い職場にはありがちなことだと思いますが、弊社ではたびたび男性用個室トイレが混雑して待ちが発生する問題がありました。
しかしながら待ちの状態が可視化されていないため対策などを打てない状態にあり、エンジニアとしてはこの状態をなんとかしたいと思いました。
手段
今回は AWS IoT1-Clickを利用すると背景にある問題の可視化ができそうだと思ったのと、偶々 AWS IoTエンタープライズボタンが転がっていたため、これらの仕組みを利用して可視化を行うことにしました。
全体像は下記の通り
具体的な実装方法については実装例などの記事、ドキュメントがすでに出回っている(参考記事 2.)ため割愛させていただきますが大まかな説明をすると
- ボタンをスマホアプリ経由でWifiに接続し、ボタン押下をAWS側で認識できるようにする。
- ボタン押下をトリガーにしてLambdaを実行し、Slackに通知されるようにする。
- ボタンをトイレに配置する。
の3ステップになります。
第1ステップの具体な内容については 参考記事1.の内容が充実しているため割愛させていただきます。
第2ステップのLambdaではAWS IoTからの通知をトリガーにし、以下のコードを実行させてSlackの特定チャンネルに通知を投げるようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
var request = require('async-request'); exports.handler = async (event) => { // Slack TOKEN const token = "XXXXXXXXXXXXXXXXXXX"; const response = await request( 'https://slack.com/api/chat.postMessage', {method: "POST", data: { "token": token, "as_user": false, "channel": "オフィス8階男子トイレ", "username": "オフィス8Fのトイレ混雑を伝えてくれる君", "text": "個室トイレ待ちが発生していることをお知らせいたします。" } }); return { statusCode: 200, body: response }; }; |
Lambdaが実行されるとSlackに下図のような通知が飛ぶようになりました。
第3ステップではトイレの入り口に以下のような張り紙とボタンを配置することでトイレ待ちをしている人に協力してもらうようにしました。
実装結果
トイレに行かなくても混雑状況をリモートで把握できてかつデータを収集できるようにしました。
第1ステップから第3ステップまで30分程度で完了しシンプルかつ短時間で実現できたことに驚きを感じました。
得られたデータの中身と可視化
Slackに通知を投稿されることでSlack上にデータが蓄積されるようになりました。
そしてデータをSlackAPI経由でjson形式で取得することができるようになることで、データを詳細に解析できるようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "ok": true, "messages": [ { "text": "個室トイレ待ちが発生していることをお知らせいたします。", "username": "オフィスのトイレ混雑を伝えてくれる君", "bot_id": "XXXXXXXXX", "type": "message", "subtype": "bot_message", "ts": "1541748580.042500" }, { "text": "個室トイレ待ちが発生していることをお知らせいたします。", "username": "オフィスのトイレ混雑を伝えてくれる君", "bot_id": "XXXXXXXXX", "type": "message", "subtype": "bot_message", "ts": "1541748256.042400" }, { "text": "個室トイレ待ちが発生していることをお知らせいたします。", "username": "オフィスのトイレ混雑を伝えてくれる君", "bot_id": "XXXXXXXXX", "type": "message", "subtype": "bot_message", "ts": "1541746315.042300" }, ... 以下略 |
jsonデータを社内で共有したところHN「💩グラフ」さんが集計、可視化を行なってくれました。
これで各週の時間帯においてどれほどボタンが押されたかがわかるようになりました。
残念ながら統計的に有意な特徴をデータから見出せなかったため解析までは至りませんでしたが個人的には以下のような感想を持ちました。
- 昼食後にトイレに行くのではなく昼食から1時間から2時間ほど経過してからトイレに行きたくなるのではないか?
- 12/02週だけ急激に混雑した理由は何か?何か急激にトイレに行きたくなることがあったのだろうか?
- ボタンを導入してからピークの時間帯がシフトしている気がする。「混雑している時間は避けよう」とみんなが考えた結果トイレに行く習慣に変化がおきたのではないか?
このようにこれまで感じることのなかったデータに通っている「人間や生命のリズム…波動」を感じ取ることができ、データ解析の面白さを体感することができました。
苦労したところ
社内のメンバーを巻き込むところが大変でした。アイデアから実現まではAWSの力で割とすぐに実現できた一方で使ってもらうためには社内の勉強会などにデータを提供したり、
Slackの専用チャンネルに参加している人の興味を引くための投稿を投げたりなど結構手数がかかりました。
結局のところ問題は解決したのか
定性的な意見として「トイレの混雑を把握できるようになってから待つことが減った気がする」という意見を方々よりいただいているため、可視化の副次的時な効果が出始めているのではと考えています。
問題解決に必要な現状に関するデータを収集・可視化するところまではできたのですが定量的な解析と具体的な打ち手の実施については今後の課題となっています。
最後に社内のトイレ事情を解決するという一見小さなことでも掘り下げて見ると”人間の原初的な欲求”や”人間の思考” などを汲み取ることができる良い機会になったと思います。
参考記事
1. IoTを駆使してトイレの個室空き状況を検知してWEBで確認できるアプリを会社で運用してみました。
2. 【国内販売開始】AWS IoT Enterprise Button試してみたらホンマに簡単にLambda関数を実行できた
終わりに
今回はAdvent Calenderその2にて Orisanoさんの熱い記事に対する箸休めとして書かせていただきました。明日は再び Orisanoさんの熱い記事が再開します。