最近NatureRemoの検索が多いと思ったら先月正式発売だったんですね。先行予約で9,980円、クラウドファンディングで買った時より安いとな…。
公式では2016年からapi近日中に公開と謳われていますが、このままだと年を2回またいでしまいます。一応FAQにapiについての言及はあるのでIFTTTとは別に公開するのだとは思ってます。個人的には人感・ノイズセンサー機能の公開の方が気になりますよね、夜起きた時の証明とか外出時の消し忘れ防止に役立ちそうです。
今回紹介するapiは公式に公開されているapiではないため突然使用不可になる可能性もあります。「At Your Own Risk」です。
手順1apiのパスを把握する
キャプチャアプリ選定
まずはNature Remoのモバイルアプリがどこと通信しているか把握します。
Androidでパケットキャプチャアプリを検索してみると「tPacketCapture」と「パケットキャプチャー」が有名らしい。
SSL通信のため証明書をインストールしてキャプチャしようとしましたが、なぜかキャプチャ中はアプリの通信が失敗して「No Data」となってしまいました(他のアプリは通常通り通信可能)。
スマホ単体でのキャプチャは諦めてMac用のアプリを探すことに。
「Wireshark」が有名ですがSSL通信を復号化できないようなので「Charles」を使ってみます。CharlesはJAVA製なのでWindowsでもLinuxでも使用可能です。
コマンドの送信先を把握する
ではCharlesの設定を済ませて実際に通信をキャプチャしてみます。
試しにテレビの電源を点けたり消したりしてみると…
api感のあるURLと通信した!
また、スピーカーの電源を入れるとまた別のURLと通信することからapiの叩き分けはURLで行っていることがわかります。
通信内容を把握する
通信内容はPOSTで”access_token”というデータを送っていることもわかります。おそらくapiの認証用に使っているもの。この”access_token”に関してはどのapiでも同一のものを使っているのでNature Remoごとに一意のトークンが払い出されているっぽくみえますね。
通信内容まとめ
ここまでをまとめると- 操作したい赤外線パターンのapiごとに用意されているURLに対して
- “access_token”をPOSTで送信すれば
NatureRemoを操作できる気がする
手順2 Macでapiを叩いてみる
Androidで試す前に、本当にapiが動くのかターミナルでPOSTしてみましょう。
$ curl -d access_token={自分のアクセストークン} https://official.api.nature.global/1/signals/{送信したいシグナルのapi}/send
動く!動くぞ!体感1秒もかからないぐらい、ここまできたらいくらでも応用できる気がします。
手順3 Androidでapiを叩いてみる
使用アプリ
今回は老舗自動化アプリTaskerを使用してPOST通信を実装します。POSTができれば他のアプリでもやることは同じ。
iPhoneであれば IFTTT(イフト) を使えばできます、NatureRemoのチャンネル用意されているけどこちらの方が直接Nature Remoのサーバと通信するからレスポンス早そうな気がしてます。
Taskerタスクの設定
Taskerタスクを以下のように作成する。- Netを選択
- HTTP Postを選択
- Server:Portに控えたURLを入力、Data/Fileにアクセストークンを入力
動作確認
上記のように設定して実行ボタンを押せばうまく動いているか確認出来ます。Wifi・4g両方で問題なく動くことを確認。
あとは既存のタスクに入れ込めば、朝自動的にテレビをつけて目覚ましにしたり帰宅と同時に自動的に照明をつけることも可能になるので試行錯誤を楽しんでください。
まとめ
URL部分に関しては変数化して他のタスクから呼び出せるようにした方が汎用性が高くなっていいと思います。api部分を配列で渡して一気に実行できるようにすると複数のリモコンを一気に動作させられていいかもしれないとか。
現在のNatureRemoアプリだけではロケーションしかトリガーにできませんが、自分でトリガーを設定できるようになるとスマートホーム化が捗りますよ!