0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでNatureRemoのデータ取得や信号の送信

Last updated at Posted at 2024-05-13

はじめに

この記事はSLP KBIT Advent Calendar 2021、14日目の記事です。
IoTデバイスをパソコンで操作できるようにしてみたいと思って、Nature Remoを使ってセンサーの情報を取得したり、赤外線信号を送信したりしてみました。
Javascriptで書いていこうと思ったのですが、今回はGoogleが提供しているGoogle Apps Sscript(GAS)を使っていきます。GASには便利な機能もあり、前準備も少ないためオススメです。

目次

  1. Nature RemoのAPIにアクセスするためにAccess tokenを生成する
  2. Nature Remoのセンサーからデータを取得する

1.Access tokenの生成

まずは、こちらからNature Remoのサイトにログインしてください。
下にある + Generate access tokenを押すと、Access tokenが表示されます。

余談ですが、Access tokenとはNature Remo以外の外部サービスと接続するために生成されるものです。すでにGoogleやAmazonのスマートスピーカーと連帯している方はAccess tokenが生成されていると思います。
画像1.png
これでAccess tokenが生成できました。
生成したAccess tokenはここでしか表示されないため、Copyを押して、メモ帳などにコピペしておいてください。

アクセストークンは公開しないようにしてください
公開してしまうと外部から家電を操作されてしまいます(他人事)

コピペし忘れた場合は、前のページに戻り、先ほど生成したAccess tokenのRevokeを押して、新たに生成し直してください。

2.センサーのデータを取得

まずはNature Remoのセンサーからデータを取得していきます。
コマンドの参照はhttps://swagger.nature.global で確認できます。
まずはコマンドラインを利用して、以下のコマンドを実行します。

curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer 取得したアクセストークン"

実行すると以下のようにNatureRemoのセンサー情報が出力されます。

[
  {
    "name":"Nature Remo 2",
    "id":"__________",
    "created_at":"2021-05-18T10:49:51Z",
    "updated_at":"2021-11-15T07:44:11Z",
    "mac_address":"__________",
    "serial_number":"__________",
    "firmware_version":"Remo/1.0.79-gbbcb0e8",
    "temperature_offset":0,
    "humidity_offset":0,
    "users":[
      {
        "id":"__________",
        "nickname":"aiueo700",
        "superuser":true
      }
    ],
    "newest_events":{
      "hu":{
        "val":44,
        "created_at":"2021-11-16T12:36:11Z"
      },
      "il":{
        "val":245,
        "created_at":"2021-11-16T08:11:51Z"
      },
      "mo":{
        "val":1,
        "created_at":"2021-11-14T17:48:10Z"
      },
      "te":{
        "val":26.8,
        "created_at":"2021-11-16T13:37:14Z"
      }
    }
  }
]

上からhuが湿度、ilが光度、moが人感センサー、teが温度となっています。

これをGoogle App Scriptで実行していきます。
まずは、Google Apps Scriptにアクセスして、新しいプロジェクトを作ります。
HTTPリクエストの方法についてはこちらを参考にしました。

Nature Remo Cloud APIを通して、サーバーから情報を取得するためにmethod'get'に指定し、承認するためにheaders内にアクセストークンを入れておきます。

const access_token = '取得したアクセストークン';

function nature_remo() {
  const data = getNatureRemoData();
  Logger.log(data[0].newest_events.te.val);
  Logger.log(data[0].newest_events.hu.val);
  Logger.log(data[0].newest_events.il.val);
  Logger.log(data[0].newest_events.mo.val);
}

function getNatureRemoData() {
  const options = {
    method : 'get', 
    headers : {
      'Authorization': 'Bearer ' + access_token
    }
  };
  const data = JSON.parse(UrlFetchApp.fetch('https://api.nature.global/1/devices', options));
  return data;
}

実行する関数をnature_remoに設定して、実行するとそれぞれの値のみ表示されます。
これでデータの取得は完了です。
##信号の送信
まずは信号のデータを取得しておきましょう。以下のコマンドを実行します。

curl -X GET "https://api.nature.global/1/appliances" -H "authorization: Bearer アクセストークンを入力"

実行すると設定しているリモコン(特にエアコン)の情報がたくさん出てきます。
今回は一番簡単なシーリングライトを操作をしていこうと思うので、出力された一部を抜粋しておきます。

{
		"id": "__________",  
		"device": {
                       
		},
		"model": {
			"id": "__________",
			"country": "JP",
			"manufacturer": "panasonic",
			"remote_name": "hk9478-ch2",
			"name": "Panasonic LIGHT 019",
			"image": "ico_light"
		},
		"type": "LIGHT",
		"nickname": "aiueo700",
		"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"
				},
				{
					"name": "on-100",
					"image": "ico_light_all",
					"label": "Light_all"
				},
				{
					"name": "on-favorite",
					"image": "ico_light_favorite",
					"label": "Light_favorite"
				},
				{
					"name": "night",
					"image": "ico_light_night",
					"label": "Light_night"
				},
				{
					"name": "bright-up",
					"image": "ico_arrow_top",
					"label": "Light_bright"
				},
				{
					"name": "bright-down",
					"image": "ico_arrow_bottom",
					"label": "Light_dark"
				},
				{
					"name": "colortemp-down",
					"image": "ico_arrow_right",
					"label": "Light_warm"
				},
				{
					"name": "colortemp-up",
					"image": "ico_arrow_left",
					"label": "Light_cold"
				}
			],
			"state": {
				"brightness": "100",
				"power": "on",
				"last_button": "on"
			}
		}
	}

一番上のidはappliance_id(家電のID)なので、これもメモっておきます。
もちろん公開はしないでください。

次にコマンドラインで信号を送信してみます。
先ほどメモったappliance_idを付け加え、送信したい信号を入力します。-d "button=(ボタンのname)"で実行できます。
今回はシーリングライトをオンにしたいので、-d "button=on"と入力します。

curl -X POST "https://api.nature.global/1/appliances/(appliance_id)を入力/light" -H "authorization: Bearer アクセストークンを入力" -d "button=on"

これでシーリングライトがオンになりました。

では、これをGASで実行させてみたいと思います。
サーバーに情報を送るために、method'post'に指定し、payloadと呼ばれる情報を付け加えます。

const access_token = 'アクセストークンを入力';
const id = {
  light : '(appliance_id)を入力/light'
}

function nature_remo() {
  const data = getNatureRemoData();
  const setData = {
    te : data[0].newest_events.te.val,
    hu : data[0].newest_events.hu.val,
    il : data[0].newest_events.il.val,
    mo : data[0].newest_events.mo.val
  }
  postNatureRemo(id.light, 'on');
}

function getNatureRemoData() {
  const options = {
    method : 'get', 
    headers : {
      'Authorization': 'Bearer ' + access_token
    }
  };
  const data = JSON.parse(UrlFetchApp.fetch('https://api.nature.global/1/devices', options));
  return data;
}

function postNatureRemo(id, name){
  const url = 'https://api.nature.global/1/appliances/' + id;
  const options = {
    method : 'post',
    headers : {
      'Authorization': 'Bearer ' + access_token
    },
    payload : 'button=' + name
  }
  UrlFetchApp.fetch(url, options);
}

これで完成しました。あとはpostNatureRemo()に任意のコードを入れることで様々な家電を操作することができます。
最後に
今回、GASを使った理由はGoogleのGmailやスプレッドシートなどのサービスと連帯することができるからです。ただ、時間がなかったため今回は断念しました。大変モシャモシャセン!
記事を書くのも初めてなので、内容が曖昧なところがあります。今後、随時修正していきますのでよろしくお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?