IFTTTでTypetalkとGoogle homeの連携

三が日開けゴミ捨てを忘れる管理人。
あっという間にゴミ屋敷。悲しすぎます。

 

前回TypetalkとRaspberryPiを連携して、botの動作確認をしました。

it-keynotes.hatenablog.jp

 

本日はIFTTTでTypetalkとGoogle Home を連携して音声コマンドで家電を操作できるようにしたいと思います。

 

 

動作確認用のスクリプト

動作確認用のスクリプトは以下のような感じです。はっきり言ってイケているスクリプトではないですが、動作確認用なので許してください。本職はインフラエンジニアなので、スクリプトは適当なんですよね。

編集ファイル:/home/【ユーザディレクトリ】/hubot/scripts/example.coffee

module.exports = (robot) ->

 

# 暖房オン
robot.hear /heater on/i,(msg) ->
@exec = require('child_process').exec
command = "sudo /home/pi/bto_ir_advanced_cmd/bto_advanced_USBIR_cmd -d `cat /home/pi/bto_ir_advanced_cmd/aircon/heateron.txt`"

msg.send "Command: #{command}"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?

 

# 冷房オン
robot.hear /cooler on/i,(msg) ->
@exec = require('child_process').exec
command = "sudo /home/pi/bto_ir_advanced_cmd/bto_advanced_USBIR_cmd -d `cat /home/pi/bto_ir_advanced_cmd/aircon/cooleron.txt`"

msg.send "Command: #{command}"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?


# エアコンオフ
robot.hear /aircon off/i,(msg) ->
@exec = require('child_process').exec
command = "sudo /home/pi/bto_ir_advanced_cmd/bto_advanced_USBIR_cmd -d `cat /home/pi/bto_ir_advanced_cmd/aircon/airconoff.txt`"

msg.send "Command: #{command}"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?

 

エアコンオフを例にすると、robot.hear /aircon off/i,(msg)の"aircon off"の部分が家電操作のトリガーです。

前回の動作確認の際には”@homebot hello”と打ちましたが、エアコンの電源を切りたいときは”@homebot aircon off”とtypetalkに打ち込めばエアコンがオフになるようになっています。

ちなみに、家電操作、元いい、赤外線送信の用の本体はcommand = "sudo..."と記載してある部分です。

コマンドの使い方については以下の記事に記載してあります。普通のLinuxコマンドなので赤外線操作以外も扱えます。

it-keynotes.hatenablog.jp

 

前回のおさらい-構成図-

Gogle Home Mini 

→ IFTTT

→ Typetalk 

→ RaspberryPi(赤外線モジュール)

→ 家電

 本日実装するところは赤くしてあることろです。

Google home に”OK、Google。暖房をつけて”というとTypeTalkに”@homebot heater on”が送信されるようにします。

 

Gogle Homeのセットアップ

アンドロイドユーザーならGogle Home用のアプリがPlayストアからダウンロードできます。セットアップはアプリの指示に従えば、難しいことはありませんので割愛します。

 

Typetalk の設定

 Typetalkのアプリ、もしくはブラウザでアクセスしてbotを作成します。

botを作成したいトピックを開き、上部の”...”→”トピック設定”をクリックします。

f:id:purt:20190104095908p:plain

 ”ボット”→”新規作成”をクリック。

f:id:purt:20190104100018p:plain

"ID"を入力します。名前は自動で入力されます。入力後は作成をクリック。

f:id:purt:20190104100119p:plain

作成が完了するとトークンが発行されます。次のIFTTTの設定で、”メッセージの取得と投稿のURL”を使用します。

f:id:purt:20190104100249p:plain

 

IFTTTの設定

以下のサイトへアクセスしてアカウントを持っていない場合は新規作成します。Google HomeのセットアップでGoogleアカウントがあるはずなので、そちらでログインしてもいいです。

ifttt.com

 

ログイン出来たら、メニューバーの"My Applets"→"New Applets"をクリックします。

f:id:purt:20190103235412p:plain

”+this”をクリックします。

f:id:purt:20190104001125p:plain

google assistant”を検索して、選択。

f:id:purt:20190104001159p:plain

"Say a simple phrase"を選択。

f:id:purt:20190104001259p:plain

以下のように設定。任意の部分は入力しなくてもよいです。

"What do you want to say?"→Google Homeに命令するフレーズ

"What's another way to say it?"→Google Homeに命令するフレーズその2(任意)

"And another way?"→Google Homeに命令するフレーズその3(任意)

"What do you want the Assistants to say in response?"→Google Homeの返答

"Language"→Japanese

 

f:id:purt:20190104001332p:plain

"+that"をクリック。

f:id:purt:20190104002140p:plain


"webhooks"を入力し、選択する。

f:id:purt:20190104002209p:plain

以下のように設定。

URL→Typetalk の設定の設定で取得したbotの”メッセージの取得と投稿のURL”

Method→"POST"

Content Type→"application/x-www-form/urlencoded"

Body→"message=@hostbot heater on"

 

f:id:purt:20190104002239p:plain

"Finish"をクリック。

f:id:purt:20190104002716p:plain


動作確認

”OK、Google。暖房をつけて”といいましょう。そしたら、Typetalk側に、”@hostbot heater on”というメッセージが送信されるはずです。

ラズパイとTypetalkの連携が完了していれば、冒頭のスクリプト+赤外線モジュールの設定が完了していれば、エアコンが作動します。

 

課題

前回の設定の話なのですが、hubotが1時間で認証エラーになります。おそらくトークンの有効期限が1時間なのでしょう。リフレッシュしたいのですが、やり方がわかりません。

仕方ないので、cronで30分ごとに再起動をしています。とてつもなくイケてないので、どうにかしたいんですけど、何かいい方法ないですかね。