小米摄像头录像控制:hass-xiaomi-miot camera组件高级功能
组件概述
hass-xiaomi-miot项目提供了全面的小米摄像头集成方案,通过MIoT规范实现与Home Assistant的无缝对接。camera组件作为核心功能模块,支持Wi-Fi、蓝牙和ZigBee协议的小米摄像头设备,提供实时流媒体、移动侦测录像和智能通知等高级功能。
核心实现代码位于custom_components/xiaomi_miot/camera.py,该文件定义了CameraEntity和MiotCameraEntity两个主要类,分别处理基础摄像头功能和MIoT协议特定实现。
录像自动化配置
基础录像通知配置
项目提供了预定义的自动化蓝图,可快速实现摄像头录像和通知功能。基础版本的自动化配置文件为blueprints/automation/camera-recording-notify.yaml,支持以下核心功能:
- 运动检测触发录像
- 本地存储录像文件
- 自定义保留录像数量
- 事件类型映射与通知
配置示例片段:
# 保存录像脚本配置 (configuration.yaml)
shell_command:
save_xiaomi_video: |
bash -c '
mp4="{{ name|default('latest') }}.mp4"
dir="{{ dir|default('/media/camera',true) }}"
mkdir -p "$dir" && cd "$dir"
script=/config/custom_components/xiaomi_miot/scripts/save_xiaomi_video.sh
if [ -f "$script" ]; then
bash "$script" "{{ url }}" "$mp4"
else
ffmpeg -y -i "{{ url }}" -c copy "$mp4"
fi
ls *.mp4 | sort | head -n -{{ keep|default(100) }} | xargs rm -vf
'
手机通知增强版
增强版配置blueprints/automation/camera-recording-notify-phone.yaml在基础版之上增加了针对移动设备的优化:
- 直接指定通知设备
- 自定义通知标题和内容
- 支持通知操作按钮
- 电池电量显示
通知配置示例:
# 手机通知配置片段
data:
image: "{{ img_path }}"
video: "{{ mp4_path }}"
url: /config/devices/device/{{ camera_device_id }}
actions:
- action: URI
title: 打开米家
uri: '{{ app_link }}'
- action: none
title: 我知道了
push:
tag: '{{ camera_entity_id }}'
sound:
name: default
critical: "{{ 1 if 'Bell' in motion_video_type else 0 }}"
volume: 0.3
高级功能实现
运动检测与录像触发
camera组件通过监控摄像头的motion_video_time属性变化来触发录像操作。在custom_components/xiaomi_miot/camera.py中,update_motion_video方法处理运动事件:
def update_motion_video(self, data: dict):
tim = data.get('motion_video_time')
if self._last_motion_time == tim:
return
self._last_motion_time = tim
self._attr_extra_state_attributes.update({
'motion_video_time': tim,
'motion_video_type': data.get('motion_video_type'),
})
if adt := data.get('motion_video_latest'):
if fid := adt.get('fileId'):
self._attr_camera_image = self.get_alarm_image_address(fid, adt.get('imgStoreId'), True)
self._attr_stream_source = self.get_alarm_m3u8_url(fid, adt.get('isAlarm'))
self._attr_extra_state_attributes.update({
'stream_address': self._attr_stream_source,
})
视频流加密与解密
为保护视频隐私,组件实现了AES加密传输,解密过程在get_motion_stream_address方法中处理:
def get_motion_stream_address(self, **kwargs):
# ... 省略其他代码 ...
if kwargs.get('crypto'):
key = base64.b64decode(mic.ssecurity).hex()
url = f'-decryption_key {key} -decryption_iv {self._segment_iv_hex} -i "crypto+{url}"'
return url
多事件类型支持
组件支持多种运动事件类型,可在自动化配置中自定义事件名称映射:
# 视频事件类型映射配置
video_events:
PeopleMotion: 有人移动
ObjectMotion: 画面变动
Pass: 有人在门前经过
PassBell: 有人按门铃
PassStay: 有人在门前停留
使用流程与最佳实践
基本配置步骤
- 在
configuration.yaml中添加shell命令配置 - 导入自动化蓝图并配置摄像头实体
- 设置录像存储路径和保留数量
- 配置通知方式和内容
- 重启Home Assistant使配置生效
存储路径设置建议
根据不同的使用场景,推荐以下存储路径配置:
- 本地存储:
/media/camera(需要配置媒体目录) - 网络存储:
/config/www/doorbell(适用于Web访问) - 临时存储:
/tmp/camera(重启后自动清理)
性能优化建议
- 录像保留策略:根据存储空间大小调整
keep_num参数,建议保留30-50个最近录像 - 事件过滤:通过
video_events配置过滤不重要的事件类型 - 网络优化:配置
external_url以确保外部访问稳定性 - 资源管理:定期清理老旧录像文件,避免存储空间耗尽
常见问题解决
录像无法保存
检查以下可能原因:
- 存储路径权限不足,确保Home Assistant有权限写入目标目录
- ffmpeg未安装或路径配置错误
- 摄像头流地址获取失败,检查网络连接和设备状态
通知不触发
排查步骤:
- 检查自动化触发器是否正确配置
- 确认手机设备已在Home Assistant中注册
- 查看Home Assistant日志,查找通知发送错误信息
- 验证
external_url配置是否正确
视频流卡顿
优化建议:
- 降低视频分辨率或比特率
- 缩短单段录像时长
- 检查网络带宽,确保摄像头上传速度稳定
- 调整FFmpeg参数,减少资源占用
功能扩展与定制
camera组件提供了多种自定义配置选项,可在实体配置中添加:
# 摄像头实体高级配置示例
customize:
camera.xiaomi_camera:
use_motion_stream: true
motion_stream_slice: 0
keep_streaming: true
disable_check_stream: false
通过修改这些参数,可以实现特定场景下的功能定制,如运动检测灵敏度调整、视频切片大小控制等高级功能。
完整的配置选项和参数说明,请参考项目文档和代码注释。如需进一步定制功能,可以扩展custom_components/xiaomi_miot/camera.py中的相关类和方法。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



