0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

冬の朝をもっと快適に!Heroku×Nature Remoで実現するエアコン自動化プロジェクト

Last updated at Posted at 2025-02-17

1.はじめに

寒い日が続いていますね。私も寒さが苦手で、特に冬の朝は布団から出るのが一苦労です。そこで、朝起きる少し前にエアコン(暖房)を自動でオンにし、快適に目覚められる仕組みを作りました。この仕組みは、以下の3つのクラウドサービスで構築しました。

  • Amazon Web Services (AWS)
  • Microsoft Azure(Azure)
  • Google Cloud Platform (GCP)

詳しい手順は、以下の記事で紹介していますので、ぜひ参考にしてください。

今回は、HerokuとHeroku Schedulerを活用して、設定した時間にエアコンが自動でONになる仕組みを作ることに挑戦します。「でも、Nature Remoの公式アプリを使えば、簡単にスケジュールを設定してエアコンを操作できるのでは?」と思う方もいるかもしれません。 確かに、公式アプリは便利で、多くの場合それで十分です。しかし、あえてこの方法を選んだ理由があります。 それは、クラウドを学び、実践するためです。

このプロジェクトでは、単にエアコンを操作するだけでなく、クラウドサービスを活用するスキルを身につけることを目指しています。 実際にHerokuを使うことで、その特性や使い方を深く理解することができます。

さらに、この仕組みはエアコンの制御に限らず、他のシステムにも応用可能です。 効率だけを考えれば公式アプリが最適ですが、学びのためにあえて新しい技術に挑戦するためでもあります。

2.Herokuの主な特徴

Herokuは、アプリケーションの開発・デプロイ・運用を簡単に行える PaaS(Platform as a Service) です。サーバー管理の負担を減らし、開発者はコードを書くことに集中できます。特に、スタートアップや小規模プロジェクトに適しており、Salesforceとの統合機能も備えています。

一方、AWS・Azure・GCPは、 IaaS(Infrastructure as a Service)、PaaS(Platform as a Service) 、SaaS(Software as a Service) を包括的に提供するクラウドプラットフォームです。

  • AWS(Amazon Web Services) は、サービスの種類が豊富で、幅広い用途に対応できる点が強みです。
  • Azure(Microsoft Azure) は、WindowsやOffice製品との連携が強く、企業向けシステムとの親和性が高いです。
  • GCP(Google Cloud Platform) は、AIやデータ解析の分野に強く、ビッグデータ処理を得意としています。

Herokuは手軽さを重視する開発向けのPaaSであり、AWS・Azure・GCPは柔軟性とスケーラビリティを重視する大規模向けクラウドプラットフォームです。アプリを素早く開発・公開したい場合はHeroku、インフラを含めて自由度高く構築したい場合はAWS・Azure・GCPを選ぶとよいでしょう。

3.Nature Remoとは

