概要
Google Homeへの呼びかけでシーリングライトのリモコンボタン押下と同様の操作を行う。
事情に興味ない方は本題へ→赤外線信号の取得
背景
エアコンをHomebridge対応させたり、Philips Hueを買って玄関等に配置し、自宅IoT化の恩恵を享受する中、部屋に元々備え付けられていたシーリングライトが取り残されていた…。
取り残された理由
シーリングライトの仕様とHomebridgeの設定ファイルのフォーマットが合わない。
Homebridgeの設定ファイル
オンとオフの2状態を想定し、「オンにする信号」「オフにする信号」を記述する。
シーリングライトの仕様
- 状態は4つ
- 蛍光灯2本点灯
- 蛍光灯1本点灯
- 常夜灯
- 完全消灯
- リモコン信号は1つ
オンにする / オフにする で信号が分かれていないため、2本点灯と完全消灯の2状態だけを抜き出して設定ファイルに書く、ということができない。
信号は1つだからとむりやり設定ファイルを書いても、「ホーム」アプリ上の表示が気持ち悪いことになる。
(例えば、2本点灯:オン、1本点灯:オフ、常夜灯:オン、完全消灯:オフのようになる)
Homebridgeを使うまでもなかった?
- 状態を考慮せず信号が送りつけられればそれでよい
- IRKitにはWeb APIがある
→GoogleHomeとIFTTTで操作できる
赤外線信号の取得
IRKitに向けてリモコンを操作し、赤外線信号を読み取らせてから以下のコマンドを実行
% curl -i "http://[IRKitのIPアドレス]/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain
{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}
clientkeyとdeviceidの取得
まずclienttokenを取得
% curl -i "http://[IRKitのIPアドレス]/keys" -d '' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain
{"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
取得したclienttokenを使いclientkeyとdeviceidを取得
ここはURLがローカルIPアドレスでない点に注意
curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 08:46:06 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
X-Content-Type-Options: nosniff
{"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}
IFTTTアプレットの作成
This部
設定はお好みで
画像の例だと、「照明」より「明かり」の方が理解してもらいやすい(気がする)。
Then部
Content Typeが見切れているがx-www-form-urlencoded
を選択
Body(optional)欄に書く内容
clientkey=取得した文字列に置き換え&deviceid=取得した文字列に置き換え&message=取得した赤外線信号JSONに置き換え
これで、呪文を唱えると照明を操作できるようになる。
問題
全点灯から消灯に一気に遷移したいときなどに繰り返し唱えるのが面倒。