Nature Remo Cloud API について(まとめ)
どうも、かげさんです(^^)/
あなたがこの記事を読んでいるのは何回目でしょうか?
初めての方、いらっしゃい!
複数回目の方、再訪問ありがとです(・∀・)
この記事を読むとスマートリモコン「Nature Remo」シリーズやエネルギーをモニタリングする「Nature Remo E」シリーズを PC から操作する Nature Remo Cloud API を curl から使う方法が分かります。
さて「jsonデータを整形するjq(使う前の準備まとめ)」で紹介したように jq の準備ができたら早速、Nature Remo を PC から操作できる API を使いたいところです。
が、先に API 概要があるページを説明した方が良いでしょう。
API 概要のページ
まずはリンクから https://developer.nature.global/jp/overview
さてこのページなんだが、一見して分かりにくいところとして
ただのテキスト文書としてしか思えない文字色を使っているところが挙げられる。
リンクになっているところにアンダーラインがない上、通常文字:灰色+リンク文字:黒となっており、リンク箇所が保護色にみたいになっているのだ。
よくよく見ると5箇所がリンクになっていて、そのリンク先を見に行く必要があるんだが、リンク文字列がすでに分かりにくい…(´・ω・`)
リンクになっているのは、以下の5箇所だ。
API仕様[Cloud API]
API仕様[Local API]
home.nature.global
RFC7231
swagger.nature.global
ちょっと説明も必要なので、そこの先に説明をする。
Nature Remo の API は2種類ある
単純に Nature Remo の API という場合、インターネット経由で使う Cloud API のことだと思って良いでしょう。
Nature Remo Local API
Local API の方は、スマートリモコン Nature Remo シリーズの操作に使います。
具体的には、受信した最新の赤外線(IR)信号を取得したり、赤外線(IR)信号を送信するのに使います。
Local API は Nature Remo クラウドで障害が発生した場合などでも使えるのがポイントです。
Local API のことは、別の記事として書くことにして、この記事では Cloud API について書いていきます。
Nature Remo Cloud API
Cloud API は、Nature Remo クラウドを利用してスマートリモコン Nature Remo シリーズや エネルギーをモニタリングする Nature Remo E シリーズで使う。
Nature Remo クラウドで外部に公開している API の機能の URL (エンドポイントという)は、22個存在する。しかし、全体で22個あるものの情報の登録/更新/削除は、スマホの「 Nature Remo アプリ」を使って操作した方が便利そう。
なので実際に使うのは、下記のものが中心になると思う。
- スマートリモコン Nature Remo 本体が持つセンサー情報を取得
- 登録した電化製品の情報を取得
- 電化製品のリモコンを操作
電化製品の情報を取得には Nature Remo E シリーズと接続するスマートメーターの情報取得も含まれる。
Nature Remo クラウドへの接続には、 OAuth2 (オーオース2.0)という認証/認可の仕組みを使う。
このときに必要になるのが、アクセストークンという文字列だ。
これを事前に取得する必要がある。
Nature Remo のアクセストークンを取得する
https://home.nature.global/
にアクセスします。
メールアドレスを入力するとログイン用URLが届きます。
ログインして求められる権限を許可します。
Access tokens の画面にある「Genarate access token」ボタンを選択。
アクセストークンは一度しか表示されないため、「Copy」ボタンを選択して安全な場所に記録します。
アクセストークンを流出させてしまうと、Nature Remo で操作できる家電に外部からアクセスされるので注意しましょう。
curl コマンドで Nature Remo Cloud API を使う
Nature Remo Cloud API を使う方法としては、curlコマンド、Python、JavaScriptなどの開発言語を使う方法があります。
簡単に検証できるのは、インストール作業が不要なcurlコマンドです。(Windows 10 以降や Raspbery Pi の OS ならたぶん標準で入っている)
もともと curl コマンドで実行するつもりで「jsonデータを整形するjq(使う前の準備まとめ)」を書いたので、最初は curl コマンドでのやり方から紹介します。
この記事では Windows のコマンドプロンプトで使う curl で説明します。
ここで Windows のコマンドプロンプトと「ことわり」を入れているのは、実行環境でスペースを含むパラメータを与える時のくくり文字が異なるためです。
例えば、OAuth2のヘッダを入力する際、"Authorization: Bearer XXXXXXXX"というヘッダを付けます。
この時、Windows のコマンドプロンプトだとダブルクォート「"」でのくくる必要があります。
Linux 系で curl を使うときはシングルクォート「'」でくくります。
Windows でも PowerShell で curl を使う場合は、ダブルクォートでも、シングルクォートでも良いのですが、Windows のコマンドプロンプトで curlを使うときは、ダブルクォートでくくらないといけません。
この違いのため、curl コマンドは Linux系で使われることが多いコマンドのため、ネットでサンプルとして拾ってきた curl コマンドの例を Windows のコマンドプロンプト上の curl で使うとエラーになるのです。
ちょっと余談をしてしまったが、早速、Nature Remo デバイスの情報を取得してみよう。
サンプルになるCurlコマンドを得る方法は、下記の通りだ。(画像はクリックで拡大します)
[ GET /1/devices ] をクリックして開く。
[ Try it out ] ボタンをクリック。
[ Execute ] ボタンをクリック。
すると Curl という欄が表示される。これがサンプルである。
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json"
ただし、このままでは OAuth2 による認証がされていないため、Server response が 401 Error (認証エラー)になっている。
このため、サンプルの Curl コマンドに OAuth2 認証をするヘッダ「 -H "Authorization: Bearer 取得したアクセストークン"」を付ける必要がある。
ヘッダを付けて実行すると https リクエストの結果(レスポンス)である json 形式のデータが返ってくる。
ただし、整形されていない json データのため、読みづらい。
そこで、パイプで jq を使って json データを整形する。( jq のダウンロードは「jsonデータを整形するjq(使う前の準備まとめ) 」を参照)
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer 取得したアクセストークン" | jq .
アクセストークンなどをマスクした状態で結果を表示すると、こんな感じになる。
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1081 100 1081 0 0 1081 0 0:00:01 --:--:-- 0:00:01 1356
[
{
"name": "Remo E lite",
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"created_at": "2022-01-25T14:43:37Z",
"updated_at": "2022-01-25T14:44:04Z",
"mac_address": "XX:XX:XX:XX:XX:XX",
"bt_mac_address": "XX:XX:XX:XX:XX:XX",
"serial_number": "4W1XXXXXXXXXXX",
"firmware_version": "Remo-E-lite/1.3.9",
"temperature_offset": 0,
"humidity_offset": 0,
"users": [
{
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"nickname": "かげさん",
"superuser": true
}
],
"newest_events": {}
},
{
"name": "Remo",
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"created_at": "2021-06-20T10:07:47Z",
"updated_at": "2022-02-10T14:19:51Z",
"mac_address": "XX:XX:XX:XX:XX:XX",
"bt_mac_address": "XX:XX:XX:XX:XX:XX",
"serial_number": "1W3XXXXXXXXXXX",
"firmware_version": "Remo/1.6.6",
"temperature_offset": 0,
"humidity_offset": 0,
"users": [
{
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"nickname": "かげさん",
"superuser": true
}
],
"newest_events": {
"hu": {
"val": 41,
"created_at": "2022-02-05T14:06:34Z"
},
"il": {
"val": 64,
"created_at": "2022-02-05T14:10:32Z"
},
"mo": {
"val": 1,
"created_at": "2022-02-05T14:05:42Z"
},
"te": {
"val": 20.4,
"created_at": "2022-02-05T14:09:34Z"
}
}
}
]
ちゃんと Remo E lite と Remo の情報を取得できている。
ちなみに Remo の newest_events の部分が、Nature Remo 3 本体のセンサーの情報で val が値である。
・hu:湿度(humidity)
・il:照度(illuminance)
・mo:人感(motion)
・te:温度(temperature)
なお、人感センサーは 0 と 1 で表現されており、0:人がいない、1:人がいるという意味だが、ここでいう「人がいる/いない」は「動く熱源」で検知しているようだ。
情報ソースはコチラの記事「Nature Remoの人感センサーは、「動く熱源」を感知してる?【まとめ】」
Nature Remo Cloud API が使えない時
さて、Nature Remo Cloud API が使えない時のことも書いておこう。
公式サイトの「【11/26 11:12更新】システム障害のお詫びと復旧のお知らせ」を見ると Nature Remo クラウドは、AWS(アマゾン・ウェブ・サービス)を利用していて、AWS での障害の影響を受けるようですね。
「Nature Remo が赤点滅して正常に動作しない」の図解から、AWS で障害が起きたときは、Nature Remo が赤く早い点滅(1秒間に数回点滅)するのでしょう。
AWS の復旧を待つ必要がありそうです。
「赤く早い点滅の解決策が知りたい」にも解決のためのステップが載っているので参考になるかもしれません。
なお、遅い赤点滅(1秒間に1回)の場合、Nature Remo と Wi-Fi ルータ間の問題なので、Wi-Fi ルータをリセットすると良いでしょう。
以前にかげさんも Wi-Fi ルータが不調時にこの状態になり、Wi-Fi ルータをリセットで復旧したことがあります。
ほかにも使えないケースはあるかもしれませんが、分かる範囲ではこんなところです。
ここまではOKだ
コメント
このブログの新着コメントをRSSリーダに登録する為のxml