Raspberry Pi で温度ロガーの続き(一応完結編)

引き続き、Raspberry Pi で温度ロガーの続きなのだが、今回で一応完結。参考にしたサイトで紹介されていた方法が一通り動き、どうさないようもだいたい理解した。

出来上がったのが下のようなプロット。元々15分毎にログするところを、1分毎に改造した。右端でグラフが8度くらいから20度くらいまで急に上昇しているのは、エアコン暖房をつけたから。23.5度の設定で動かしたから、数分で目標温度まで温まっているのがわかる。

ちなみに、日時はUTCである。日本時刻で表示したかったのだが、ちょっと面倒だったので、また次回。

今回、ウェブでログを表示する段階で、「cron でスケジュールした温度計測がうまく動かず、温度が記録できない」という問題にぶち当たり、解決に少しばかり時間がかかった。その解決方法を記録しておく。

まず、cron の設定としては、

% sudo crontab -u www-data -e

を実行して、

*/1 * * * * /usr/lib/cgi-bin/monitor.py

を追加する。これで、1分毎に温度が測定されてログされるはずなのに、全く記録されないのでデータがプロットされない。

monitor.py は実行権限があり、owner.group は www-data.www-data にしてある。念のためにこのスクリプトをシェルから実行すると、きちんとデータベースに書き込まれる。

何はともあれ、cron のログを取ってみる。これは、/etc/rsyslog.conf を開いて、コメントアウトされている cron.* の行のコメント解除し、sudo /etc/init.d/rsyslog restart を実行。

早速ログ (/var/log/cron.log) を見てみると、次のような記載が定期的に残っているので、スクリプトは起動されているみたい。

Jan 29 07:00:01 raspberrypi /USR/SBIN/CRON[21704]: (www-data) CMD (/usr/lib/cgi-bin/monitor.py)

これだけではわからないので、crontab を少し書き換えて、エラーメッセージを別のファイルに記録するようにした。次のような感じ。

*/1 * * * * /usr/lib/cgi-bin/monitor.py >> /var/tmp/monitor.log 2>&1

そして、/var/tmp/monitor.log を覗いてみると、まず spi.open() で失敗していることが分かった。User=pi で実行すれば開けるのにおかしいなと思いつつ、調べるのが面倒だったので、sudo chmod 666 /dev/spidev0.* してしまった。
この時は、chmod 666 して対処したのだが、リブートすると元に戻ってしまうことが判明したので、www-data を spi グループ(/dev/spidev*のグループ)へ追加する対処法に変えた。 "sudo usermod -a -G spi www-data" を実行。

すると、今度は "sqlite3.OperationalError: unable to open database file" というエラーが表示された。DB "templog.db" は owner = www-data だし、RWのパーミッションがある。なぜかなぁ、と調べてみると、「DBファイルがあるディレクトリそのものにもRW権限がないといけない」ということが分かった。早速、ディレクトリごと chown www-data.www-data してしまった。

すると、ようやくうまく1分ごとにログが追加できるようになった。

とりあえずデータを記録できるようになったので、あとは表示方法をいろいろ試してみたいと思う。それから、定期的に Twitter で現在の気温をつぶやくとか、クラウドのデータベースにログを取ることもやってみたい。

それから、今度は湿度と、最終的には消費電力モニタを作りたいと思っている。

出来合いのものを買ってきてもいいのだが、いろいろ苦労して作ってみると裏側がわかって面白いのだ。

コメント

このブログの人気の投稿

Gbps でなく GT/s

HCSLに33オームの直列抵抗が必要な理由

PowerShellによるExcel/PowerPointの操作