1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GravioとNature Remoで家電をコントロールする

Posted at

Gravioでいろんな家電を制御できるといいなぁと思うことがある。ずいぶん前にいろいろ調べてみたことがあったんだけど、どれもクラウド経由になり、エッジ志向なGravioとは相性悪いなぁと思っていた。(できなくないけど美しくない)

で、最近ふとこちらの記事を見つけた。このNature Remoという赤外線リモコンを真似っこして家電を制御するガジェット、以前から知っていたんだけど、ローカルのAPIがあるのは知らなかった。
公式にAPIをSwaggerで公開してるみたいだし、これはいいねと早速買ってGravioとつないでみました。

ちなみに、Nature RemoはRemoとRemo miniというのがあって、今回は対応距離が長ければ長いほどいいだろってのでこの黒いやつを買いました。その他機能の比較は公式ページを見てね。
image.png

使用環境

  • Raspberry Pi 4 Model B w/8GB RAM
  • Ubuntu Server 20.04.2 LTS
  • Gravio HubKit v4.3.0-6807
  • Gravio Studio v4.3.4198.0

手順

Nature Remoのセットアップ

Nature Remoのセットアップはかんたんです。Nature Remoを付属のケーブルで電源につなぎ、アプリをダウンロードしてセットアップするだけです。
詳しくはマニュアルもしくはアプリを参照してくださいね。

Nature RemoのIPアドレスを見つける

Nature RemoはWiFiでローカルネットワークに接続します。セットアップ時にWiFiのSSIDとパスワードを指定したと思います。
これを見つけるには、Nature Remo Local APIのBonjourのセクションに書いてあるとおり、dns-sd コマンドを使って調べます。

まずは _remo._tcp のサービスを見つけます。

% dns-sd -B _remo._tcp
Browsing for _remo._tcp
DATE: ---Wed 15 Nov 2017---
12:27:52.349  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
12:27:52.603  Add        2  12 local.               _remo._tcp.          Remo-XXXXXX

インスタンス名がわかりますので、.localをつけてIPアドレスを取得します。

% dns-sd -G v4 Remo-XXXXXX.local
DATE: ---Wed 15 Nov 2017---
12:30:58.520  ...STARTING...
Timestamp     A/R Flags if Hostname                               Address                                      TTL
12:30:58.735  Add     2 12 Remo-XXXXXX.local.                     10.0.1.3                                     120

これでOKですね。

ちなみに、ルーターの画面等で簡単に見つけられることもあります。私の家のTP-Linkのアプリではこんな感じで見えました。自動取得の名前がちょっと分かりづらかったですけど、MACアドレスでわかりました。MACアドレスはNature Remoのアプリで知ることができます。
image.png

赤外線のコマンドを取得する

赤外線のコマンドを取得するのも簡単です。ローカルAPIは基本的にhttp://<ipaddress>/messagesのエンドポイントにリクエストを出します。GETだと直近にRemoが受信したコマンドを返してくれます。POSTでRemoからコマンドを送信します。

なので、簡単なのはcurlコマンドを実行することです。

一度Nature Remoに向けてリモコンのボタンを押します。すると、ケーブルが出てる側にあるLEDが青く光ります。その後、次のようにコマンドを実行すると表示されるのが赤外線のコマンドです。

ubuntu@gravio-rpi4-8g:~curl http://192.168.0.40/messages -H "X-Requested-With: local"
{"format":"us","freq":38,"data":[8989,.....]}
ubuntu@gravio-rpi4-8g:~$

これをコピペしておきましょう。

で、これだけならGravioでも調べることができます。

image.png

HTTP Requestコンポーネント一つ。簡単ですね。ヘッダをPreMappingsで指定するのを忘れないようにしてください。
また、URLはhttpsではなくhttpで始まりますので、ここも注意してくださいね。

実行すると下のようにコンソールに結果が表示されますので、これをコピペしておいてください。
image.png

赤外線コマンドを実行するアクション

最後に赤外線コマンドを実行するアクションを作ります。
先程も言ったように実行するのもほぼ同じです。メソッドをPOSTに変えて、先程コピペしておいたコマンドをデータとして送ります。データとして送るにはいつものように cv.Payload にマッピングすればいいですね。
image.png

これでアクションを実行するとリモコンの代わりにGravioから家電が制御できたと思います。
うまくいかないようであれば、まずNature Remo単体で動かしてみるのがいいと思います。

ハマリポイント

今回、最初に使ったのが部屋のライトだったのですが、この部屋のライト、Bluetoothのリモコンだったために何度Nature Remoに受信させても反応なしだったんですね。まぁ、よく見ると赤外線の送信部がないので当たり前なんですが。まぁ、ライトのリモコンくらいだと赤外線だろうという固定観念でしばらくハマりました。

あと、curlコマンドを使って試しにコマンドを送ってみるかもしれませんが、そのときLinuxではうまく行ったけどWindowsのコマンドプロンプトだとうまく行かないというのがずっとありました。コマンド自体は同じなんですが、データを渡すときにJSONなので "が入ってますね。これを安直に全体を'でくくってしまっていたために、Windowsのcurlコマンドでは動かなかったのです。全体を"でくくって、キーや値の"\"というふうにエスケープすればいけました。

活用法

さて、Gravioでどう活用するのがいいかなぁといろいろ考えてみたんですが、まぁ、まずはエッジということで考えればいいんですかね。Nature Remo自体いろいろできるので、例えば温度が上がったらエアコン入れるとか、家に近づいたらエアコン入れるとか、朝エアコン入れるとかいろいろ単体でできてしまいます。ただ、このあたりはたぶんクラウド経由なので、エッジでやりたければGravioからタイマー使ったり温度センサー使ったりすることは可能ですね。
あと、赤外線リモコンがついてれば何でもいけますので、扇風機とかサーキュレーターあたりのショボい家電をコントロールするのにはいいかもしれないですね。GravioといえばCO2センサー。CO2が上がってきたら換気するためにサーキュレーター回すとかはいいかもしれません。

参考にした記事・サイト

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?