Raspberry Pi 2 でエアコン操作(slack&hubot編)
前回に続いて、Raspberry Pi 2を使って自宅のエアコンを操作する仕組みを構築していく。
今回はslackとhubotを連携させて外部からエアコンを操作するようにする。
Raspberry Pi 2にhubotをインストールする
Raspberry Pi 2にhubotをインストールしていく。
$ mkdir homebot $ cd homebot $ sudo npm install -g hubot coffee-script yo generator-hubot
インストール後、yoでhubotを作成する。
$ yo hubot
色々聞かれるので適当に入力すればいいと思うが、 今回はslackを使うので、bot adapter: には slack と入力する。
普通にhubotをインストールすると、デフォルトでhubot-heroku-keepalive が有効になっているが、今回は Raspberry Pi 2 で動かす為、不要なのでアンインストールする。
$ npm uninstall hubot-heroku-keepalive --save
external-scripts.json からも "hubot-heroku-keepalive" を削除する。
また、今回はデータを永続化する必要がないので "hubot-redis-brain" も削除した。
これはお好みで。
slackとhubotの連携
slack側のhubot設定
slackのクライアントでもwebページでもいいので、 [Menu] -> [Integrations] -> All Integrations の hubot の [view] ボタンを押す。
hubotのユーザー名を入力して[Add Hubot Integration]を押す
[Add Hubot Integration]を押すと設定画面に移行する。
HUBOT_SLACK_TOKEN=xoxb-********* をコピーしておく。
Raspberry Pi 2側の設定
Raspberry Pi 2に戻り、bin/hubot に先ほどのHUBOT_SLACK_TOKENを追加する。
$ vim bin/hubot
export HUBOT_SLACK_TOKEN=xoxb-******
設定を保存したら、hubotを起動して動作確認する。
bin/hubot -a slack
slackの#generalチャンネルに作成したbotがログインしてきたら連携は成功している。
ping と打って PONG と返事が返ってきたら正常に動作しているので、一旦hubotをCTRL-Cで止める。
hubotに独自コマンドを追加する
独自コマンドを追加する為、scripts/以下にスクリプトを新規作成する。
頭の方のコメントのDescription:を書かないとhubot起動時に警告が出る。
# Description: # 自宅のエアコンを操作する # 外部コマンドを呼ぶためのライブラリ child_process = require 'child_process' # コマンドを受け付けるユーザーのID(ユーザー名ではない) user_id_list = [ 'ユーザーID' ] # エアコン操作関数 aircon = (command, success, msg) -> if msg.message.user.id in user_id_list child_process.exec "irsend SEND_ONCE aircon #{command}", (error, stdout, stderr) -> if !error msg.reply "#{success}" else msg.reply "#{error}" else msg.reply 'ご主人様以外のお方からのご命令はお受けできません' module.exports = (robot) -> robot.respond /airon/i, (msg) -> aircon('on', 'エアコンのスイッチを入れました', msg) robot.respond /airoff/i, (msg) -> aircon('off', 'エアコンのスイッチを切りました', msg) robot.respond /cooler/i, (msg) -> aircon('cooler28', 'お部屋、冷やしておきますね', msg) robot.respond /heater/i, (msg) -> aircon('heater26', 'お部屋、暖めておきますね', msg)
他人にエアコンを操作されると困るので、特定のユーザーIDからのリクエストのみ受け付けるようにした。
管理画面などから自分のユーザーIDの調べ方がわからなかったので、リクエストを受け取ってログに出して確認した…。
スクリプトを作成したら、もう一度hubotを起動する。
bin/hubot -a slack
先ほど追加したコマンドをhubotに送る。
エアコンが起動したら成功!
まとめ
チャットでbotにお願いして自宅のエアコンの電源を入れてもらうのは、自宅に執事がいるみたいでとてもワクワクする。
今後の予定としては、Raspberry Pi 2に温度センサを付けて、自宅の室温を教えてもらったり、冷房にするか暖房にするか自動で判断するようにしてみたい。