mh-z19 sensor PWM Cons : Slow, in about 1 second necessary to get data.


センサー情報から室内環境のロギングや、アクションを実行するのに、いくつかシェルスクリプト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。