前言

上周买了个Aqara G4,号称目前唯一接入HomeKit的电池设备,并且支持录制到HomeKit Secure Video。外接供电的情况下体验尚可,至少比之前用过的小米系的快很多。但最让我不满的就是Aqara强制使用它的只支持802.11b协议的中继器,没有802.11n,没有5GHz,还没有RJ45有线连接,更没有PoE供电,于是就想自己动手制作一套可以接入HomeKit的可视门铃。

需要的硬件

  • 一台专业的摄像头模组

Aqara G4的1080P画质实在满足不了我,自己组装的话一定用台画质好点的。考虑到摄像头会拍摄到邻居的出入情况,可能别人有意见,所以不打算安装显眼的成品整机。手里有好几个标准的38x38cm摄像头模组:

  1. 索尼IMX385,1/1.8英寸,200万像素,像素尺寸3.85µm,弱光下成像性能最好
  2. 索尼IMX347,1/1.8英寸,400万像素,像素尺寸2.9µm,和IMX291/IMX307相同,弱光性能也很好,此外该模组固件支持HDR视频
  3. 豪威OS08A10,1/1.8英寸,800万像素,像素尺寸2µm,虽然不及上面两个低分辨率的CMOS,但也比现在普遍使用的1/2.8英寸的800万像素CMOS好很多,比如IMX415。该模组固件也支持HDR视频录制,4K+HDR,画质很惊艳

考虑到拍摄的区域只有很小的一片楼道,后续还会加装940nm的肉眼不可见红外补光灯,所以选择OS08A10模组,分辨率和弱光性能比较均衡。模组型号是安佳MC800L,已停产,取而代之的型号MC800S使用的是更小尺寸的索尼IMX415

手里有现成的整机摄像头的话也可以拆开外壳,把里面的机芯取出来直接使用,现在市面上的枪机和半球都差不多造型的机芯模组,小厂大都是标准38x38cm模组,大厂用自己规格的PCB板,但也不会很大

镜头选用了宇瞳F1.0超大光圈镜头,以获得更好的弱光画质,M16接口,2.8mm焦距。小空间2.8mm是首选

  • 一个充当门铃按钮的无线按钮

需要能接入HomeKit或Home Assistant,选择比较多,我使用了Aqara Zigbee无线按钮开关,粘贴在大门上

  • 解决网线和供电问题

因为早年装修时根本没想到会有在门外装摄像头的需求,所以这花了我些功夫,之后会单独写篇文章分享无奈场景下的布线经验,估计绝大部分城市家庭都不会在门外留电源和网络接口

需要的软件Scrypted

按照官网教程安装,我选择直接使用Docker镜像安装,最方便快捷不出错。以下记录配置过程,以防自己健忘

摄像头设置

因为HomeKit只支持H264视频,所以需要将摄像头的编码模式设置为H264,不要勾选智能编码等选项,I 帧间隔需要设置为帧率值的4倍,如帧率是25FPS,I 帧间隔就需要设置为100。其他编码方式需要Scrypted做实时转码处理,延时很大

安装以下Plugins

  • HomeKit
  • Dummy Switch Plugin
  • Snapshot Plugin
  • ONVIF Camera Plugin

将摄像头添加到Scrypted

进入ONVIF Camera Plugin -> Add New ->输入摄像头的IP地址,用户名密码,端口80 -> Create。创建设备后,Extensions中勾选上WebRTC Plugin,Rebroadcast Plugin,Snapshot Plugin,不要勾选HomeKit

进入Dummy Switch Plugin -> Add New,输入名字如virtual_button,Extension中勾选HomeKit,并将该虚拟按钮添加到Home App中。Home App中应该会出现一个名为virtual_button的开关,创建一个自动化任务:如果门外的Aqara无线按钮被按下,就打开vurtual_button。

进入Device Groups -> Add New,输入名字如video_doorbell,Edit->Type选择Doorbell,保存。在Device Interfaces中选中virtual_button(BinarySensor), OS08A10(Camera), OS08A10(Video Camera), OS08A10(MotionSensor)。Extensions选中HomeKit,保存,刷新,HomeKit设置标签页->Linked Motion Sensor选择OS08A10。此选项意为将摄像头的移动侦测报警绑定到门铃的动作传感器,做移动检测工作的是摄像头本身,通过ONVIF协议的事件检测传递给Scrypted,Scrypted再传递给HomeKit

保存后添加到Home App,可视门铃组装完毕。门铃动作由Aqara按钮触发,移动侦测由摄像头本身触发。局域网内使用,按下按钮的同时HomeKit就会立即响起铃声,手机也在1秒内收到带截图的推送通知,点开也是无菊花转动立即预览门口的4K HDR画面,体验比Aqara G4好很多

进一步完善移动侦测

Scrypted的移动侦测有几种方式,最方便的是通过ONVIF协议由摄像头自带的侦测功能触发,或使用自带的插件PAM Diff Motion Detection或OpenCV Motion Detection实时分析处理视频,比较费CPU,只适合直接添加RTSP视频流地址的情况。Scrypted强大的平台功能还可以允许HTTP API、MQTT等外部方式触发motion sensor。对于走廊狭小空间,红外人体传感器是一个非常不错的触发选项

