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を取得
このサイトから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追記
具体的な登録方法についてコメントに質問を頂きましたので記事を書きました。良ければこちらもご覧下さい。
コメント
コメント一覧 (10件)
はじめまして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の場合はトグルのままでした
きっと お察しの通り受け付ける気が無いようです
ZENさま
試して頂いたんですね!めっちゃ優しい。。本当にありがとうございます!
はじめまして mamibowさん shefと言います
アレクサで一斉に家電をOFF(アレクサ、全部消して)にしたくて、Alexaアプリで定型アクションを設定をしたんですが、テレビだけが安定しません・・はい、OFFになる時もあれば、ONになる時もあるんです。
ググってみたら、mamibowさんのサイトがヒットしました。
ただ、書いてる事が専門的すぎて幼稚な頭脳をお持ちのわたしには理解不能です(^^ゞ
テレビはシャープのAQUOSです。
https://bbs.kakaku.com/bbs/K0000770471/SortID=20175576/#tab
スピーカーはアレクサですが、スマートリモコンはmamibowさんと同じNatureRemo(mini)です。
面倒じゃなければ、サポートお願いしていいでしょうか??
検討お願いいたしますm(__)mm(__)m
shefさま
こんばんは。コメントありがとうございます。
こんなマニアックなサイトに足を運んで頂いて大変うれしく、出来るだけお力になりたいですが。現象が正確にわかってないのと、私の手元にはアレクサもAQUOSもないので、今私が回答出来る範囲でお答えさせて頂きますね。
「テレビだけが安定しない」というのは、テレビONの状態でアレクサで一斉OFFするとテレビOFFになるけど、テレビOFFの状態でアレクサで一斉OFFするとテレビがONになる、という現象で良かったですかね。もしそうなら電源ONOFFのトグルのコードを送っているのが原因、と思います。(もしトグルが問題でないなら、メーカーにお問合せされた方が良いかもです。)
そしてAPIとかコマンド打って、とかこのブログに書いてあるようなシステマチックな事はしたくない、という事ですよね。
上記が前提であれば、一番手っ取り早いのはZENさんのコメントにある「学習リモコン」を購入する事なんですけど、お金もかかりますし、まずは以下サイトを試されてはどうでしょう?
https://nature.global/jp/blog/2019/9/19/intern-tv
「シーン機能で電源ボタン2回の操作を設定して、そのシーン機能を実行すると今テレビがついているかは関係なく必ずテレビがついた状態になるんですよね。」とあります。試されたのはシャープらしいですよ。ちなみにうちのソニーはNGでした。
また、リモコンのタイマーオンオフ機能がある方は、設定時間に合わせて登録させてる、という強者の方もいました。あとは学習リモコンより安い「赤外線リモコンコンセント」を使うという手もあります。これは電源を引っこ抜くのと同じ事なので注意は必要です。私も扇風機用に1つ持ってます。
解決されると良いですね。
おはようございます mamibowさん shefです
こうしてレスいただけただけでも嬉しいです(^o^)
ありがとうございますm(__)m
価格.comに板を立て詳しい方に長期に渡りサポートしていただいたのですが、
テレビはOFFになったり、ならなかったりで、なかなかうまくいきませんでした。
https://bbs.kakaku.com/bbs/J0000030501/SortID=23558927/#tab
>「テレビだけが安定しない」というのは、テレビONの状態でアレクサで一斉OFFするとテレビOFFになるけど、
テレビOFFの状態でアレクサで一斉OFFするとテレビがONになる、という現象で良かったですかね。
いえ、テレビのON/OFFに関わらず『アレクサ、全部消して』の指示でOFFにしようと・・。
失敗するのはOFFの時です。テレビが一瞬ONになり(少し声も出て)その後OFFになれば成功なんですが、失敗した時はONのままで『ああ~消えへんわ』って感じです。
『アレクサ、全部消して』を10回とか連続してテストした時は成功率は高いんですが、
明くる日に最初の『アレクサ、全部消して』でもう失敗ってケースが(´。`)
テレビ以外の照明やエアコンは必ずOFFになってくれるので、テレビだけ(OFFの状態で)でテストしています。
テレビのON/OFFに関わらずONになるシーンも作りました。
NatureRemoでそのシーンをタップすれば必ずテレビはONになります。それを『アレクサ、全部消して』の定型アクションに連携しやってみたんですが、100%OFFにはなってくれません。
さっきググってたら下記のサイトがヒットしました。
https://zmzlz.blogspot.com/2019/09/blog-post.html
サイトの主が書いてる【2.SHARP限定 独立信号を発見】に『アクオス(全機種かは不明)にはオン、オフ独立したコードが密かに存在しており』とあるので、このコードで試してみよう思います。
mamibowさんも書いてた『CloudAPIを使用して登録』の手順を教えていただけませんか??
https://swagger.nature.global/#
よろしくお願いいたしますm(__)m
shefさま
こんばんは。またまたコメントありがとうございます。
本当に不安定なんですね。それは失礼しました。
登録方法については、記事を見直してみたけど、超雑な書き方でしたね。当時はLinux環境でしてたんですけど今動かせないので、先ほどWindows環境でしてみたので、近日中に記事にしようかな、と思います。ネタのご提供ありがとうございます(笑)