質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

1115閲覧

motionを使用した監視通知について

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/05/08 01:10

##やろうとしていること
Raspberrypi3+motionを使用して動体検知し、検知したときの画像をgmailで送信する。

##今の状態
次のことができました。
①motionを使用して動体検知し、検知したときの画像を保存
②gmailを使用して、検知した画像を送信

##困っていること
①と②を組み合わせたいです。
次のコードを実行して試していますが、うまく動作していません。(メールが送信されない。)

html

1#!/bin/sh 2AVI_PATH=$1 3AVI_DIR=`dirname $AVI_PATH` 4 5EMAIL_TO==aabbcc@gmail.com 6EMAIL_SUB="画像送信" 7EMAIL_BODY="動体検知画像" 8MUTT_CONF=/xxx/xxx/mutt.conf 9 10# send email by mutt & gmail 11echo $EMAIL_BODY | mutt -F $MUTT_CONF -s $EMAIL_SUB -a $AVI_PATH -- $EMAIL_TO

##motion.confの設定(変更した個所)
動画をoffして、差が最も大きい画像のみ保存する設定(best)にしています
daemon off
ffmpeg_output_movies off
target_dir /home/pi/Pictures/motion
output_pictures best
event_gap 10
on_movie_end sh /home/xxx/motion/ttt.sh

##教えてほしいこと
①このプログラムコードの2-3行の意味
画像ファイルが保存されているpathを"motion.conf"から取得していると思っていますが、
target_dirの値を取得しているのでしょうか。

②motionをbest設定にしていますが、これだとmotionを終了したときにしか画像ファイルが指定フォルダに保存されません。
event_gapを10に設定しているので、10秒に1枚保存されると思っているのですが、何か設定が悪いのでしょうか。

③target_dir内には、過去に試した画像など、多くの画像が保存されていますが、上書きまたは、最新の画像だけを送信するにはどうすれば良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

写し間違いでなければ、

sh

1EMAIL_TO==aabbcc@gmail.com 2```は比較になっていて、EMAIL_TO変数に代入されていません。以下のように直してください。 3```sh 4EMAIL_TO=aabbcc@gmail.com

① 2行目: $1は1番目の引数を意味するので、AVI_PATH変数に1番目の引数の値を代入しています。
3行目: dirname コマンドは、与えられたパス文字列からディレクトリ部分を返すコマンドです。引数として渡されたパス文字列からディレクトリ部分を取って AVI_DIR 変数に代入しています。ただし、このAVI_DIR 変数はその後使われていません。
motion のオプションを説明しているページ を見ると、event_gap 10 は「10秒ごとに出力」ではなく、「10秒以内にまた動きを検知したら一続きのeventとみなす」という意味になります。
③ motion のon_movie_endの説明 によれば、コマンドの引数として %f を指定すれば記録されたファイル名が渡されるということです。しかし、このオプションが使われるのは「動画の記録が終了した時」です。静止画像の方を取得したいなら、on_picture_saveを使うべきでしょう。
提示していただいたシェルスクリプトはちょうど1番目の引数にファイルのパスが渡されていることを期待しているものなので、

config

