前回ちょこっと触れてみましたが、 今回からじっくり遊んでみたいと思います。
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フォーマット?
リモコンの赤外線信号は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を使わず、扱いやすい
早速gemをインストール
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
我が家の環境では実行して、テレビの電源が付いて番組表が表示されました^^。
0 件のコメント:
コメントを投稿