google スマートホーム

IFTTT+Slack+HubotでGoogle Homeとおしゃべりができるようにする[Windows10]

更新日:

スポンサードリンク

はじめに

前回「[Windows10]Google Homeに指定の言葉をしゃべらせる+音楽(mp3)を再生させる」でGoogle Homeをしゃべらせていて思ったのですが、何かしらのタイミングでしゃべらせることはできても、しゃべった内容に応じてGoogle Homeに返答させることができないということに気が付きました。

Google Homeで実現できなくてもIFTTTがあるじゃないかと思うかもしれませんが、自宅内に置いてあるGoogle HomeやローカルのPCへどのようにアクセスさせるのかという課題があります。

google-home-notifierのサンプルではngrokというローカルネットワークを外部につないでくれるサービスを使っていますが、ネットワーク自体を外部に公開するようなのでセキュリティ的に多少不安という理由でこれを使うのは見送りました

しかし、大変便利なサービスのようなので折をみて使ってみたいと思っています。下記サイト様が参考になると思います。

そこで、今回はHubotというGitHub社が作っているボットを使うことにしました。このBotは各種チャットサービスと連携してオリジナルの自動Botを作成することができるという優れもので、メッセージの返答だけでなく、HTTPリクエストを投げたり、スクリプトを動かしたりということができるソフトです。

IFTTTと連携可能なチャットツールのSlackを使って、IFTTTから投稿されたメッセージにHubotを反応させてGoogle Homeをしゃべらせるスクリプトを動かすという算段にしました。

図の中のSlackの個所は前回同様にWindows10パソコンで動かすことにします。

Slackの準備

Slackの公式からソフトをダウンロードしてきてインストールします。

特に難しいことは無いと思うので省略します。

Hubotの準備

Hubotのインストール

コマンドプロンプトを立ち上げてインストールしていきます。公式のドキュメント通りにインストールしていけば大丈夫だと思うのでこちらも省略します。

私の場合はHubotには「myhubot」と名付けました。インストールが完了するとロボットのアスキーアートが出てきます。最後に名前などを聞かれますが、最後のBot adapterにはslackと答えておきます

コマンドプロンプトでHubotフォルダに移動して「bin\hubot」と打てばしばらくしたのちにHubotが起動して応答待ちになります。
「myhubot ping」と打って「PONG」と返事をしてくれれば問題なくインストールできています

SlackでHubotの連携

SlackとHubotを連携するにはSlack上でHubotのアプリをインストールする必要があります。

設定を追加したらAPIトークンが取得できます。この値はコピペなどで控えておいてください。

ここのセットアップの手順にも書いてありますが、このHUBOT_SLACK_TOKENは環境変数に設定してください
環境変数の設定はシステムから設定できますが、コマンドプロンプトからも設定できるので今回はHubotの起動も含めてすべてバッチファイルでやろうと思います。これらは後述します。

そして、今しがた追加したHubotアプリを指定のチャンネルに追加します。自分は「googlehome」というチャンネルを作り、そこにHubotを追加しました。今後はこのチャンネルに投稿していくことにします。

SlackでHubotの応答テスト

Hubotインストール時に試したPing→PongをSlack内で実施します。コマンドプロンプトでHubotを立ち上げるときに「bin\hubot --adapter slack」と打ち込んでください。これでslack側での応答待ち状態になります。

入力欄に「myhubot ping」を入れてCtrl+Enter、もしくは投稿ボタンをクリックします。

このようにHubotが「PONG」と言ってくれれば成功です。

SlackでHubotの自動応答スクリプト作成

hubotフォルダのscriptsフォルダ内にあるexample.coffeeにスクリプトを追加して任意のワードに応答するボットを作ります。

module.exports = (robot) ->
  robot.respond /sample/i, (res) ->
    res.send "hello world!"

「sample」と言ったら「hello world!」と応答するだけのものです。一旦Ctrl+CなどでHubotを止めて、もう一度Hubotを立ち上げてください。

