以前の記事でNature Remoというスマートリモコンで生活の未来度合いを向上することができたという記事を書きました。今回はそのRemoの活躍の場を広げるためプログラムから操作する…つまりはAPIを使って操作してみようと思います。加えてn8nでフローから操作もやってみようと思います。
背景
Nature Remoはスマホやスマートスピーカーから家電を簡単に操作することができるスマートリモコンです。私はその中でもNature Remo miniという端末を使用しています。Remo自体は紹介記事を書いていますのでよかったら読んでみてください。
また、IFTTTというサービスを活用することでワークフローを作成して、タイマーや居場所、SNSなどで設定した条件を満たしたときにRemoから家電を操作することができます。しかしIFTTTは最近無料で使用できる範囲が狭くなり使い勝手が悪くなってしまいました。 (私は元々使ってなかったので関係はなかったですが…)
そんな中、IFTTTの代わりとしてよく名前が挙がっているのがn8nです。n8nは無料で色々なサービスの連携/自動実行フローを作成できるのOSSのツールです。
n8nにRemoが公式に対応しているわけではないですが、RemoにはAPIが用意されているためHTTPSリクエストで家電を操作することができます。今回はこのAPIとn8nを使ってちょっと違った遠隔操作をしてみようと思います。
アクセストークンを取得する
APIを使用するためのアクセストークンを取得していきます。というわけでまずは home.nature.global にアクセスしてアクセストークンを作成します。
ページにアクセスしたらGoogleアカウントで認証するかNatureに登録しているメールアドレスを入力してログイン用のメールを送信してもらってください。ログインができると「home.nature.globalがRemoへのアクセスをリクエストしています。」というページが表示されるので「許可する」を選択して完了です。
権限の確認が終わると「Generate Access Token」のボタンが表示されます。このボタンを押すとアクセストークンが取得できます。一度ページを離れてしまうとアクセストークンは表示されないのでちゃんとメモしておくようにしてください。また、このトークンがほかの人に知られてしまうと、家電を好きなようにされてしまうので、絶対に外部に漏れないようにしてください。
これでアクセストークン取得完了です。
APIを使ってみる
トークンが取得できたので、n8nでワークフローを設定する前にAPIを使ってみます。APIはHTTPSリクエストで叩くことができるので、リクエストを飛ばせればなんでも大丈夫ですが、今回はcurlコマンドでやってみます。というわけで下記のコマンドを実行してみます。[アクセストークン]
のところには1つ前の手順で取得したトークンで書き換えて実行してください。
$ curl -H "Authorization:[アクセストークン]" https://api.nature.global/1/appliances
これによりRemoに登録されている家電とそれぞれに実行できる操作の一覧を取得することができます。コマンド実行時に大切なのがヘッダーとして付与しているAuthorization
です。基本的にAPIを叩くときには必須の項目になります。そして、このコマンドで取得できる家電や操作にはIDが振られています。APIで家電を操作する際にはこのIDをパラメータとして指定するため操作したいIDはメモしておいてください。
今回は照明を操作してみようと思います。照明の操作には先ほどの取得した一覧からIDを持ってきます。
[
{
"他の家電情報"
},
{
"id": "※※※※※※ ここのIDが大事 ※※※※※※",
"device": {
"...Remoの情報..."
},
"model": {
"...照明自体の製品情報..."
},
"type": "LIGHT",
"nickname": "照明",
"image": "ico_light",
"settings": null,
"aircon": null,
"signals": [],
"light": {
"buttons": [
"...ボタン類..."
],
"state": {
"...明るさやON/OFFなど..."
}
}
},
{
"他の家電情報"
}
]
上記が一覧取得の結果を抜粋したものになりますが、この中の「※※※※※※ ここのIDが大事 ※※※※※※」部分に書かれているID
を使って照明を操作します。操作にはまたcurlで今度はPOSTします。
$ curl -H "Authorization:[アクセストークン]" -X POST -d "button=on" https://api.nature.global/1/appliances/[照明のID]/light
これを実行すると照明が点灯するはずです。逆に消すときはbutton=on
の部分をbutton=off
にすれば大丈夫です。ちなみにこのボタンの設定値は先ほどの一覧取得した中のbuttons
内name
の項目で確認することができます。ここまでできればあとはプログラムから叩いてもいいし煮ても焼いてもです。
n8nから実行する
さて本記事のメインでありながら、正直蛇足っぽいn8nからAPIを叩くフロー作成をやっていきます。とはいえここまでで動くことは確認できているのでn8nのHTTPリクエストノードに設定してあげるだけで動作します。
ワークフローの完成イメージは上記の通りです。ただ動かすだけであればSTART含め2つのノードだけで作ることもできますが、一応将来性を考えトークンや照明IDの設定はSETノードに切り分けています。
SETには以下のように設定したい値を登録してあげるだけで大丈夫です。設定後一度ノードを実行してあげると次のノードでこの値を使用することができます。
次がメインのHTTPリクエストノードです。このノードでは基本的にcurlで叩いた値とSETノードで登録した値を登録してあげれば大丈夫です。SETノードで登録した値を使うには各入力欄の右側にある歯車マークから「Add Expression」を選択して「Nodes」からSet
→Values
→String
から選択することができます。あとはcurlで試した通りにHeaderとParametersに登録してあげるだけです。
これでフローは完成です。最後にフロー実行ボタンを押して正常に照明が操作できるかを確認してみてください。
エクスポートファイル (クリックで展開)
{
"name": "Remo-Light",
"nodes": [
{
"parameters": {},
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
200,
0
]
},
{
"parameters": {
"keepOnlySet": true,
"values": {
"string": [
{
"name": "Authorization",
"value": "[アクセストークン]"
},
{
"name": "Light-ID",
"value": "[照明ID]"
},
{
"name": "button",
"value": "on"
}
]
},
"options": {}
},
"name": "Set request data1",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
350,
0
]
},
{
"parameters": {
"requestMethod": "POST",
"url": "=https://api.nature.global/1/appliances/{{$json[\"Light-ID\"]}}/light",
"options": {},
"bodyParametersUi": {
"parameter": [
{}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "Authorization",
"value": "={{$json[\"Authorization\"]}}"
}
]
},
"queryParametersUi": {
"parameter": [
{
"name": "button",
"value": "={{$json[\"button\"]}}"
}
]
}
},
"name": "Turn Light1",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"position": [
500,
0
]
}
],
"connections": {
"Start": {
"main": [
[
{
"node": "Set request data1",
"type": "main",
"index": 0
}
]
]
},
"Set request data1": {
"main": [
[
{
"node": "Turn Light1",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {},
"id": "7"
}
オマケとして、ここで作成したフローをエクスポートしたjsonファイルを載せておきます。使用する際はSETノード内のトークンと照明IDを修正してください。
終わりに
さて、そんなわけで今回はRemoとn8nの連携をやってみました。APIを使うことで自分のプログラムからでも操作できるようになるのでRemoの適用範囲をだいぶ広げることができると思います。
今回紹介した内容だけではちょっと物足りない気もしますが、私は今回紹介したフローの起点をWebHookにすることでリクエストされたら自動的にフローが実行されるようにし、使わなくなったKindleをリモコン兼データモニターとして活用しています。
別途アプリを入れる必要もなく、Kindle自体の脱獄も不要、Webブラウザが動けばリモコンとして使えるため、意外と気に入っています。そのうちこちらの詳細も記事にしたいと思います。