#motionEyeOSでGoogleDriveにアップロードしてたら新しいファイルがアップロードされなくなった
#理由
motionEyeOSはGoogleDriveの空きに関係なくどんどんアップロードする。
なので設定次第では1ヶ月もしない内に無料ストレージ分の15GBを食いつぶしてしまう。
保存先の空き容量が無いので保存できなくなっていた。
#対策
motionEyeOSはどんどんアップロードするだけなので
GoogleDrive側で自動で消す仕組みにした。
今回利用したのは GoogleAppsScript。
〜2019/06/11追記〜
当初作ったのだとゴミ箱がいっぱいで結局容量を食いつぶしてしまうので
Googleで用意されているAPIを呼び出すことでゴミ箱からも削除されるように変更した
#詳細
##motionEye OSがアップロード先のフォルダから条件にあった古い作成日のフォルダを消す
##GoogleAppsScriptコード
/* motioneye OSが自動作成するGoogleドライブ内の特定のフォルダから古い作成日のフォルダをゴミ箱に移す */
function trashTemporaryFile() {
var folderID = "9dfoHogeHogeHogedas9sadfn"; //時限削除したいフォルダのID(GoogleDriveでフォルダを選択した時のURL末尾ID)
var days = 14; //日数
var folder = DriveApp.getFolderById(folderID);
var folders = folder.getFolders();
while(folders.hasNext()) {
var file = folders.next();
if (new Date() - file.getDateCreated() > days * 24 * 60 * 60 * 1000) {
//ゴミ箱に(ファイル完全削除ではない)
file.setTrashed(true);
}
}
//ゴミ箱を完全に空にする(Drive API)
/*https://qiita.com/TakashiHamada/items/d932b1c7ed991b575109*/
Drive.Files.emptyTrash();
}
#解説
motionEye OSは標準だと以下のようなフォルダでファイルを貯めていく。
- motionEyeOSの設定で指定したパス
- YYYY-MM-DD
- YYYY-MM-DD
「motionEyeOSの設定で指定したパス」には、その日のファイル保存時に新規でフォルダが作成されていくので
対象パスの中にあるフォルダの作成日が所定の日数より古ければ
ゴミ箱に移動させるようにした。
上記のソースでは フォルダIDをブラウザURLから特定して
何日以上かをコード内に指定すりゃ良い。
〜2019/06/11追記〜
ここまでだとゴミ箱にファイルが残り続けて、
ドライブの容量がいっぱいになった後には追加保存ができなくなる。
なのでプロジェクトにAPIを紐づけして
APIからゴミ箱を削除できるように追加した。
#環境
システム情報 | バージョン |
---|---|
motionEye Version | 0.37.1 |
Motion Version | 4.0.1+git2a140fa |
OS Version | motionEyeOS 20171008 |
Google API | REST API Drive v2 |
#最後に
GoogleAppsScriptの設定方法はどこぞで探しておくんなまし。
#参考記事
Google app script + REST API v2でファイルを完全削除またはゴミ箱を空にする
https://qiita.com/TakashiHamada/items/d932b1c7ed991b575109