運用の自動化
前回からだいぶ間が開いてしまったが、再起動のたびに手動でプログラムを起動するのはアホらしいので、Kinect プログラムを自動で起動するようにしていく。自動起動の設定
まずは、camtest を適当にそれっぽいディレクトリにコピーしてついでにファイル名も kinect に変えておく。> sudo install camtest /usr/local/sbin/kinect
で、/etc/init.d の下に起動/終了用スクリプトを作成
------------------------------
#! /bin/sh
### BEGIN INIT INFO
# Provides: kinect
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Kinect remote webcam system
### END INIT INFO
set -e
test -x /usr/local/sbin/kinect || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting Kinect webcam system" "kinect" || true
if start-stop-daemon --background --start --quiet --oknodo --pidfile /var/run/kinect.pid --make-pidfile --exec /usr/local/sbin/kinect; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
stop)
log_daemon_msg "Stopping Kinect webcam system" "kinect" || true
if start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/kinect.pid; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
*)
log_action_msg "Usage: /etc/init.d/kinect {start|stop}" || true
exit 1
esac
exit 0
------------------------------
sshd のスクリプトをベースに見よう見まねで改造しただけ。
本当は restart や status も作ったが、スペースの都合で割愛した。
出来上がったら、
> /etc/init.d/kinect start
などして動くのを確認したら
> sudo init q
でスクリプトのリストを更新(Ubuntu だと要らなかったのだが、よくわからん)
最後に
> update-rc.d kinect defaults
で、自動起動に登録。
ラズパイを一度再起動して自動で立ち上がるか確認しておく。
自動終了
Kinect の深度センサーは赤外線レーザーを使っている。
人体に影響があるとは思えないが、一晩中我が子に照射し続けるのも気が引けるため、深夜になったら自動で切れるようにする。
入手したラズパイはタイムゾーンが違っていたので、まずはそれを合わせておく。
> cp /etc/localtime /etc/localtime.org #念のためバックアップ
> cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
> cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
色々と試行錯誤したのだが、Kinect の深度センサーの照射を止めるには USB から切り離す方法でしか止められなかった。
ちと乱暴だが、以下のコマンドで大本のポートから止めることで深度センサーの照射を止めることが出来るようだった。
> echo -n '1-1' > /sys/bus/usb/drivers/usb/unbind
(止まっているかどうかは、肉眼で深度センサーからうっすら出ている赤い光をみて確認した)
しかしながら、これをやると無線 LAN まで止まってしまうので、子供を寝かせる時間になったら自動で再起動するようにしたい。
というわけで、cron を使って以下のように自動で Kinect センサーの停止とラズパイの再起動を行うように設定した。
> sudo crontab -u root -e
※エディタが起動するので以下の行を追加
0 23 * * * /etc/init.d/kinect stop
5 23 * * * echo -n '1-1' > /sys/bus/usb/drivers/usb/unbind
0 18 * * * /sbin/reboot
これで、毎晩 23 時に Kinect プログラムが終了。その 5 分後にセンサーを停止し、翌日の 18 時になったら自動で再起動するようになる。