Uncategorized

低成本监控私有云解决方案:小米摄像头+路由器+U盘

家里上一代的监控摄像头还是十几年前部署的,当时储存方案是本地microSD卡和远程FTP,限制于当时的技术,摄像头分辨率比较低,同时远程控制功能也比较基础,虽然厂家提供了DDNS动态域名解析,但是也需要家庭宽带有公网IP并同时设置了端口映射才能远程访问到。相比于现在产品,最大的欠缺是实时预警,老款做不到在第一时间觉察家中有异样。在旧设备平稳运行了十几年后,最近发现设备不工作了,电源灯不亮,拆开看到电容都鼓包了,感觉是真到了设计寿命终止的时刻了,于是着手调研更换一批新的设备。 研究了一圈目前市面上比较有名的家用监控摄像头,最终锁定在小米和萤石这两个品牌上。前者入围是由于小米在物联网家用智能设备做的确实很不错,米家生态真的非常完整且成熟;后者入围是看到萤石是海康威视旗下针对家庭用途推出的产品,信赖海康在公共安全监控领域的技术积淀。这两个品牌的产品我都亲自体验了,总体给人的感觉是基础功能都差不多且基本够用,对我来说比较关注手机远程控制,云存储,画面变动检测,远程报警功能,这两个品牌解决方案都能满足。我还挺关注在本地SD卡存储之余还需要云存储,主要是不太放心本地SD卡储存稳定性,以及怕在极端情况下有人闯入家中损坏摄像头,造成储存介质丢失,这样就失去了监控的意义。 两个品牌云存储费用有一些区别,小米7天滚动存储是188一年,萤石是对于活动录像139(160原价)一年,可以理解成只存储带事件的那一段,如果是全部存储价格高达了799(原价999)元。 最终我给家里大批量部署选择了小米品牌,但是原因不是上边提到的云存储价格,是因为我连188都嫌贵😂。每台设备每年188,而我至少是有4台设备,将来可能有需要还会继续增加,加一块这费用就可太高了。我想自己实现云存储这个效果,这就是我标题提到的:低成本监控私有云解决方案:小米摄像头+路由器+U盘。 经过查询以及亲自体验知道小米摄像头支持Samba协议将视频转存到局域网中的NAS服务器里,而NAS只是个代称,只要是Wifi同一个网络中支持Samba储存协议的设备都可以,最直接的就是路由器本身了。现在绝大多数的家用路由器都有USB接口,支持Samba协议将U盘设置成共享网盘。我的路由器AC86U其中的一款,在硬件设备上,把U盘插到这里,如下图。 这里有个点需要注意下,若路由器中提供了USB3.0(蓝色)和USB2.0(白色)两种接口,最好使用USB2.0,因为USB3.0会和2.4G Wifi造成干扰,影响Wifi无线连接的稳定性。一些路由器会提供一个选项,大意是降低USB3.0的干扰,原理是主动降低两者的性能,这终究不是我们想要的效果,对于我们的需求,USB2.0足够了,就像我上图,U盘插到了左边白色的槽中。 在路由器设置页面,已经可以看到USB2.0高亮代表识别到挂载了一个设备,点击然后格式化一下,建议使用NTFS格式,带日志,对于文档安全性好一些。在右侧信息一栏可以看到容量用掉了多是还剩多少,在中间那个长条也是显示已用容量,如下图。 我所用的华硕路由器还可以执行健康度检查,隔一段时间可以运行一下,看看这个U盘有没有出现什么问题。当设置好后,点击左边“USB相关应用”,二级菜单选择“服务器中心”,三级打开“网络共享(Samba)/云端硬盘”,在这里就可以设置Samba共享网盘的信息了。在这里建议将允许访客登入关掉,以防止知道你家Wifi后直接就可以看到网上邻居共享文件家中存放的监控视频。在下方红框内可以设置共享网盘的用户名密码,以及开放的文件夹权限了。建议新建一个文件夹而不是存在U盘根目录,然后将权限设置成读写(R/W)。 当我们设置好后,在米家应用小米摄像头设置页面,我们已经能够看到存储设置下,NAS已经不在是灰色,变成了黑色可用状态了,点击进入输入一些基本用户名密码信息,然后选择要存到的对应文件夹,这里可以看到识别到的文件夹名字,就是我们在路由器中设置的名字。一切设置好后就可以看到小米摄像头可以正常转存视频到路由器下的U盘了,这里还有一些设置比如说视频储存时常设置,这个可以理解成滚动存储,根据自己U盘大小按需设置。上传时间间隔建议选择实时,这样才能达到我们的目的,及时转存摄像头拍下的数据到云端。   到目前为止基本上我们的私有云滚动存储就设置完了,在这里有两个可以优化的点,可以进一步加强储存设备的稳定性,首先是若无特别需求的话,在存储卡设置中将录制模式设定成录制移动画面,这样可以大幅降低SD卡可U盘的负担。另外如果条件允许的话,强烈建议将U盘换成移动硬盘,或者SSD U盘,提高硬件的可靠性。 之后可以在电脑端查看共享网盘的内容,在同一网络下的话,在Network中大概率自动就可以识别到共享网盘。注意Mac客户端需要切换一下smb登录用户名为路由器中设置的值,因为Mac默认会用自己用户名登录;Windows下的话,一些电脑可能默认没有打开smb服务,表现是网络中没自动识别共享网盘,或者点击\\192.168.50.1提示缺APP。网络上找一下教程开启一下Windows smb服务即可。 试用了一段时间,效果还是很不错的。这样设置后,相当于监控摄像头拍摄到的画面存储了两份,一份在摄像头中的SD卡中,另外一份存储在了私有云我们U盘中,实现了双保险。在极端情况下假设不法分子进入室内后破坏掉我们的摄像头,损坏了其中的SD储存卡,那么在物理损坏摄像头前最后的视频,还会留存在我们私有云U盘中一份的,达到了和官方云服务相同的目标。并且可以同一存储空间挂多个摄像头,比如说我目前设置好了两个,一个安装在客厅,一个安装在地下室,由于在同一个网络,都二次备份到我路由器同一个U盘里,通过不同文件夹来区分。 下边说一下另一个品牌:萤石。之所以没有选择这个,是因为这个品牌不支持SMB或者FTP这两个常见较容易搭建的网络存储空间。若想搭建自己私有云远程备份,就需要用到萤石官方的电脑上位机软件,或者在NAS中运行Surveillance Station通过萤石支持的RSTP协议进行管理。这样子一下子成本就高了起来,要不就用一台24小时开机的电脑,要不就是买一个NAS。虽然我自己有NAS,但是我不愿意长期运行一个软件,这对我NAS的寿命也有影响,萤石的解决方案远不如SMB/FTP轻巧方便。但是萤石有几个功能非常实用,而这部分小米是做不到的,就像下图的“设备下线提醒”,“电话提醒服务”,“在线值守”如下图。对于家庭来说,设备下线提醒很有必要的,有时候设备由于一些原因已经离线很久了,但是用户并没有及时察觉。另外两项对于商家感觉很有必要,当出现异常情况,APP通知可能不能及时看到,但是打来一个电话这优先级还是很高的,将异常及时送达的效果也高很多。在线值守的话,更像是用AI的能力在检测一切可能出现的异常。总之感觉下来,可能也与萤石是海康产品的原因,很多的功能有很重的商用设备的味道,就比如远程管理的模式和这几个额外服务,像是一个商用摄像头的简化版拿过来民用。总之是各有各的好处和特点,如果他们俩能够相互学习借鉴一下,那就更好了。 至此小米摄像头+私有云搭建就结束了,最后放一张我的摄像头照片吧,房顶射灯不怎么用,将一个射灯电源去掉,然后将小米摄像头底座用强力双面胶粘到那个灯上,大小刚刚好,美观程度也还行,喜欢。 觉得有用的话,点赞评论告诉我一下吧。^_^

