読者です 読者をやめる 読者になる 読者になる

Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

飯寿司熟成室温湿度モニタリング その1

IoT

 夏季の昆布乾燥室を冬季には飯寿司熟成室に転用している。今夏に「昆布乾燥室温湿度モニタリング」と称して乾燥機を使った昆布を乾燥させている小屋の室温と湿度を計測したが、今度は飯寿司を熟成している部屋の温湿度をモニタリングしてみる。「昆布乾燥室温湿度モニタリング」で利用したRaspberry Pi 3 Bをそのまま利用し、センサーをより高精度なものに換装し、ソフトウェア等の修正を行った。

温湿度センサーをDHT22へ換装

 昆布乾燥室温湿度モニタリングでは温湿度センサーにDHT11を利用したが、その測定可能温度範囲は0℃から60℃であり、冬季に氷点下になるところではその温度が測れない。そこで温度範囲が-40℃から80℃まで計測可能なDHT22(AM2302)に換装することにした。温度の測定範囲だけでなく、測定精度、そして湿度の測定範囲と精度まで向上する。

DHT11 DHT22
温度測定範囲 0~60(℃) -40~80(℃)
温度測定精度 ±2℃ ±0.5℃
湿度測定範囲 20~90% RH 0~100% RH
湿度測定精度 ±5% RH ±2% RH

 換装は当然Raspberry Piの電源オフ中に行った。

センサーの動作試験

 これまでは第一引数に"11"を指定していたが、"22"を指定する。

$ cd Adafruit_Python_DHT/examples
$ sudo ./AdafruitDHT.py 22 4
Temp=2.0*  Humidity=49.7%

munin 温度計測プラグインの設定値を変更し反映

 DHT11からDHT22へセンサーを変更しただけでなく、予想される温度計測範囲も変わる。飯寿司熟成室は11月から12月まで利用される。12月の外気の最低気温は-10℃を下回ることは珍しく、また室内ならばそれを下回ることはない。そこでグラフ表示の下限を-10℃に変更することにした。
 /usr/share/munin/plugins/tempまたはシンボリック・リンクを張っていた/etc/munin/plugins/tempの数ヵ所を今回の変更に合わせて変更した。バージョンを管理するgitなどでブランチを作ってもよいだろう。次の温度計測値を得るためのスクリプトは説明のために以前の行をコメントアウトしてある。

#!/bin/sh

#%# family=auto
#%# capabilities=autoconf

#GETNUM=`python /usr/local/bin/temp.py 11 4`
GETNUM=`python /usr/local/bin/temp.py 22 4` # <--- 11 から 22へ

if [ "$1" = "autoconf" ]; then
        if [ -n ${GETNUM} ] ; then
                echo yes
                exit 0
        else
                echo no
                exit 0
        fi
fi

if [ "$1" = "config" ]; then
        echo 'graph_title temperature'
        #echo 'graph_args -r --lower-limit 0'
        echo 'graph_args -r --lower-limit -10' # <--- 0 から -10echo 'graph_vlabel C'
        echo 'graph_category Weather'
        echo 'total.label temperature'
        echo 'total.min 0'
        echo 'total.draw LINE2'
        echo 'total.type GAUGE'
        exit 0
fi

echo "total.value $GETNUM";

 変更後はmuninのノードを再起動すればよい。

$ sudo service munin-node restart

google_spreadsheet.pyの修正と改善

 センサーを変更したのそれに合わせた修正、そしてセンサーの精度が上がったのでそれに合わせた改善を、google_spreadsheet.pyに対して行う。

・・・
# Type of sensor, can be Adafruit_DHT.DHT11, Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
DHT_TYPE = Adafruit_DHT.DHT22 # DHT11からDHT22へ変更
#DHT_TYPE = Adafruit_DHT.DHT11
・・・
    # Attempt to get sensor reading.
    humidity, temp = Adafruit_DHT.read(DHT_TYPE, DHT_PIN)
    temp = round(temp, 1) # 小数点2桁目を四捨五入
    humidity = round(humidity, 1) # 小数点2桁目を四捨五入

    # Attempt to get sensor reading.
    #cpu_temp = int(commands.getoutput("cat /sys/class/thermal/thermal_zone0/temp")) / 1000
    cpu_temp = round(float(commands.getoutput("cat /sys/class/thermal/thermal_zone0/temp")) / 1000, 1) # 小数点2桁目を四捨五入
・・・

実行

 実行したが、DHT11のときと比べて、cronでは実行しているが、Googleスプレッドシートへ書き込めていないときがある。何が原因か突き止める必要がある。wifiが原因であれば、センサーの変更とそれに伴う変更とは全く関係はない。