2025-7-1
delete_motion.shファイルを修正
2025-6-30追記2
「定期的に写真を削除する」を追加
2025-6-30追記1
動体検知機能の記述を追加
2025-6-26追記
motion.confの記述を修正
/etc/default/motionファイルの記述を追記
自動起動についての記述を修正
環境は
Raspberry Pi OS bookworm
macOS Sequoia 15.5
Webカメラ: ロジクール C270n(アマゾン限定モデル)
Webカメラの映像を見るために、Raspberry Pi 3 Model B Rev 1.2ではmotionを使っていたので、今回も慣れているmotionの出番と相成りました。
Webカメラを接続して、「Raspberry Pi Zero 2 W」を起動。
ssh接続したら、「lsusb」と入力して、認識されているかを確認。
Bus 001 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
motionのインストール
念の為、「sudo apt-get update」と「sudo apt-get upgrade」を実行しておきます。
「sudo apt-get install motion」と入力してリターンキー
途中で、Do you want to continue? [Y/n] と聞かれたら
「Y」と入力してリターンキー
設定ファイルの編集です。
まずはブラウザで表示すための必要最低限の設定を行います。
「sudo nano /etc/motion/motion.conf」と入力してリターンキー
ファイルにあるものは値を変更、ないものは書き足してください。
(今回はサービスとして起動するので、daemon offのまま?です。)
width 640(ご利用のウェブカムによります)
height 480(ご利用のウェブカムによります)
stream_localhost off (ブラウザで表示するため)
stream_maxrate 30(ストリーミング配信のフレームレート設定。ご利用のウェブカムによります)
text_scale 2 (右下に表示される日時の大きさ。1〜10)
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
motionを起動
「sudo motion -n」と入力してリターンキー
ブラウザ(Safari)で、以下の形式でアクセスできます。
http://{RaspberryPiのIPアドレス}:8081
例の場合だと
http://192.168.0.123:8081
表示が確認できたら、motionを終了します。
「controlキー + c」で終了します
ある程度固まったら、本格運用を開始します。
設定ファイルの編集
「sudo nano /etc/motion/motion.conf」と入力してリターンキー
デーモンでの起動をオンにします。
以下の箇所を右の値に変更
daemon off → on
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
/etc/default/motionファイルを作成して以下を追加
「sudo nano /etc/default/motion」と入力してリターンキー
start_motion_daemon=yes
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
一応、再起動しておきます。
「sudo reboot」と入力してリターンキー
motionをサービスとして自動起動
サービスのユニット定義ファイルを作成します。
参考ページ
ラズパイで見守りシステム開発その2:動体検知と通知機能の実装 #RaspberryPi – Qiita
そのまま拝借させていただきます。
以下を入力して、リターンキー。
sudo nano /etc/systemd/system/motion.service
以下をコピーして、ペースト
[Unit]
Description=motion
After=network.service
[Service]
Type=forking
Restart=on-success
ExecStart=/usr/bin/motion
ExecStop=pkill motion
TimeoutStartUSec=120 #必要ないけれど、一応
[Install]
WantedBy=multi-user.target
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
サービスを起動します。
「sudo systemctl start motion」と入力して、リターンキー。
ブラウザ(Safari)で、以下の形式でアクセスできます
http://{RaspberryPiのIPアドレス}:8081
問題なく表示されたら、サービスの自動起動を有効にします。
「sudo systemctl enable motion」と入力して、リターンキー。
Created symlink /etc/systemd/system/multi-user.target.wants/motion.service → /etc/systemd/system/motion.service.
システムを再起動して正しくmotionが起動するか確認します。
「sudo reboot」と入力してリターンキー
システムが再起度後に、ブラウザ(Safari)で、以下の形式でアクセスして、正しく表示されていればOKです。
http://{RaspberryPiのIPアドレス}:8081
補足
サービスの状態を確認するには
「sudo systemctl status motion」と入力してリターンキー
正しく動作すると、こんな感じで表示されます。
motion.service - motion
Loaded: loaded (/etc/systemd/system/motion.service; enabled; preset: enabl>
Active: active (running) since Thu 2025-06-26 xx:xx:xx JST; 10min ago
Process: 379 ExecStart=/usr/bin/motion (code=exited, status=0/SUCCESS)
Main PID: 514 (motion)
Tasks: 5 (limit: 178)
CPU: 2min 24.905s
CGroup: /system.slice/motion.service
└─514 /usr/bin/motion
Jun 26 xx:xx:xx raspberrypi systemd[1]: Starting motion.service - motion...
Jun 26 xx:xx:xx raspberrypi motion[379]: [0:motion] [NTC] [ALL] conf_load: Proc>
Jun 26 xx:xx:xx raspberrypi motion[379]: [0:motion] [NTC] [ALL] conf_load: Proc>
Jun 26 xx:xx:xx raspberrypi motion[379]: [0:motion] [NTC] [ALL] motion_startup:>
Jun 26 xx:xx:xx raspberrypi motion[379]: [0:motion] [NTC] [ALL] motion_startup:>
Jun 26 xx:xx:xx raspberrypi systemd[1]: Started motion.service - motion.
「controlキー + c」で終了
動体検知機能の設定
動体検知機能の設定を行います。
「Raspberry Pi Zero 2 W」を起動。
ssh接続したら、設定ファイルの編集をする前に、motion.servicesを停止します。
「sudo systemctl stop motion」と入力してリターンキー
画像の出力場所を作成
/home/pi/motionにするので
「sudo mkdir /home/pi/motion」と入力してリターンキー
所有者、所属グループの変更
「sudo chown pi:pi motion/」と入力してリターンキー
設定ファイルの編集
「sudo nano /etc/motion/motion.conf」と入力してリターンキー
以下の値を変更または追加
picture_output on #動体検知した画像を出力する
picture_type jpeg
picture_filename %Y%m%d%H%M%S-%q #ファイル名の形式
locate_motion_mode on
locate_motion_style redbox #動体検知した場所を赤枠で囲む
target_dir /home/pi/motion #画像の出力場所
event_gap 60 #デフォルトは60
threshold 1500 #動体検知する際のしきい値。デフォルトは1500。
頻繁に反応してしまうようなら、この数値を大きくしてください。
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
サービスを起動します。
「sudo systemctl start motion」と入力して、リターンキー。
正しく動作するまで、サービスを停止 » 設定ファイルの編集(threshold等の値を調整) » サービスを起動、を繰り返してください。
定期的に写真を削除する
動体検知した画像は、そのままだとどんどん溜まってしまうので、定期的に削除していきます。
シェルスクリプトを作成します。
「Raspberry Pi Zero 2 W」を起動。
ssh接続したら、
「cd /home/pi/」と入力して、リターンキー。
名前は、delete_motion.shにします。(好きな名前で結構です。)
「sudo nano delete_motion.sh」と入力して、リターンキー。
1日を経過したものを削除します。
以下をコピー&ペーストしてください。
#!/bin/bash
find /home/pi/motion -name "*.jpg" -mtime +0 -delete
exit 0
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
出来上がったファイルに実行権を与える
「sudo chmod +x delete_motion.sh」と入力したらリターンキー
-rwxr-xr-x 1 root root 72 Jun 30 xx:xx delete_motion.sh
crontabを編集(直接crontab -eとしないほうがイイらしいですが…)
「sudo crontab -e」と入力したらリターンキー
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]: 1
と言われたら、nanoで編集するので
「1」と入力してリターンキー
1時間おきに,スクリプトを実行することにします。
0 */1 * * * /home/pi/delete_motion.sh > /home/pi/cron_error.log 2>&1
問題なければ、「controlキー + o」
File Name to Writeと下に表示されたらリターンキー
「controlキー + x」で編集を終了します。
cronの設定を確認するには
「sudo crontab -l」と入力して、リターンキー
cronを再起動
「sudo /etc/init.d/cron restart」と入力して、リターンキー
Restarting cron (via systemctl): cron.service.
補足
現在使われている容量を知るためには「du」コマンドを使って
「du -d1 -xh | sort -n -r」と入力して、リターンキー。
以下のような感じで表示されます。
12K ./services
12K ./.config
8.0K ./.ssh
1.2M .
1.1M ./motion
Raspberry Piの終了について
「sudo shutdown -h now」と入力してリターンキー
緑色のランプが何度か点滅して消えれば、コンセントから抜いて大丈夫です。
コメント