Meraki de IoT トイレトレーニング


この記事はCisco Systems有志による [Cisco Systems Japan Advent Calendar 2024](https://qiita.com/advent-calendar/2024/cisco)（二枚目） の 13日目として投稿しています。

2017年版: https://qiita.com/advent-calendar/2017/cisco
2018年版: https://qiita.com/advent-calendar/2018/cisco
2019年版: https://qiita.com/advent-calendar/2019/cisco
2020年版: https://qiita.com/advent-calendar/2020/cisco
2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2
2021年版: https://qiita.com/advent-calendar/2021/cisco
2021年版(2枚目): https://qiita.com/advent-calendar/2021/cisco2
2022年版(1,2): https://qiita.com/advent-calendar/2022/cisco
2023年版: https://qiita.com/advent-calendar/2023/cisco
2024年版: https://qiita.com/advent-calendar/2024/cisco


# IoTの力を借りて、トイレトレーニングをHappyに

トイレトレーニングは、子育て初期の1つの大きなテーマである。うちには、そろそろオムツを使わずにトイレに行けるようになって欲しい、トイレトレーニング真っ最中の小さき人がいる。とはいえ子育ては前進と後退、時には足踏み、親としては我慢の連続で、なかなかうまくはいかない。
そこで今回は、IoTの力で、トイレトレーニングをより良い形で取り組めるよう検討したいと思う。MerakiにはさまざまなIoTセンサーがある。これらを活用して、子どもも親もHappyなトイレトレーニングを実現したいと思う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/8ce9d821-8b7c-2a6c-0c44-4671c0f7a7bf.png)

## トイレで急なインシデント発覚、を避けたい

私が今トイレトレーニングで悩んでいるのは、子どもがあまりトイレに行きたがらないこと。そして逆に、子どもが時々親に知らせずに、こっそりトイレへ行くことだ。「子どもがトイレを使ったことに気づかず、ふとトイレのドアを開けたら大惨事、床にペーパーや何らかの液体が散乱している」そんなことが、忙しい時に限って起こる。可能なら、子どもがトイレに入り出ていく姿を陰から見守り、もしインシデントが起こった場合は、黙ってそっとトイレを片付けたりフォローをしたい。

# 解決方法の検討
### 水漏れ検知センサー
そこで、トイレで発生するインシデントを検知したら良いのでは、と考えた。
まず思いついたのは、水漏れ検知センサーMT12。トイレの床の水漏れを検知し、それを親に知らせてくれたら、多くの惨劇は防げるのではないか。
<img width="30%" alt="MT12.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/26af5b42-835a-a657-6e9f-5fa4ea70a08e.jpeg">
>漏水検知センサー MT12：センサーケーブル(緑色/販売中のものは白)にティースプーン1杯程度の液体がかかると漏水を検知する

…いざセンサーを目の前にしてみると思う。　**何か嫌だ。**
ちょっと直接的すぎるというか…もし仮に水以外の液体に浸ったとしたら、今後センサーを別のことに利用したくなくなる。そもそも"Walter Detection"センサーは仕様として水以外の液体を許容できるのか？いや仕様確認したところで、すでに使いたくない、と思ってしまっている。この案は、とりやめよう。

### ドア開閉センサー
インシデントが起こっているかどうかの確認はしない。ただ最低限、子どもがトイレに入ったかどうかがわかれば良い。ドア開閉センサーをトイレのドアに貼り付けて、人が入ったかどうかを検知しよう。
<img width="30%" alt="MT20.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/4c879a2a-47f5-0898-45a4-f4b71f234250.jpeg">
>ドア開閉センサー MT20：2つのパーツはマグネットでくっついている。ドアと壁部分に2つのパーツを装着し、パーツが動くことでドアの開閉を検知する。

MerakiのMTセンサーはゲートウェイとして、MerakiのWi-FiアクセスポイントMRか、またはスマートカメラMVを利用する。今回は自宅のMRをセンサーのゲートウェイとして運用する。

### 監視カメラ
そういえばドア開閉センサーMT20は、MerakiのスマートカメラMVシリーズと連動させた運用ができる。そこで、手持ちのMV12WEも利用することにした。とはいえ、インシデントが発生しているかどうかを確認したいのが目的ではあるが、家庭内の正当な目的とはいえ、流石にトイレ内をカメラで映すことは非常に憚られる。
そこで、カメラでトイレのドアを映し、誰がトイレに入ったかを確認する目的でカメラを利用することにした。
<img width="30%" alt="MV12WE.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/e3e74829-9160-d7ae-3c89-4347bd693a37.jpeg">
>MV12WE：Wi-Fiでも運用できる(電源は要PoE)。人の動きや人数・車両カウントも可能

