先日、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を起こせるようなので、今度試してみようと思います。