我之前安装的Aqara G4就正好自带了一个,水平探测角度120度,垂直80度,灵敏度非常高,触发也迅速及时。可以通过Scrypted绑定到自制门铃的motion sensor,或另外单独使用一个Aqara或小米的能接入HomeKit的红外人体传感器,探测角度更大,水平170度。PIR传感器的好处是可以在全黑的环境中迅速灵敏准确地探测到带热量的物体移动,而且不受摄像头盲区的限制,可以灵活布置,甚至可以安装多个,安装到监控区域外,在人进入画面前就提前触发motion sensor。

以下为将Aqara G4和单独的Aqara人体传感器绑定到自制门铃的设置过程

  1. 首先需要在Scryped中使用Dummy Switch Plugin创建一个虚拟的按钮并添加到HomeKit,取名为PIR_sensor,Type为Switch。Home App中创建自动化,Aqara G4或Aqara人体传感器探测到人体移动就打开PIR_sensor这个虚拟开关
  2. 回到门铃的设置界面,Device Interfaces添加PIR_sensor(MotionSensor),保存,刷新页面,在HomeKit选项卡的Linked Motion Sensor中选中PIR_sensor,保存,可能需要重启下Scrypted

这样自制门铃的motion sensor就会由Aqara G4和单独安装的Aqara人体传感器触发,摄像头自带的移动监测功能就无法触发了,如果需要同时支持由摄像头触发,可以这项设置

  1. 进入Automations -> Add New。 Trigger选择OS08A10(MotionSensor), Trigger Condition不填,Action选择PIR_sensor(OnOff),点击下方的按钮使之为On,保存,可能需要重启下Scrypted以生效

这样摄像头自身的的移动监测触发后也会自动改变的PIR_sensor的值,继而触发自制门铃的motion sensor

成本总计

  • 安佳MC800L摄像头模组: 130
  • 宇瞳F1.0光圈M16镜头: 38
  • Aqara无线按钮: 40
  • 可选Aqara人体传感器: 40
  • 网线、电子线、电胶布、透明胶带、螺丝、铜柱和鞋带: 估约10元

合计:218元(PIR+40元)

后续考虑更换镜头底座的固定红外滤光片为IR-Cut并外置几颗940nm红外补光LED,肉眼不可见,增加成本20元。或想办法把楼道的声控灯改成常亮

不追求分辨率和CMOS尺寸的话完全可以闲鱼淘入15元的全套拆机模组,成本再-150,效果肯定也会比Aqara G4的好

此方案的不足

对讲功能需要使用ONVIF协议Profile T中的双向语音,据我所知目前国内的摄像头厂家很少支持,我这个模组的固件也不支持,有待将来进一步折腾。测试了手里的所有摄像头发现国内大厂在2020年之后的固件中基本都支持了Profile T,海康、大华和宇视,都是ONVIF的最高级别会员,2019年初在ONVIF组织发布Profile T后就立即增加了支持。

虽然使用ONVIF测试工具发现这三家都支持了Profile T,但实际只有海康的摄像头能对讲成功,局域网内几乎无延迟,体验很好。大华和宇视的Scrypted的日志都有报错,无法启用对讲

其他小厂的固件虽然也都支持ONVIF,但都支持最基本的Profile S,只能实现rtsp播放和事件通知。需要对讲功能的建议选购海康的新机器

一些折腾中的发现

  • HomeKit Secure Video支持4K录制,之前看报道说HKSV最高只支持到1080P,实际测试发现4K和4000x3000的分辨率完全没问题,但下载回来的文件是被压缩过的,分辨率不变,码率从原始的8Mbps被压缩到1Mbps。原始码率为1Mbps的话,下载回来的还是1Mbps

这需要更新测试结果,以上4K测试时使用的是A12 Bionic处理器的Apple TV 4K作为家庭中枢。更多测试后发下,使用HomePod2/mini作为中枢的话,无法支持录制4K分辨率的视频,本人测试成功的最高分辨率为2560x1440,即400万像素。因为HomePod2和mini使用了Apple Watch的阉割低功耗SoC,图像处理性能大大受限,本想测试下性能不足以实时压缩4K视频时会不会直接转发录制到Apple的服务器,结果发现对于不支持的分辨率,中枢会直接拒绝录制到HKSV。这更说明了不要使用只支持802.11n的HomePod作为家庭中枢

  • HomeKit虽然自带移动监测,并且能分析画面中的物体类型,但前提是摄像头本身的移动监测触发后发送视频文件给家庭中枢分析,家庭中枢并不7x24连接视频流做分析处理

  • 由于Apple的中转服务器在海外,国内远程查看摄像头的实时画面大部分时间会非常卡,建议在ONVIF摄像头的Streams设置中将Remote Stream设置为较低码率的第2/3码流

  • 这些小厂的摄像头虽然也自带免费云功能,但基于信任问题,我都选择在路由器上将其IP和MAC屏蔽了外网连接权限