前回の記事の続きであるので読んでない人は先にそちらを読むことをおすすめする.
ラズパイ起動時に自動起動
Raspberry Piが起動したときにmotionを自動起動させたい.
そこで/etc/rc.localをいじる.
$ sudo nano /etc/rc.local
これで開かれるファイルの末尾,exit 0より前の行にラズベリーパイ起動時に自動的に実行させたいコマンドを入力してやる.
具体的には以下の通り.
motion -c /etc/motion/motion.conf
管理者権限で実行されるらしいのでsudoは不要だ.
ついでに今後motionによって書き出される画像を自動破棄するにあたってディレクトリの権限を変えて置かなければならないのでその周りのことも書いておく.
mkdir /tmp/motion chmod +w /tmp/motion
Pythonコード
今回実行するPythonコードは至って単純である.
import requests import sys TOKEN = "xxxb-123456789123-12345678998765-jqi4214vasbaFD" CHANNEL = "#" + "ぽち監視サーバー" files = {'file': open(sys.argv[1], 'rb')} param = { 'token':TOKEN, 'channels':CHANNEL, 'title': "Pochi Camera" } requests.post(url="https://slack.com/api/files.upload",params=param, files=files) os.remove(sys.argv[1])
これだけである.
ただしTOKENの部分は自分のSlack APIのトークンにしておかなければならない.
今回はmotionの方で引数としてファイル名を与えてくれるのでsys.argv[1]でそれを指定してやる.
予めmotionの方は”on_picture_save python3 /home/pi/SlackPochi/main.py %f”で設定してあるのでこれで一応動作確認ができるはずである.
/tmp/motion/以下に画像ファイルが出力され,それがSlackに投稿されているかを確認.
無事Slackの方に投稿が来ている.
ということでこれでひとまず完成である.
cronで定期的にコマンド実行
増え続けるファイルを削除
残る問題としては「Slackに画像を投稿した後にも/tmp/motion/以下にmotionで撮影した画像が溜まってしまう」ということがある.
これに関しては自動で定期的にコードを実行するcronを使って設定してやる.
$ sudo crontab -u root -e
(ちなみにこれ -e を -r でタイプミスすると設定が全部消えるらしいのであまり使わないほうが良い)
エディタが開いたら末尾に
0 * * * * find /tmp/motion/ -name '*.jpg' -delete
を追加してやる.
これは毎時0分にfind以下のコマンドを実行するという意味.具体的には拡張子がjpgのもの全てを削除するというもの.
何かめちゃくちゃ大量に撮影していてメモリをすぐ圧迫してしまうというのならば
*/5 * * * * find /tmp/motion/ -name '*.jpg' -delete
のようにすれば5分毎にファイルを削除することができる.詳しくはcronでググろう.
自動でmotionを起動・終了
ヒョウモントカゲモドキにも当然サーカディアンリズムがあるためタイマー制御によって照明のON/OFFを行っている.照明が暗い状態でもノイズによってmotionが誤動作し,Slackに真っ黒の画像が大量に連投されてしまったため,照明を点けていない間はmotionを落としておきたい.
そこで同じくcronを用いてmotionの起動及び終了を行う.
$ sudo crontab -u root -e
でエディタが開いたら
0 0 * * * systemctl stop motion 0 17 * * * systemctl start motion
を記述してやればよい.
これで0時にmotionが終了,17時に起動するはずである.
おわりに
2回に渡ってラズパイとSlackを用いた水槽監視システムを構築した.
個人的には“あくあたん”のようなかっこいいページがほしいところだがまず早急に対処しなければならない問題に対してはこのくらいでいいだろう.残るは室温などのモニタリングをどうするかだがそれはおいおいやっていくとする.
ピンバック:ラズパイとSlackで自宅水槽監視 – 初期設定 – Kim Biology and Informatics