欢迎来到好人卡资源网,专注网络技术资源收集,我们不仅是网络资源的搬运工,也生产原创资源。寻找资源请留言

小米摄像头NAS+OneDrive存储

APP sky995 1年前 (2021-08-22) 574次浏览 0个评论

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

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

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

小米摄像头NAS+OneDrive存储

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


起因:

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

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

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

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


开始操作:

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

第二步:群晖内设置onedrive

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

小米摄像头NAS+OneDrive存储
我的设置

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

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

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

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

代码如下:

import os
import shutil
import 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 size

def 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.py
小米摄像头NAS+OneDrive存储

更改阀值,试运行一下。

  • 低于阀值时:
小米摄像头NAS+OneDrive存储
显示空间足够
  • 超出阈值时:
小米摄像头NAS+OneDrive存储
运行成功

大功告成。


技术总结:

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


好人卡资源网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:小米摄像头NAS+OneDrive存储
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址