普通に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のセットアップ
- [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の方でも大丈夫。
[1] IFTTTからGoogleAssistant⇒GoogleSpreadSheetでタスク名を書き込む
レシピ作成
Discover IFTTT and Applets - IFTTT
アクセス、ログイン後、My Applets > New Appletで新しいレシピを作成
「this」は「Goole Assistant」を選択。
トリガー内容は「Say a phrase with a text ingredient」を選択。
参考:【日本語】IFTTT(イフト)で使える「Google Assistant」の解説|Google Homeに利用可能!
こんな感じで入れる。
因みに
・「$」の前後には半角スペースを入れる。
・命令文の最初に「 $ 」は入れない(「 $ 実行予約」等はNG)
のルールを守る。
「that」は「Google Sheet」を選択。
アクション内容は「Add row to spreadsheet」を選択
参考:【日本語】IFTTT(イフト)で使える「Google Sheets」アクションの解説
こんな感じで入れる。
一旦テスト
GoogleHomeに直接喋らなくても、GooogleAssistantアプリから命令可。
GoogleDriveに「IFTTT」とフォルダと「cue」というシートが作られ、B1セルに入力が出来ていればテスト成功。
GASでシートの自動編集
このB1に入力されたフレーズをRaspberrypiにそのまま受け取らせてもよいが、
後々の管理のし易さを考え、GASを使って自動で書き換えさせるようにする。
ツール>スクリプトエディタ
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)
}
↑をそのままコピペして保存。
名前は適当に。
トリガーのボタン(虫眼鏡と時計みたいなの)を押下。
実行:input
イベント:スプレッドシートから、値の変更
を選択して保存。承認許可。
SpreadSheetに戻り、「シート2」を作成。
作成したシートに画像の様な感じで入力。
「シート1」のB1セルを弄るとA1、C1、D1セルに自動入力される。
味気ないのでヘッダー行も追加。この時A2セルを「2」にして、必ず上から連番になるようにする。
テスト
ちゃんと入った。成功。