image.png
(引用元: Nature公式サイト

Nature Remoは、Nature株式会社が提供する家電をスマホや音声で操作できるスマートリモコンです。赤外線リモコンの信号を再現し、家電をIoT化することで、スマートホームを手軽に実現できます。例えば、外出先からエアコンを操作したり、スマートスピーカーと連携して音声で家電を動かしたりできます。また、搭載されたセンサーを活用して、温度や時間に応じた自動操作も可能です。Nature Remoには複数のモデルがあり、用途に応じて選べます。スマートホームを始めたい方に最適な製品です。

なお、今回はNature Remoの初期設定方法については触れません。初期設定について詳しくは、公式ページをご覧ください。

4.Nature Remoを操作する方法

この記事では、Nature RemoのAPIをNode.jsを使って操作する方法について説明します。コードの説明、アクセストークンの取得方法や事前の設定については、以前の記事を参考にしてください。

4.1.エアコンの電源をOFFにするコード

以下のコードは、Nature RemoのAPIを使ってエアコンの電源をOFFにするものです。

import axios from 'axios';

// Nature Remo APIを動作させる関数を定義
async function setAirconSettings() {
	const token = '<冬の朝をもっと快適に!Cloud Run×Cloud Scheduler×Nature Remoで実現するエアコン自動化プロジェクト で取得したトークン>'; // トークンを設定
	const deviceId = '<device_list.jsonで取得した登録している家電のID>'; // 家電のIDを設定
    const url = `https://api.nature.global/1/appliances/${deviceId}/aircon_settings`;
    
    try {
        // POSTリクエストを送信し、レスポンスを取得
        const response = await axios.post(
            url,
            'button=power-off', // データの内容を設定
            {
                headers: {
                    'Authorization': `Bearer ${token}`,
                    'accept': 'application/json',
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
            }
        );

        // ステータスコードが200の場合、レスポンスのデータを出力
        if (response.status === 200) {
            console.log('Nature Remo送信成功!');
            console.log('Response data:', response.data);
        } else {
            console.error('Unexpected status code:', response.status);
        }
    } catch (error) {
        // エラーが発生した場合
        console.error('Error:', error.message);
    }
}

// 関数を呼び出し
setAirconSettings();

4.2.エアコンの暖房モードを設定し、温度を24℃にするコード

次のコードでは、エアコンを暖房モードにし、温度を24℃に設定します。また、風量と風向きも自動調整に設定します。

import axios from 'axios';

// Nature Remo APIを動作させる関数を定義
async function setAirconSettings() {
    const token = '<冬の朝をもっと快適に!Cloud Run×Cloud Scheduler×Nature Remoで実現するエアコン自動化プロジェクト で取得したトークン>'; // トークンを設定
	const deviceId = '<device_list.jsonで取得した登録している家電のID>'; // 家電のIDを設定
    const url = `https://api.nature.global/1/appliances/${deviceId}/aircon_settings`;
	// 送信するデータ
    const data = new URLSearchParams({
        operation_mode: 'warm',
        temperature: '24',
        temperature_unit: 'c',
        button: '',
        air_volume: 'auto',
        air_direction: 'auto',
        air_direction_h: 'auto',
    });

    try {
        // POSTリクエストを送信し、レスポンスを取得
        const response = await axios.post(
            url,
            data.toString(), // URLエンコードされたデータを送信
            {
                headers: {
                    'Authorization': `Bearer ${token}`,
                    'accept': 'application/json',
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
            }
        );

        // ステータスコードが200の場合、レスポンスのデータを出力
        if (response.status === 200) {
            console.log('Nature Remo送信成功!');
            console.log('Response data:', response.data);
        } else {
            console.error('Unexpected status code:', response.status);
        }
    } catch (error) {
        // エラーが発生した場合
        console.error('Error:', error.message);
    }
}

// 関数を呼び出し
setAirconSettings();

5.Herokuの設定方法

4.3.エアコン操作APIの統合と活用 のコードは、同じネットワーク内でしか動作しません。つまり、外出先から自宅のエアコンを操作することができないのです。これでは不便ですよね。しかし、Herokuを使うことで、この問題を解決できます。

Herokuを利用すれば、外出先からでも自宅のエアコンを操作できるようになります。「同じネットワーク内で動作すれば十分」と感じるかもしれませんが、もしこのステップを飛ばすと、Herokuを使ってエアコンのスケジュール実行ができなくなります。そのため、この手順は必ず実施することをお勧めします。

この章では、Herokuのアカウント作成から、先ほど紹介したコードをデプロイするまでの手順を詳しく解説します。スクリーンショットを多く使いながら、ステップごとにわかりやすく進めていきますので、安心して取り組んでください。

5.1.設定方法

1.まずは、Herokuの公式サイトでアカウントを作成しましょう。まだアカウントを持っていない方は、登録を済ませてから次のステップに進んでください。

2.Heroku CLIを持っていない方は、公式サイトからインストールしてください。自分が使用しているOSに合わせてインストールしてください。
image.png

3.次に、GitHubにリポジトリを作成し、4.3.エアコン操作APIの統合と活用 で作成したソースコードをコミットしてから、GitHubへプッシュしてください。GitやGitHubがよくわからない方は、以下の記事を参考にしてください。また、個人的に GitHub Desktop のインストールをおすすめします。リポジトリを作成する際は、必ず Private に設定してください。Publicにすると、自分のソースコードだけでなく、アクセストークンまでもが全世界に公開されてしまうため、十分に注意してください。

なお、今回コミットして、プッシュしたファイルは以下の通りです。

  • node_modules
  • index.js(4.1のソースコード、または4.2のソースコード)
  • package.json
  • package-lock.json

package.jsonの中身は下記の通りです。必ず npm install express axios は実行して下さい。

package.json
{
  "scripts": {
    "start": "node index.js"
  },
  "type": "module",
  "dependencies": {
    "axios": "^1.7.9",
    "express": "^4.21.2"
  }
}

4.今回使用するソースコードが保存されているディレクトリに移動しましょう。今回は nature_remo 内に作成したので、次のコマンドを実行してください。

cd nature_remo

5.新しくアプリを作成するには、以下のコマンドを使用してください。

heroku create [[アプリ名]]

※ アプリ名には以下のルールがあります

  • 英小文字(a-z)または数字(0-9)で始める 必要があります
  • 英小文字または数字で終わる 必要があります
  • 使用できるのは、小文字・数字・ハイフン(-)のみ です(大文字やアンダースコア _ は使えません)

今回は、以下のコマンドを実行してください。

heroku create nature-remo

もし成功すれば、次のようなメッセージが表示されます。

 »   Warning: heroku update available from 10.0.0 to 10.1.0.
Creating ⬢ nature-remo... done
https://nature-remo-×××××××××××.herokuapp.com/ | https://git.heroku.com/nature-remo.git

6.以下のメッセージが表示されたら、どのキーを押してもブラウザが開き、ログイン画面が表示されます。ログインを完了してください。

heroku: Press any key to open up the browser to login or q to exit:

7.アプリを Heroku にデプロイするには、次のコマンドを実行して、ローカルリポジトリのメインブランチから Heroku のリモートリポジトリにコードをプッシュしてください。

git push heroku main

もし成功すれば、次のようなメッセージが表示されます。

remote:
remote: Verifying deploy... done.
To https://git.heroku.com/nature-remo.git
   ××××××××  main -> main

補足

アプリを更新したい場合は、新たにソースコードをコミットしプッシュして、以下のコマンドを実行して下さい

heroku git:remote [[アプリ名]]
git push heroku main

6.Heroku Schedulerの設定方法

ここまで来たら、あともう一息です!残る作業は、Heroku Schedulerの設定だけです。Heroku Schedulerは、スケジュール実行等を行うことができるサービスです。実行のタイミングを制御できるため、とても便利です。基本的には公式ドキュメントに従えば問題ありませんが、今回はより分かりやすく解説します。

1.以下のコマンドを実行してHeroku schedulerを追加してください

heroku addons:create scheduler:standard

2.Herokuのダッシュボードにアクセスしてください

3.さきほどデプロイしたアプリを選んでください
image.png

3.Heroku schedulerをクリックしてください
image.png

4.Create Jobをクリックしてください
image.png

5.Heroku Schedulerでは、以下の3つの頻度でのみスケジュールを設定できます。

  • 10分ごと
  • 1時間ごと
  • 毎日

そのため、「毎週月曜から金曜まで」といった細かい設定はできません。

また、スケジュールの時間設定はUTC(協定世界時)で行う必要があります。
例えば、日本時間(JST)で2025年2月17日(月)8:00 に実行したい場合、UTCでは2025年2月16日(日)23:00 となります。したがって、毎朝8:00(JST)にスケジュール実行をしたい場合、Heroku Schedulerでは23:00(UTC) に設定してください。

設定するには「e.g node billing_processing.com」と書かれている入力欄には、node index.jsを入力してください。最後に「Save Job」をクリックして保存してください。
image.png

まとめ

今回、Herokuを使ってエアコンを制御するアプリをデプロイしてみました。

Herokuは、 AWS、Azure、GCP と比べて手軽にデプロイできると感じました。ただし、 GitやGitHub、GitHub Desktopの知識がないとスムーズに進めるのは難しいとも思いました。 とはいえ、 GitやGitHubは実際の開発現場でもよく使われるため、今回をきっかけに学んでみるのも良いかもしれません。 損はしないはずです!

また、Heroku Scheduler は機能が限られており、細かいスケジュール設定には向いていません。そのため、柔軟な定期実行をしたい場合は、AWSやGCPなどのクラウドサービスを利用するほうが適していると感じました。

今回は、Expressを使わずにエアコン制御アプリをデプロイしました。その理由は、 Heroku SchedulerではURLの定期実行ができないためです。 もし、どうしてもURLを定期的に実行したい場合は、URLを実行するための別のアプリをデプロイすることで対応できます。ただし、同じアプリを2つ作成するのは非効率なため、今回はその方法には触れませんでした。

ここまで読んでいただき、ありがとうございました!

参考文献

Heroku とは | Heroku
クラウドコンピューティングのタイプ | AWS
Git を使用したデプロイ | Heroku Dev Center
Heroku Scheduler | Heroku Dev Center

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?