サンタが家にやってきた！？


# はじめに
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2021 （一枚目） の 25日目の記事として投稿しています。

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

メリークリスマス:xmas-tree:ついに Advent Calendar 2021も最終日です。
最終日はクリスマスということで、子供と一緒に考えたクリスマスネタをお届けしたいと思います:gift:

毎年姿を見せずにやってきて、寝ている間に欲しかったプレゼントをツリーの下に置いて静かに去っていくサンタさん:santa:
サンタさんっていつ来るんだろう！？どこから入って来たんだろう！？
我が家の子供がこんな疑問を持ち始めたので、サンタさんがいつ来たかわかる検知システムを作ろうか！と子供とあれやこれやと話しながら一緒に考案しました。

# サンタさん検知システム概要
子供と一緒に楽しむために出来る限りノーコーディングで簡単に実現することを目標としました。
### 1. サンタさんが家にやってきたことをCisco Merakiの扉開閉センサーがキャッチ！
サンタさんのためにベランダの窓の鍵は開けておきます!![santa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/5eb19657-67d2-5b86-1322-2c7a7a2e8fad.png)
### 2. 扉が開いたことが検知されたらGmailへメール通知。
![スクリーンショット 2021-12-18 6.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/07bd73d0-d049-c98a-68e3-69d04ecc1159.png)
### 3. メール受信をトリガーにして下記を実行
#### 3-1. Cisco Webex Teamsへメッセージ通知
朝メッセージを見ると何時にどこからサンタさんが入って来たかわかります！
![スクリーンショット 2021-12-18 5.52.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/10aed0af-5e15-78c8-300a-8dea897ad950.png)
#### 3-2. サンタさんへのささやかなおもてなしとしてツリーの照明をオンにして光らせる
サンタさん来てくれてありがとう:xmas-wreath1:
![tree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/8f788efd-5b1b-d48b-5a33-e464d6136f2b.png)
余談（笑）
本当はMVカメラでモーション検知してサンタさんの姿をキャッチしてみる！？などMVカメラを使う方法もアレコレ提案したのですが、「サンタさんは恥ずかしがり屋さんなのに、なんてひどいことをしようとするんだ！カメラは絶対ダメ！！」とこっぴどく怒られてしまいました。（母反省:sweat:）
# 用意するもの
1. Meraki MT20 屋内用開閉センサー
2. Meraki MR ワイヤレスアクセスポイントまたは Meraki MVスマートカメラ
2. Switchbot Smartplug
3. Zapierのアカウント
4. Webex Teamsのアカウント
5. Gmailアカウント

# システム概要図
![スクリーンショット 2021-12-22 12.56.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/1d897fc7-d0b1-d164-f359-5880cb6b915d.png)