低成本监控私有云解决方案:小米摄像头+路由器+U盘 Read More »

华硕AC86U路由器改装散热

家中路由器放在弱电箱里,由于封闭环境空气不流通,芯片过热路由器经常挂掉,表象就是WiFi信号能搜到但是连不上,只能重启解决。到了夏天比较热那段时间,以及到了冬天地暖开始供热,这种现象更加频繁,非常非常地影响正常使用。网上搜索信息了解到AC86U这款路由器芯片和散热片之间是用导热垫连接的,热传导性能相对较差,芯片的热量并不能有效通过厚厚导热垫传给金属散热片。同时我的AC86U又放在密闭空间,空气对流差,更加不利于路由器芯片散热。于是我将AC86U做一定程度的改造,将导热垫换成导热铜片,并添加硅胶增强贴合性,同时去掉外壳直接将AC86U的PCB板放在弱电箱使用,从而有效缓解了芯片温度过高路由器死机问题。 首先将AC86U外壳打开,有两个螺丝需要拧下,在下图的背面红框处。 然后慢慢撬开前后壳塑料勾子,取下前壳。 PCB板正面有几个螺丝与路由器后壳固定,拆掉螺丝同时卸掉天线和螺丝,就可以拿下路由器后板,如下图PCB正反面。 拆掉导热板中间和四周的螺丝,就可以将导热板拿下了,此时可以看到芯片和导热板之间,是用厚厚的导热垫连一块的,就在这一块瓶颈,让整个AC86U散热很差。我们要做的就是将这三个导热垫换成铜片和导热硅胶,加强导热性能,就像电脑CPU散热器的一样。 准备好导热铜片和硅胶,铜片是我经过测量后在淘宝订做的,两颗小芯片用的是12mm*12mm*2mm尺寸,大芯片用的是15mm*15mm*2mm尺寸,放在那个方框里刚刚好。 先在芯片上涂上硅胶,然后将导热铜片放在芯片上,如下图。然后再在铜片上涂上硅胶,装回金属散热片。 由于我的AC86U是放在家中的弱电箱里,可以关门是个密闭空间,同时也没太多灰层,我决定不装外壳,直接裸奔使用。找了一个架子与地面隔开,减少冬天地暖的影响,还挺合适。 经过了一段时间的观察,可以说效果惊艳。长期使用三颗芯片温度甚至都没有超过55°,也没再出现过死机的现象,至此AC86U散热改造就完成了,效果非常满意。 随手测了一下网速,家中宽带也很给力,500M宽带能跑满。 之后有空再记录一下出门在外连回家中内网的方案,也是挺好玩的,占坑。

