Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
104 lines (75 sloc) 5.66 KB

IRKitで遊ぶ1

前回ちょこっと触れてみましたが、 今回からじっくり遊んでみたいと思います。

IPアドレス検索


公式ページを参考にBonjourを使ってIRKitのIPアドレスを検索してみます。

$ dns-sd -B _irkit._tcp
DATE: ---Sun 13 Dec 2015---
13:34:59.796  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
13:35:00.955  Add        2   4 local.               _irkit._tcp.         IRKitXXXX

名前(IRKitXXXX)がわかった所で、そのIPアドレスを取得します。

$ dns-sd -G v4 IRKitXXXX.local
DATE: ---Sun 13 Dec 2015---
14:35:05.507  ...STARTING...
Timestamp     A/R Flags if Hostname                               Address                                      14:35:06.874  Add     2  4 irkitxxxx.local.                       192.168.XXX.XXX

信号の取得


公式ページの通りにcurlを使って最新の赤外線信号を取得。

$ curl -i "http://192.168.XXX.XXX/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/X.X.X.X.XXXXXXXX
Content-Type: text/plain

{"format":"raw","freq":38,"data":[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]}

ちなみに↑は我が家のテレビの電源ボタン押下時の赤外線信号ですw。
リモコンの赤外線信号はNEC/家製協/SONYフォーマットの3種類あるみたいです。
我が家のテレビはSONYなので、SONYフォーマット?


次は逆にIRKitに↑の赤外線信号を送信してみます。
$curl -i "http://192.168.XXX.XXX/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]}'
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/X.X.X.X.XXXXXXXX
Content-Type: text/plain

いや〜、ターミナルから家電の操作ができるって不思議な感じがします^^;

一連の動作をスクリプト化


通常リモコン使う場合は、一連の動作をする場合があるかと思います。
例えば、「テレビの電源付ける」→「番組表を開く」
などなど。

この一連の動作をスクリプトで書いて一気に実行してみたいと思います。
スクリプトは分かりやすいrubyを使って書いていこうと思います。

  • Http Client

net/httpを使わず、扱いやすいREST Clientを使う。
早速gemをインストール

$ bundle init
$ vi Gemfile # gem "rest-client" を追加
$ bundle install --path vendor/bundle

以下のようなmain.rbを作成(送信データに関しては環境に合わせて修正)

#!/usr/bin/env ruby
require 'rest-client'

data1 = [4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150,50610,4713,1150,2368,1150,1150,1150,2368,1150,1150,1150,2368,1150,1150,1150,1150,1150,2368,1150,1150,1150,1150,1150,1150,1150,1150]

data2 = [4713,1319,2288,1275,2288,1275,1150,1275,2288,1190,2288,1190,1190,1190,2288,1190,1073,1190,1073,1190,2211,1275,1150,1150,1150,1275,2288,1275,1150,1150,2288,38433,4713,1275,2288,1275,2288,1275,1073,1275,2288,1275,2288,1275,1037,1319,2288,1275,1111,1111,1111,1111,2288,1275,1111,1275,1275,1275,2288,1190,1190,1190,2288,38433,4713,1190,2288,1190,2288,1190,1190,1190,2288,1190,2288,1190,1190,1190,2288,1190,1190,1190,1190,1190,2288,1190,1190,1190,1190,1190,2288,1190,1190,1190,2288]

# POST request with modified headers
RestClient.post 'http://192.168.0.21/messages', {'format' => 'raw', 'freq' => '38', 'data' => data1}.to_json, {'X-Requested-With' => 'ruby'}

sleep(10) # 我が家のテレビの反応が悪いので10秒待ってますorz

RestClient.post 'http://192.168.0.21/messages', {'format' => 'raw', 'freq' => '38', 'data' => data2}.to_json, {'X-Requested-With' => 'ruby'}

実行してみます

$ bundle exec ruby main.rb

我が家の環境では実行して、テレビの電源が付いて番組表が表示されました^^。

You can’t perform that action at this time.