##皆さんいかがお過ごしですか
暑い日が続いていますね
私も仕事から帰宅すると部屋がめちゃくちゃ蒸されてて
部屋が冷えるまでそれなりに時間がかかっています
そこで、今回はリモートで部屋のエアコンをオンにするシステムを作成してみました!
##概要・構成
Slackにメッセージを送るとRaspberryPi上のHubotがシェルスクリプトを実行して
RaspberryPiにUSB接続した赤外線リモコンからエアコンのスイッチを入れるという構成です
工作などは不要になっております
##使ったもの
- RaspberryPi3
- BitTradeOne 赤外線リモコンアドバンス ADIR01P
##RaspberryPiの設定
こちら
##Node.jsとnpmのインストール
HubotをインストールするにはNode.jsとnpmが必要です
こちらを参考にさせて頂いてインストール
Node.js と npm インストールとアップデート
$ sudo apt install nodejs npm
$ sudo npm install -g n
$ sudo n latest
##Hubotのインストール
こちらを参考にさせて頂きインストール
SlackのBot(hubot)を作ってみる
$ sudo npm install -g hubot yo generator-hubot coffee-script
Hubot用のディレクトリを作成して、Hubotの作成
$ mkdir hubot-wata
$ cd hubot-wata
$ yo hubot
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Yes
_____________________________
/ \
//\ | Extracting input for |
////\ _____ | self-replication process |
//////\ /_____\ \ /
======= |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|
? Owner wata //名前
? Bot name wata //Botの名前
? Description aircon //説明
? Bot adapter slack //slackと入力
~
略
~
_____________________________
_____ / \
\ \ | Self-replication process |
| | _____ | complete... |
|__\\| /_____\ \ Good luck with that. /
|//+ |[^_/\_]| /----------------------------
| | _|___@@__|__
+===+/ /// \_\
| |_\ /// HUBOT/\\
|___/\// / \\
\ / +---+
\____/ | |
| //| +===+
\// |xx|
続いてSlack側の設定です
Slackのアプリ一覧からHubotを登録します
画像の通り歯車マークから設定をクリックしてAPI TOKENを取得します
その後、このトークンを環境変数にセットします
$ export HUBOT_SLACK_TOKEN=XXXXXXXX
Hubotの設定は完了です
##スクリプトの作成
こちらを参考にさせて頂きました
SlackからHubot経由で 、サーバのシェルを実行してみよう!
slackにairというメッセージを送信するとRaspberryPi上のシェルスクリプトが動くようにします
module.exports = (robot) ->
robot.respond /air/, (msg) ->
@exec = require('child_process').exec
command = "sh /home/pi/hubot-wata/scripts/shell/test.sh"
msg.send "Command: #{command}"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?
#!/bin/sh
pwd
echo "DEKITERU"
きちんと実行できていますね
##エアコンのリモコンを記録してコマンド化
こちらを参考にさせて頂きました
USB赤外線リモコンアドバンス(BitTradeOne)をRaspberry-Piで操作する
RaspberryPiでスマートホーム 〜赤外線リモコン操作〜
まず必要なファイルをPCにダウンロードします
こちらのUSB赤外線リモコンアドバンスをダウンロードしてきます
解凍したファイル
- bto_advanced_USBIR_cmd.c
- Makefile
をSCPなどでRaspberryPiの任意のディレクトリに送信します
私はTeraTermを使っているのでTeraTermのSSH SCPを使い送信しました
必要なパッケージをインストールて、先ほどのファイルをコンパイルします
$ sudo apt-get install libusb-1.0.0
$ make
$ sudo make install
これをすることで「bto_advanced_USBIR_cmd」というコマンドが使えるようになります
続いてリモコンを記録させます
$ bto_advanced_USBIR_cmd -r //まず赤外線を受信開始
記録したいリモコンのボタンを物理的に押して記録させます。成功すると光ります
$ bto_advanced_USBIR_cmd -s //赤外線を受信停止します
$ bto_advanced_USBIR_cmd -g | tee data.txt //いま受信したデータをファイル(data.txt)に書き出す
$ bto_advanced_USBIR_cmd -d `cat data.txt` //受信したデータ(data.txt)を使って赤外線送信
data.txtをaircon_on.txtとリネームして先ほどのシェルスクリプトのあるディレクトリへ移動します
あとはこのコマンドをシェルスクリプトの中に書き込めれば完成です!
##最終形
#!/bin/sh
bto_advanced_USBIR_cmd -d `cat /home/pi/hubot-wata/scripts/shell/aircon_on.txt`
module.exports = (robot) ->
robot.respond /エアコン/, (msg) ->
@exec = require('child_process').exec
command = "sh /home/pi/hubot-wata/scripts/shell/aircon_on.sh"
msg.send "了解シマシタ。"
@exec command, (error, stdout, stderr) ->
msg.send error if error?
msg.send stdout if stdout?
msg.send stderr if stderr?
エアコンがオンになるところは撮るのが難しかったので出来なかったのですが
メッセージを送ると緑の光が発行して送信していることが分かりますね
Hubotも返事してくれています笑
##感想
というわけで無事目的を達成しました!
とりあえず感じたのはSlackとHubot便利だなあということです
シェルスクリプトでできることならリモートでHubot君がなんでもやってくれますね
次回はHubot君をクラウドサーバー上に置いていつでも使えるようにしたいと思います
本稿を見て頂いてもわかる通り、いろいろな方の記事を参考にさせて頂きました
この場をお借りして御礼申し上げます
暑い日が続きますので体調管理には気を付けましょう!