そういえば今年のMVの機能アップデートとして、[写っている人の服の色を検知](https://community.meraki.com/t5/Meraki-Demo/Introducing-MV13-MV-Presence-Analytics-and-Attribute-Search/m-p/225387)できるようになった。この機能がAPI連携できるなら、Merakiだけを使って、トイレトレーニング中の子どもがよく着る服の色を条件とし、子どもがドア開閉した時のみ通知するよう、絞り込みができそうだ。

…と思って[Vision Portal: Attribute Search](https://documentation.meraki.com/MV/Viewing_Video/Vision_Portal%3A_Attribute_Search)のDocumentationを確認したところ、残念な記述が。
>Attribute search is only be available for 3rd generation, non-fisheye (MV13 and MV63) cameras

服の色を特定するAttribute Searchの機能は手持ちのMV12では利用できず、第三世代のMVシリーズ以降に対応する機能だった。物理層で敗北である。
今回は、ドアを開けた対象を子どもだけに絞り込むことは、一旦あきらめることにした。いずれ新世代のMVを手にすることができたら検討したい。


# IoTトイレトレーニングの実現イメージ
IoTセンサーとスマートカメラを組み合わせて、Happyなトイレトレーニング（のアフターフォロー）を目指す。全体像としてはこうだ。
![IoTToirettraining.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/e6d5e588-3ae3-46fd-00ff-1c9e14df5316.png)

子どもがこっそりトイレに行く
→センサーでドア開閉を検知
→親のスマホに通知
→カメラ画像を確認。ターゲットの子どもの場合は現場を確認

ただし、トイレの中で何かしら対処が必要なインシデントが起こったかどうかは、現場を見なければわからない。親が確認して初めてインシデント発生の有無がわかる、シュレディンガーのトイレトレーニングだ。プライバシーの観点からは、それで必要十分だ。


# IoTセンサーとカメラの準備
Qiitaの記事など、私がインターネットに頼りたいのは、マニュアルに記載がない、特に物理層の細かい部分なので、この記事では物理的な部分もできるだけ丁寧に記載したい。

## ドア開閉センサーMT20の準備
よし、早速センサーを取り付けよう！…とMT20を久しぶりに取り出したら、センサーが動作しなかった。Merakiダッシュボードを見ると、どうやら電池切れで半年前からオフラインになっていたようだ。そういえばドア開閉センサーを入手したのはこの子が産まれる前、もう3年以上が経過している。


## MT20の電池交換
センサーの電池交換は初めてだ。電池はカバーの中に入っているようなのでネジを外そうとしたが、手持ちの精密ドライバーのサイズが合わない。
[MT20 Installation Guide](https://documentation.meraki.com/MT/MT_Installation_Guides/MT20_Installation_Guide_-_Open%2F%2FClose_Detection)を読むと、購入時の付属品に”Torx key (T5) ”という、ちょうど良いサイズのレンチが入っているようだった。箱のまま保管しててよかった。

<img width="70%" alt="MT20Opened.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/698fb2dd-6dee-5a80-c651-c3b5720fdde1.jpeg">

電池を取り替えるとすぐにLEDが光り、ゲートウェイである無線AP(MR)と通信し始めたようだ。
数分してから、試しにセンサーの2つのパーツを、くっつけたり離したりして、Merakiダッシュボードみると、正常に稼働していることが確認できた。

![MT20Dash1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/8a4cd855-21de-f386-02c5-ff8b603e31d1.jpeg)

>[ドアアクティビティ]バーの紫＝ドアが開いている(パーツが離れている)/グレー=ドアが閉まっている(パーツがくっついている)状態

## MT20の設置
次に、センサーをドアに設置したい。今回はトイレトレーニング目的なので、人生の中では比較的短期間の運用になる。数ヶ月後に取り外すことを想定し、ドアにしっかりマウントするのではなく、ポスター掲示用の両面テープで取り付けることにした。
大きいパーツには3Mのコマンドタブ、小さいパーツにはKOKUYOのひっつき虫を利用した。なお[Guide](https://documentation.meraki.com/MT/MT_Installation_Guides/MT20_Installation_Guide_-_Open%2F%2FClose_Detection)曰く、2021年4月以降にMT20を購入した方には、マウントキットと両面テープが付属しているそうなので、安心して欲しい。

<img width="40%" alt="MT20Ura.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/9ba83e0f-167f-10bf-c399-db330ac70730.jpeg">

両面テープをつけたセンサーをドアに装着した。センサーの2つのパーツに少し隙間があいてしまったが大丈夫かな。
<img width="50%" alt="MT20onDoor.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/80574cdd-23f8-5f2a-76c9-08f99d76bad3.jpeg">

ドアを開閉してみた。Merakiダッシュボードを確認すると、問題なく開閉を検知できていた。よかった。
![MT20Door.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/40c84000-88bd-50fd-3b67-89bace386729.gif)

これでドア開閉センサーの下準備は完了だ。

## 監視カメラの準備
次に、ドアを開けた人が誰なのかを確認できる場所にカメラを設置したい。MV12WEは、通信自体は有線LANでもWi-Fiでも動作する。ただし電源がPoEで取り入れる必要があるため、配線の工夫を要した。カメラを置く棚の配置を工夫して、何とかドアの開閉を画角に収めることができた。

Merakiダッシュボードを見ると、ドアをあけた人の確認も問題なさそうだった。
![MVDash1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/84809da8-37e4-44fa-b8eb-601b4d1e5180.png)

ただし玄関が一部写り込んでしまっているため、玄関を通る人を無駄に検知してしまう可能性がある。今回は利用しないが、いずれ人数カウントなど行いたくなる時にも備え、念の為アナリティクス対象のエリアを、トイレのドア付近に限定して設定しておいた。
![MVDash2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/cf9508d7-9680-5828-eb7d-84550c06a8a6.jpeg)

## プライバシーの考慮

最後に、家庭内のプライバシーの観点から、監視カメラを置いていること、および動画をLiveで映していることを家族に表明すべきと考えた。さらに具体的には、どのような動画が撮られているのか、目で見てわかった方が安心感があると思った。

Merakiはネットワーク管理用のスマホアプリがあり、それで監視カメラの動画をLiveで確認することも可能だ。
<img width="40%" alt="MerakiApp.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/97fd64ed-6e31-5d31-8fb9-80e9042d0ab4.png">
<img width="40%" alt="MerakiAppMT.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/b4476fc1-ab0d-589e-5cd8-22d5a7fc0b12.png">
<img width="40%" alt="MerakiAppMV.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/5999a5d9-cb8f-8d24-4b45-66fa901f6de2.jpeg">

そこで、MerakiアプリのカメラのLive動画を、スマホに全画面表示して、それをカメラの隣に置いて常時表示することにした。撮影中の旨のコメントも掲示した。
<img width="60%" alt="MVSetti.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/a64b05e7-54f6-1489-9519-d076297d6f9a.jpeg">

これで全ての下準備が完了だ。


# Merakiダッシュボードの設定

ここまでで、ドアセンサーはドアの開閉を検知できており、スマートカメラは動画をLive配信できる状態になっている。
次に、これらセンサーとカメラを連携させ、ドアの開閉アクションが起こった時にスマホに通知するようにしたい。

## センサーとカメラの連携
まずはカメラにセンサーを紐づける。Merakiダッシュボードのカメラ側のページから、[センサー割り当て]ボタンをクリックし、ドア開閉センサーを紐付けた。
![MVDash-MT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/d619f119-f0c3-7f9c-9727-bf1335e692a1.png)

![MV-MTintegration.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/570b89d6-c9c6-5799-638d-20c2352882c8.jpeg)


PC上の画面から、センサー連携できているかどうかを確認する。センサーで検知したドアの開閉をトリガーに、スナップショットが自動的に撮られている。
![MTdash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/75607b6c-cdfb-8d4a-8e97-d04efc185841.jpeg)

試しに[スナップショットを表示]を押してみた。
![Dashboard_test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/f9178eb0-ee72-bd76-e1a9-b6a2fde58578.gif)

Gif動画の画質が低くて恐縮だが、ひとまず大丈夫そうだ。

## センサーのアラートプロファイルの作成
次に、センサーがドア開閉を検知した時に、スマホに通知がいくように設定したい。

Merakiセンサーのアラートプロファイルを作成する。
[センサー]->[設定]->[アラートプロファイル]で"新規アラートプロファイル" を作成する。

センサーはMT20を割り当てる。またアラートを稼働させるスケジュールは子供の活動時間に限定し、深夜は通知が来ないようにした。
![MTAlertProfile1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/44770562-00e3-5cf6-c508-465f75760f7e.png)

アラートの条件としては、ドアが開いた時とする。(5分以上ドアが開きっぱなしだったら通知する等の調整も可能なので、冷蔵庫の閉め忘れ通知などのUse Caseにも活用できる)
また通知のメッセージにダッシュボードのURLを入れることで、必要に応じてスマホから画像を確認できるようにした。
![MTAlertProfile2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/c3b0ffe3-fc11-fa53-98f0-eb38ae03b960.png)

一旦プロファイルを保存し、通知側の設定に移る。

## Webhook設定
次にスマホの通知先を検討する。Merakiセンサーのアラート選択肢として Email / SMS / Webhook を活用できる。今回は全て活用することにした。
メール・SMSは、通知先にアドレスや電話番号を設定するだけで通知が受け取れる。今回は加えて、Webex Teamsにも通知がいくようにしたい。

### Webex側の設定
まずはWebex TeamsでWebhookを受け取るbotを作る。
WebexのDeveloper向けサイトにアカウントを作成し、あらかじめ提供されている[Incomimg Webhooks](https://apphub.webex.com/applications/incoming-webhooks-cisco-systems-38054-23307-75252) のAppを[Add Bot+]ボタンを押して追加する。
![WebexWebhooksApp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/935d0656-fb79-bb6f-c473-3f622ffe4712.png)

更新された画面を下にスクロールし、Webhook botの名前をつけ、またbotを入れるWebex Teamsのスペースを指定して[Add]する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/9e0b79cc-8717-ce80-79b6-dd6ae9ef0226.png)

すると下部にWebhookのアドレスが生成されるので、これをコピーしておく。
![WebexHook.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/b2c17d95-ae06-2139-9657-ccd9d8bad121.jpeg)
Webex Teams側には、指定したスペースにBotがサイレントに追加されているはずだ。

### Meraki側の設定
次にMeraki側でWebhookの設定をする。Webhook設定はテンプレートが用意され、簡単に設定できるようになっている。

[オーガナイゼーション]->[API & Webhooks]で"Webhookレシーバーを追加"する。
![MerakiWebhook1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/f6edb4cb-995b-3f09-cd7e-13486167af5b.jpeg)

レシーバーの設定で、適用したいMerakiのNetworkを指定する。またレシーバーの名前をつけ、先ほどのWebexのWebhook URLを貼り付ける。
またペイロードのテンプレートして、'Webex'がプリセットされているのでそれを選択する。
![WebexHook2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/f8d6c946-1130-e8a8-f039-957c3417c2af.jpeg)

[センサー]->[設定]->[アラートプロファイル]に戻って、先ほどのセンサーのアラートを編集する。
下部の通知設定に、先ほど作成したWebhook設定を指定する。
![MTAlertProfile3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/62817a99-75bc-388e-513c-a4373a9f06b9.jpeg)

これで通知設定も終了。準備完了だ！

# 動かしてみる
実際に、うちのトイレトレーニング中の子どもがトイレに向かう時に、検知と通知が正常に動作するか確かめる。

夜、子どもが寝室から出てくる様子を、別の部屋から聞き耳を立てて観察した。

>🏃タッタッタ・・・ガチャリ・・・　

子どもがドアを開けた音がする。

しばらくして、スマホに、メール・SMS・Webexそれぞれに通知が来た！(画像は後からキャプチャを撮り直したもの)
<img width="30%" alt="Screenshot 2024-12-13 at 12.02.16.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/2c00206d-8954-df13-b740-b440f2791537.jpeg">

また、通知に掲載されたリンクをクリックしたら、Merakiアプリに遷移した。
アプリでは、ドア開閉センサーが動作したタイミングの、スマートカメラの動画が表示された。
すなわち、ちょうど子どもがトイレに入る直前の様子を、プライバシーをうまいこと保ちながら確認することができた。

<img width="60%" alt="result-good.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866274/465bc47d-e242-cfe5-6ffe-8d259a684f70.gif">

>ガチャリ・・・🏃タッタッタ・・・パタン

目的を果たした子どもが、部屋に戻って行った。

その後、音を立てないようこっそりと、トイレを見に行った。インシデントは、発生していなかった。

親として、また記事としても、ホッとした。これにてHappy、大成功！


# まとめ
以上にて、MerakiのIoTセンサーとスマートカメラを使って、トイレトレーニング中の子どものスマートなアフターフォローを実現した。

子どもは、ドアの前に置いてあるスマホで映像を確認できることもあり、トイレに行くことが自体が少し楽しくなったようだ。いずれ、ドア開閉の通知機能とスマートホームデバイスを連携させて、トイレに入ったらそのことを褒めるようなアナウンスや、お楽しみBGMを流したりしても楽しいかもしれない。

またカメラは、定点カメラ的な活用をされるようになった。子どもたちは、カメラの前でキャッキャと騒ぎながら写りを確認し、いろいろなポーズをとって遊んでいる。後からカメラの管理画面を確認し、モーションキャプチャ機能で動きのある画像を抽出すると、カメラの前でふざけ合う子どもたちの様子を多数確認できた。とても良い。

おうちにIoTセンサー、おうちに定点カメラ、もしかしたら、思った以上にとても楽しいかもしれない。一家に一台、いや一家にフルスタックMeraki、皆さんもやってみてはいかがでしょう。