どうもはじめまして。Beatrobo竹井(@HideyukiTakei)です。
これからBeatroboエンジニアたちの技術的な話をここにまとめていこうと思います。
第一弾はIRKitに関して!
IRKitとは、@maaashさんが開発しているWiFi機能の付いたオープンソースな赤外線リモコンデバイスです。Arduinoのソースコードや基板の回路図も公開されています。また、IRKitをローカルネットワークから制御するためのDevice HTTP APIや、インターネット越しに制御するためのInternet HTTP APIも用意されています。
今回はこのIRKitを使ってHipChatからエアコンを制御する方法を順を追ってご紹介します!
1.リモコンON/OFF時の赤外線信号を取得する
Internet HTTP API のGET /1/messagesを用いることでリモコンの赤外線信号をJSONで取得することができます。
IRKitはBonjourに対応しているようですので、まずIRKitの名前を取得しましょう。
1 2 3 4 5 6 7 |
|
コマンド結果で表示されている iRKitD1D1
(仮名)がIRKitの名前です。また、ドメインが local
なので、iRKitD1D1 .local
がIRKitの宛先となります。
Internet HTTP API を使用するためには clientkey, deviceid が必要で、これらを取得するためには clienttoken が必要です。clienttoken は Device HTTP API のPOST /1/keysで取得できます。
1 2 |
|
ここで得られた clienttoken を使って Internet HTTP API の POST /keys で clientkey, deviceid を取得します。
1 2 3 4 5 6 7 8 9 10 |
|
これで Internet HTTP API を使う準備は完了です。
次は赤外線信号の取り込みです。 Internet HTTP API の GET /1/messages は最も新しい受信した赤外線信号を返してくれるAPIです。 新しい赤外線信号がIRKitデバイスから届いたらただちにレスポンスを返します。
1
|
|
ロングポーリングでレスポンスが返ってこない状態になります。
次に、IRKitにリモコンを向けながら、エアコンONボタンを1度だけ押してみましょう。青色LEDが点滅したら赤外線信号受信ができているようです。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
このmessage
部分がエアコンONの赤外線信号のJSONです。
2.Internet HTTP APIを使ってエアコンをONする
さきほど得られたmessageのJSONを使って、試しにエアコンをONにしてみましょう。Internet HTTP API の POST /1/messages を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
これでエアコンがつくはずです! 次にこのAPIをHipChatから叩けるようにしてみましょう。
3.HUBOTをローカルで動かす
HipChatからIRKitのInternet HTTP APIを使うために、チャットボットHUBOTとそのHipChatアダプタhubot-hipchatを利用します。今回は自分のMac上でHUBOTを動かしてみましょう。
まず、HUBOTをインストールします。
1
|
|
そしてHUBOTのプロジェクトテンプレートを作成。
1 2 3 4 |
|
hubot-hipchat をインストール
1 2 |
|
初期状態だとRedisを使うようになっているのですが、今回は特に使わないので hubot-scripts.json
を編集して該当スクリプトを無効にします。
1
|
|
これでHUBOTの準備は整いました。
次にHipChat側でボット用のアカウントを作成しましょう(HipChatはボットにも月$2かかっちゃうのが残念)。アカウント作成はHipChatのWebサイトから行います。
HUBOTからHipChatのルームにアクセスするためには以下の情報が必要です。
- ボットアカウントのJID: XMPP/Jaberのアカウント名
- パスワード: ボットアカウントを作った時のパスワード
- ルームのJID: ルームはXMPPのMUCで実装されているようです
ボットアカウントとルームのJIDは、HipChatのWebページの My account
–> Account settings
–> XMPP/Jabber info
に掲載されています。
ルームのJIDは、「ルームのXMPP/JabberName@ルームのドメイン」となります。上の画像だと、「****_android@conf.hipchat.com」がルームのJIDとなります。
上記の3つの情報を元にHUBOTを起動してみましょう。起動するためのスクリプト run.sh
を以下のように書きます。exportしている情報は上記でゲットしたものを入力してください。
1 2 3 4 5 6 7 |
|
そして実行!
1 2 3 4 5 |
|
ルームに以下の表示が出ていれば成功です。
1
|
|
4.HUBOTにエアコン機能を付け加える
HUBOT に hubot-hipchat アダプタを追加することで、HUBOTが参加しているルームに流れてくる文字列を読み取り、コマンドに応じた処理を実行することができるようになりました。
どういうコマンドが来たらどういう処理をするか、ということは scripts
ディレクトリのスクリプトで定義されています。新しいコマンドとその処理の定義は、こちらの scripts
ディレクトリにスクリプトを追加することで可能となります。
今回は air
というエアコンコマンドを実装してみましょう。「@hubot air on」でエアコンをON、「@hubot air off」でエアコンをOFFできるようにするスクリプトは以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
HUBOTのスクリプトは、基本的には以下の形式で反応させたいコマンドを正規表現で指定して、内部に処理を書いていきます。
1
|
|
scripts ディレクトリにはたくさんのスクリプトが入っているので、それらを見れば雰囲気はだいたい把握できると思います!
これで再度
1
|
|
を実行して、HUBOTがいる部屋で @hubot air on
とつぶやいてみましょう。
これで快適エアコンライフ!がんばれば温度もコントロールできそうです。
上記のコードは GitHub に公開しています。
Beatroboではこのhubotちゃんを Heroku で動かしてます。 もしエアコン大好きな方はぜひBeatroboに遊びに来てください。
ではでは!あでゅ!