はじめに
Nature Remo、便利ですよね。
IFTTTと連携して、「電気を消して」や「エアコンを〇〇度に設定」が誰でも出来ますし、
現在では単体でシーン設定もできるようになりました。
でも、タイマー機能がないんです。
「1.5時間後にエアコンを消す」ことはIFTTTと連携してもできません。
ですが、Google Home→IFTTT→Heroku→Nature Remoとしてやれば、
そんな機能も実装することができます。
手順
1. Node.js/npmをインストール
ローカルPCにNode.js/npmをインストールします。
ここでは詳しく説明しません。
Windows : Node.js / npmをインストールする(for Windows)
Mac : MacにNode.jsをインストール
2. Herokuアカウントを作成
こちらも詳しくは説明しません。
Heroku初心者がHello, Herokuをしてみる
リンクを参照し、Herokuアカウントを作成してください。
3. アプリ作成
まず、作業用のディレクトリを作成します。
次に、Procfileを以下の内容で保存します。
web: node app.js
次に、本体であるapp.jsを以下の内容で作成します。
var express = require('express');
var request = require('request');
var app = express();
var bodyParser = require('body-parser');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
var ACCESS_KEY = process.env.ACCESS_KEY;
var AUTH_KEY = process.env.AUTH_KEY;
var AIRCON_ID = process.env.AIRCON_ID;
var WAITING_TIME = Number(process.env.WAITING_TIME);
// Nature Remoに送信
function postMessage(bodyStr){
var request = require('request');
var headers = {
'Authorization': 'Bearer ' + AUTH_KEY
};
var options = {
url: 'https://api.nature.global/1/appliances/' + AIRCON_ID + '/aircon_settings',
method: 'POST',
headers: headers,
form: {
"button": "power-off"
}
};
request.post(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}else{
console.log('error: '+ response.statusCode);
}
});
}
app.post('/input', function(req, res){
res.set('Content-Type', 'application/json');
console.log('---------- input');
console.log(req.body);
if(req.body.accesskey == ACCESS_KEY){
// アクセスキーが一致すれば送信
setTimeout(function(){
postMessage(req.body.message);
},WAITING_TIME);
res.send("{'request':'OK'}");
} else {
// NG
res.send("{'request':'ERROR'}");
}
});
app.get('/', function(request, response) {
response.send('Hello, World!');
});
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});
その後、以下コマンドで必要なパッケージをインストールします。
npm init
npm install express --save
npm install request --save
npm install body-parser -—save
次にHerokuへデプロイします。
git init
git add .
heroku create
git push heroku master
その後、Herokuで環境変数を設定します。
heroku config:set ACCESS_KEY="任意のアクセスキー"
heroku config:set AUTH_KEY="Nature Remoのアクセストークン"
heroku config:set AIRCON_ID="エアコンのAppliance ID"
heroku config:set WAITING_TIME="タイマーの待ち時間(ミリ秒)"
Nature Remoのアクセストークンの取得方法は、以下の記事を参照してください。
Nature Remoの公式APIの使い方
また、テストのため、まずタイマーは短く設定し、その後上記コマンドで再設定したほうが良いかと思います。
単位がミリ秒なので、一時間の場合は3600000ミリ秒です。
最後に
heroku open
ブラウザが立ち上がり、Hello,World!と表示されたら成功です。
4. IFTTT側の設定
URL:<アプリのURL>/input
Body:{"accesskey":"上で設定したアクセスキー"}
最後に
この方法だと、Raspberry Piなどがなくても、簡単にエアコンタイマーの実装が可能です。
Node.jsはリファレンスにある方のものを改変しただけなので、冗長的な部分もあるかとは思いますが、お許しいただけると幸いです。
(Javascript自体触ったことが殆どないため、編集リクエストもお待ちしております)
Reference(s)
Heroku NodeJSでIFTTT(Maker Channel)のDo NoteからChatWorkへ送る仕組みを作るメモ