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を登録できました。
登録方法詳細 ※2020/8/17追記
具体的な登録方法についてコメントに質問を頂きましたので記事を書きました。良ければこちらもご覧下さい。
最近のコメント