hubotでRaspberryPiとTypetalkの連携

忘年会も新年会も不参加。
ゆとり世代モンスターチルドレンこと管理人です。

 

前回、Amazon Echoと赤外線モジュールを用いてスマートホーム化を目指しましたが、思わぬところで躓きました。

IFTTTとの連携がUSドメインしかできません。日本語のヘルプページがあるのに意味が分かりません。

一応USアカウントを作成して、Echoを登録しなおせばいけるんですが、それはなんか違うと思うので、Echoとの連携はあきらめて、Google Homeに乗り換えようと思います。

it-keynotes.hatenablog.jp

 

 

前回紹介したときは以下のような構成でしたが、ちょっと変更します。ツールは変更していますが基本的な構成は同一なのでやることも一緒です。

旧構成

amazon echo(Alexa)

→ IFTTT

→ Chatwork

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

→ 家電

 新構成

Gogle Home Mini (new)

→ IFTTT

→ Typetalk (new)

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

→ 家電

新しくしたところはnewの文字をつけています。そして本日実装するところは赤くしてあることろです。

 

TypeTalkの設定

TypeTalkの設定は以下の記事を参考にしました。

下記リンクに詳しく書いてあるので、参考にしてください。

qiita.com

 

hubotのインストール

node.jsのインストール

node.jsをインストールします。

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash --

sudo apt-get install -y nodejs

以下のコマンドでnodejsのインストールされたことを確認する。バージョンが表示されていれば成功です。npmもインストールされていることを確認します。

 node -v

npm -v

 

hubotのインストール

sudo npm install -g coffee-script

sudo npm install -g yo generator-hubot

mkdir -p hubot

cd hubot

yo hubot

 

hubotをインストールする際に設定項目があるので以下のように入力します。

? Owner (User <user@example.com>) (何も入力せずにEnter)
? Bot name (hubot) (任意で指定。今回はhomebotとしておきます)※
? Description (A simple helpful robot for your Company) (何も入力せずにEnter)
? Bot adapter typetalk (typetalk仇アダプターを指定)

※作成したディレクトリ(今回はhubot)以外の名前をつけないとエラーになります。

 

次のコマンドで、hubotを開始できます。

./bin/hubot

起動が出来たら次のコマンドで応答確認を行っておきます。PONGと返ってきたら成功です。

(Bot nameでつけた名前) ping

例)今回の場合だと"homebot ping"

 

hubotをバックグラウンドで実行 
環境変数にPATHを追加

exportコマンドで一時的にpathを設定するのは現実的ではないのでprofileに追加しておきます。

sudo vim /etc/profile

HUBOT_TYPETALK_CLIENT_ID="XXXXX" (TypetalkのClient ID)
HUBOT_TYPETALK_CLIENT_SECRET="XXXXX" (TypetalkのClient Secret)
HUBOT_TYPETALK_ROOMS="XXXXX"※

※ブラウザからTypetalkにアクセスして、トピックのURLに末尾に記載されている数字。

https://typetalk.com/topics/XXXXX

末尾の数字をHUBOT_TYPETALK_ROOMSに設定する

再起動するかsourceコマンドでprofileを再読み込みします。

 

デーモン化

pingで応答が返ってくれば問題ないのですが、デーモン化すると私の環境だとping応答が返ってきません。しかし、動作確認用のスクリプトならきちんと動きますのでスクリプトを作ります。

スクリプトは冒頭のTypetalkの設定で紹介した記事からお借りします。

vim ~/hubot/scripts/example.coffee

スクリプトの中身は以下のようにします。

module.exports = (robot) ->
hello = ['Hi!',':smile:']

robot.hear /hello/i, (res) ->
res.send res.random hello

スクリプトの保存ができたら次のコマンドを実行し、hubotをバックグラウンドで実行します。

forever start -c coffee node_modules/.bin/hubot -a typetalk

上記のコマンドを実行し特にエラーが出ていなければ問題ないと思いますが、"forever list"コマンドでプロセスを確認しておきます。

 

この状態で、botにhelloと送ってみます。

@homebot hello

botから応答があれば成功です。

 

問題点・課題

原因はよくわかりませんが、接続断と再接続を繰り返します。これでは使いものになりません。

あんまり関係なさそうですが、起動する際にERROR hubot-heroku-keepalive included,...というエラーが出ています。

以下の記事を参考にエラーを解消しました。

qiita.com

hubotディレクトリにある"hubot-scripts.json"は削除。一応別のところに移動しておいてもいいかもしれません。

"external-scripts.json"はコピーしてバックアップを取っておきます。

cp external-scripts.json external-scripts.json_bk

その後ファイル内の、"hubot-heroku-keepalive"を削除して保存します。

とりあえずこれでエラーは消えました。

 

エラーは消えたのですが、接続断と再接続は相変わらず繰り返します。うーんなんだろね。とりあえず再接続が失敗するようなら対策しようと思います。