「Raspberry Pi Zero 2 W」のセットアップ4(motion編)

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等の値を調整) » サービスを起動、を繰り返してください。

Cyberduck のSFTPを使って、保存された画像にアクセスする
(例では、192.168.0.123のポート55555)

常に許可を選択

定期的に写真を削除する

動体検知した画像は、そのままだとどんどん溜まってしまうので、定期的に削除していきます。

シェルスクリプトを作成します。
「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」と入力してリターンキー

緑色のランプが何度か点滅して消えれば、コンセントから抜いて大丈夫です。

コメント

タイトルとURLをコピーしました