华硕AC86U路由器改装散热 Read More »

对讲机信道总结

民用对讲机:公共频道,409-409.990MHz,功率低于0.5W,免执照可使用 信道 频率(MHz) 1 409.7500 2 409.7625 3 409.7750 4 409.7875 5 409.8000 6 409.8125 7 409.8250 8 409.8375 9 409.8500 10 409.8625 11. 409.8750 12 409.8875 13 409.9000 14 409.9125 15 409.9250 16 409.9375 17 409.9500 18 409.9625 19 409.9750 20 409.9875 业余电台:业余频道,430-440MHz,需要执照和操作证,常用信道划分: 信道 频率(MHz) 1 430.1375 2 430.4375 3 431.1375 4 431.4375 5

对讲机信道总结 Read More »

Merlin梅林cfddns重启后自动更新失效

我是用koolshare软件中心的cfddns插件来实现动态域名的需求,用来连接家中设备。在配置页面设置了60分钟自动更新一次,在保存后通过日志检查自动更新命令允许正常,能够按照预设的周期看到如下Log: Jan 21 14:10:00 crond[546]: USER admin pid 1438 cmd /koolshare/scripts/cfddns_update.sh 可是当路由器重启后,cfddns定时更新并不能正确执行,看作者Github的issue,也有其他人遇到类似的问题,应该是插件开发中还有缺陷。于是我查了查cfddns是通过crontab将定时脚本记录在了/tmp/var/spool/cron/crontabs/admin中,而根据Merlin的帮助Wiki,这个位置是记录在RAM里的,重启就失效了,建议将脚本保存在jffs分区,并通过init-start脚本实现开机再次写入。所以对于我遇到的这个cfddns可以用这个办法解决,通过vi /jffs/scripts/init-start 创建一个新文本,填入以下内容,其意义是每次重启会自动同步一次,然后每隔1440分钟(一天)再自动同步一次。 #!/bin/sh /koolshare/scripts/cfddns_update.sh echo “*/1440 * * * * /koolshare/scripts/cfddns_update.sh #cfddns_update#” >> /tmp/var/spool/cron/crontabs/admin 之后将文件赋予执行权限: chmod a+rx /jffs/scripts/init-start 注意通过这样子设置的更新周期不会反向同步到cfddns网页设置的那个窗口中,实际定时任务间隔以上边脚本中数字为准。到此cfddns脚本自动更新任务就设置完成了,重启一下,试试吧!   Reference: https://github.com/RMerl/asuswrt-merlin.ng/wiki/Scheduled-tasks-(cron-jobs) https://bugxia.com/946.html https://github.com/geek5nan/koolshare-cfddns/issues/5      

Merlin梅林cfddns重启后自动更新失效 Read More »

Jenkins 发送验证邮件失败

