LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-29

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

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

これでいける。

記事一覧

■用意するもの、使うツール

  • GoogleHome(mini可)
  • Raspberrypi3(ModelB)
  • RESTで実行したいツール(BizRoboを使用)
  • GoogleSpreadSheet

[0] Rasberrypiのセットアップ

参考:Raspbianのインストールと最強の初期設定 | 純規の暇人趣味ブログ
RaspbiaLiteを使った。
Desktopの方でも大丈夫。

処理済~rapture_20180529104901.jpg
入った。

[1] IFTTTからGoogleAssistant⇒GoogleSpreadSheetでタスク名を書き込む

レシピ作成

Discover IFTTT and Applets - IFTTT
アクセス、ログイン後、My Applets > New Appletで新しいレシピを作成

rapture_20180529120719.jpg

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

参考:【日本語】IFTTT(イフト)で使える「Google Assistant」の解説|Google Homeに利用可能!

rapture_20180529121011.jpg

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

rapture_20180529121558.jpg

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

参考:【日本語】IFTTT(イフト)で使える「Google Sheets」アクションの解説

rapture_20180529121903.jpg

こんな感じで入れる。

IMG_0602.jpeg

一旦テスト

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

rapture_20180529123053.jpg

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

GASでシートの自動編集

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

rapture_20180529123420.jpg

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

コード.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

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

image.png

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

image.png

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

image.png

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

テスト

image.png

ちゃんと入った。成功。

続く

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3