NatureRemoでSony BraviaのリモコンのON/OFFを分けて送信

Googleさま、NatureRemoさま、いつもありがとう

NatureRemo+GoogleHomeを使ってお家の中の家電製品を制御しようとしてます。ただ、これがいい感じまで行くんですが、「あと一歩なんだけどなぁ」というのがチラホラあって、なかなか使い倒すところまで行っていません。

「OK Google! テレビをつけて!」(私)

「わかりました。ピ」(って感じでテレビつける)

これが出来るのは素晴らしい。本当。いつもありがとう。Googleさま。NatureRemoさま。

なんですけど、テレビがついているときに

「OK Google! テレビをつけて!」(私)

「わかりました。ピ」(って感じでテレビ消す)

そう!そう!そうなのです!消してしまうのです。どうした!?Googleさま。NatureRemoさま。いや、GoogleさまのせいでもNatureRemoさまのせいでもないのです。皆様はお気付きだろうか!テレビのリモコンのON/OFFが一つのボタンだという事を!いや、そこはテレビ付いてるの分かってるんだから、

「OK Google! テレビを消して!」

でええんちゃう?って思ったそこの君!それはそうなんですけど、Googleさま+NatureRemoさまを使うと

「OK Google! 行ってきます!」

というと、テレビ消して、エアコン消して、電気消してをまとめてしてくれる事もできるのです。

なのに

「OK Google! 行ってきます!」

でエアコン消してくれて、電気も消してくれたのに、テレビだけ付いちゃったら、心の中で「ちっ」って思いながら、いそいそとリモコンを取りに行ってテレビを消して出かけないといけないわけです。前置き長かったのですが、ではそろそろ本題に。ちなみに「何番煎じやねん!」ってくらい先人がいらっしゃいます。色んなWebサイトを渡り歩いて、ようやく意味がわかったんで、自分の頭の中の理解の順序に書いていきます。全然論理的じゃないです。でも同じ事したいなぁって思ってるけど、全然意味わからないよ、って同じような人がいたら少しは役立つかもしれません。

リモコンデータを取得して変更して送り直すよー

という事でNatureRemoのLocalAPIを使用してON/OFFデータを取得して、それをONだけ、OFFだけにデータ変更した後に、NatureRemoのCloudAPIを使用して登録します。

ではいきます!

1.Access tokenを取得

https://home.nature.global/

このサイトからNatureRemoのAPIを使用するアクセストークンを取得します。「Generate Access Token」ボタンより取得します。忘れないようにメモしといてください。流出しないように。

2.ON/OFF(トグル)ボタンのデータを取得

NatureRemoに向かってリモコンのON/OFFボタンを押します。すると青色にピカッと光るのですかさず?LocalAPIを叩きます。


curl -i "http://XXX.XXX.XXX.XXX/messages" -H "X-Requested-With: curl"
※XXX.XXX.XXX.XXXはNatureRemoのIPです。


3.取得したデータを解析

コマンドを何度か叩くものの数回取得できない事がありました。なぜでしょうね。諦めずに何度かトライしてください。ネバーギブアップ!一度取得すると次にリモコンデータをNatureRemoに向かって送るまでは何も返ってこないみたいです。こんなデータが返ってきます。

{"format":"us","freq":40,"data":[2269,694,1093,697,495,697,1094,694,498,693,1096,709,509,684,507,684,1104,712,483,706,488,704,486,710,483,25752,2261,719,1076,695,499,693,1094,711,474,717,1072,717,527,666,506,685,1108,705,485,707,485,696,488,705,499,25743,2282,692,1098,710,484,706,1081,709,485,707,1079,734,483,709,483,710,1072,718,474,717,482,697,500,690,499,25758,2283,711,1072,715,475,720,1076,711,483,710,1126,661,510,681,537,658,1133,680,476,703,500,691,503,692,500,25749,2310,685,1077,711,485,706,1081,708,477,716,1079,710,508,671,515,675,1112,702,501,693,497,693,493,699,501,25752,2286,710,1078,710,484,708,1081,706,488,93,65535,613,1080,709,509,671,521,671,1185,628,500,692,498,707,485,708,484,25755,2314,52,65535,628,1074,716,483,709,1084,707,482,710,1081,75,65535,630,512,680,510,684,1104,713,480,695,497,73,65535,621,501,693,497,25756,2278,717,1081,707,485,710,1082,693,496,711,1077,735,482,712,472,718,1083,707,474,704,498,692,494,715,482]}

こういうデータが取得できる事はわかってたんですけど、実際見ると怖いですね。こちらのサイト(赤外線学習リモコンの信号定義データの合成/ソニーフォーマット編)にソニーリモコンフォーマットの事が詳しく書かれています。

少し引用させて頂きます。

リーダー部
ON(4T)→OFF(1T)
Tは0.6ms。
データ部
12ビット、15ビット、または20ビットの送信データ。
データ「0」は ON(1T)→OFF(1T)
データ「1」は ON(2T)→OFF(1T)

なお、データの内容は

  • 最初の7ビットが機能コード
  • 残りが機器の識別コード

である (LSB first)。コードの具体的な値は後述。

トレーラー部
OFF(nnT)
nnは、リーダー+データ+トレーラーの合計が75T (45ms)になるように決める。

む、、難し。。言葉一つ一つが難しいです。
最初から細かく見ていくタイプではないので、それらしい規則性を勘で探します。

怪しい数字、怪しい数字、、ありました!!

