GoogleHomeからRESTを叩いて、実行結果を喋らせる[その0～1]

普通にRESTを叩くだけなのであれば、IFTTTからGoogleAssistantとWebhookをつなげる等
あるが、ロボットの実行環境が外部公開していないローカルサーバーなので、何かを間に噛ませる必要がある。
また、GoogleHomeには自身で通知を受け取って喋る機能が無いので、RESTを叩いただけ
では結果を喋ってくれない。

**[1] IFTTTからGoogleAssistant⇒GoogleSpreadSheetでタスク名を書き込む**
**[2] ローカルネットワークに繋いだRaspberrypiで[1]を受け取る**
**[3] Raspberrypiでそのまま[2]を叩く**
**[4] Raspberrypiで[3]の結果を受け取る**
**[5] Raspberrypiで[4]の結果をGoogleHomeに喋らせる**

これでいける。

# 記事一覧
 - [[0] Raspberrypiのセットアップ](https://qiita.com/sahksas/items/f35e8b96ca7a25e00a32#0-rasberrypi%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)
 - [[1] IFTTTからGoogleAssistant⇒GoogleSpreadSheetでタスク名を書き込む](https://qiita.com/sahksas/items/f35e8b96ca7a25e00a32#1-ifttt%E3%81%8B%E3%82%89googleassistantgooglespreadsheet%E3%81%A7%E3%82%BF%E3%82%B9%E3%82%AF%E5%90%8D%E3%82%92%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80)
 - [[2] ローカルネットワークに繋いだRaspberrypiで[1]を受け取る](https://qiita.com/sahksas/items/11944574ca3c24ba0193#2-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AB%E7%B9%8B%E3%81%84%E3%81%A0raspberrypi%E3%81%A71%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B)
 - [[3] Raspberrypiでそのまま[2]を叩く](https://qiita.com/sahksas/items/b7311b139048dd70b532#3-raspberrypi%E3%81%A7%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE2%E3%82%92%E5%8F%A9%E3%81%8F)
 - [[4] Raspberrypiで[3]の結果を受け取る](https://qiita.com/sahksas/items/b7311b139048dd70b532#4-raspberrypi%E3%81%A73%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B)
 - [[5] Raspberrypiで[4]の結果をGoogleHomeに喋らせる](https://qiita.com/sahksas/items/b7311b139048dd70b532#5-raspberrypi%E3%81%A74%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92googlehome%E3%81%AB%E5%96%8B%E3%82%89%E3%81%9B%E3%82%8B)


# ■用意するもの、使うツール
 - GoogleHome(mini可)
 - Raspberrypi3(ModelB)
 - RESTで実行したいツール(BizRoboを使用)
 - GoogleSpreadSheet

# [0] Rasberrypiのセットアップ
参考:[Raspbianのインストールと最強の初期設定 | 純規の暇人趣味ブログ](https://jyn.jp/raspbian-setup/)
RaspbiaLiteを使った。
Desktopの方でも大丈夫。

![処理済～rapture_20180529104901.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/4cba402f-b405-9e2f-492c-103aba7bfd25.jpeg)
入った。

# [1] IFTTTからGoogleAssistant⇒GoogleSpreadSheetでタスク名を書き込む
## レシピ作成
[Discover IFTTT and Applets - IFTTT](https://ifttt.com/discover)
アクセス、ログイン後、My Applets > New Appletで新しいレシピを作成

![rapture_20180529120719.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/8c15bbb7-5c33-610a-492b-fa3c84bbaa12.jpeg)

「this」は「Goole Assistant」を選択。
トリガー内容は「Say a phrase with a text ingredient」を選択。

参考:[【日本語】IFTTT(イフト)で使える「Google Assistant」の解説｜Google Homeに利用可能！](https://ifttt-japan.club/knowledge/this/google-assistant)

![rapture_20180529121011.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/f986d0d2-f1ac-6cb3-43ff-029eac96e699.jpeg)

こんな感じで入れる。
因みに
・「\$」の前後には半角スペースを入れる。
・命令文の最初に「 \$ 」は入れない(「 \$ 実行予約」等はNG)
のルールを守る。

![rapture_20180529121558.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/fe97083a-b318-eac9-aa33-c4b52b3078cd.jpeg)

「that」は「Google Sheet」を選択。
アクション内容は「Add row to spreadsheet」を選択

参考:[【日本語】IFTTT(イフト)で使える「Google Sheets」アクションの解説](https://ifttt-japan.club/knowledge/that/google-sheets)

![rapture_20180529121903.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/2635ec55-228e-7256-ffe8-c846f1ede26f.jpeg)

こんな感じで入れる。

<img width="375" alt="IMG_0602.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/69848/4e5fa6b6-9105-d0f3-efef-2bab2e01e381.jpeg">

一旦テスト

GoogleHomeに直接喋らなくても、GooogleAssistantアプリから命令可。

![rapture_20180529123053.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/0550d2b1-08f1-05c6-d670-b6d094e57026.jpeg)

GoogleDriveに「IFTTT」とフォルダと「cue」というシートが作られ、B1セルに入力が出来ていればテスト成功。

## GASでシートの自動編集
このB1に入力されたフレーズをRaspberrypiにそのまま受け取らせてもよいが、
後々の管理のし易さを考え、GASを使って自動で書き換えさせるようにする。

![rapture_20180529123420.jpg](https://qiita-image-store.s3.amazonaws.com/0/69848/a4f59040-a94e-afed-83da-c1112430b49b.jpeg)

ツール>スクリプトエディタ

```コード.gs
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getSheetByName("シート1");


function input() {
  setNumber(1);
  setFunction(3);
  setDate(4, "yyyy/M/d H:m:s");
  setExecutionTime(7);
}
//----------------------------------------------------

//番号入力
function setNumber(col) {
  var lastrow = sheet.getLastRow();
    if (sheet.getRange(lastrow, col).getValue() == "") 
      sheet.getRange(lastrow, col).setValue(lastrow);
}

//関数入力
function setFunction(col) {
  var lastrow = sheet.getLastRow();
    if (sheet.getRange(lastrow, col).getValue() == "") 
      sheet.getRange(lastrow, col).setValue("=IFERROR(VLOOKUP(B"+lastrow+",'シート2'!A:B,2,false),\"\")");
}

//日付入力
function setDate(col, format) {
  var lastrow = sheet.getLastRow();
  if (sheet.getRange(lastrow, col).getValue() == "") 
    sheet.getRange(lastrow, col).setValue(formatDate(new Date(), format));
}

//F列-E列の関数入力
function setExecutionTime(col) {
  var lastrow = sheet.getLastRow();
    if (sheet.getRange(lastrow, col).getValue() == "") 
      sheet.getRange(lastrow, col).setValue("=if(F"+lastrow+"<>\"\",(F"+lastrow+"-E"+lastrow+")*86400,\"\")");
}

//----------------------------------------------------
function formatDate(date, format) {
  return Utilities.formatDate(date, 'Asia/Tokyo', format)
}
```

↑をそのままコピペして保存。
名前は適当に。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69848/d9b591af-0f44-0db5-6081-d90687d4b5be.png)

トリガーのボタン(虫眼鏡と時計みたいなの)を押下。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69848/d16178f9-37e1-4d57-ee81-8699a70bbb23.png)

実行：input
イベント：スプレッドシートから、値の変更
を選択して保存。承認許可。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69848/033ff5a1-b28d-6a6e-c73c-234833026ab8.png)

SpreadSheetに戻り、「シート2」を作成。
作成したシートに画像の様な感じで入力。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69848/f0870bd3-2eb3-24f7-2198-4c784566cbe6.png)

「シート1」のB1セルを弄るとA1、C1、D1セルに自動入力される。
味気ないのでヘッダー行も追加。この時A2セルを「2」にして、必ず上から連番になるようにする。

## テスト
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69848/8628bb30-ab07-97d7-94dd-9bb0d4eccf64.png)

ちゃんと入った。成功。



[続く](https://qiita.com/sahksas/items/11944574ca3c24ba0193)