MotioneyeOSで動態検知された蓄積データをGoogleドライブに連携する
motioneyeOS の GitHub に motionの出力フォルダから Googleドライブにファイルをコピーする方法が紹介されていたのでやってみました。
まず、事前準備として、以下があげられていました。
- WebインターフェースでmotionEyeOSの管理者パスワードを設定し、再起動したことを確認してください。
- SSHを使用して、Mac、Linuxまたは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つあります。
ラズパイでMotioneyeを動かします。
MotioneyeOSを、Webブラウザを使って管理する方法