第8回にてWebカメラからのキャプチャ画像を定期的にDropboxにアップするようにした。cronで10分周期にセットしたけれども、「今のタイミングのキャプチャが欲しい!」ということもある。この場合はどうするか。
自宅のブロードバンドルータに接続したRaspberryPiには当然グローバルIPアドレスなんてセットしていない。ブロードバンドルータから割り当てられたプライベートIPアドレスにネットワーク越しにアクセスする方法は簡単には実現できそうにない。
というわけで方法としてはRaspberryPi側から「なんか指示ありませんか?」と定期的にポーリングをしかける方法しかないのだ。
ここではDropboxのフォルダを10秒周期チェックして、「shot」というフォルダがあるとそのタイミングでキャプチャをアップロードする、という仕様にした。
そのシェルが以下の通り。
#!/bin/bash
while :
do
/home/pi/Dropbox-Uploader/dropbox_uploader.sh list | grep shot
if [ $? -eq 0 ] ; then
fswebcam -d /dev/video0 -p YUYV -D 2 -S 16 -r 640x480 --jpeg 75 /home/pi/shoot.jpg
/home/pi/Dropbox-Uploader/dropbox_uploader.sh upload /home/pi/shoot.jpg /shoot.jpg
/home/pi/Dropbox-Uploader/dropbox_uploader.sh delete /shot/
fi
sleep 10
done
パスやファイル名は適宜読み替えてほしい。
ここでは10秒周期にしているが、最後のsleepを短くすればよりリアルタイムに近い形で反応できるだろう。Dropboxに怒られるかもしれないが。
で、起動時にこれを起動しておいてもらおう。
sudo vi /etc/rc.local
としてrc.localファイルに以下の記述を追加する。尚、ここでは上記作成スクリプトを「manual_shot.sh」としている。
sudo -u pi /home/pi/manual_shot.sh &
sudoでユーザpiとして実行していることに注意。
Dropbox-Uploaderのセットアップ時にDropboxのAppキーなどを設定したが、実行ユーザが異なると再設定が必要になるので、セットアップを実行したユーザで実行する必要がある。