Nature Remoで取得した温度・湿度をLINEで通知する方法

2020年10月28日

スポンサーリンク

どうも、どうもそにたんです。
最近私事なのですが、ハリネズミを我が家に迎え入れました。
ハリネズミって、暑いと夏眠寒いと冬眠をしてしまい命に関わることがあるのです。
そのため、家の温度管理が大切なためエアコンでの温度調整が大切になります。
ただ、エアコンの付けっぱなしは電気代も高くつくし
家の外からでも家電操作ができれば....なんて思っていました
そこで、家の外からでも家電を操作できるスマートリモコンNature Remoを購入しました!
Nature Remoでは温度・湿度・人感・明るさセンサーが搭載されていて、部屋の状況がわかります
なので今回はNature Remoで取得した温度・湿度をLINEで通知してくれる仕組みを作ってみました!

スポンサーリンク

Nature Remoとは

すこしだけ、Nature Remoの説明を
Nature Remoの公式サイトでは、以下の様に定義されています。

Nature Remo(ネイチャーリモ)は、お使いの家電で手軽にスマートホームを実現するスマートリモコンです。
外出先からスマートフォンでエアコンを操作したり、家電を自動化し、常にお部屋を快適な環境に保つことができます。
引用元:https://nature.global/jp/nature-remo-3

かいつまんで説明すると、以下のことができます

  • スマートフォンで家電が操作できる
  • 自宅の外からでも家電が操作できる
  • あらゆる条件で、家電を自動化できる(例:部屋の温度が25度以上になったら冷房をつける等)

ちなみに、NatureRemoは本当に便利なので一家に一台あるととてもありがたいですよ

こんかいの動機

さて、今回なぜLINEで通知することを考えたかと言うとですね
Nature Remoの温度等を確認する方法が面倒くさいからです。
というのも、Nature Remoで取得する温度の確認方法はNature Remoが提供しているアプリを開いて
設定->デバイスという順番を辿らないといけないんですよね.....
はっきり言って面倒くさい!パッと通知が一定の間隔でこないの!?なんて思っていました。
ちなみに、iPhoneだとショートカットを使った取得方法もありますが
これも結局自分でボタンを押さないといけないんですよね.....
以下がショートカットの作り方を紹介しています。


私が求めているのは、一定間隔で自動で温度を通知してほしい!
ないなら作ってやる!が今回の動機となりました。

公式からの回答

ちなみに、本当に公式が提示する方法でアプリ以外に通知する方法を確認しました。
公式に問い合わせたところ以下の問い合わせがありました。

Remoが計測したセンサーの情報をRemoアプリ以外のスマートフォン上から確認する方法は用意がございません。
弊社が用意しているものでは、エアコンの操作画面や、Remoアプリの設定のデバイスからご確認頂く必要がございます。

ご不便をおかけいたしまして申し訳ございません。
何卒よろしくお願いいたします。

...はいだめなんですね。わかりました。!
通知機能がないのはとても残念ですが、仕方ないですね!自分でこうなれば作りましょう!

必要なもの

というわけで、今回の実装に必要なものを紹介します

  • Nature Remo
  • Rubyが実行できる環境(定期的に実行するためにLinux OS推奨)
  • スマートフォン
  • LINE ID

上記を見てわかるとおり、プログラミング言語Rubyを使ってプログラムを実装します。
ソースコードは今回、紹介しますのでRubyを実行する方法は各自調べてください。
Windowsの参考サイトは以下になります


Linux OS等は各自調査で!

ちなみに今回ラズベリーパイを使う理由としては、低電力で常時ONにしておけるPCというのが一番強い理由です。
後ほど説明しますが、一時間ごとにLINE通知を行なったりするのにPCが必要なためです。

事前設定

Step1.Line設定

まず、最初にLINEで温度を通知するために必要なアカウントの設定をします
今回はLINE notify を使ってみます。Line notifyはかいつまんで説明すると
Ruby等を利用してLineにメッセージを送ることができます。

今回の設定は以下を参考に行いました。


上記でまずは、LINE notifyのアクセストークンを発行するようにしましょう。

Step2.NatureRemoAPI設定

今度は、NatureRemoをPCから動かすためにNature Remo APIを使える様にします
以下サイトを参考にトークンを発行してください
*気をつけて欲しいのは、トークンは絶対流出させないでください。
他の人が家の家電を操作できる様になってしまうので絶対気をつけること。

ソースコード

あとは以下サイトをもとにソースコードを作って完成です。



require 'net/http'
require 'uri'
require "json"

#デバイス情報取得
uri = URI.parse("https://api.nature.global/1/devices")
request = Net::HTTP::Get.new(uri)
request["Accept"] = "application/json"
request["Authorization"] = "Bearer <アクセストークン>"

req_options = {
use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end

hash = JSON.parse(response.body)

temptation = hash[0]["newest_events"]["te"]["val"].to_f
humidity = hash[0]["newest_events"]["hu"]["val"].to_f

msg = "\n温度:" + temptation.to_s + "度\n湿度" + humidity.to_s + "%\n"

def LineNotify(msg)
uri = URI.parse("https://notify-api.line.me/api/notify")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true

req = Net::HTTP::Post.new(uri.request_uri)
req["Authorization"] = "Bearer <トークン番号>"
req["Content-Type"] = 'application/x-www-form-urlencoded;charset=UTF-8'
req.set_form_data({message: msg})

res = https.request(req)
end

LineNotify(msg)

トークンの箇所には自分が取得した番号に書き換えましょう。
ちなみに、ラズベリーパイで定期的に上記を実行したい場合はcron tabを使用する方法があります。
詳細は以下を参考にしてください

ちなみに、9:00~23:00の間一時間ごとに通知したい場合は以下の様な書き方になります。

00 9-23/1 * * * ruby ***/line.rb

さいごに

これで、通知がLINEにくるよ。

スポンサーリンク