mikolaboのブログ

パソコンからくり研究室

MotioneyeOSで動態検知された蓄積データをGoogleドライブに連携する

motioneyeOS の GitHub に motionの出力フォルダから Googleドライブにファイルをコピーする方法が紹介されていたのでやってみました。

まず、事前準備として、以下があげられていました。

  • WebインターフェースでmotionEyeOSの管理者パスワードを設定し、再起動したことを確認してください。
  • SSHを使用して、MacLinuxまたはWindows PCから管理者パスワードでrootとしてログインします。
  • 以下のコマンドを入力して実行

で、紹介内容に沿って、コマンドを入力していきます。

#ルートボリュームを読み書き可能としてマウントする
mount -o remount,rw /
#gdriveを実行する、/usr/binディレクトリに変更
cd /usr/bin
#事前にgdriveバイナリファイルをダウンロード
wget https://github.com/odeke-em/drive/releases/download/v0.2.2-arm-binary/drive-arm-binary

ここで、wget がインストールできなかったので、ブラウザからバイナリを保存し、WinSCP でバイナリを motoneyeOS に配置しました。
さらに、続きを実行していきます。

#実行可能にする
chmod +x drive-arm-binary
#バイナリ名をgdriveに変更
mv drive-arm-binary gdrive
#ルートボリュームを読み取り専用に戻します
mount -o remount,ro /
#「data」デレクトリにgdriveディレクトリを作成します
mkdir /data/gdrive
#そのディレクトリに移動します
cd /data/gdrive
#sync.shスクリプトの大幅に改善されたバージョンをダウンロード
wget https://gist.githubusercontent.com/Limeliz/4389cc40744331736c59/raw/bee4809bcf3a8eef01a9d8394d996eaf4d8ae1ec/sync.sh

ここでも、wget が使えないので、ブラウザで内容を表示して、vi でファイルを作って、保存しました。

vi sync.sh

#!/bin/bash
# sync.sh written by Claude Pageau for pi-timolo, his excellent video processing application.
# re-purposed and mangled by Malcolm Taylor for use with MotionPie
# edited by Emil Janesten to stop duplicate running instances and duplicate files and folders in Google Drive.

# folder where motion files are located
SYNC_DIR=output

# Get current folder where this script is located
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Lockfile
LOCK=/var/tmp/gdrive_sync

# check if script is already running to avoid multiple instances
if [ -f $LOCK ]; then
  echo "--   Job is already running\! --"
  exit 6
fi
touch $LOCK

# Run gdrive for files in folder specified by variable $SYNC_DIR
echo "$(date)"
echo "---------------------- PROCESSING ---------------------------------"
echo "Starting gdrive Push From $DIR/$SYNC_DIR"
echo "                      To  google drive subfolder $SYNC_DIR"
echo "-------------------------------------------------------------------"     
cd $DIR
echo "Start synchronization ....."
echo "gdrive push -r -no-prompt -ignore-conflict -ignore-name-clashes $SYNC_DIR/*"
echo "Starting gdrive sync at $(date)" >> sync.log

gdrive push -r -no-prompt -ignore-conflict -ignore-name-clashes $SYNC_DIR/*

# Check if gdrive exited successfully
if [ $? -ne 0 ]
then
  echo "ERROR - gdrive Processing failed."
  echo "Possible Cause - No internet connection or some other reason."
fi
cd $DIR

echo "Done at $(date)."
rm $LOCK
exit

そして、スクリプトを実行可能にして、リンクします。

スクリプトを実行可能にする
chmod +x sync.sh
#モーション出力フォルダ 
ln -s /data/output output

SSHセッションに戻り、次のように入力して実行します。

gdrive init

GitHubの説明)
これにより長く複雑なURLが作成されますので、それをコピーしてPCのブラウザのアドレス行に貼り付けてからEnterキーを押してください。
グーグルドライブのファイルを管理する許可を与えます。
そしてそれからgdriveが待っているあなたのSSHセッションに戻ってコピーするためにコードが返されるでしょう。
成功しても何も返されません。

ここからブラウザ操作で、リンクするGoogleドライブにログインします。

先ほどの入力コマンドの後に、メッセージ出力されます。

[root@meye-3b33b4aa gdrive]# gdrive init
Visit this URL to get an authorization code
https://accounts.google.com/o/oauth2/auth?acce................rrlnuanmamgg1i4feed12dpuq871bvd.apps…...se_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive
Paste the authorization code: 4/WQEac89V…………..AIjnUr_xxxx_vXFo
[root@meye-3b33b4aa gdrive]#

最後に、定期的にモーション出力フォルダからGoogleドライブにファイルをコピーするためのcronエントリを追加します。

# set the crontab editor to be nano (I'm much more comfortable with nano than vi) crontabエディタを設定
export EDITOR=nano   # viを使う場合は、「export EDITOR=vi」)
# enter crontab editor
crontab -e

貼り付けて、タスクを5分ごとに実行するように設定します。

*/5 * * * * /data/gdrive/sync.sh >> /data/log/gdrive_output.log 2>&1

これで、作業は完了です。すぐには反映されないのですが、やってみたときは結局、次の日にやっと確認できたような・・・

 

まとめ

 

Webカメラモニタシステムのmotion関係の話をしてきましたが、今回は、MotioneyeOSで動態検知した画像、映像をGoogleドライブに連携する話でした。

ここに来るまでに、次の段階がありました。

ラズパイをACCESSPOINTにする方法は2つあります。

 

mikolabo.hateblo.jp

 

mikolabo.hateblo.jp

 

 ラズパイでMotioneyeを動かします。

 

mikolabo.hateblo.jp

 

MotioneyeOSを、Webブラウザを使って管理する方法

 

mikolabo.hateblo.jp