1on_picture_save sh /home/xxx/motion/ttt.sh %f 2```として、スクリプトの引数にファイル名を渡せばよいでしょう。

投稿2019/05/08 07:14

cugel

総合スコア220

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2019/05/09 04:48

回答ありがとうございます。リンクも張っていただき、助かりました。 何点か質問させてください。 ①AVI_PATHについて いただいたコメントの中に"ただし、このAVI_DIR 変数はその後使われていません。"とありますが、 .shファイルの最終行で、-a $AVI_PATH と使用しております。 この場合、画像ファイルの保存先を、AVI_PATHに記入すればよいのでしょうか。(↓のように) AVI_PATH=$1 AVI_DIR=`/home/pi/Picture $AVI_PATH` ②on_picture_save 最後に引数として%fを指定とありますが、↓のように記述すると、"motion.conf"ファイル内の"target_dir /home/pi/Pictures/motion"の場所が指定されるということでしょうか。 on_picture_save sh /home/xxx/motion/ttt.sh %f ③画像の保存先(target_dir /home/pi/Pictures/motion)には、多くの画像ファイルがありますが、 画像ファイルは、その時の時刻で保存されるので、ファイル名の指定をどうすればいいのかがわかりません。 ②の記述をすれば、自動的にファイル名指定されるのでしょうか。
cugel

2019/05/09 07:48

①おっしゃるとおり AVI_PATH 変数は使用しています。これは 2行目で設定されています。 3行目で AVI_DIR 変数を設定していますが、これは使われていません。したがって、3行目は特に必要ないという意味でした。特になにか書き換えないといけないということはありません。 必要はないのですが、誤解されているようなので説明しておくと、 AVI_DIR=`dirname $AVI_PATH` の前半 AVI_DIR= は AVI_DIR 変数に代入するという意味です。で、 `dirname $AVI_PATH` がどういう意味かですが、 `` で囲った場合、その中のコマンドを実行して出力されるもので置き換えられます。$AVI_PATH は変数AVI_PATHの内容を表します。コマンドラインで dirname /home/user/work/aaa.jpg と書いて実行すると、 /home/user/work と出力されるはずですが、これが AVI_PATH 変数の内容について実行されて、AVI_DIR変数に設定されることになります。 https://shellscript.sunone.me/variable.html に詳しい説明があります。
cugel

2019/05/09 07:55

②③ 作成されるファイル名が pic20190509165201.jpg だとすると、ファイルのパスは /home/pi/Pictures/motion/pic20190509165201.jpg になりますが、%f はこのパスに置き換えられた上で on_picture_save に指定したコマンドが実行されます。次に作成されるファイルが pic20190509170025.jpg だとすると、%f は /home/pi/Pictures/motion/pic20190509170025.jpg に置き換えられて実行されます。というように、%f を使うとその都度できるファイルを指定できます。
raspypy

2019/05/10 10:51

回答ありがとうございます。 いただいた回答をもとに、再びチャレンジしてみましたが、まだ目的の動作ができません。 ①メールが受信できない  "EMAIL_TO=aabbcc@gmail.com"については修正しました。 ②motion画像が指定フォルダに保存されない  Terminalでctrl+cをしないと、フォルダに画像が保存されません。 #変更した内容 motion.comf event_gap 60 on_picture_save sh /home/python_test/ttt.sh %f この2つ以外は質問の時と同じです。 #変更した内容 ttt.sh EMAIL_TO=aabbcc@gmail.com これ以外は変更していません。
cugel

2019/05/10 13:48

変化が検出され続けて、1つの event が終わっていないと判断されているのかもしれません。 output_pictures first にして試してみてください。それなら event が終わっていなくても画像が保存されるはずですので、動いているかどうか判断できるでしょう。
raspypy

2019/05/11 11:04 編集

返信ありがとうございます。 output_pictures firstにして試してみましたが、現象は変わりません。 Cyrl+cをしないと画像が保存されません。 output_pictures onに設定して試してみると、画像はどんどん保存されますが、 メールが送られて来ませんでした。
cugel

2019/05/18 01:25

mutt コマンドを直接動かしたらメールは送られてきますか? コマンドラインで echo "body" | mutt -F /xxx/xxx/mutt.conf -s subject -a /path/to.jpg -- aabbcc@gmail.com を実行してみてください。
raspypy

2019/05/20 00:06

いつも回答ありがとうございます。 コマンドラインで実行すると、添付ファイル付きのメールを受信することができました。
cugel

2019/05/24 04:28

そうすると ttt.sh は動いていて、on_picture_save が効いていないようですね。 /home/xxx/motion/ttt.sh 何か画像ファイルへのpath を実行したら動きますか? output_pictures first で画像が出力されないのは不思議ですが、best にして動かしてからカメラに布をかけるなどして完全に遮って 1 分以上たったら出力されませんか?
raspypy

2019/05/28 03:24

初歩的な質問ですみません。 ↓の実行内容が理解できておりません。教えていただけると助かります。 >/home/xxx/motion/ttt.sh 何か画像ファイルへのpath >を実行したら動きますか? bestにしての撮影は、実行してみます。(出力されるか待ってみます。)
kame_san

2019/08/05 07:47

同じ問題に悩んでいるものです。 ttt.shは動いているか? on_picture_saveが効いていない、事の確認方法 を教えて下さい。 (電子工作初心者です。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問