前回の記事のSony Braviaに続き、夏の必需品、扇風機も制御したいと思い立ちました。世の中ってトグルボタンのリモコンばかりですね。。こんなにトグルボタンを意識したのは人生で初めてです。問題はYamazenの情報が全くないことです。Sonyには情報があったので幸せでした。先人がいるって本当素晴らしい事です。ちなみに結論から先に書きますと、ON/OFFをわける機能コードは見つけられませんでした。
リモコンデータを取得して変更して送り直すよー
扇風機のON/OFFデータを取得
これはBraviaと一緒ですので、方法は省略して取得したデータは以下です。
{"format":"us","freq":37,"data":[8958,4545,526,596,524,1732,524,1732,526,599,523,596,526,599,525,598,527,608,525,1733,524,1733,524,603,522,596,527,601,521,1733,525,602,522,1742,529,1729,526,1736,524,1734,524,1734,525,1732,526,598,524,598,531,605,522,598,527,599,526,601,521,597,525,599,526,1732,526,1738,522,1738,526,42149,8960,2294,537,65535,0,30745,8957,2301,524]}
これをまたこちらのサイト(赤外線学習リモコンの信号定義データの合成/家製協フォーマット編)の以下を元に解析してみます。
リーダー部
ON(8T)→OFF(4T)
Tは0.35〜0.5msと規定されている。典型的には中央値0.425msを使用する。データ部
3バイト以上・任意バイト数の送信データ。各バイトはLSB first。
データ「0」は ON(1T)→OFF(1T)
データ「1」は ON(1T)→OFF(3T)
なお、データの内容は1〜2バイト目がカスタムコード (ベンダー/機器の識別)
3バイト目以降がデータコード (コマンド等)
コードの具体的な値は後述。トレーラー部
ON(1T)→OFF(nn)
nnは8ms以上と規定されている。Panasonic製デジタルチューナー付属のリモコンの場合は約75ms。
データを解析していきます
以下を使って0と1に変換していきます。
1.1T=0.5ms*2.5MHz 2.データ「0」は ON(1T)→OFF(1T) データ「1」は ON(1T)→OFF(3T) 3.2→16進数変換
電源 | 1.計算 | 2.計算 | 3.計算 |
8958 | 18 | ||
4545 | 9 | ||
526 | 1 | ||
596 | 1 | 0 | |
524 | 1 | ||
1732 | 3 | 1 | |
524 | 1 | ||
1732 | 3 | 1 | |
526 | 1 | ||
599 | 1 | 0 | 6 |
523 | 1 | ||
596 | 1 | 0 | |
526 | 1 | ||
599 | 1 | 0 | |
525 | 1 | ||
598 | 1 | 0 | |
527 | 1 | ||
608 | 1 | 0 | 0 |
525 | 1 | ||
1733 | 3 | 1 | |
524 | 1 | ||
1733 | 3 | 1 | |
524 | 1 | ||
603 | 1 | 0 | |
522 | 1 | ||
596 | 1 | 0 | 3 |
527 | 1 | ||
601 | 1 | 0 | |
521 | 1 | ||
1733 | 3 | 1 | |
525 | 1 | ||
602 | 1 | 0 | |
522 | 1 | ||
1742 | 3 | 1 | A |
529 | 1 | ||
1729 | 3 | 1 | |
526 | 1 | ||
1736 | 3 | 1 | |
524 | 1 | ||
1734 | 3 | 1 | |
524 | 1 | ||
1734 | 3 | 1 | F |
525 | 1 | ||
1732 | 3 | 1 | |
526 | 1 | ||
598 | 1 | 0 | |
524 | 1 | ||
598 | 1 | 0 | |
531 | 1 | ||
605 | 1 | 0 | 1 |
522 | 1 | ||
598 | 1 | 0 | |
527 | 1 | ||
599 | 1 | 0 | |
526 | 1 | ||
601 | 1 | 0 | |
521 | 1 | ||
597 | 1 | 0 | 0 |
525 | 1 | ||
599 | 1 | 0 | |
526 | 1 | ||
1732 | 3 | 1 | |
526 | 1 | ||
1738 | 3 | 1 | |
522 | 1 | ||
1738 | 3 | 1 | E |
526 | 1 | ||
42149 | 84 | 0 |
電源ON/OFF以外のデータもみてみると、0x1Fの部分が機能コードのようです。他のボタンも調べたところ以下のように取れました。
0x1F:電源ON/OFF 0x1E:リズム 0x1D:風量 0x1C:タイマー
機能コードを探す
ソニーよりデータは短くて解析はとても楽だったのですが、問題は電源ON、電源OFFそれぞれの機能コードの情報が無い事です。探すとすれば0x00~0xFFの中のどこかにあるのか。もしくは無いのか。1つずつ256パターン探さないといけません。えぇ・・・256回かぁ。とても手動でやれる回数ではないので、プログラムにて探す事にしました。1回しか使わないんですけど。(超勿体ないぜ・・・涙)
node.jsを使って3秒ごとにNatureRemoに機能コードを書き換えて送信するプログラムです。1回しか使わないプログラムなので(しつこいネ)、汎用性は無視してますが、こんな感じで探して扇風機の反応をみます(笑)
'use strict' const cron = require('cron').CronJob; const http = require('http'); const HOST = '192.168.0.3'; const PATH = '/messages'; const lirc0 = '530,530,'; const lirc1 = '530,1720,'; var valnum = 0; class InfraredInfo { static createJob() { return new InfraredInfo(); } constructor() { const timeSignal = new cron({ cronTime: '*/3 * * * * *', start: false, timeZone: 'Asia/Tokyo', onTick: () => { this.execInfraredInfo(); } }); timeSignal.start(); } execInfraredInfo() { valnum = valnum + 1; if( valnum >= 28 && valnum <= 31){ return; } if( valnum >= 257 ){ console.log('end end end'); return; } var valStr = valnum.toString(2); var valStr2 = ("00000000"+valStr).slice(-8); console.log(valStr2); var chgArr = valStr2.split(""); var rvsArr = chgArr.reverse(); console.log(rvsArr); var lircStr =""; for(var i=0; i<rvsArr.length; i++){ if( rvsArr[i] == '0' ){ lircStr = lircStr + lirc0; }else{ lircStr = lircStr + lirc1; } } console.log(valnum); var lircData = '[' + '8958,4545,' + '526,596,524,1732,524,1732,526,599,' + '523,596,526,599,525,598,527,608,' + '525,1733,524,1733,524,603,522,596,' + '527,601,521,1733,525,602,522,1742,' + lircStr + '522,598,527,599,526,601,521,597,' + '525,599,526,1732,526,1738,522,1738,' + '526,42149,8960,' + '2294,537,65535,0,30745,8957,2301,524]'; var postDataStr = '{"format":"us","freq":37,"data":' + lircData + '}'; let options = { host: HOST, path: PATH, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': postDataStr.length, 'X-Requested-With': 'curl' } }; let req = http.request(options, (res) => { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', (chunk) => { console.log('BODY: ' + chunk); }); }); req.on('error', (e) => { console.log('problem with request: ' + e.message); }); req.write(postDataStr); req.end(); } } module.exports = InfraredInfo;
という事で、待つこと数分、、全く扇風機は反応せず、残念ながら見つける事が出来ませんでした。
えー!!(ブーイング)
仕方ないじゃないか。。
でも機能コードを探すためだけに1回しか使わないプログラム(しつこい×2)を作ったんですよ。悲しすぎる。
さてどうしましょうか
さきほどAmazonにて赤外線リモコンコンセントをポチりましたよ。
これで解決するでしょう。あーあー。こういう事もありますよね。
誰か機能コード知っていたら教えて下さい。。
コメント