MESHのイベントを、IFTTTのWebhooks経由でSlackに通知する。




以前、Amazon Dash Button のハックって件で[ボタンを押したらSlackに通知が来る](https://qiita.com/masatomix/items/87d0d5f72668d9c76089)ってのを記事にしました。そのボタンはいま、子供が帰ってきたら通知がくるボタンとして安定的に機能しています。

さて今回は SONYの電子ブロックである[MESH](http://meshprj.com/jp/)を用いて、家の鍵が開け閉めされたらSlackに通知が来るってのを作ったのですが、そのときのメモを纏めておきます。


# 構成

構成はこんな感じ。
![MESH_IFTTT.png](https://qiita-image-store.s3.amazonaws.com/0/73777/27769a93-241e-f20a-2567-543c4191cc3e.png "MESH_IFTTT.png")


家のLAN上のラズパイに MESHハブをインストールし、動きタグの動きを検知したら[IFTTT](https://ifttt.com/)へイベントIDを送信。IFTTTはそれをトリガーに、IFTTTのWebHook機能をつかって[Slack](https://slack.com/) のIncoming Webhooks を呼び出し、Slackに通知することにしました。


必要なモノは

- [Sony MESH 動きタグ(Move) MESH-100AC](https://amzn.to/2ADvXtw)
- [Raspberry Pi 3 Model B](https://amzn.to/2OcHKB3) ←これは必須でなくて、iPadなどMESHが動くものならOK


など、またアプリ関連の前提としては、

- MESHアプリで動きタグが認識されてること
- MESHからIFTTTが認識されてること
- Slack の Incoming Webhooks が定義されていること。

などですかね。


# 動きタグの向きが変わったら、Slackに通知が来るようにする

実際動かすとこんな感じ。

[![ビデオが開けなかった場合に表示されるテキスト](http://img.youtube.com/vi/9iTQlRVLpBU/0.jpg)](https://youtu.be/9iTQlRVLpBU)

- 動きタグをおこしたら「鍵が開けられました。」
- 動きタグを倒したら「鍵がかけられました。」

って、Slackに通知が来るようにしました。さいごに、この動きタグを家のサムターンキーなどにつけておけばOKです。

サムターンキーを回して鍵を開けると、動きタグが起きて「鍵が開けられました」とSlackに通知、鍵を閉めると、動きタグが倒れて「鍵がかけられました」とSlackに通知されます。

# MESHレシピの設定
MESHレシピは単純です。

動きタグをドラッグアンドドロップして「向きが変わったら」の上下表裏4つを設定。(下記のキャプチャは「上」を選択している図)

![IMG_3964.png](https://qiita-image-store.s3.amazonaws.com/0/73777/c72612ad-2c91-d70a-7c17-f8022b0964ec.png "IMG_3964.png")

上と下は、IFTTTにイベントID:entrance でテキストを「鍵が開けられました。」とします。
![IMG_3965.png](https://qiita-image-store.s3.amazonaws.com/0/73777/74189ceb-9749-45f0-ba21-e9352c43ed60.png "IMG_3965.png")

表と裏も、IFTTTにイベントID:entrance で、テキストをこんどは「鍵がかけられました。」としました。

最終的に作成されたレシピは下記のような感じです。


![IMG_3966.png](https://qiita-image-store.s3.amazonaws.com/0/73777/e8a0c9ab-85d0-2a5f-9ddc-63a7ece5f053.png "IMG_3966.png")


これで、動きタグが動いたときに、IFTTTへイベントIDとテキスト情報が送信されるようになりました。


# IFTTT の設定。

IFTTT側は、this を MESHのサービスにしてイベントIDとテキストを受信し、thatはWebhooksにします。

具体的には下記の通りです。

## this の設定

さて、IFTTT側です。右上のアイコン部分から New Applet を選択し、下記のthisアイコンを選択
![IMG_3967.png](https://qiita-image-store.s3.amazonaws.com/0/73777/e5b0e3c6-e6bd-afa6-1138-59b6e527c556.png "IMG_3967.png")

this には MESHを選択します。

![IMG_3968.png](https://qiita-image-store.s3.amazonaws.com/0/73777/fd6c3b62-8060-78f1-affa-efbc94ac9ec1.png "IMG_3968.png")

さて作成する際には受信待ちするイベント名を指定しますが、その値は先ほどの entrance を指定しておきます。
![IMG_3969.png](https://qiita-image-store.s3.amazonaws.com/0/73777/12b23e00-8002-06d2-d1db-61c7930c4bcd.png "IMG_3969.png")




以上で thisの設定はおしまいです。MESHからのリクエストを待ち受ける側が完成しました。


## thatの設定
つづいてthatの設定つまり、Webhooksを設定していきます。


![IMG_3970.png](https://qiita-image-store.s3.amazonaws.com/0/73777/7eb78ca4-d050-de2a-e6a8-ebe294f8794e.png "IMG_3970.png")

Webhooksを検索して、、
![IMG_3971.png](https://qiita-image-store.s3.amazonaws.com/0/73777/21f347b5-9f49-3d8f-e22b-577a34d6c79f.png "IMG_3971.png")



まず名称はまあなんでもイイんですが、下記のように、あとから見て何をやってるのか分かるようなモノにしておきます。

![IMG_3972.png](https://qiita-image-store.s3.amazonaws.com/0/73777/71352b79-59d2-cc31-7050-37b6218ca14d.png "IMG_3972.png")

つぎに、SlackのIncoming Webhooksを呼び出すときのパラメタを指定します。
![IMG_3973.png](https://qiita-image-store.s3.amazonaws.com/0/73777/52c6183c-b56b-7ecf-3144-f16beb9ffff5.png "IMG_3973.png")


最後にPOSTするBody部ですが、Slackにながすメッセージには、{{Text}} という文字列を渡しています。これはMESHアプリから登ってくるテキスト情報のことを指しています。「鍵が開けられました。」とか「鍵がかけられました。」のことですね。


![IMG_3974.png](https://qiita-image-store.s3.amazonaws.com/0/73777/6e8a59f3-8f33-87aa-94d6-833a8a18cd83.png "IMG_3974.png")

{{Text}}はフォーカスが外れると、なんかこうプレースホルダされますよ、みたいなアイコンに変わります。

最後にSaveをクリックして完成です。

![IMG_3975.png](https://qiita-image-store.s3.amazonaws.com/0/73777/e13bcd45-0685-aa3c-19d3-357f6209b107.png "IMG_3975.png")


以上で設定完了です。


# 疎通確認する
ようやく疎通確認です。MESHの動きタグをおこしたり、倒したりして、Slackに通知が来るかを確認してみましょう。

また、IFTTTがイベントを受け取ったかは、上部メニューの「Activity」から確認できます。下記のように、該当するイベントが飛んできて、IFTTTが反応していることが確認出来ればOKです。

![IMG_3978.png](https://qiita-image-store.s3.amazonaws.com/0/73777/b0d11361-2414-48bd-c4b4-f5df7ce0cc43.png "IMG_3978.png")

この図は、WebhooksのURLを仮置きしてたため、404のエラーが出てますが、、、正常にいければOKです。。

# もいちど動画。
最後にさきの動画をも一度載せておきます。

[![ビデオが開けなかった場合に表示されるテキスト](http://img.youtube.com/vi/9iTQlRVLpBU/0.jpg)](https://youtu.be/9iTQlRVLpBU)


# MESHの使い勝手。
SlackへのPOSTについては、IFTTT の Slack連携を直接呼び出す機能もあって、それを呼び出すともっとシンプルだったのですが、多分その機能ってIFTTTアカウントにつき一つしか設定出来ないよーな気がするので、今回はWebhooks機能でSlackのIncoming Webhooksを呼び出しました。


まあ、前準備さえちゃんと整ってれば、MESHのタグ達(各種デバイス)から、Slack連携とかはあっという間に実装可能です。
MESH、可能性を感じますねー。。