そして、以下をSlackに投稿します。

myhubot sample

このように応答しました。

「hello world!」と返事をしてくれれば成功です。
coffeescriptのTipsは下記サイト様などで紹介されているため参考にしてください。

Hubotで外部ファイル起動

先ほどのサイト様を参考にして、指定のバッチファイルを起動させるようにしました。

module.exports = (robot) ->
  robot.respond /sample/i, (res) ->
    res.send "hello world!"
  robot.respond /lighton/i, (res) ->
    request = robot.http("https://maker.ifttt.com/trigger/{{ イベント名 }}/with/key/{{ 自分のキー }}").get()
    request (err, res, body) ->
      res.send "event"
  robot.respond /bat/i, (res) ->
    child_process = require('child_process')
    child_process.exec 'C:\\Users\\{{ユーザ名}}\\google-home-notifier\\bat\\sample.bat', (error, stdout, stderr) ->
      msg.send(stdout)
      msg.send(stderr)
      msg.send(error)

一番下のbatというワードを拾う箇所です。バッチファイルは前回「[Windows10]Google Homeに指定の言葉をしゃべらせる+音楽(mp3)を再生させる」で作った「12時です」とGoogle Homeがしゃべるバッチファイルです。

キーワードは何でもいいのですが試しに「bat」にしました。

myhubot bat

うまくいけば「12時です」としゃべってくれます。

また、今回とは直接関係は無いですが、上記のスクリプトに「lighton」のワードを拾う箇所があると思います。こちらはIFTTTのWebHooksに投げるための記述で、例えば部屋の電気をつけるWebHooksを想定しています。なのでIFTTTでWebHooksをトリガーとしているものをこのSlack+Hubot経由で動かすこともできます

もし実際にこの方法で照明だけでなくエアコンやテレビ等を操作したい場合は、ネット経由で操作できるリモコンが必要です。「SwitchBot Hub Plus + SwitchBot温度湿度計でエアコンを自動操作する」などでも紹介しましたが、SwtichBot Hub PlusなどのIFTTT対応のスマートホーム用リモコンを準備してください。

Hubotの自動起動設定

Hubotの自動起動用バッチファイルを作成します。
setで環境変数を設定したのちに、hubotをインストールしたフォルダへ移動してslackのアダプターとして起動します。トークンやパスは自分のものに書き換えてください。

hubot.bat

set HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxx
cd C:\Users\{{ ユーザ名 }}\myhubot
bin\hubot --adapter slack

そして、バッチファイルとして保存したらこれをスタートアップとして起動させるようにします。このショートカットを作成して以下のスタートアップフォルダに保存してください。

C:\Users\{{ ユーザー名 }}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

再起動して自動で立ち上がればOKです。

IFTTTとSlack+Hubotの連携

IFTTTでGoogle AssistantのトリガーとSlackのアクションを作ります。

IFTTTのつくり方は前回「Google Home+SwitchBot Hub Plusで自宅をスマートホーム化」で触れたので詳細は省略します。

slackのアクションは「post to channel」を選びます。選ぶといってもこれしかないです。

そしてチャンネルとメッセージを入力します。メッセージにはHubotを動かすフレーズを入れてください。
Google Homeに指定したワードをしゃべりかけてうまく動くとSlackにIFTTTからメッセージが届きます。これがHubotが反応するワードだとちゃんと反応してくれているのがわかると思います。

この例ではHello Worldにしましたが、Google Homeをしゃべらせられるバッチファイルやフレーズに差し替えればOKです。
自分はこれでGoogle Homeにしゃべらせたり、音楽を再生させたりしました。

まとめ

Slack + Hubot + IFTTTでGoogle Homeを何とかしゃべらせることができました。
おしゃべりといっても特定のフレーズへの応答という形なのでもう少し汎用的におしゃべりさせるには工夫が必要です。

スポンサードリンク

-google, スマートホーム

Copyright© めめんと , 2019 All Rights Reserved Powered by AFFINGER5.