群晖python脚本_群晖、Python、小米摄像头、OneDrive应用案例

概要:

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

这样一来,云盘和本地至少都有 1T 的视频在。

起因:

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

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

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

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

开始操作:

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

第二步:群晖内设置onedrive

将摄像头文件夹,我这的名称为xiaomi_camera_videos,与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

更改阀值,试运行一下。低于阀值时:显示空间足够超出阈值时:运行成功

大功告成。

技术总结:

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

感谢阅读。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值