Raspberry Piを使って不快指数に応じたエアコン制御とLED点灯をやってみる

公開日時

前回の記事で温度と湿度の見える化ができたので、今回は取得したデータを活用した機能を作ってみる。

[[samplecodes/BME280/Python27/di.txt]]に不快指数を書き出しているので、不快指数に応じたエアコン制御とLED点灯をやってみる。

エアコン制御

IRKitを持っているので、不快指数に応じてエアコンのON/OFF信号を送るようにする。

(今は販売終了しているがNature Remoを使えば同じことができると思われる)

エアコンON/OFFそれぞれの信号をIRKitに送信した後、curlコマンドで赤外線情報を取得。

curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl"

取得結果をシェルスクリプトに保存。

  • ON
# air_on.sh

#!/bin/sh
curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[6424, ... ]}'
  • OFF
# air_off.sh

#!/bin/sh
curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[6648, ... ]}'

寝ている間の不快指数をチェックし、状況に応じてエアコンON/OFFを実行するコードを作成。

// air.js

const fs = require('fs');
const childProcess = require('child_process');
const dayjs = require('dayjs');
dayjs.locale('ja');

const di = fs.readFileSync("/home/pi/samplecodes/BME280/Python27/di.txt", "utf8").split('\n')[0];
const currentHour = dayjs().hour();
console.log(currentHour);
if (currentHour >= 0 && currentHour < 8) {
  if (Number(di) < 76) {
    console.log('comfort now');
    childProcess.exec('./air_off.sh');
    return;
  }

  console.log('discomfort now');
  childProcess.exec('./air_on.sh');
}

cronで1時間おきに実行するように設定。

crontab -l

0 * * * * cd /home/pi/samplecodes/BME280/Python27 && /usr/bin/node air.js

これで就寝中のエアコン自動制御ができるようになった。

LED点灯

現状だと記録はしているものの都度グラフを確認するのが手間なので、不快指数が80を超えている場合はLEDが点灯するようにする。

GPIO24を出力としてLEDをブレッドボードに配線。

# led.py
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)

try:
  while True:
    f = open("./di.txt", "r")
    di = float(f.read())
    if (di >= 80):
      GPIO.output(24, GPIO.HIGH)
    else:
      GPIO.output(24, GPIO.LOW)
    sleep(60)
except KeyboardInterrupt:
    pass

GPIO.cleanup()

これで不快指数に応じてLEDがON/OFFできるようになった。

python led.py

実験

昨夜、早速エアコン制御をやってみた。

エアコン温度28℃設定だと不快指数78前後を推移していたので、昨夜はずっとエアコンがついたままだった。

そのおかげもあって今日はスッキリ起きれた。

引き続き不快指数のしきい値の調整をしつつ、実験していこう。

これで熱帯夜でも快眠できるようになるといいな。

参考


Related #raspberry pi

ngrokの代わりにCloudflare Tunnelを使う

botやwebhookを利用するサービスの開発が捗る

Dockerのデータ保存場所を変更する

/etc/docker/daemon.jsonに追記

Alexaにゲーミングマシンと周辺環境を終了してもらう

「Alexa Steamを終了して」ができるようになった

Alexaにゲーミングマシンと周辺環境を起動してもらう

PC起動、TV起動、サウンドバー起動がまとめてできるようになった

docker-compose build時に「no Space Left on Device」が発生

1年前にも同じエラーにハマってた