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

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を叩きます。

1

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


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

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

1
{"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)になるように決める。

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

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

1
{"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回目
2269226122822283
694719692711
1093107610981072
697695710715
495499484475
697693706720
1094109410811076
694711709711
498474485483
693717707710
1096107210791126
709717734661
509527483510
684666709681
507506483537
684685710658
1104110810721133
712705718680
483485474476
706707717703
488485482500
704696697691
486488500503
710705690692
483499499500
25752257432575825749

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

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
データ10932
697115
4951
69710
10942
69411
4981
69310
10962
709111
5091
68410
5071
68410
11042
71211
4831
70610
4881
70410
4861
71010
4831
トレーラー25752430

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

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

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

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

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

1
{"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↓

1
{"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は

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

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

1
GET:/1/appliances

等で取得してください。

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

登録方法詳細 ※2020/8/17追記

具体的な登録方法についてコメントに質問を頂きましたので記事を書きました。良ければこちらもご覧下さい。

NatureRemoでSony BraviaのリモコンのON/OFFを分けて送信(2.登録方法詳細編)

NatureRemoでSony BraviaのリモコンのON/OFFを分けて送信(2.登録方法詳細編)

Licensed under CC BY-NC-SA 4.0
Hugo で構築されています。
テーマ StackJimmy によって設計されています。