GoogleHome x IFTTT で、寝る前にかかとにクリームを塗る！

(2018.5.13 "Raspberry Piをインターネットからアクセスできるようにする"のところのngrokのクライアントインストール方法の書き方が雑だったので、丁寧にしました。）

[スマートスピーカーIFTTT 大喜利 アドベントカレンダー](https://qiita.com/advent-calendar/2017/ssifttt)5日目です。

この間、友人とスーパー銭湯に行ったら、「かかとにクリームを45日連続塗ったところ、この時期にありえないくらいスベスベである」というのです。

**仕事できておしゃれで美人のうえ、しなくて充分なのに最近筋トレでダイエットもし、さらに猫も飼っているという完璧超人の上に、**

　
**＿人人人人人人人人 人人人人人人人人人＿**
**＞  冬なのにかかとがスベスベだと！！！  　＜**
**￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣**
　

じぶんも早速塗らなければ！
しかし立ちはだかる三日坊主という病の壁。。。うう
そこでイフトですよ！

今回のは力作です。
本来12/5の0時に更新するはずが、12/5 23時更新になってしまいましたが、仕方ないのです！


# やりたいこと

- タイトル：かかとクリーム塗りわすれリマインダー
- 内容：毎日夜11時になると「かかとにクリーム塗った？」とGoogle Homeが教えてくれる
- システム構成： 
 - IFTTT
 - Ngrok
 - Raspberry Pi3
 - Google Home Mini
 

# 作り方

## Raspberry Pi3のセットアップ
OSインストール / wi-fi接続 /ssh接続 が済んでるものを使用します。

- node, npm の最新版インストール
 - →以前やってあったのでスルー


- Macのターミナルからsshでラズパイに接続し、[google-home-notifier](https://github.com/noelportugal/google-home-notifier)からzipをダウンロードする


```
$ ssh pi@192.168.自分の家のラズパイのIP
$ cd Documents
$ mkdir GoogleHome
$ cd GoogleHome
$ git clone https://github.com/noelportugal/google-home-notifier
$ cd google-home-notifier
```

- npmでgoogle-home-notifierをインストールと、nodejsの最新版のインストール

```
$ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
$ sudo apt-get install nodejs
$ sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
$ pwd
/home/pi/Documents/GoogleHome/google-home-notifier
$ npm install
```

## Raspberry Piをインターネットからアクセスできるようにする
参考）[ngrokでRaspberry Piのデスクトップをインタネットに公開](https://qiita.com/jerrywdlee/items/6d89eb2170c16c05dd9b)

- Ngrokクライアントをラズパイにインストール
 - http://ngrok.com/download で「LinuxARM」を選択してダウンロード

```
$ cd /home/pi/Documents/GoogleHome/google-home-notifier/
$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
$ unzip ngrok-stable-linux-arm.zip
 ```
ngrokというディレクトリができる。


- 続けてNgrokのサイトでアカウント登録。
 - https://dashboard.ngrok.com/get-started
 - 無料コースで良い。
 - トークンが発行されるのでコピーする。
 - （二回目以降のアクセスの際は、）Dashboard > Auth ＞ Your Tunnerl Authtoken で閲覧できるのでコピーする。


```
$ cd /home/pi/Documents/GoogleHome/google-home-notifier/
$ ./ngrok authtoken xxxxxxxxxxxxxxxxx（発行されたトークンを入れる）
$ ./ngrok http 8091
```
80ではなく、google-home-notifierに合わせて8091を指定するのがポイント。
これでngrokのリスナーが起動した。以下のような画面が表示される。

![スクリーンショット 2017-12-05 21.07.27.png](https://qiita-image-store.s3.amazonaws.com/0/173392/9b341860-9c4c-d660-d369-947fb2b06b51.png)

「http://f2bca69c.ngrok.io」 のところが、自分のラズパイにインストールしたngrokクライアントに割り当てられたサブドメイン。
ngrokジョブをctrl+cで停止して起動するたびに新しいものが発行されるので、この記事が公開されるときにはもうこの世から消えてます。ひひひ。


- Macでもう一枚ターミナルを開いてラズパイにssh接続し、google-home-notifierを起動する

```
$ ssh pi@192.168.自分の家のラズパイのIP
$ cd /home/pi/Documents/GoogleHome/google-home-notifier
$ node example.js

Endpoints:
    http://192.168.0.20:8091/google-home-notifier
    undefined/google-home-notifier
GET example:
curl -X GET undefined/google-home-notifier?text=Hello+Google+Home
POST example:
curl -X POST -d "text=Hello Google Home" undefined/google-home-notifier
```
このコンソールを開いておきます。受け取ったアクセスの変数が見れます。
終了するときはctrl+c。
もちろん末尾に&をつけてバックグラウンド実行しても良い。

```
$ node example.js&
```

## Google Homeを外から叩いて喋らす

- Macでもう一枚ターミナルを開いて、example.jsが表示してくれたサンプルコマンドに、ngrokが発行したサブドメインをつけてリクエストする。

```
curl -X GET http://f2bca69c.ngrok.io/google-home-notifier?text=Hello+Google+Home

curl -X GET http://f2bca69c.ngrok.io/google-home-notifier?text=kakatoni+cream+nutta??
```
Google Homeが喋った！！！
でも声がいつものGoogleHomeじゃない！(^^;) ナンジャコリャー！

Hello+Google+Home
https://youtu.be/CK6iNfuCAeE

kakatoni+cream+nutta??
https://youtu.be/q11_681-a3I


以前買った中華Bluetoothスピーカーの起動音声に似てるというか。。
https://youtu.be/HtM5n1nrv5M

めちゃめちゃなまってるなぁ。インド風？

## IFTTTを作る

ここまでで力尽きたので、イフトは最低限にしておきます！

### 概要
名前：毎日決まった時間に、GoogleHomeにリマインダーを喋ってもらう
URL：非公開
使ったもの：Date & time, Webhooks
言語：特に指定なし。


![スクリーンショット 2017-12-05 22.39.59.png](https://qiita-image-store.s3.amazonaws.com/0/173392/78d8666e-1010-d2fe-901a-9799ee0662b5.png)
![スクリーンショット 2017-12-05 22.40.15.png](https://qiita-image-store.s3.amazonaws.com/0/173392/d1b13c30-86f6-7ce9-87af-d45e963f3bc6.png)

### IF

- Trigger：Date & time , "Every day at"
- 11 PM 
- 00 Minutes を指定。

### then

- Action: Webhooks "Make a web request"
- URL:[Chosen by user] 
 - http://xxxxx.ngrok.io/google-home-notifier
- Method:[Hidden from user] 
 - POST
- Content Type:[Hidden from user]
 - application/x-www-form-urlencoded
- Body:[Chosen by user] 
 - text=”Did you put cream on your heel?"


時間ぴったりに、
**ポヨヨン Did you  put cream on your heel?**
と喋って教えてくれました！！

やったー

これでかかとスベスベになったるでー


# 課題

- 日本語で喋らせたい。
- 再起動するたびにサブドメインが変わってしまうngrokでは長く使えない。URLを固定にした上で、セキュリティ的にも忖度したい。


以上です！

<img width=300 src="https://qiita-image-store.s3.amazonaws.com/0/173392/4e401366-baf9-f358-560f-cfcb061ed037.jpeg">