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) を見てみると、次のような記載が定期的に残っているので、スクリプトは起動されているみたい。
これだけではわからないので、crontab を少し書き換えて、エラーメッセージを別のファイルに記録するようにした。次のような感じ。
すると、今度は "sqlite3.OperationalError: unable to open database file" というエラーが表示された。DB "templog.db" は owner = www-data だし、RWのパーミッションがある。なぜかなぁ、と調べてみると、「DBファイルがあるディレクトリそのものにもRW権限がないといけない」ということが分かった。早速、ディレクトリごと chown www-data.www-data してしまった。
すると、ようやくうまく1分ごとにログが追加できるようになった。
とりあえずデータを記録できるようになったので、あとは表示方法をいろいろ試してみたいと思う。それから、定期的に Twitter で現在の気温をつぶやくとか、クラウドのデータベースにログを取ることもやってみたい。
それから、今度は湿度と、最終的には消費電力モニタを作りたいと思っている。
出来合いのものを買ってきてもいいのだが、いろいろ苦労して作ってみると裏側がわかって面白いのだ。
出来上がったのが下のようなプロット。元々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 で現在の気温をつぶやくとか、クラウドのデータベースにログを取ることもやってみたい。
それから、今度は湿度と、最終的には消費電力モニタを作りたいと思っている。
出来合いのものを買ってきてもいいのだが、いろいろ苦労して作ってみると裏側がわかって面白いのだ。
コメント