NatureRemo APIを活用してスマートな生活を構築する
この記事は2023/11/28に作成されました
スマートリモコンに触れていく中で、スマートリモコンの機能をカスタマイズして自由に使いたくなる場面は多いと思います。そんな時に使われるのがAPIです。APIを利用して自宅にIoT環境を構築させていきましょう。
スマートリモコンってなに?
スマートリモコンはインターネット通信技術を搭載していない家電を、スマート家電のようにスマホでの操作を可能にしてくれるデバイスです。無難に人気なスマートリモコンというと、SwitchBotハブとNatureRemoが挙がります。今回はNatureRemoのAPIを使用していきます。
APIについて
Natureの開発者ページに行くと、
Nature Remo クラウドがインターネットに向けて提供するAPIの詳細は API仕様 [Cloud API] を、Nature Remoデバイスがローカルネットワークに提供するローカルのAPIの詳細は API仕様 [Local API] を参照してください。
という記述があります。Nature社のクラウドを利用して機器を利用する [Cloud API]とローカルネットワーク内で完結する[Local API] が存在します。Cloud APIの制限としてNatureアカウント(メールアドレスで特定)につき5分以内に30回以上のリクエストでAPIの呼び出し数制限に抵触してしまい、エラーステータスコード 429 を返すようです。
LOCAL API
LOCAL APIには赤外線信号を取得して、ローカルネットワーク内から利用できる2つのAPIが存在します。事前にRemoデバイスのローカルでのIPを取得してください。赤外線信号を取得するときは[GET]http://192.168.1.1/messagesで取得できます。Remoに向かってリモコンのボタンを押してください。Remoの横に存在する小さな穴が青く点滅したらRemo自体の赤外線信号の受け取りが成功しています。以下はPHP,Curlでその信号を取得する例です。
$headers = array(
'X-Requested-With: local'
);
$ip='192.168.1.1';//仮のIP
$url = 'http://' . $ip . '/messages';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
結果には
format:データ配列の形式と値の単位
freq:IRサブキャリア周波数
data:IR信号
が返ってきて、次の送信の際にこちらのデータを使用します。
赤外線信号を送信するときは[POST]http://192.168.1.1/messagesで送信できます。以下はPHP,Curlで送信する例です。
$headers = array(
"X-Requested-With: local",
"accept: application/json"
);
$postData = '{ "format": "' . $format . '", "freq": ' . $freq . ', "data": [' . implode(',', $data) . '] }';
$ip='192.168.1.1';//仮のIP
$url = 'http://' . $ip . '/messages';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$jsonData = curl_exec($curl);
ここまででLocalAPIを使用して機器から赤外線信号を取得してそれを送信することができました。
CLOUD API
https://swagger.nature.global/
CLOUD APIにて公開されているAPIが一覧で確認することができます。
こちらからAPIを利用するのに必要なTokenを取得してください。以下はTokenを発行したアカウントが登録したデバイス一覧を取得するAPIの実装例です。
$token= 'token';//取得したtoken
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer " . $token
);
$url = 'https://api.nature.global/1/devices';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
成功すると、Nature社のクラウドからユーザーが登録したデバイス情報が返ってきます。
注意点
CLOUD APIで公開されているAPIすべてが利用できるわけではないようです。機器を探すAPIを叩いてみたのですが、アクセス不可のようなメッセージが返ってきました。問い合わせをしたところ、一般ユーザーには公開されていないようです。
まとめ
スマートリモコンについて知らないと利用までのハードルが高いかもしれない。たくさんのリモコンをスマホ一台で操作できる便利さは使ってみないと分からないのでぜひ利用してみてほしい。APIを使用することで、独自のシステムと組み合わせてデフォルトアプリでは出来ないような新しい価値を生み出すことが可能になります。まだまだたくさんのAPIがあるので自分の自宅を快適な環境にしてみてください。
以上になります、ありがとうございました。
プログラマー/K.D