LoginSignup
0
2

More than 5 years have passed since last update.

Google Home + Nature Remoでエアコンタイマー

Last updated at Posted at 2018-11-18

はじめに

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を以下の内容で保存します。

Procfile
web: node app.js

次に、本体である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へ送る仕組みを作るメモ

0
2
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
2