Raspberry Piで監視カメラ8 GoogleDrive編

RaspberryPiカメラで画像をGoogleDriveに送る

保存先は普段使っていなくてアプリも入れていないGoogleDriveに任せることにした。
GoogleDriveをCUIで操作するのはいくつかあるのですが、シンプルにアップする事が出来、Rapberry Pi用のバイナリが用意されてるgdriveにしました。

まずはソフトをダウンロードして
$ curl -JLO https://docs.google.com/uc?id=0B3X9GlR6EmbnVXNLanp4ZFRRbzg&export=download
実行権限与えて
$ chmod +x gdrive-linux-rpi
他で使うかもしれないのでプログラムフォルダ的な場所に移動
# mv gdrive-linux-rpi /usr/local/bin
まずはファイル一覧を取得します。
# /usr/local/bin/gdrive-linux-rpi list
すると認証用のURLが出てくるのでコピペでブラウザからアクセスして手順に従い認証トークンを発行してもらって、ターミナルに戻って貼り付ける。
# /usr/local/bin/gdrive-linux-rpi upload /var/motion/image.jpg
# /usr/local/bin/gdrive-linux-rpi upload –no-progress -p <フォルダID> /var/motion/image.jpg
今回はフォルダを作成してその中に格納していきますがGoogleDriveのフォルダ名をそのまま使えないので先ほどの「/usr/local/bin/gdrive-linux-rpi list」で格納したいフォルダIDをメモしておきます。

$ sudo vi /etc/motion/motion.conf

daemon on
width 1920
height 1080
framerate 10
quality 90
output_pictures on
threshold 3000
noise_level 96
ffmpeg_output_movies off
on_picture_save "/var/motion_setting/send6.sh %f"
on_event_end none
on_movie_end none

$ cp /var/motion_setting/send.sh /var/motion_setting/send6.sh
$ sudo vi /var/motion_setting/send6.sh

#!/bin/sh
FILE=$1
DIRID=<フォルダID>
chown pi:pi $FILE
/usr/local/bin/gdrive-linux-rpi -c "/root/.gdrive" upload --no-progress -p "${DIRID}" "${FILE}"

Dropbox-Uploaderのようにrootで認証しmotionでroot権限で実行したら認証データを使える訳では無く、gdriveは認証データの入ってるフォルダを「-c」オプションで指定してあげないと送れなかった。
その認証用のデータは認証したユーザーのホームディレクトリの「.gdrive」に入ってます。
DropbBoxの時と同様になおRaspberry Piに残ってるデータはcronで定期的に消すようにしています。
$ crontab -e

0 7 * * * find /var/motion -name '*.jpg' -mtime +7 -delete

更にGoogleDrive上の古いファイルも定期的に削除したいのでシェルスクリプトを用意します。
# vi gdrivecleaner.sh

#!/bin/bash
DATE=`date -d '3 days ago' '+%Y-%m-%dT%H:%M:%S+09:00'`
DIRID=<フォルダID>
DATA=`/usr/local/bin/gdrive-linux-rpi -c "/root/.gdrive" list -q "trashed = false and '${DIRID}' in parents and mimeType contains 'image/' and modifiedTime > '${DATE}'" -m 100 |  awk '{ print $1 }' | sed '/^$/d'`

cnt=0
while read line
do
  if [ $cnt -eq 0 ]; then
    if [ $line != "Id" ]; then
      break
    fi
  else
    /usr/local/bin/gdrive-linux-rpi -c "/root/.gdrive" delete $line
  fi
  cnt=$((cnt + 1))
done <<END
$DATA
END

実行権限を与えて
# chmod +x gdrivecleaner.sh
先ほどと同じくcronで定期的に実行するようにする。
# crontab -e

15 7 * * * /root/gdrivecleaner.sh

Tags: , ,

トラックバック

コメントを書く