↑スマホでCO2センサーをつけたRAspberryPi Zeroを操作し、CO2濃度を記録したCSVファイルを表示させる
定時記録の実行
前回のブログでは、CO2センサーのMH-Z19Bの動作確認まで実施することができました。
思えば、親指大のセンサーケースの中で、赤外線を照射されてガス分子が振動し、CO2分子の固有振動数に共振する波長4.26μmの赤外線が分子振動によって吸収される、その度合いからCO2ガス濃度をコマンド一つで知ることができるというのですから、すごいというか少し感動してしまいます。
しかし、面倒なことにいちいちコマンドラインからsudo python3 -m mh_z19と入力して実行しないと、CO2濃度が測定、もといMH-Z19Bは約5病間隔で赤く発光するところから自動でCO2濃度が測定されているように思われますので、値が表示されないというべきところでしょう。またそれ以上に、せっかくのCO2濃度も測りっぱなしでメモをとらないと記録が残らないというのは、いかにも残念なです。
そこで、定時に記録がされるように、参考サイト「Raspberry Piにセンサーを付けてCO2濃度を測定してみる」(打つか投げるか https://blog.ko31.com/202004/raspberry-pi-measure-co2/)にならって実行してみました。
●jqのインストール
前述のコマンドの実行でアウトプットされたCO2濃度は、json(JavaScript Object Notation)形式のデータとなっていて、これをいじれるようにjjqをインストールするそうです。
|
●シェルスクリプトの作成
参考サイトのスクリプトをまんま借用。ただし、ファイル名は何のスクリプトかわかるようにco2.shに改めました。
|
※作成したファイルのパーミッションに注意
作成したシェルスクリプトを実行すると、日時とCO2濃度がカンマ区切りで出力されます。
|
2)定時実行にはcron
●cronに登録
今回Raspberry Piでセンサーを使うのが初めてで、あちこちサイトを参考のために覗いていたら、cronという言葉にしばしばでくわしました。cronとは、UNIX系OSの常駐プログラムの一種で、設定したスケジュールで目的のプログラムを定時実行させるという便利なもので、常識的なあまりか各サイトとも詳しい説明がなかったようです。
先のスクリプトが1分おきに実行されるように、cronに登録することになるのですが、念の為にcronのステータスを確認したところ、エラーが発生。そんなディレクトリ、ファイルは存在しないと。
あれこれネットで調べて愕然としました。コマンドが違っている!
例えばcronのステータス。
|
|
エラーした前者と後者とでは、よく見ると全然違っています。
登録は、以下を実行
|
すると、初回はエディター聞いてきましたのでとりあえずNANOを選択、次を書き込みました
|
メモ)
前半の5つの*がスケジュールを設定する部分で「分 時 日 月 曜日」に相当。詳しくはふれませんが数字が入ります。デフォルトの5つの*が並んだ* * * * * では、毎分(1分毎に)コマンドが実行されます。コマンド指定部分は後半。
cronの表示方法は、crontab -l
●cronのログを有効化しておく必要
件の登録では、計測結果をcsvファイル(logファイルでも良い)に1分毎に出力するように書き込みましたが、実際に出力させるにはあらかじめcronのログを有効化しておく必要がありました。
次のようにNANOを起動し、rsyslog.confファイルを開き
|
以下のコメントアウトを外します。
|
●計測出力の実行
次を実行することで、計測値がcsvファイルに出力されます。Raspberry Piを起動するたび自動実行されます。
|
なお、停止は、sudo /etc/init.d/cron stop
再起動は、sudo /etc/init.d/cron restart
|
↑カンマ区切りでターミナルに出力、あるいはCSVファイルで確認
<参考>
「Raspberry Piにセンサーを付けてCO2濃度を測定してみる」(打つか投げるか https://blog.ko31.com/202004/raspberry-pi-measure-co2/)
「クーロン(cron)をさわってみるお」(https://qiita.com/katsukii/items/d5f90a6e4592d1414f99) cronの使い方が初心者にはがわかりやすかった。
「ラズベリーパイでCronを使って定期処理を行う方法、ハマりポイントやCronが動かない場合の対処方法など 」(Keep it up! https://k99-tech.com/blog/archives/1141) これを見てエラーの原因に気付く