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

RaspberryPi ZeroにNode.jsの最新版をインストールする

vercel/install-nodeを使うと手軽にインストールできた

omxplayerでの動画再生をバックグラウンドで実行する

no-keysオプションをつけるとバックグラウンド実行が可能になる

raspberry piでrc.localのログを確認する方法

sudo systemctl status rc-local.service

mjpg-streamerを使ってストリーミング配信

自動起動できるようにした