1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google home mini と slack とを連動させる

Posted at

やりたいこと

こういうのを自分でもやってみたい!

このページについて

やりたいことにも書きましたが、せっかくある Google home で、家族とやりとりしたい!と思ったので、その環境整備の備忘録です。例によって、これに類する記事はいっぱいあるんですが、微妙に古くて現状に合わないケースもあったので、書き起こしました。この記事も数ヶ月もすれば、古くなりますねー

使ったもの

  • 先人たちの共有知
  • Google home mini
  • Raspberry pi3 model B
  • slack
  • nodejs
    • npm
    • n
    • hubot
    • google-home-notifier

slack から Google home mini を喋らせる

ひとまず、slack から Raspberry Pi で動かす bot 経由で、Google home mini を喋らせるところまでを目指します。

nodejs 環境を整備

nをインストール

今回、Raspbian Buster を使っているので、nodejs の version 的には別段不満はないのですが、そのうち別のバージョンの nodejs をインストールしたくなるかもしれないので、ひとまず n をインストールします(n……ググラビリティが低い……)

$ sudo npm install -g n
sudo n stable

stable版の nodejs をインストール

$ sudo n stable

  installing : node-v10.16.3
       mkdir : /usr/local/n/versions/node/10.16.3
       fetch : https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-armv7l.tar.gz
   installed : v10.16.3 (with npm 6.9.0)

nodejsのversionを確認

$ node -v
v10.15.2

おっと、システム側の nodejs を参照してますね。消しておきましょう。

$ sudo apt purge -y nodejs npm

Bot作成環境の整備

yo と generator-hubot をインストール

$ sudo npm install -g yo generator-hubot

これ、sudo つけないと

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

みたいなエラーが出たんだけど、安易に sudo つけずに、

npmでpermission deniedになった時の対処法[mac]

の記事を参考に、npm config set prefix で回避した方がいいのかな?まぁ困ったらやり直す方向で。

slack から hubot を追加する。

hubot と slack を連携させるには、HUBOT_SLACK_TOKEN が必要となる。このため、slack の管理者メニューから、Manage appsに飛ぶ。

Manage apps

で、hubot を検索して追加します。

Search hubot app

bot の名前はさておき xoxb- から始まる HUBOT_SLACK_TOKEN を控えておきましょう。

bot の作成

google-home-notifier を使いたいので、先人の教えに従って、事前に

$ sudo apt-get install libnss-mdns libavahi-compat-libdnssd-dev

をインストールします。

$ mkdir -p ~/hubot/myhubot
$ cd ~/hubot/myhubot
$ npm install google-home-notifier --save
$ npm install multicast-dns --save

ここまでで

$ HUBOT_SLACK_TOKEN=xorb-ないしょ bin/hubot -a slack

して bot が動作することを確認しておきます。うまく動作すれば、bot がオンラインになるはずです。

bot online

google-home-notifier が動作するように微調整

発話させるまで、あと少し。このままだと、google-home-notifier が利用している google-tts-api が古いので、

get key failed from 

みたいなエラーが出て、うまく動きません。このため、最新版に上げます。

を見ると、最新版は 0.0.4

$ cd node_modules/google-home-notifier

このディレクトリにある package.json に

package.json
"google-tts-api": "https://github.com/darrencruse/google-tts/tarball/british-voice",

という行があるので、

"google-tts-api": "0.0.4"

と書き換えて

$ npm update google-tts-api

を実行。また、このままだと、mDNS がうまく動作せず、同一LAN上にいる Google home が検知できません。このため

google-home-notifierの「Error: getaddrinfo -3008」に対処する

を参考に

  • node_modules/mdns/lib/browser.js
  • node_modules/google-home-notifier/google-home-notifier.js

を書き換えておきます。このページには本当に助けられました。ありがとうございます!

あとは

scripts/example.coffee
# Description:
#
# Commands:
#   hubot say <content> - Say something via Google home.
#
home = require 'google-home-notifier'
lang = 'ja'
module.exports = (robot) ->
  robot.respond /say (.*)$/i, (msg) ->
      content = msg.match[1]
      home.device('', lang);
      home.notify(content, (res) => console.log('said '+ content));

こんなコード書けば動作するかと思います。

とりあえずこれで

hubot-work.png Google home が発話するところまではできました!

hubot を自動起動させる

Raspberry Pi を再起動しても動作するように、systemctl用のファイルを用意してやります。

/etc/systemd/system/hubot.service
[Unit]
After=network-online.target
Description = hubot for google home

[Service]
WorkingDirectory=/home/pi/hubot/myhubot
ExecStart=/home/pi/hubot/myhubot/bin/hubot -a slack
Restart=always
Type=simple
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

あと、 bin/hubot にも

export HUBOT_SLACK_TOKEN=xoxb-ないしょ

を追記しておきます。

これで

$ sudo systemctl daemon-reload
$ systemctl start hubot
$ systemctl enable hubot

とかしておけばOKなはず。

Google home mini から、slack に投稿

今度は逆方向。IFTTT が一番簡単そうなので、これで試してみます。基本的には

に書いてある通りですね。意外にも?ピッタリのレシピはなさそうなので、作っていきます。

IFTTTメニュー

Get more をクリックして表示される上記メニューから、ifThisThenThatをクリック。

ifThisThenThat

まずは、Thisから。クリックして、Google Assistant を選択。トリガーはいくつか選択できますが、ここでは Say a phrase with a text ingredient を選択します。

trigger

こんな感じでトリガーに内容を埋めていきいます。ちなみに

お父さんに 「$」って伝えたよ

は、実はNGで。$ の前後にスペースが必要とのこと。

お父さんに 「 $ 」って伝えたよ

に修正。で、

then this

で、投稿する slack の channel をしてして、メッセージを記載します。上の図だと分かりづらいですが、Message には

お父さん、「{{TextField}}」

と記載しています。このあたりも、上記のリンクに有る通りですね。

あとは実際に Google ホームに話しかけてみます。

実際に話してみる

実際に Google home に話しかけてみると……

slack と IFTTT のアプリに通知が来ました。

slackへの通知

slack への通知

IFTTTアプリからの通知

IFTTTアプリからの通知

最後に

で、子どもたちが使ってくれるかどうかはさておき、こんなこともできるんだよーというデモとしては面白いかな?

ただね……家のGoogle home は、ほとんど電源Off 、電源OnでもマイクOff にしてあるんだよねー日の目を見る日は来るのか。

1
5
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
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?