あきらぼ

テック系ブログ

Raspberry Pi で30分毎にPythonスクリプトを実行してMySQLに書き込む

先日、IPhoneがLANに接続されているかを確認し、状態をMySQLデータベースに書き込むコードを作りました。
Raspberry Pi でLAN内のIPhoneを監視して在宅・外出の状態をSQLサーバーにアップロード - あきらぼ

今回はこのコードを30分毎に自動的に実行されるようにします。
そのためにLinuxにおいて定期的にコマンドを実行するためのcrontabを使用します。
crontab - Wikipedia

crontabで実行するコマンドと時間をスケジュールするためには以下のコマンドを使用します。

crontab -e

するとテキストエディタでスケジューリングとコマンドの設定ファイルが開かれます。
初期設定では恐らくすべて「#」でコメントアウトされていると思うのですが、ここに以下の二行を追加します。

0 */1 * * * python /home/pi/Python/HomeAwayMonitor/homeaway.py
30 */1 * * * python /home/pi/Python/HomeAwayMonitor/homeawa.py

一行目が毎時0分に指定のコマンド(Pythonコード)を実行
二行目が毎時30分に指定のコマンドを実行
という意味合いになっており、結果30分おき、0分と30分に指定したPythonコードが実行されるという設定です。

実際に指定したコードが30分おきに実行され、データベース書き込まれているか確認してみます。

+----+---------------------+-------+
| id | date                | state |
+----+---------------------+-------+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 70 | 2022-01-04 04:00:07 | Home  |
| 71 | 2022-01-04 04:30:07 | Home  |
| 72 | 2022-01-04 05:00:08 | Away  |
| 73 | 2022-01-04 05:30:07 | Home  |
| 74 | 2022-01-04 06:00:07 | Away  |
| 75 | 2022-01-04 06:30:07 | Away  |
| 76 | 2022-01-04 07:00:07 | Away  |
| 77 | 2022-01-04 07:30:08 | Home  |
| 78 | 2022-01-04 08:00:07 | Away  |
| 79 | 2022-01-04 08:30:08 | Home  |
| 80 | 2022-01-04 09:00:08 | Away  |
+----+---------------------+-------+

問題なく、30分おきに実行されています。
しかし、ここで家にいるはずなのにいないと判定されてしまっています。
これはIPhoneがスリープ状態になるとpingすら通さなく、ARPコマンドにも応答しないのが原因のようです。
どうやらhping3でUDPでパケットを送るといiPhoneを起こせるようなので、今度試してみようと思います。