Nature Remo Cloud APIでより快適なスマートホームライフを

Nature Remo Cloud APIでより快適なスマートホームライフを

はじめに

最近我が家にNature Remoという製品を導入しました。
いわゆるスマートリモコンと呼ばれるもので、スマホアプリを使って出先から家電を操作したり、スマートスピーカーと連携して声で家電を操作できる製品です。
帰宅前にエアコンを付けておいて部屋を温めておいたり、「アレクサ、電気つけて」と言ってこたつに居たまま電気をつけたり、なくしたリモコンを探さなくても良かったり…とても便利になりました。

また、ルールを作成してある条件を満たしたときに家電を操作するといったことも可能です。
例えば、毎朝7時にエアコンをONにするとか、温度が15℃以下になったらエアコンをONにするとかです。

ただし、このルールに設定できるトリガーは1つしか指定できません。
上記の例で言うと、毎朝7時に温度が15℃以下の場合にエアコンをONにするといったことができません。
この問題をNature RemoのAPIを使って解決してみました。

なんとNature Remoは公式でAPIが提供されています。
(購入した理由の半分はAPIが提供されていて遊べそうだからです。)
 

アクセストークンの取得

Nature Remo Cloud APIの仕様は以下にあります。
http://swagger.nature.global/

 

このAPIを使用して家電を操作するには、まずアクセストークンを取得する必要があります。
こちらにアクセスしてログインすると、現在連携しているアプリやサービスの一覧を見ることができます。
私の場合、Amazon Alexa、Googleアシスタント、IFTTTが表示されていました。
 

Nature Remo ホーム画面

 

 

左下にあるGenerate access tokenをクリックすると、新しいアクセストークンを発行することができます。
 

generate access token

表示されたアクセストークンは一度ページを切り替えると再表示できないため、どこかに控えておきましょう。また、アクセストークンが漏洩してしまうと、第三者が自宅の家電を操作できるようになってしまうため十分注意してください。

 

 
 

家電一覧の取得

それでは先程取得したアクセストークン使って、現在Nature Remoに登録されている家電一覧を取得するAPIを叩いてみます。
Nature Remo Cloud APIではauthorizationヘッダーにBearer <Access Token>を指定することで認証を通せます。
使用するのはGET /1/appliancesAPIです。
 
curl -X GET "https://api.nature.global/1/appliances" -H "authorization: Bearer <Access Token>"
アクセストークンが正しければ以下のようなレスポンスが返ってきます。(長いので省略)
家電のIDとどのデバイスに登録されているか、表示名は何か、操作一覧などを確認できます。
我が家の場合、エアコンとテレビ、電気3台を登録しています。
 
[
    {
        "id": <Appliance ID>,
        "device": { ... },
        "model": { ... },
        "type": "LIGHT",
        "nickname": "リビングの電気",
        "image": "ico_light",
        "settings": null,
        "aircon": null,
        "signals": [ ... ],
        "light": {
            "buttons": [
                {
                    "name": "on",
                    "image": "ico_on",
                    "label": "Light_on"
                },
                {
                    "name": "off",
                    "image": "ico_off",
                    "label": "Light_off"
                },
                { ... }
            ],
            "state": { ... }
        }
    }
]
例えば、我が家のリビングの電気を付けたい場合は、以下のようにリクエストを投げてあげます。
Appliance IDには先程取得した家電一覧のIDを指定します。
 
curl -X POST "https://api.nature.global/1/appliances/<Appliance ID>/light" -H "authorization: Bearer <Access Token>" -F "button=on"
家の電気がピカーン💡となるわけですが、curlコマンドで自宅の家電を操作できると感動します。
 

AWS Lambdaで家電をコントロールしてみる

それでは当初の目的であった、2種類上の条件を組み合わせて家電をコントロールしてみます。
今回は、毎朝7時に室温が15℃以下だったら暖房を入れるようにしてみたいと思います。

使用するのは以下2種類のAPIです。
 
  1. GET /1/devices

このAPIではNature Remo本体の情報を取得できます。温度センサーや湿度センサーの値はこのAPI経由で取得します。今回使用する温度センサーの値は、newest_events.te.valで取得できます。この温度で暖房を入れるか入れないか判定します。

  1. POST /1/appliances/{appliance}/aircon_settings
このAPIでエアコンを操作します。
パラメータで設定温度、モード、風量、風向を指定します。
buttonパラメータに空文字を指定すると電源ON、power-offを指定すると電源OFFになります。
地味にハマりましたが、API仕様書を良く読んだら書いてありました。
 
あとはLambdaでゴニョゴニョして…できました!Node.jsです。
環境変数でACCESS_TOKENにアクセストークンを、AIRCON_APPLIANCE_IDにエアコンのIDを保存してあります。
 
const fetch = require('node-fetch');

// アクセストークン
const accessToken = process.env.ACCESS_TOKEN;
// エアコンのAppliance ID
const airconApplianceId = process.env.AIRCON_APPLIANCE_ID;

exports.handler = async event => {
  // 現在の室温を取得する
  const res = await fetch('https://api.nature.global/1/devices', {
    method: 'GET',
    headers: {
      authorization: `Bearer ${accessToken}`
    }
  });
  const data = await res.json();
  const temperature = data[0].newest_events.te.val;
  console.log('temperature', temperature);

  // 室温が15℃以下だったら暖房23℃でエアコンを入れる
  if (temperature <= 15) {
    await fetch(`https://api.nature.global/1/appliances/${airconApplianceId}/aircon_settings`, {
      method: 'POST',
      headers: {
        authorization: `Bearer ${accessToken}`
      },
      body: JSON.stringify({
        temperature: '23',
        operation_mode: 'warm',
        air_volume: 'auto',
        air_direction: '',
        button: ''
      })
    });
  }
  return temperature;
};
 
あとはCloudWatch Eventsを使って、毎朝7時にこの関数が起動するように設定すれば完了です。
 

さいごに

今回はNature Remo Cloud APIを使って自宅の家電を操作してみました。
我が家のダッシュボード画面を作成して眺めてみたり、他の機器のセンサーと連携してみたり、これからも遊び倒そうと思います。
 

採用情報

メンバーズエッジで最高のチームで最高のプロダクトを作りませんか?

最高のプロダクトをつくる 最高のチームで働く

在宅でも、地方でも、首都圏でも。多様な働き方で最高のチームをつくり、お客様のプロダクトパートナーを目指します。アジャイル開発を通じ、開発現場の第一線で活躍し続けたいエンジニアを募集しています。