先日、(例えばテレビの)リモコンの使わないボタンで、別の機器(スピーカー)を操作するため、Raspberry Pi Zeroでリモコンの中継機を作成しました。
使用したIoT拡張ボードは、赤外線の送受信機能の他に、各種センサーが取り付けてあります。
せっかくですので、お部屋の温度や気圧、照度の記録をしてみたいと思います。
目次
Raspberry PiのIoT拡張ボートによる温度・湿度・気圧・照度記録設定
使用する機材
対応するIoT拡張ボードは、こちらを使用させて頂きました。
お部屋の中心に水平に設置致しました。赤外線が届く範囲が広く、問題なく使用させて頂いております。温度や湿度の記録も、お部屋の中心のうほうが変動が少なく、安定するかと思います。
温度・湿度・気圧・照度の取得
RPZ-IR-Sensorホームページから、サンプルプログラム「rpz-sensor」をダウンロードさせて頂きました。
ターミナル上でpiユーザーで実行したところ、問題なく温度などの情報が表示されました。
wget http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor/rpz-sensor.zip
sudo pip3 install docopt
unzip rpz-sensor.zip
python3 /home/pi/rpz-sensor/python3/rpz_sensor.py
※18.11.23追記:RPZ-IR-Sensor本体のBME280センサーは、温度が少し高めに記録されます。Raspberry Pi本体の発熱の影響でしょうか。付属の外付けセンサーを取り付けると、お部屋の温度を問題なく記録してくれるようです。
自動記録の設定
crontabで、5分おきにファイルに記録するように設定しました。
crontab -e
次の1行を追加します。
*/5 * * * * /usr/bin/python3 /home/pi/rpz-sensor/python3/rpz_sensor.py -l ${HOME}/rpz-sensor.csv
これで温度等の記録が開始されました。
CSVファイルをWindows PCに転送する場合、宜しければこちらの記事を御覧ください。
照度が0の場合異常終了する対策
※18.12.12追記:
お部屋が暗い場合、ゼロで除算エラーがでるようでしたので、スクリプトを少し修正させて頂きました。
vi rpz-sensor/python3/tsl2561.py
106行目付近にif文を追加したところ、輝度が0の場合のエラーは出なくなりました。
# 変更前
ratio = self.ch1 / self.ch0
#変更後
if self.ch0 == 0:
ratio = 0
else:
ratio = self.ch1 / self.ch0
コメント
crontab -eまではうまくできましたが、次のcrontab -l | tail -1では何も表示されず~$ポジションに戻ってしまいます。自分ではどこが悪いのかわからないです。チェックすべき部分が有れば教えていただけると助かります。
usagi_companyさん はじめまして
コメント頂きまして誠にありがとうございます。
crontab -e
を実行して、エディタを起動し、1行追加後
crontab -l
を実行しても、追加された行が表示されない状況でしょうか?
(| tail -1 は、最後の1行を表示する意味になります。)
rpz_sensor.pyを実行する1行が、うまく保存されていない場合、次をお試し頂くのはいかがでしょうか?
①エディタの変更
select-editor
もしもnanoの方が使いやすい場合、vimからエディタを変更後、再度crotab -eで編集
②管理者権限でcronのジョブを作成
sudo crontab -e
sudo crontab -l
root権限でジョブを作成
早速ご返事ありがとうございます。
crontab -lでは書き込んだ行は表示されます。
ただ、| tail -1を加えると~$に戻ってしまい付け加えた行は表示されません。
お教えいただいた②の方法でも同じです。
cat rpz-sensor.csvを実行すると「そのようなファイルやディレクトリはありません」となってしまいます。
大変初歩的な質問で申し訳ありませんが、crontab -lでは表示されるのに | tail -1を加えると表示されない可能性としてはどんなことが考えられますでしょうか。
お手数ですがご教授いただけると幸いです。
usagi_companyさん こんにちは
コメント頂きありがとうございます
> crontab -lでは書き込んだ行は表示されます。
> ただ、| tail -1を加えると~$に戻ってしまい付け加えた行は表示されません。
> お教えいただいた②の方法でも同じです。
> 大変初歩的な質問で申し訳ありませんが、crontab -lでは表示されるのに | tail -1を加えると表示されない可能性としてはどんなことが考えられますでしょうか。
> お手数ですがご教授いただけると幸いです。
crontab -lの場合、cronに登録された設定すべてが表示されます。
#の付く行は、コメントとして扱われます。
crontab -lで登録内容の行が表示されているのでしたら、おそらくcronへの登録は問題無いかと思います。
| tail -1
を加えた場合、単純に、cronに登録された設定の、最後の1行を表示する、という意味になります。
cronに登録された設定の最終行が改行の場合は、何も表示されないかと思います。
> cat rpz-sensor.csvを実行すると「そのようなファイルやディレクトリはありません」となってしまいます。
crontabに、記事の内容の通り
「*/5 * * * * /usr/bin/python3 /home/pi/rpz-sensor/python3/rpz_sensor.py -l ${HOME}/rpz-sensor.csv」
を登録した場合ですが
piユーザでcrontabに登録した場合、作成されるファイルは「/home/pi/rpz-sensor.csv」になりますが
sudo crontab -eの場合、環境により/home/piではなく/root等の別のディレクトリにrpz-sensor.csvができている可能性があります。
宜しければ、下記のように${HOME}を使わないかたちで、cronに登録されたほうが宜しいかと思います。
「*/5 * * * * /usr/bin/python3 /home/pi/rpz-sensor/python3/rpz_sensor.py -l /home/pi/rpz-sensor.csv」
crontabに登録する前に、単純に
「/usr/bin/python3 /home/pi/rpz-sensor/python3/rpz_sensor.py -l /home/pi/rpz-sensor.csv」
を実行して頂いて、/home/pi/rpz-sensor.csv ファイルが作成されますでしょうか?
rpz-sensor.csvが作成されなければ、python3やrpz_sensor.pyのパスの記述が正しいかどうか
(本当に/usr/bin/python3や/home/pi/rpz-sensor/python3/rpz_sensor.pyのファイルが存在し、実行可能かどうか)
rpz-sensor.csvが作成されれば、crotabの設定内容が正しいかどうか、そもそもcronのサービスが動いているかどうか等、ご確認頂く流れになると思います。
(systemctl status cronで、cronサービスが動作しているか確認できるようです)
どうしてもうまく動かない場合、宜しければ、crontab -lの内容を、コメントにアップロードして頂いて、僭越ながらご確認させて頂く手も御座います。
丁寧なご指導ありがとうございます。
ちょうど熱波到来の折、子牛達の環境ストレスを計りたくて慣れないITに励んでおります。
こんなに丁寧に返事をいただき、勇気を出してコメントしてよかったと感激してます。
動作確認をして結果をお伝えしますので暫くお時間をください。
よろしくお願いします。
usagi_companyさん こんばんは
コメントにご返信頂き、誠にありがとうございます
急激に気温が高くなり、子牛さんたちも、さぞご負担ががかかる状況かと思います。
usagi_companyさんのひたむきな努力を応援しております。
どうか肩の力を抜いて頂き、焦らずに、お試し頂ければと思います。
あれから色々と試しましたが完全に泥沼状態になりました。
crontabの内容は以下の通りです。
*/10**** /usr/bin/python3 /home/pi/rpz-sensor/python3/rpz_sensor.py -l /home/pi/rpz-sensor.csv
手動で上記コマンドを入れるとcsvファイルに書き込まれますが、cronでは動きません。
cronの状態を調べるとアクティブになっていますが、crontab -l では
cron: can’t open or create /var/run/crond.pid: Permission denied
となりsudo crontab -l では
cron: can’t lock /var/run/crond.pid, otherpid may be 10916: Resource temporarily unavailableとなります。
sudo crontab -e で実行して見ましたがステータスはアクティブでも実行はされません。
自分では何が悪いのか見当が付きません。
もし何かチェックするポイントがありましたら指摘していただけると幸いです。
usagi_companyさん こんにちは
コメント頂き誠にありがとうございます。
手動ではcsvファイルに書き込まれるということで、cronが壊れているのかもしれませんね。
Permission deniedというメッセージは、ファイルやディレクトリの書き込み権限が無くて、失敗している可能性があります。Resource temporarily unavailableも、何かファイルがロックしてしまって、うまく動かず止まっている感じのようです。
対策としまして、2つ考えてみました。
①cronを再インストールする
②OSが破損している可能性もありますので、たとえば別のmicroSDカードを用意して、新しいRaspbianをインストールしてみる
ご利用のOSは、Raspbianでしょうか?その場合、最初に①につきましては
sudo apt update
sudo apt purge cron
sudo apt upgrade
sudo apt install cron
これらを順に実行して頂くことで、cronが再インストールされるかと思います。
updateでファイルのリストを更新、purgeでcronを削除、upgradeでOSを更新して、最後にinstallで最新のcronをインストールする感じになります。
こちらを試しても難しい場合。
コメントのエラーメッセージ(Permission deniedやResource temporarily unavailable)を拝見しますと、OSそのものが破損している感じも致します。
OSは、いつ頃インストールされましたでしょうか?
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-07-12/
こちらを拝見致しますと、2019年7月12日のRaspbianが公開されているようです。
microSDカードに上書きインストールしますと、前のデータが消えてしまいますので
可能でしたら、別のmicroSDカードに新しいRaspbianをインストールして試してみる手もあるかと思います。(microSDカードを差し替えればすぐ戻せます)
御返事ありがとうございます。
OSは最初から代理店が入れてくれたもので、多分今年の3月の日付だったと思います。
ご指摘に従いまずはゼロ状態からやり直そうと思います。
SSHは出来るのにNetatalkも出来なくて{??」とは思っていましたので、ある程度Linuxが扱えるようになった今、もう一度出直したいと思います。
usagi_companyさんこんばんは!
コメント頂き誠にありがとうございます。
ふむふむふむ。cronがうまく動かない状況のようですので、OSのクリーンインストールをお試し頂くのはお勧めかと思います。
Raspbianをインストールされる場合
拙い記事ですが、このあたりをご参考頂くのも宜しいかと思います。
https://denor.jp/raspbian%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A-2018%E5%B9%B410%E6%9C%88%E7%89%88
温度等の情報が定期的にうまく記録できるようになること、全力で応援しております。
何かお気になる事がありましたら、コメント欄にご記入頂ければ、微力ながらお力添えさせて頂きたいと思います。