# Cisco Meraki MT20 屋内用開閉センサーの使い方と設定
## Cisco Meraki MT20とは？
[Cisco Meraki](https://www.cisco.com/c/ja_jp/solutions/small-business/cloud/networking.html?dtid=pseggl000015&ccid=cc001571&oid=satsas026934&KEYCODE=001484828&POSITION=SEM&COUNTRY_SITE=jp&CAMPAIGN=sb-01&CREATIVE=JP_SEM_SMB_OUE-Brand_EM_B_NOA-GGL_0_0_Observation_JAP-OUE-meraki&REFERRING_SITE=Google&KEYWORD=cisco%20meraki&_bk=cisco%20meraki&_bt=552859065300&_bm=e&_bn=g&_bg=133380258448&gclid=CjwKCAiAtouOBhA6EiwA2nLKHyMPtLputsQCF85HSgv_HoX6fgN_wx6eMxu37I09jpvEOyMrsB1C6hoCu8oQAvD_BwE&gclsrc=aw.ds) はシスコのクラウド管理型製品です。ワイヤレス/セキュリティ/スイッチ/カメラ/MDM/センサーなど全ての製品と機能を単一のクラウド画面から管理できます。
MerakiシリーズのMT20は屋内用センサーの 1 つで、ドアの開閉を監視することができます。
入室が制限されたエリアへの立ち入りを検知する、ドアが開いたままになっていないか監視する、裏口からの入館人数を把握するなど、リアルタイムの監視とアラートを提供し、不正な侵入の検知や使用傾向の把握を実現できます。
電源を入れると、Meraki MR ワイヤレスアクセスポイントや Meraki MV スマートカメラに Bluetooth で自動的に接続します。
[Cisco Meraki MT20 クラウド管理型屋内用センサー](https://www.cisco.com/c/dam/m/ja_jp/meraki/pdf/meraki-mt20-datasheet.pdf"　"MT20 datasheet"　")
![MT20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/26813069-1df6-e85c-fb69-8774ffa8de16.png)

## MT20初期設定方法 （Merakiアプリで簡単!!)
モバイルデバイスにMerakiのモバイルアプリをインストールしていれば MT20の裏面のQRコードをスキャンするだけで下記のように簡単に設定することができます。
*事前にMRアクセスポイントやMVスマートカメラが同じネットワーク内に設置してあることが前提です。
Meraki アプリはこちらから
[for iPhone and iPad](https://apps.apple.com/jp/app/meraki/id693056161?l=en)
[for Android](https://play.google.com/store/apps/details?id=com.meraki.Dashboard&hl=ja&gl=US)
![スクリーンショット 2021-12-17 15.51.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/9c8776e8-0ac0-d144-c8be-96e78e682d2d.png)
![スクリーンショット 2021-12-17 15.51.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/7997b897-f97e-c673-b1c6-98c5328b485c.png)

## MT20 アラート設定方法 
アラートの設定については、アラート発砲の条件を定義したアラートプロファイルを作成してセンサーに適用します。
アラート設定はMerakiアプリではできないので、Merakiダッシュボードにログインし、環境センサーの設定から設置を進めていきます。

### 1.　アラートプロファイルを作成
![スクリーンショット 2021-12-17 17.06.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/92cebef1-df70-bc3a-39c5-828a83eb354f.png)
通知方法は Webhook も選択できますが、今回はEメール通知を選択します。
![スクリーンショット 2021-12-17 15.59.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/612f8b64-636c-c093-5eea-a4a3cc12033e.png)
### 2.　アラートプロファイルをセンサーに適用
今回は使用しませんでしたが、下記にようにセンサーに対してMVカメラを割り当てることができ、MT20と監視カメラとしての役割のMVカメラを連携させて入退室を監視することが可能になっています。
”アラートプロファイルを割り当てる”をクリックし、前の手順で作成したアラートプロファイルをセンサーに割り当てるとMT20の設定は完了です。

![スクリーンショット 2021-12-17 16.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/e5bc1639-c4db-bfbc-a432-a5a28b6f8c36.png)
![スクリーンショット 2021-12-17 17.02.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/c448164e-95b4-0d35-1820-28df16eea304.png)

# Zapierの設定
[Zapier](https://zapier.com/app/dashboard)は、アメリカのタスク自動化ツールです。2,000種類以上の異なるアプリやWebサービスを連携して、自分好みの業務自動化ツールを組むことができます。Cisco Webex Teamsも対象アプリになっていますので、今回実現したい、アラートのメールの受信をトリガーに Cisco Webex Teamsの指定のスペースへメッセージをPostすることをノーコーディングで実現できます。
Switchbotはまだ対象アプリになっていませんでしたので、Zappierで簡単なPythonスクリプトを実行させることによりSwitchbot Smartplugの電源をオンすることを実現します。

設定完了時のイメージ
![スクリーンショット 2021-12-22 11.06.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/898c7881-032b-2ed3-07c6-ce43a8a8b398.png)
では、Zapierで下記の設定を進めていきます。
1.　トリガーの設定: Meraki MTからのアラートメール受信
2.  アクション1の設定: Cisco Webex Teams のスペースにメッセージをPost
3.  アクション2の設定: Switchbot Smartplugでツリー電源をオン
##0. 事前準備
[gmailの自動振り分け機能](https://support.google.com/mail/answer/6579?hl=ja)でMT20のアラートを受信するメールBoxにラベル付けを行う。
1. Gmail にログインし、自動振り分けしたいメールを開く
2.上部にある『その他』から『メールの自動振り分け設定』を選択
3.『この検索条件でフィルタを作成』を選択
4.『ラベルを付ける』から新しいラベル名を入力

## 1. トリガーの設定 - 特定のラベルの新しいメールの受信
Zapierにログインして、"Create Zap"で新しい自動化フロー"Zap"を作成します。
![スクリーンショット 2021-12-22 11.27.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/d930ad45-be5e-a0c2-d54e-9d71c31bd0d5.png)
トリガーの設定を進めていきます。"Choose app & event"で Gmail アプリ、"Trigger Event"で"New Email"を選択します。次に"Choose account"で使用するGmailアカウントを指定し、"Set up trigger"で事前準備で指定したMT20のアラートメールのラベルを指定します。
この設定で、MT20のアラートの新しいメールの受信をアクションのトリガーに設定することができます。

![スクリーンショット 2021-12-22 11.32.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/5aa71b45-5e20-46a9-518d-b5dc9f049fd9.png)
## 2. Actionの設定 その1 - Cisco Webex teamsへメッセージPost
"Choose app & event"で Webex アプリ、"Action Event"で"Post Message"を選択します。次に"Choose account"で使用するWebexアカウントを指定し、"Set up action"の"RoomID"でメッセージをPostしたいスペースを選択し、"Text"でPostするメッセージを記載します。
この設定で、非常に簡単にWebex TeamsのスペースでメッセージをPostするアクションを設定することができます。
![スクリーンショット 2021-12-22 11.24.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/1adae30b-9aeb-78d5-9c78-f82616a659d7.png)
## 3. Actionの設定 その2 - Switchbotの Smartplugの電源オン
"Choose app & event"で ”Code by Zapier"、"Action Event"で"Run Python"を選択します。次に"Set up action"で実行したいコードを記載します。
この設定で、指定のPythonコードを実行することができます。
![スクリーンショット 2021-12-22 11.40.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/0be11087-64d5-524a-d8f7-b17295ab3bee.png)
実行するPythonコードはこちら
ツリー電源となっているSmartplugに電源をオンにするコマンドを送ります。

```python:santa.py
import requests
import json

switch_url='https://api.switch-bot.com/v1.0/devices/<デバイスID>/commands'

switch_headers= {
       'Content-Type': 'application/json',
       'Authorization': '<開発者Token>'}

payload_on='{"command":"turnOn","parameter":"default","commandType":"command"}'
requests.post(switch_url, headers=switch_headers, data=payload_on)
```

### Switchbot API について
[APIの詳細はこちら](https://github.com/OpenWonderLabs/SwitchBotAPI)
SwitchBotのAPIを使用するためには開発者トークンの取得と、操作したいSmatrplugのデバイスIDが必要です。
1. SwitchBotアプリを起動→プロフィール→設定
2. アプリバージョンを10回タップ
3. 開発者向けオプションが表示されるのでタップ
4. 表示される開発者トークンをコピーする
5. APIから操作するために、SwitchBotの設定から「クラウドサービス」をオンにする
6. 操作したいSmatrplugのデバイスIDの取得
デバイスIDは下記のcurlコマンドで取得できます。
今回はツリー電源のSmrartplugのデバイスIDを取得します。

```
$ curl -X GET "https://api.switch-bot.com/v1.0/devices"  -H "Authorization:<開発者トークン>" | python -c 'import sys,json;print json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False)'
```
[実行例]

```
{
    "body": {
        "deviceList": [
            {
                "deviceName": "ツリー電源", 
                "hubDeviceId": "xxxxxxxxx", 
                "deviceType": "Plug", 
                "deviceId": "xxxxxxxx", <=　この値をメモ
                "enableCloudService": true
            }, 
            {
                "deviceName": "温湿度計 書斎", 
                "hubDeviceId": "xxxxxxxx", 
                "deviceType": "Meter", 
                "deviceId": "xxxxxxxx"
            }, 

```

# 終わりに
MT20開閉センサーは、企業では機密情報が保管されている部屋や倉庫へのアクセス管理、医療現場においてはCOVID-19のワクチン管理などのユースケースが考えられます。APIを利用することで既存のシステムと連携させることができるので応用範囲は広そうです。
今回は非常に特殊な用途で使いましたが（笑）、家庭においては次は自宅の防犯や春から小学生になる子供の帰宅検知などに応用してみたいなと思っています。
最後まで読んでいただきありがとうございました。皆様良い年末年始をお過ごしください。


# 免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。