摄像头存群晖NAS转存OneDrive

将“小米摄像头”录制的视频转存至“群晖”,在“群晖”上与onedrive同步,同时根据onedrive的 1T空间限制(个人版或家庭版)进行文件转移,使onedrive存有最新的视频文件(1T大小),并将旧文件存放至另一位置(视情况保留或删除)。

这样一来,云盘和本地至少都有 1T 的视频在。进一步提升监控文件存储的可靠性。

同时还可以省下摄像头“云存储”的费用,那玩意还是挺贵的

用到的工具:群晖、Python、小米摄像头、OneDrive


起因:

我需要将本地的录像文件留一个备份,以备不时之需。

家中有三个小米摄像头,它们都支持转存到群晖(有些型号会不支持,记得问好卖家)。正是因为这个,才买的小米摄像头,之前用小蚁摄像头,云存储一年的费用不少,而且是按照机器来收取,存储天数越长越贵,不划算。

一台设备一天下来大约8个g,群晖单盘有2t空间,算下来3台设备可存77天。

正好家里也有台群晖d218j,支持onedrive转存(好像所有群晖nas设备都支持)。我自己购买了onedrive家庭版,有个1T的空间。


开始操作:

第一步:设置好摄像头的转存文件夹,这一步在小米摄像头内操作,米家app里。多台摄像头记得放同一位置,方便一同与onedrive同步。

第二步:群晖内设置onedrive

将摄像头文件夹,我这的名称为xiaomi_camera_videos,与onedrive云端文件夹(新建一个,自己取名)同步,同步方式选择“双向

这样的话群晖本地的小米摄像头转存文件就能与onedrive同步了。

但是onedrive有空间限制,且满了不会自动删除旧文件,只会限制你的上传,这样的话,只能咱自己来搞了。

第三部:编写python脚本,加入任务计划程序中。

基本逻辑就是:设定一个阀值,在空间快满时,把旧的文件移动到另一个文件夹,释放onedrive的空间(因为选择了“双向同步”)。

代码如下:

import osimport shutilimport re#输出和路径不能有中文,不然会在计划程序中报错。ssh里可以执行def get_doc_size(doc):#获取文件大小,单位g,两位小数    size = 0.0    for root,dirs,files in os.walk(doc):        size += sum([os.path.getsize(os.path.join(root, file)) for file in files])    size = round(size/1024/1024/1024, 2)    return sizedef transfer_file(path,n,x):#各参数:初始路径,转存文件数,转存路径    lists = os.listdir(path) #取目录下的文件保存到lists    lists.sort(key=lambda fn: os.path.getmtime(path + "/" + fn),reverse = True) # 按修改时间排序,正序    for i in range(1,n+1):# 获取最旧的n个非空文件        file = os.path.join(path,lists[-i])        if get_doc_size(file)==0:#如果文件夹大小为0,则删除            print('empty file,delete it'+str(lists[-i]))            os.remove(file)            n+=1#空文件则增加循环次数        else:#移动文件            shutil.move(file,x)            print('moving'+str(lists[-i]))if get_doc_size('/volume1/homes/bb/xiaomi_camera_videos')>900:#阀值900g    #24为一天的视频量,任务计划程序可2天运行一次,可加大些    transfer_file('/volume1/homes/bb/xiaomi_camera_videos/5ce50c62ae61',50,'/volume1/homes/bb/b/transferonedrive/5ce50c62ae61')    transfer_file('/volume1/homes/bb/xiaomi_camera_videos/5ce50ca9f839',50,'/volume1/homes/bb/b/transferonedrive/5ce50ca9f839')    else:    print('sapce enough')

自己改里面的路径(需无中文)、转存数即可。将py文件保存,放到群晖的任意文件夹内(之后要调用)。

然后在群晖的“任务计划”中,添加执行脚本的代码。(默认已经配置好了python3)

我这为

python3 /volume1/homes/bb/b/dd.p

更改阀值,试运行一下。

  • 低于阀值时
  • 超出阈值时

大功告成

技术总结:

中文路径、输出中文的问题没解决,就索性用英文了,问题不大,个人使用满足需求就好

摄像头存群晖NAS转存OneDrive 1
© 版权声明
THE END
喜欢就支持以下吧
点赞7
分享
评论 抢沙发
  • 投稿用户的头像-Czf的因特匣子

    昵称

  • 取消
    昵称