「Nature Remo」スマートリモコンのAPI使用方法
初めに
自宅のスマートホーム化をしてはや数年。当初はirMagicianってので赤外線でテレビとかいじってましたが、あまり情報が整備されておらず赤外線もあまり遠くまで届かないしで趣味程度にしか使えず結構辛かった。
スマートリモコンの存在を知って、すごく便利になったなーと思っていました。調べていくうちにNature RemoならAPI公開されててなんでもできるやん!って興奮したのを覚えています。
セサミやスイッチボット製品、それにGoogleとamazonで周りを埋めて、割りを便利になってきた。多分もう戻れない。
特に以下3社の製品には大変助かっています。
1. Nature Remo (スマートリモコン)
2. SwitchBot (スマートスイッチ)
3. SESAME (スマートロック)
それらのAPIから操作方法をまとめます。今回はNature Remoに関してのみです。
0 前提
すでにNature Remoを導入していて、スマホアプリ側でもろもろのセッティングが終わっている事とします。アプリで使っているログイン情報を使用します。
1 Nature Rremo - アクセストークンの取得とテスト
アクセストークンはこちらから
https://home.nature.global/
ログインメールアドレスはNature Remoアプリで使っているものにしてください。ログインした後に、"+Generate access token"ボタンを押し、出てくるコードをコピーしておきます。
コマンドラインを使っての確認をします。こちらのcurlコマンドを実行します。
curl -X GET -H "authorization: Bearer 取得したアクセストークン" "https://api.nature.global/1/appliances"
実行すると(アプリに複数登録してあると)長いjsonが返されます。(圧縮されてますが、"brew install jq" して末尾に " | jq" つければjsonが綺麗になります。)
公式情報はこちら
https://developer.nature.global/
APIのエンドポイントはこちらを確認します
https://swagger.nature.global/
2 実行テスト
アプリに登録したデバイスによって返されるjsonは区切られてますが、主に3種類に分かれます。
①プリセットから選び、単純に赤外信号を送るだけのもの
②プリセットから選び、パラメータを入れた上で赤外信号を送るもの
③赤外線信号を自分で登録したもの
①はTVなどですね。アプリ内でメーカーやブランドなどを設定選べるものです。その中で電源つけるだけなどの、ボタンを押すだけで済むものです。
②は特にエアコンです。アプリでの設定までは①と同じだが、実際に操作するときに、温度や風量などを設定した上で赤外線を送信するものです。
③はRemo本体に向けて赤外線を覚えさせたものです。
次にjsonの①〜③それぞれの部分を利用して実際に動かしてみます。
2-1 ①プリセットから選び、単純に赤外信号を送るだけのもの
例えば以下のようなjsonが返されます。
{
"id": "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa",
"device": {
"name": "Remo mini",
"id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.xxx-xxxxxxxx",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": {
"id": "ccccccccc-cccc-cccc-cccc-ccccccccc",
"country": "JP",
"manufacturer": "xxxxxxxxx",
"remote_name": "xxxxxxxxxx",
"name": "xxxxxxxxxxxx",
"image": "ico_tv"
},
"type": "TV",
"nickname": "テレビ",
"image": "ico_tv",
"settings": null,
"aircon": null,
"signals": [],
"tv": {
"buttons": [
{
"name": "power",
"image": "ico_io",
"label": "TV_power"
},
.....
]
},
},
一番上がアプリに登録されたデバイスのIDです。ここを使います。
curl -X POST "https://api.nature.global/1/appliances/aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa/tv" -d "button=power" -H "Authorization: Bearer アクセストークン"
"button=buttons.name"を送ります。dataパラメータ(-d)をつけてPOSTします。これでテレビの電源がオンオフできるはずです。
①の場合のエンドポイントの末尾は、tv以外にlightの場合もありますね。何があるかは以下ページを参照ください。
2-2 ②プリセットから選び、パラメータを入れた上で赤外信号を送るもの
次にエアコンを操作してみます。エアコンに関しては「/1/appliances/{appliance}/aircon_settings」のエンドポイントを使います。
{
"id": "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa",
"device": {
"name": "Remo mini",
"id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.xxx-xxxxxxxx",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": {
"id": "ccccccccc-cccc-cccc-cccc-ccccccccc",
"country": "JP",
"manufacturer": "メーカー名",
"remote_name": "xxxxxxxx",
"series": "",
"name": "xxxxxxx",
"image": "ico_ac_1"
},
"type": "AC",
"nickname": "エアコン",
"image": "ico_ac_1",
"settings": {
"temp": "26",
"temp_unit": "c",
"mode": "cool",
"vol": "1",
"dir": "still",
"dirh": "still",
"button": "power-off",
"updated_at": "xxxxxxxxx"
},
"aircon": {
"range": {
"modes": {
"auto": {
"temp": [
"-2",
"-1.5",
"-1",
"-0.5",
"0",
"0.5",
"1",
"1.5",
"2"
],
"vol": [
"1",
"2",
"3",
"4",
"auto"
],
.....
},
.....
},
},
},
},
"settings"に入っているものがRemoに入っている現在の設定ですね。
パラメータは以下で指定できます。値は最初のGETで帰ってきたjsonの値が対応範囲です。
operation_mode, temperature, air_volume, air_direction, button
ただし、buttonに関しては空白か"power-off"です。(これは私の家だけかも?)
curl -X POST "https://api.nature.global/1/appliances/aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa/aircon_settings" -d "button=&operation_mode=warm&temperature=29&air_volume=4" -H "authorization: Bearer アクセストークン"
この場合は、暖房、設定温度29度、強さ4でエアコンをつけています。
2-3 ③赤外線信号を自分で登録したもの
次に自分で登録した信号を送ってみます。この場合は「/1/signals/{signal}/send」を使います。この場合のみ、idはcccc...の部分を使います。
{
"id": "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaa",
"device": {
"name": "Remo mini",
"id": "bbbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbb",
"created_at": "xxxxxxxx",
"updated_at": "xxxxxxxx",
"mac_address": "xxxxxxxxxxx",
"serial_number": "xxxxxxxxx",
"firmware_version": "Remo-mini/x.x.xxx-xxxxxxxx",
"temperature_offset": 0,
"humidity_offset": 0
},
"model": null,
"type": "IR",
"nickname": "リビング照明",
"image": "ico_light",
"settings": null,
"aircon": null,
"signals": [
{
"id": "ccccccccc-cccc-cccc-cccc-ccccccccc",
"name": "照明オン",
"image": "ico_on"
},
.....
]
},
curl -X POST "https://api.nature.global/1/signals/ccccccccc-cccc-cccc-cccc-ccccccccc/send" -H "accept: application/json" -H "authorization: Bearer アクセストークン"
これだけで赤外線信号が送れます。もう簡単ですね。
まとめ
コマンドラインから操作できたので、これをPythonだったりGoogle App Scriptだったりで操作すれば広がりますね。