NatureRemoでYamazen扇風機ON/OFF分けて送信

前回の記事の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にて赤外線リモコンコンセントをポチりましたよ。
これで解決するでしょう。あーあー。こういう事もありますよね。
誰か機能コード知っていたら教えて下さい。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)