秘密の本棚

気になることをなんでも書きます

気温上昇を音で通知して熱中症対策

今回やりたいこと

Google Home+Raspberry Piによるホームオートメーション第3弾。前回はゲリラ豪雨の接近を通知するシステムを作成しました。
nexusuica.hatenablog.jp
今回はNature Remo miniに入っている温度センサーを活用し、気温が高いのにエアコンが入っていない場合に注意喚起をするシステムを作ってみようと思います。
nexusuica.hatenablog.jp

必要なステップに分解する

Raspberry Piが自動的にNature Remo miniの温度センサから温度を取得してGoogle Homeに通知するまでに必要なステップは以下の3つです。

  • Raspberry PiがNature Remo miniから温度とエアコンの状態を取得
  • 条件を満たしている場合Google Homeに通知
  • 以上の処理を定期的に繰り返す

Nature Remo miniから情報を取得するにはNature Remo APIを用います。
nature.global

Raspberry PiがNature Remo miniから温度とエアコンの状態を取得

Nature Remo APIで"devices"を見ると端末の状態を、"appliances"を見ると登録している家電の状態を取得できます。

import requests
import json
import subprocess

nature_remo_token = "<アクセストークン>"
url = "https://api.nature.global"
auth_headers = {"Authorization":"Bearer "+nature_remo_token}
cmd = "/1/devices"
r = requests.get(url+cmd,headers=auth_headers)
data = json.loads(r.text)
temp = data[0]['newest_events']['te']['val']
print(temp)

cmd = "/1/appliances"
r = requests.get(url+cmd,headers=auth_headers)
data = json.loads(r.text)
airConState = data[0]['settings']['button']
print(airConState)

条件を満たしている場合Google Homeに通知

ここで作ったコマンドライン引数からGoogle Homeを喋らせられるスクリプトを利用します。温度がしきい値より高く、かつエアコンがついていないときに通知します。
nexusuica.hatenablog.jp

threshold = 26.0

if(temp>threshold and airConState=='power-off'):
    subprocess.call('node googlehome.js 部屋の温度が高いようです。エアコンをつけましょう。',shell=True)

以上の処理を定期的に繰り返す

cronを利用して定期的に実行させます。
make.bcde.jp
まだまだ暑い日もありますね。熱中症対策には気を遣いたいものです。