最近在玩Jenkins想配置一个邮件提醒,在正确配置了SMTP服务器账号密码信息后,点击发送测试邮件死活发不出去,并报下边的错误。我检查了很多遍我的配置,并且从其他一个服务器拿过来一个在用的确认没错的配置以及账号尝试发送还是不成功。查了很多帖子,原来是这里发送邮件的账户,应该与上边填写的系统管理员账户(System Admin e-mail address)一致,修改后示例邮件发送成功。看来这个Jenkins坑还不少啊。 java.net.SocketException: Connection or outbound has closed at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1297) at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:116) at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2429) Caused: jakarta.mail.MessagingException: Can’t send command to SMTP host;   nested exception is: java.net.SocketException: Connection or outbound has closed at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2431) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2418) at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:1394) at jakarta.mail.Transport.send0(Transport.java:233) at jakarta.mail.Transport.send(Transport.java:100) at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:714) at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:397) at

Jenkins 发送验证邮件失败 Read More »

Jenkins设置系统语言

最近玩一玩Jenkins,在安装好默认的配置下,语言是中英文混杂,看着太别扭了,有些中文翻译也很别扭,我感觉还有可能有误导嫌疑,于是我想讲系统语言设置成英文,可是在配置页面找了好几遍竟然没找到,查了下原来是需要一个插件才能完成这个基本的功能: Locale: https://plugins.jenkins.io/locale/ 安装好后在系统设置页面找到Locale栏,Default Language输入en_US并且勾选“Ignore browser preference and force this language to all users” 即可将默认语言更改为英文。 这个locale用的是Linux格式,即xx_YY ,比如zh_CN。可以在Linux上运行locale -a查看所有可用的locale。   Reference: https://blog.csdn.net/nklinsirui/article/details/89576475

Jenkins设置系统语言 Read More »

CAN FD总线基础

学习笔记系列之CAN FD总线。 之前一篇笔记记录了CAN总线基础:https://blog.shuspieler.com/3649/ , 在这继续记录CAN FD的知识。 如果用一句话总结CAN FD和CAN的区别的话,就是为了加大数据吞吐率,在Payload使用了不同的传输频率,头部尾部保持不变,从而在相同的时间长度,传输了更多的数据,就像下图所示。 CAN FD协议需要新的控制器,而新的控制器是兼容老的CAN协议的,也就是说CAN FD控制器可以向下兼容与CAN控制器通信。有时候车身CAN控制器可以混杂部署,比如通过将一部分CAN控制器设置成休眠模式,就可以在CAN FD控制器之间进行高速传输,比如刷新ECU的时候。通常通过CAN需要传输几小时,通过CAN FD就可以大大减少这个时间。 下边是CAN FD和CAN 帧的对比图: 首先是CAN FD没有remote frame这个帧了。也不难想到,首先是这个用的确实不多,其次remote frame没有Data Field,而CAN FD 和CAN区别就在这里,所以remote frame就失去了其意义。在数据帧中,RTR也被换成RRS(Remote Request Substitution),并且保持显性电位。在帧头的SOF,IDE,以及帧尾的ACK,DEL,EOF以及ITM(Intermission Field)都与CAN总线一致。 CAN FD和CAN的帧主要区别位于IDE和ACK之间。如下图所示,两者的区分是那个r保留位,当r是显性电平逻辑0时候,代表这是一个传统的CAN帧,当r是隐性电平逻辑1时候,说明这是一个CAN FD帧,同时这个保留位r有了一个名字FDF: Flexible Data Rate Format。 CAN FD控制器可以发送和接收传统CAN帧以及CAN FD帧,传统CAN控制器在接收CAN FD帧由于显性电平r是不符合规则从而会报错,然后将通过错误帧应答,也就是说,传统CAN并不能解析CAN FD数据,按照错误帧处理。 CAN FD中有一个新的帧叫做BRS(Bit Rate Switch),当这一位是显性时,中间部分数据传输速率baud rate 2 和帧头帧尾传输速率baud rate 1 是相同的,这种情况下CAN FD并不能起到加速速率传输的效果。当这一位是隐性时候,中间部分数据传输速率变为 5Mbit/s,这是一个在实验室大量验证证实在绝大多数车身网络这是比较可靠的值。BRS的值决定了中间部分从BRS起到ACK之前的速率。 ESI全称Error State Indicator,这一位是显性代表这个节点是Error Active状态,如果这一位是隐性,代表这个节点是Error

CAN FD总线基础 Read More »

敏捷和Scrum

Manifesto for Agile Software Development   We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That

敏捷和Scrum Read More »