Nature Remo Local API でローカルからリモコン信号を送る

2020-11-26Nature RemoTech

Nature Remo には、ローカル用の API が用意されています。
サーバ障害時やインターネット接続障害時でも、Local API 経由であれば利用可能です。

※以前の記事で触れた Cloud API とは別物

Nature Remo Local API

公式サイトの Swagger に詳細が記載されています。
https://local-swagger.nature.global/

Remo で登録済みのリモコン信号はサーバ側に保存されているらしく、今回使用するローカルから呼び出すことはできません。個別に赤外線信号を指定する必要があります。

IP アドレスを調べる

Remo の持つ IP が分かっていればスキップ可能。(ルータの管理画面で調べるのが楽)
まずはじめに、Remo が利用しているホスト名を確認。dns-sd -B _remo._tcp で検索できます。

$ dns-sd -B _remo._tcp
Browsing for _remo._tcp
DATE: ---Thu 26 Nov 2020---
22:53:10.166  ...STARTING...
Timestamp     A/R    Flags  if Domain   Service Type   Instance Name
22:53:10.388  Add        2   4 local.   _remo._tcp.    Remo-1ABCDE

見つかった Instance Name 末尾に .local を付加すれば呼び出しできます。
IP アドレスまで調べたい場合は dns-sd -G v4 Remo-1ABCDE.local でも取得可能。

$ dns-sd -G v4 Remo-1ABCDE.local
DATE: ---Thu 26 Nov 2020---
22:56:47.590  ...STARTING...
Timestamp     A/R    Flags if Hostname             Address      TTL
22:56:47.591  Add 40000002  4 Remo-1ABCDE.local.   10.0.0.99    120

赤外線信号の受信

送信したいリモコン信号を JSON 形式で取得します。
あらかじめ、Remo に向けてリモコンの赤外線信号を送っておきましょう。(青く光れば OK)

その後 http://<Remo IP>/messages エンドポイントを叩けば JSON が返ってきます。
X-Requested-With ヘッダがないと怒られるので適当に付けます。

$ curl http://10.0.0.99/messages -H "X-Requested-With: local"
{"format":"us","freq":37,"data":[3429,1784,384,482,381,480,386,1347,386,1349,384,479,386,1348,386,481,384,477,387,479,380,1354,388,482,379,477,388,1348,388,478,386,1347,384,480,388,1344,386,480,376,489,384,1348,383,480,385,483,381,478,388,477,386,1345,388,477,389,1347,383,1350,384,475,389,1348,385,479,385,477,388,479,385,479,387,1347,384,480,388,472,389,1347,388,472,394,472,389,65535,0,9093,3428,1775,390,474,390,475,390,1342,390,1341,394,471,412,1319,393,473,418,450,388,475,389,1342,391,479,379,479,411,1320,396,470,412,1321,391,472,412,1322,412,453,381,484,411,1320,411,458,410,448,414,453,408,456,410,1322,415,452,417,1312,413,1322,408,458,410,1323,410,454,411,457,407,459,409,450,413,1322,410,457,387,474,411,1324,408,457,409,457,412]}

赤外線信号の送信

使用したいリモコン信号を JSON 形式で POST するだけです。
先ほど取得した文字列をそのまま送ってみます。

$ curl -XPOST http://10.0.0.99/messages -H "X-Requested-With: local" -d '{"format":"us","freq":37,"data":[3429,……]}'
{}

成功すれば Remo から信号が送信され、レスポンスとして {} が返ってきます。
JSON さえ把握しておけば POST だけでリモコン送信可能です。

使いやすくしてみる

JSON を記録しておいて毎回 POST するのも大変なので少し工夫してみましょう。
ちょっとしたリクエストを投げたいときには iPhone のショートカット機能が結構便利です。

  • テキストモジュールに JSON をセット
  • URL モジュールにエンドポイントをセット
  • リクエストモジュールで POST を送信

の3ステップだけで実現できます。

Nature Remo Local API を iPhone  から呼び出す(1)
Nature Remo Local API を iPhone  から呼び出す(2)

作成後はホーム画面やウィジェットに配置すればワンタップで実行可能。
iOS の機能でスケジュール実行やトリガー実行もできるので使い勝手も悪くありません。

サンプルとして実際に作成したショートカットを置いておきます。
https://www.icloud.com/shortcuts/70d21ce1d7d949b39cf8836a8538effd

HTTP リクエストを投げているだけなので、Android でも同様のアプリケーションを使えば割と簡単に実現できるはず。

どのシーンで活躍するか

先日のようにクラウド側で障害が発生したときや、オフラインで使う場合なども Local API が活躍しそうです。