{"format":"us","freq":40,"data":[2269,694,1093,697,495,697,1094,694,498,693,1096,709,509,684,507,684,1104,712,483,706,488,704,486,710,483,25752,2261,719,1076,695,499,693,1094,711,474,717,1072,717,527,666,506,685,1108,705,485,707,485,696,488,705,499,25743,2282,692,1098,710,484,706,1081,709,485,707,1079,734,483,709,483,710,1072,718,474,717,482,697,500,690,499,25758,2283,711,1072,715,475,720,1076,711,483,710,1126,661,510,681,537,658,1133,680,476,703,500,691,503,692,500,25749,2310,685,1077,711,485,706,1081,708,477,716,1079,710,508,671,515,675,1112,702,501,693,497,693,493,699,501,25752,2286,710,1078,710,484,708,1081,706,488,93,65535,613,1080,709,509,671,521,671,1185,628,500,692,498,707,485,708,484,25755,2314,52,65535,628,1074,716,483,709,1084,707,482,710,1081,75,65535,630,512,680,510,684,1104,713,480,695,497,73,65535,621,501,693,497,25756,2278,717,1081,707,485,710,1082,693,496,711,1077,735,482,712,472,718,1083,707,474,704,498,692,494,715,482]}

257XXの数字が怪しすぎるでしょう。これがループの終わりなんじゃない?という事でループの始まりから終わりまでの数字に着目します。ちなみに5回目以降のループから規則性が微妙にずれてきたので、整理のためにも敢えて無視してます。

1回目 2回目 3回目 4回目
2269 2261 2282 2283
694 719 692 711
1093 1076 1098 1072
697 695 710 715
495 499 484 475
697 693 706 720
1094 1094 1081 1076
694 711 709 711
498 474 485 483
693 717 707 710
1096 1072 1079 1126
709 717 734 661
509 527 483 510
684 666 709 681
507 506 483 537
684 685 710 658
1104 1108 1072 1133
712 705 718 680
483 485 474 476
706 707 717 703
488 485 482 500
704 696 697 691
486 488 500 503
710 705 690 692
483 499 499 500
25752 25743 25758 25749

この数字から以下を使って0と1に変換していきます。

1.1T=0.6ms*2.5MHz
2.データ「0」は ON(1T)→OFF(1T)
 データ「1」は ON(2T)→OFF(1T)
3.2→16進数変換 

1.計算 2.計算 3.計算
ヘッダ 2269
694
データ 1093 2
697 1 1 5
495 1
697 1 0
1094 2
694 1 1
498 1
693 1 0
1096 2
709 1 1 1
509 1
684 1 0
507 1
684 1 0
1104 2
712 1 1
483 1
706 1 0
488 1
704 1 0
486 1
710 1 0
483 1
トレーラー 25752 43 0

これで0x15というデータが取得できました。これが電源トグルボタンの機能コードです。

4.電源ONと電源OFFに書き換え

長い道のりでした。あと少しです。電源トグルボタンのデータが解析できたので電源ONと電源OFFの機能コードに書き換えて送信してやります。ちなみに、こちらのサイト(猫ぱーんち!)にそのコードは載っております。ありがとうございます。

0x2e 電源オン
0x2f 電源オフ

という事で後は3の逆をしてあげればよいわけです。少し数字を綺麗な数字にして、NatureRemoAPIのフォーマットで作成しました。
電源ON↓

{"format":"us","freq":40,"data":[2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500,2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500,2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500,2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500,2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500,2269,694,480,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,25500]}


電源OFF↓

{"format":"us","freq":40,"data":[2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900,2269,694,1100,690,1100,690,1100,690,1100,690,480,690,1100,690,480,690,1100,690,480,690,480,690,480,690,480,24900]}


5.NatureRemoに電源ON、電源OFFを登録

テレビの電源トグルボタンはNatureRemoに登録されている前提で話を進めますね。NatureRemoのCloudAPIを使用して登録します。使用するAPIは

POST:/1/appliances/{appliance}/signals

ですが、先にテレビの{appliance}を取得する必要があります。

GET:/1/appliances

等で取得してください。

これで無事NatureRemoに電源ON、電源OFFを登録できました。

6 件のコメント

  • はじめましてkouといいます。ここにある記事に同感しています。何故電源ボタンがトグルは別としてIOTで家電品の操作をするには必須項目だと思います。リモートを作るメーカーさんは何故対応してないでしょうね。余談はさておき我が家ではe-rimote mini(Link Japan)を使用しています。同じような対応は可能でしょうか、また可能でない場合NatureRemoのおすすめ品をお教えください。よろしくおねがいします。ちなみに、私は素人に毛の生えた用な知識しかございません。

    • kouさま
      はじめまして。共感して頂けて更にコメントも頂き、ありがとうございます。
      私もその道のもの(どの道?)ではないので、詳しくなくて申し訳ないのですが、e-remoteでAPIを公開しているという情報は見当たりませんでした。となると実現できないように思いいます。
      NetureRemo通常版でも廉価版のminiでもAPIは使用出来ますが、miniはセンサーに制限があるようですね。NetureRemoはFacebookグループもあって、こういう事をしている仲間が一杯います。ご興味があればグループに入って見て下さいね!

  • API使わない方法としては…
    Sonyの学習リモコン HUISなら内部に元々Sony TV ON OFF 分離データが入ってます。
    純正無料編集ソフトとメモ帳だけでちゃんと独立機能を与えられますよ。
    あとは これをどのメーカーだろうと学習させればOKです。
    純正コード解析まではしてないですけど…

    • ZENさま
      コメントありがとうございました!HUISですか。いいですね!残念ながら購入は出来ない(お値段が…)のですが。解析できなかったYAMAZEN扇風機とかもいけるのかなぁ。。解析は趣味というか勉強というか意地でやってました(笑)

      • Sonyの場合は「STR_REMOTE_BTN_POWER_TOGGLE」のTOGGLEをONとかOFFにするだけで通りましたけど、
        YAMAZENの場合はトグルのままでした
        きっと お察しの通り受け付ける気が無いようです

  • コメントを残す

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

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