mh-z19 sensor PWM Cons : Slow, in about 1 second necessary to get data.
- Raspberry Pi 3B+
- Raspberry Pi OS Stretch with Desktop (GUI)
- CO2センサーモジュール MH-Z19C
センサー情報から室内環境のロギングや、アクションを実行するのに、いくつかシェルスクリプトやPythonプログラムを用意してcronしている。ところが先日、思い立って重畳なプログラムを書き直したあたりからか、ところどころログが記録されなくなってきた。とうやら処理時間が短縮されて、プロセスが競合してしまうようになったんじゃないかと思う。いいんだか、わるいんだか。
/var/log/cron
まず、cronのログを確認しようと思ったが、
【Linux】/var/log/cron.logが存在しない場合 - (O+P)ut
syslogの設定ファイルは/etc/rsyslog.confに存在しているので、cronに関する記載有無を確認します。
デフォルトで以下のようにコメントアウトされている
#cron.*
コメントアウトをはずして、有効にする。
rsislog?と思ったら、今はreliable syslog = rsyslogらしい。よくsyslogと言うけれど。
rsyslogとsyslogの違い - Qiita
古いのがsyslogで新しいのがrsyslog
それと、よくわからないから、できるだけ多くログがほしい。
cronのログを確認する方法 | Armadillo
cronのログを有効にするには /etc/default/cronファイルのEXTRA_OPTSを設定します。
※ここでは例として、すべてのログを有効にするEXTRA_OPTS='-L 15'とします。
しばらくログを取ってみると、ところどころ
(pi) CMD ([***] /use/bin/python3 ***.py) (CRON) error (grandchild #*** failed with exit status 1) (pi) END ([***] /use/bin/python3 ***.py)
と、ある。どうやらこの.pyが失敗しているようなのだが、普通に実行すると、普通に完了する。
しばし黙考。cronは一気に同時プロセスする。同じタイミングでcronしている別の.pyは、普通にCMD - ENDしているようだ。共通しているのは、CO2濃度を取りに行く動作かなと。おそらく、競合してしまうのではないだろうか。
Python 3.5
例外処理
腕があれば、例外処理でログ取ってはっきり対処もできるのだろうが(while Trueで行けるかとも思ったが、ダメだった)、どうも思ったように動いてくれない。
Pythonの例外処理とは?try・except・else・finallyの使い方【処理を続行する方法】│とことん独学ブログ
time.sleep(3)
そう言えば、
PWM support. · UedaTakeyuki/mh-z19 Wiki · GitHub
Slow, in about 1 second necessary to get data.
だったな。失敗している.pyに、time.sleep(3)を入れてみる。
。。OKになった。ちなみに1秒だとときどきNG。2秒だと2、3日に1回NG。