質問: やろうとしていること ---------- Raspberrypi3+motionを使用して動体検知し、検知したときの画像をgmailで送信する。 今の状態 ---- 次のことができました。 1motionを使用して動体検知し、検知したときの画像を保存 2gmailを使用して、検知した画像を送信 困っていること ------- 1と2を組み合わせたいです。 次のコードを実行して試していますが、うまく動作していません。(メールが送信されない。) ``` #!/bin/sh AVI_PATH=$1 AVI_DIR=`dirname $AVI_PATH` EMAIL_TO==aabbcc@gmail.com EMAIL_SUB="画像送信" EMAIL_BODY="動体検知画像" MUTT_CONF=/xxx/xxx/mutt.conf # send email by mutt & gmail echo $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 教えてほしいこと -------- 1このプログラムコードの2-3行の意味 画像ファイルが保存されているpathを"motion.conf"から取得していると思っていますが、 target_dirの値を取得しているのでしょうか。 2motionをbest設定にしていますが、これだとmotionを終了したときにしか画像ファイルが指定フォルダに保存されません。 event_gapを10に設定しているので、10秒に1枚保存されると思っているのですが、何か設定が悪いのでしょうか。 3target_dir内には、過去に試した画像など、多くの画像が保存されていますが、上書きまたは、最新の画像だけを送信するにはどうすれば良いでしょうか。
回答: 写し間違いでなければ、 ``` EMAIL_TO==aabbcc@gmail.com ``` は比較になっていて、EMAIL_TO変数に代入されていません。以下のように直してください。 ``` EMAIL_TO=aabbcc@gmail.com ``` 1 2行目: $1は1番目の引数を意味するので、AVI_PATH変数に1番目の引数の値を代入しています。 3行目: dirname コマンドは、与えられたパス文字列からディレクトリ部分を返すコマンドです。引数として渡されたパス文字列からディレクトリ部分を取って AVI_DIR 変数に代入しています。ただし、このAVI_DIR 変数はその後使われていません。 2motion のオプションを説明しているページ を見ると、event_gap 10 は「10秒ごとに出力」ではなく、「10秒以内にまた動きを検知したら一続きのeventとみなす」という意味になります。 3 motion のon_movie_endの説明 によれば、コマンドの引数として %f を指定すれば記録されたファイル名が渡されるということです。しかし、このオプションが使われるのは「動画の記録が終了した時」です。静止画像の方を取得したいなら、on_picture_saveを使うべきでしょう。 提示していただいたシェルスクリプトはちょうど1番目の引数にファイルのパスが渡されていることを期待しているものなので、 ``` on_picture_save sh /home/xxx/motion/ttt.sh %f ``` として、スクリプトの引数にファイル名を渡せばよいでしょう。