「ラズパイ」と「スプレッドシート」で全自動水耕栽培器をつくって女の子にTwitterで実況しながら栽培してもらう:⑪各種機能編 ~定期実行編~

人間は習慣の生き物である。機械は?

第十一回目は、cronやスプレッドシートの定期実行機能で今まで作ったものを定期的に実行させてとりあえず完成させてしまうことにする。昨日は半日かけて10記事くらいを投稿したのだが、気が付いたら床で寝てしまっていた。腰が痛い。

 

cronでラズパイを定期実行させよう

そもそもcronってなんだ→こちらの記事をよろしく

今までの記事の中では以下の機能を実装してきた。

  • 自動水やり機能
  • 高さ情報取得機能&高さ情報送信機能
  • 画像撮影機能&画像送信機能

なので、これらの情報が定期的に実行するようにしよう。

crontabに設定する

以下のように設定する。設定の仕方はこちらを参照されたい

*/60 * * * * python /abs/path/pump/pump.py
*/60 * * * * python /abs/path/high/_main.py
*/60 * * * * python /abs/path/image/_main.py

これで1時間おきに実行されるようになる。やったーこれで完成だー。と思いきや、こちらのリンクにあるようにはプログラムコードのパス指定で絶対パスを求められるので、だいたい初回設定時にはうまく動いてくれない。

しかもcronは我々の見えないところで定期的に実行してしまうので、どんなエラーが出たのかもさっぱりわからない。

先ほどの記事の下部にあるcronのログの設定を確認しながらエラーログを確認して、ひとつひとつつぶしていこう。だいたいno such file or directoryエラーが出ている。

*/60 * * * * python /abs/path/pump/pump.py 2> /home/hoge/script5.log

 

あとラズパイ3Bの場合はMTAエラーが出てしまうので、こちらの記事で確認しよう。

 

スプレッドシートの定期実行機能を設定する。おすすめはこちらの記事

こちらのほうについては大変豊富に記事があるので若干割愛。

今までの記事で取り扱っていないものもあるが、「HAGUKUMU」では以下の情報をスプレッドシートに取得している。

  • 現在時刻(Date関数から取得)
  • 気温・湿度(SORACOMGPSマルチユニットからAPI経由で取得)
  • GPSマルチユニットのバッテリー残量(同じくソラコムAPIから取得)
  • 天気(OpenweathermapAPIから取得:記事にしていない)
  • 日の出・日の入・月齢(おはこん番地わAPIから取得:記事にしていない)
  • 植物写真,Gif写真のパス(ラズパイからGoogleドライブ経由で取得)
  • 植物の高さ情報(ラズパイからdoGetで取得)

こんな感じである。

f:id:udonnamerou:20200814010725p:plain

 

スプレッドシートのほうが有効に動いているようで、ちりやちゃんのほうも問題なくつぶやいている。かわいい。すき。

f:id:udonnamerou:20200814093923p:plain

 

さて、次回は最終回。最終的にできたプロダクトの動作と反省点などを述べていこうと思う。とは言っているが、開発の途中で実装したくなった機能などもあるので番外編も設けようと思う。もうちょっとだけ続くんじゃ。

前回:⑩各種機能編 ~Googleスプレッドシートとツイート~

次回:⑫完成