Help us understand the problem. What is going on with this article?

Slackから自宅のエアコンを操作する

皆さんいかがお過ごしですか

暑い日が続いていますね
私も仕事から帰宅すると部屋がめちゃくちゃ蒸されてて
部屋が冷えるまでそれなりに時間がかかっています

そこで、今回はリモートで部屋のエアコンをオンにするシステムを作成してみました!

概要・構成

Slackにメッセージを送るとRaspberryPi上のHubotがシェルスクリプトを実行して
RaspberryPiにUSB接続した赤外線リモコンからエアコンのスイッチを入れるという構成です
工作などは不要になっております
構成.png

使ったもの

RaspberryPiの設定

こちら

Node.jsとnpmのインストール

HubotをインストールするにはNode.jsとnpmが必要です
こちらを参考にさせて頂いてインストール
Node.js と npm インストールとアップデート

raspberry.pi
$ sudo apt install nodejs npm
$ sudo npm install -g n
$ sudo n latest

Hubotのインストール

こちらを参考にさせて頂きインストール
SlackのBot(hubot)を作ってみる

raspberry.pi
$ sudo npm install -g hubot yo generator-hubot coffee-script

Hubot用のディレクトリを作成して、Hubotの作成

raspberry.pi
$ 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を取得します
Slack.png
その後、このトークンを環境変数にセットします

raspberry.pi
$ export HUBOT_SLACK_TOKEN=XXXXXXXX

Hubotの設定は完了です

スクリプトの作成

こちらを参考にさせて頂きました
SlackからHubot経由で 、サーバのシェルを実行してみよう!

slackにairというメッセージを送信するとRaspberryPi上のシェルスクリプトが動くようにします

aircon.coffee
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?
test.sh
#!/bin/sh
pwd
echo "DEKITERU"

試してみます
image1.png

きちんと実行できていますね

エアコンのリモコンを記録してコマンド化

こちらを参考にさせて頂きました
USB赤外線リモコンアドバンス(BitTradeOne)をRaspberry-Piで操作する
RaspberryPiでスマートホーム 〜赤外線リモコン操作〜

まず必要なファイルをPCにダウンロードします
こちらのUSB赤外線リモコンアドバンスをダウンロードしてきます
解凍したファイル

  • bto_advanced_USBIR_cmd.c
  • Makefile

をSCPなどでRaspberryPiの任意のディレクトリに送信します

私はTeraTermを使っているのでTeraTermのSSH SCPを使い送信しました

必要なパッケージをインストールて、先ほどのファイルをコンパイルします

raspberry.pi
$ sudo apt-get install libusb-1.0.0
$ make
$ sudo make install

これをすることで「bto_advanced_USBIR_cmd」というコマンドが使えるようになります

続いてリモコンを記録させます

raspberry.pi
$ 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とリネームして先ほどのシェルスクリプトのあるディレクトリへ移動します
あとはこのコマンドをシェルスクリプトの中に書き込めれば完成です!

最終形

aircon_on.sh
#!/bin/sh
bto_advanced_USBIR_cmd -d `cat /home/pi/hubot-wata/scripts/shell/aircon_on.txt` 
aircon.coffee
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?

実行 (1).gif
エアコンがオンになるところは撮るのが難しかったので出来なかったのですが
メッセージを送ると緑の光が発行して送信していることが分かりますね
Hubotも返事してくれています笑

感想

というわけで無事目的を達成しました!
とりあえず感じたのはSlackとHubot便利だなあということです

シェルスクリプトでできることならリモートでHubot君がなんでもやってくれますね

次回はHubot君をクラウドサーバー上に置いていつでも使えるようにしたいと思います

本稿を見て頂いてもわかる通り、いろいろな方の記事を参考にさせて頂きました
この場をお借りして御礼申し上げます

暑い日が続きますので体調管理には気を付けましょう!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした