読者です 読者をやめる 読者になる 読者になる

日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Raspberry Pi + hubot + IRKitで家電操作して日々を過ごす

Hubot RaspberryPi

この記事は Raspberry Pi Advent Calendar 2016 の10日目として書かれています。

www.adventar.org

こんにちは ara_ta3 です。
Raspberry Piを気分で買ってあまり色々やるぞ思ってから長い日が経っています。
かなり何番煎じって感じですがSlack + hubot と Raspberry Pi + IRKitで家電操作したときの話をしたいと思います。

概要

やっていることはとても簡単です。
hubotをSlack上に住まわせて何らかの命令を送ったらIRKitにリクエストを飛ばし家電を操作するという感じです。
hubotのレポジトリはこちら。
執事 英語 でぐぐって出てきたかっこいい名詞をbotの名前として選びました。

github.com

hubotの実装

実装はこのあたりからで、configで渡したデータをIRKitサーバにHTTPリクエストで投げています。
(configに乗っけていいのかよくわからなかったのでgithubには置いていません)

https://github.com/ara-ta3/steward/blob/master/src/scripts/home.js#L26

hubot-irkitというライブラリもあったんですが、
jsonをPOSTする程度のものなのでライブラリはいらないでしょう。
jsonは例えばこんな感じのものになります。

    "light": {
        "up": {
            "format":"raw",
            "freq":38,
            "data":[
                18031,8755,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,3228,1150,1037,1150,3228,1190,3228,1190,3228,1190,1037,1150,3228,1190,3228,1190,1037,1150,1037,1150,1037,1150,3228,1190,1037,1150,1037,1150,1037,1150,1037,1150,1037,1150,3228,1190,3228,1190,1037,1150,3228,1190,3228,1190,3228,1190,3228,1190,3228,1190
            ]
        }
    },

IRKitの準備

IRKitは自身がサーバとなってHTTPリクエストを受けてくれます。
今回はローカルのネットワークに置きました。
とりあえずIRKitのIPアドレスが必要なので調べます。
Macのアプリでないかなと思ったらさくっと見つかったのでこれを使いました。

IP Scanner

IP Scanner

  • 10base-t Interactive
  • ユーティリティ
  • 無料

次に送信したい信号の赤外線を記憶させます。
IRKitのサーバの /messages エンドポイントに X-Requested-With のヘッダとともにリクエストを投げると直前に送った赤外線の信号が手に入ります。
X-Requested-With の値はなんでも大丈夫そうです。
なにも赤外線信号を送っていない場合は空のBodyが返ってきます。
また同じエンドポイントに受け取ったデータを送りつけると同様の信号を送ったことになりmす。

# 赤外線信号を送っていないので空bodyのレスポンス
$curl -i 192.168.0.13/messages -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

# ある信号送った後のレスポンス
$curl -i 192.168.0.13/messages -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,3341,1150,3341,1150]}

# このデータをサーバに対して送ると同じことが起きます
# さっきの信号は電気を1段階暗くするものだったので家が暗くなりました
curl -i 192.168.0.13/messages -d '{"format":"raw","freq":38,"data":[18031,8755,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,1150,1150,1150,1150,1150,1150,3341,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,3341,1150,3341,1150,1150,1150,3341,1150,3341,1150,3341,1150,3341,1150,3341,1150]}' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

赤外線リモコン系は大体覚えさせると便利でした。
ただ、覚えさせるのがめんどい←

感想とまとめ

  • 暑い夏とか家につく少し前のタイミングでエアコンつけたりすると帰った時涼しくてよかった
  • 家に帰る前に電気つけとくと帰ってすぐ明るくて良い
  • 言わずもがな家に帰らない人には必要なさそう
  • Raspberry Piずっと点いてる割にはあまり活用できてないなぁと感じたので来年は何かやっていきたい