- 【追記】2014/05/17 コードを修正、内容は同じですがmodule.exportsなどを利用して読み込むように。jsのお作法===や.を使ったjsonオブジェクトのプロパティアクセスを使うように
前回のPS3起動の記事をパワーアップさせました。私は平日の朝は朝ドラを見てるのですが、起きたらもうTVがついていて、更にtorneでTVを起動しているようにしました。動画を見ていただくとわかりやすいです。PS3のトルネアプリの位置が常に決まっているから出来る技になります。
Auto wake up tv and torne!
macro.js
いくつかのコマンドを組み合わせて呼び出せるようにするための設定ファイルです。node app.js <マクロ名>で指定するようにしています。5000とか書いてあるのは次のコマンドまでの時間(msec)です。たとえばPS3は起動に時間がかかるので38秒待機してからPS3のカーソルコマンドを発行しています。結構遅めにアクセスしないと命令が詰まってしまって失敗したため、どれも長めにWaitするようにしています。
動画のコマンドは"tv-on_torne-on"になります。TVがHDMI入力になっているとは限らないので、一旦地デジの1chにして、入力切替でHDMIにしています。バッドノウハウですが自前なので良しとします。
module.exports = { "tv-on_torne-on" : [ {"command" : "data/tv/power", "compTime" : 5000}, {"command" : "data/tv/1", "compTime" : 2000}, {"command" : "data/tv/changeInput", "compTime" : 2000}, {"command" : "data/ps3/ps3_power", "compTime" : 38000}, {"command" : "data/ps3/ps3_left", "compTime" : 3500}, {"command" : "data/ps3/ps3_left", "compTime" : 3500}, {"command" : "data/ps3/ps3_left", "compTime" : 3500}, {"command" : "data/ps3/ps3_down", "compTime" : 3500}, {"command" : "data/ps3/ps3_enter", "compTime" : 35000}, {"command" : "data/ps3/ps3_enter", "compTime" : 3500}, {"command" : "data/ps3/ps3_enter", "compTime" : 3500} ], "ps3-on" : [ {"command" : "data/ps3/ps3_power", "compTime" : 30000} ], "tv-on" : [ {"command" : "data/tv/power", "compTime" : 5000} ], "dock-on" : [ {"command" : "data/dock/power", "compTime" : 5000} ], "dock-play" : [ {"command" : "data/dock/play", "compTime" : 5000} ], "dock-ipod" : [ {"command" : "data/dock/ipod", "compTime" : 5000} ], "dock-on_ipod-play" : [ {"command" : "data/dock/power", "compTime" : 15000}, {"command" : "data/dock/ipod", "compTime" : 6500}, {"command" : "data/dock/play", "compTime" : 5000} ], "dock-on_fm-play" : [ {"command" : "data/dock/power", "compTime" : 15000}, {"command" : "data/dock/fm", "compTime" : 0} ] }
settings.js
irkitのセキュリティキーをファイルに書き出しておきます。twitterは特に何もしてないですが、こんな感じで設定を増やせます。
module.exports = { "irkit" : { "clientkey" : "xxxx", "deviceid" : "yyyyy" }, "twitter" : [ ] }
app.js
Node.jsのメインプログラムです。IRのコマンドリストやIRKitのセキュリティキーを読み込んでいます。
var request = require('request'); var fs = require('fs'); var baseUrl = 'https://api.getirkit.com/1/messages'; var requestDelay = 0; // read command list if (process.argv.length !== 3) { console.log('usage: node app.js <macro command>'); return; } // var macroJson = JSON.parse(fs.readFileSync('macro.json', 'utf-8')); var macroJson = require('./macro'); var macroCommand = process.argv[2]; var commandList = macroJson[macroCommand]; if (commandList === undefined) { console.log('macro command "' + macroCommand + '" is node defined in macro.json.'); return; } // read security file var settingJson = require('./settings'); var irSettings = settingJson.irkit; commandList.forEach(Post); function Post(data, index) { var message = fs.readFileSync(data.command, 'utf-8'); console.log(message); setTimeout( function() { request.post( baseUrl, { form: { clientkey : irSettings.clientkey, deviceid : irSettings.deviceid, message : message } }, function (err, res, body) { console.log(index + ': ' + data.command + ", " + data.compTime); if (!err && res.statusCode == 200) { console.log('request succeeded: ' + index); } else { console.log('post error: ' + err); } } ); }, requestDelay); requestDelay += data.compTime; }
cronで平日の朝7時50分に実行する
cronでスクリプトを実行するようにします。私はシェルスクリプト越しに実行していますが、直パス指定でも良いと思います。
# crontab -e 50 7 * * 1-5 /home/jonki/nodejs/ir/run.sh 2>&1
run.sh
#!/bin/sh cd /home/jonki/nodejs/ir/ /home/jonki/.nodebrew/current/bin/node app.js tv-on_torne-on
最後に
IRKitで自宅の家電が多く簡単に操作できるようになって快適な我が家になってきました。スマートハウスも自前でここまでできる時代になってきましたね。
IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン
- 出版社/メーカー: maaash.jp
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 出版社/メーカー: サイバーガジェット
- 発売日: 2010/06/26
- メディア: Video Game
- クリック: 3回
- この商品を含むブログ (1件) を見る