当前位置: 首页 > news >正文

基于RTSP与Home Assistant构建低成本家庭安防系统:旧手机改造与微信通知集成

1. 项目概述:打造一个智能化的家庭安防与通知中枢

最近在折腾智能家居,总想把手头闲置的设备都利用起来。我手头有一台老旧的安卓手机,性能一般但摄像头还行,一直想把它变成一个常开的监控摄像头。同时,家里的智能设备都接入了 Home Assistant,如果能把这台“摄像头”也接进去,再结合企业微信的推送能力,不就能实现一个低成本的、高度自定义的家庭安防和状态通知系统了吗?比如,当摄像头检测到门口有人移动时,不仅能在 Home Assistant 里弹窗提醒,还能立刻给我的企业微信发一条带截图的消息,甚至能联动家里的智能灯闪烁报警。

这个想法听起来复杂,但拆解开来就是三个核心组件的联动:reCamera(将安卓手机变为网络摄像头)、Home Assistant(智能家居中枢,负责接收视频流、分析事件并触发自动化)、企业微信(作为高效、可靠的消息推送渠道)。整个过程不涉及任何复杂的硬件改造,核心在于软件配置与网络服务的打通。无论是想 DIY 一个宝宝看护器、宠物监视器,还是简单的门口安防,这套方案都提供了一个非常灵活和可扩展的框架。下面,我就把自己从零搭建、踩坑、到最终稳定运行的完整过程记录下来,分享给同样爱折腾的你。

2. 核心组件选型与部署思路

在开始动手之前,我们需要明确每个组件扮演的角色以及为什么选择它们。一个清晰的架构图能在脑海中形成,后续的配置才不会乱。

2.1 为什么是 reCamera?

市面上将手机变成摄像头的 App 很多,比如 IP Webcam、DroidCam。我选择reCamera的原因主要有几点:

  1. 纯粹的 RTSP 服务器:它不像一些 App 附带复杂的网页界面或云服务,reCamera 启动后就是一个标准的 RTSP(实时流传输协议)视频流服务器。这对于 Home Assistant 这类需要直接拉取流媒体的平台来说,兼容性最好,也最稳定。
  2. 低资源消耗:由于功能单一,它在老旧手机上的后台运行资源占用相对较低,更不容易被系统“杀掉”进程。
  3. 无广告与隐私可控:数据流完全在本地局域网内,不经过任何第三方服务器,隐私安全有保障。

它的作用就是让安卓手机化身为一个标准的网络摄像头,为 Home Assistant 提供视频源。

2.2 Home Assistant 的核心枢纽作用

Home Assistant 在这里是绝对的大脑。它需要完成以下任务:

  1. 集成摄像头:通过genericonvif集成,接入 reCamera 提供的 RTSP 视频流。
  2. 事件分析与自动化:利用其强大的图像处理运动检测功能(例如内置的image_processingcamera组件的运动检测属性),对视频流进行实时分析。
  3. 触发与执行:当检测到预设的事件(如运动、人脸、包裹)后,触发自动化流程。
  4. 调用消息服务:在自动化中,调用集成的企业微信通知服务,将报警信息、快照图片发送出去。

我选择将 Home Assistant 安装在一台常年开机的VirtualBox 虚拟机中。这样既保证了 7x24 小时运行,又便于备份和迁移。当然,树莓派、旧电脑、NAS 也都是不错的选择。

2.3 企业微信作为推送渠道的优势

为什么不用 Telegram、钉钉或者普通的微信?企业微信在智能家居通知场景下有独特优势:

  1. 高送达率与稳定性:企业微信的消息通道非常稳定,几乎不会被屏蔽或延迟,这对于安防报警至关重要。
  2. 丰富的消息格式:支持文本、图片、文件、图文链接等多种格式,非常适合发送带截图的报警信息。
  3. 易于管理的接收群组:可以创建一个专门的家庭通知“群聊”,将家庭成员都拉进来,实现消息的集中接收与管理。
  4. 免费且配额充足:对于个人或家庭使用,企业微信自建应用的消息推送 API 调用频率完全够用,没有费用。

它的角色就是最终的消息“喇叭”,将 Home Assistant 的分析结果,及时、可靠地推送到家人的手机上。

3. 分步部署与配置实战

理论清晰后,我们进入实操环节。请严格按照步骤进行,我会标注出所有容易踩坑的地方。

3.1 第一步:部署并配置 Home Assistant

我采用的是 VirtualBox 虚拟机方案,这是兼顾灵活性与性能的折中选择。

1. 创建虚拟机

  • 在 VirtualBox 中新建一台虚拟机,系统类型选择Linux,版本选择Other Linux (64-bit)
  • 内存建议分配2GB 或以上,虽然 HA 最低要求不高,但后续加载集成和运行自动化需要一定内存。
  • 硬盘创建VDI格式的动态分配磁盘,大小建议32GB以上,为日志、数据库和后续扩展留足空间。
  • 网络连接务必选择“桥接网卡”。这是关键!它会让虚拟机获得一个和你主机在同一网段的独立 IP 地址,方便局域网内其他设备(如手机)访问。

2. 安装 Home Assistant OS

  • 从 Home Assistant 官网下载最新的HA OS for Generic x86-64镜像(通常是.img.gz文件)。
  • 使用工具(如StarWind V2V Converter)将.img.gz解压并转换为 VirtualBox 可用的.vdi磁盘文件。
  • 在虚拟机设置中,用这个转换好的.vdi文件替换掉之前创建的空白虚拟磁盘。
  • 启动虚拟机。首次启动会进行初始化,时间较长。完成后,在浏览器中输入虚拟机的 IP 地址(如http://192.168.1.xxx:8123)即可访问 HA 的初始化界面。

注意:如果启动后无法通过 IP 访问,请检查主机防火墙是否放行了 8123 端口,并确认虚拟机网络模式是否为桥接。

3. 基础配置与集成安装

  • 完成初始化设置(创建账号、位置等)。
  • 进入“配置” -> “设备与服务”。我们先为后续工作安装两个可能的必要集成:
    • ONVIF:如果 reCamera 支持 ONVIF,用这个集成会更方便。
    • Generic Camera:这是一个万能摄像头集成,通过直接输入 RTSP 地址来添加摄像头。
    • 可以在“集成”页面右下角点击“添加集成”搜索并安装它们。

3.2 第二步:在安卓手机上设置 reCamera

1. 安装与基础设置

  • 在安卓手机上下载并安装 reCamera。
  • 打开 App,你会看到一个非常简洁的界面。核心设置如下:
    • 分辨率与码率:根据手机性能和网络情况选择,例如1080p,码率2000kbps。太高可能导致流不稳定。
    • 帧率1520fps 对于安防监控足够。
    • 方向:根据手机摆放位置调整横屏或竖屏。
  • 最重要的信息是 App 首页显示的RTSP 地址。通常格式为:rtsp://<手机IP地址>:8554/。记下这个地址,例如rtsp://192.168.1.105:8554/

2. 确保手机常亮与网络稳定

  • 在手机系统设置中,为 reCamera App 开启“后台无限制”、“电池优化忽略”等权限,防止系统休眠断流。
  • 将手机连接电源,并固定放置在需要监控的位置(如靠窗的插座旁)。
  • 确保手机连接的 Wi-Fi 信号强度良好。这是流是否稳定的基础。

实操心得:建议将手机调至飞行模式后再打开 Wi-Fi,避免来电或短信干扰。同时,在开发者选项中开启“充电时不休眠”。可以将 reCamera 的启动项添加到手机的任务管理器或自动化工具(如 Tasker)中,实现插电自启动,进一步提升可靠性。

3.3 第三步:将 reCamera 接入 Home Assistant

现在,我们需要在 HA 中“看到”手机摄像头。

方法一:通过 Generic Camera 集成(推荐,最通用)

  1. 进入 HA“配置” -> “设备与服务” -> “添加集成”
  2. 搜索并选择“Generic Camera”
  3. 在配置页面填写:
    • 名称:给你的摄像头起个名字,如Front Door Camera
    • 静止图像 URL:留空或填写 RTSP 地址(某些卡片预览需要)。
    • 流源这是关键。填入 reCamera 的 RTSP 地址,例如rtsp://192.168.1.105:8554/
    • 验证:选择basic(如果 reCamera 设置了用户名密码)。
  4. 提交后,集成添加成功。你可以在“概览”页添加一个picture-glancewebrtc卡片来验证视频流是否正常。

方法二:通过 ONVIF 集成(如果支持)

  1. 确保 reCamera 设置中开启了 ONVIF 服务(部分版本支持)。
  2. 在 HA 添加“ONVIF”集成。
  3. 配置时,HA 可能会自动发现设备。如果未发现,手动输入手机的 IP 地址、端口(通常是 80)、用户名和密码。
  4. ONVIF 集成通常会同时添加摄像头实体和运动传感器实体,更加方便。

注意事项:首次添加后,视频流加载可能会有几秒到十几秒的延迟,这是正常的缓冲过程。如果长时间黑屏或报错,请检查:1. RTSP 地址是否正确;2. 手机和 HA 主机是否在同一局域网;3. 防火墙是否阻止了 8554 端口。

3.4 第四步:配置企业微信自建应用与 HA 通知

这是联动中最关键的一步,打通从 HA 到手机的通知通道。

1. 创建企业微信企业

  • 如果没有企业,需要先注册一个。使用个人手机号即可注册,过程很简单,相当于创建一个“团队”。
  • 注册成功后,记下你的企业 ID (CorpID)。可以在“我的企业” -> “企业信息”底部找到。

2. 创建自建应用

  • 进入“应用管理” -> “自建应用” -> “创建应用”
  • 上传一个 logo,填写应用名称(如“家庭安防助手”),选择可见范围(可以选你自己,或者创建一个包含家庭成员的企业微信部门)。
  • 创建成功后,进入应用详情页,记录下AgentIdSecret。这两项至关重要,且Secret只显示一次,务必妥善保存。

3. 在 Home Assistant 中配置企业微信通知

  • 在 HA 中,我们通常通过RESTful 命令或专门的集成来调用企业微信 API。这里以配置一个rest_command为例,它非常灵活。
  • 编辑 HA 的configuration.yaml文件,添加以下内容:
rest_command: wecom_alert: url: "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={{ access_token }}" method: POST content_type: "application/json;charset=utf-8" payload: > { "touser": "{{ userid | default('@all') }}", "msgtype": "{{ msgtype }}", "agentid": "你的AgentId", "{% if msgtype == 'text' %} text: { "content": "{{ content }}" } {% elif msgtype == 'image' %} image: { "media_id": "{{ media_id }}" } {% elif msgtype == 'textcard' %} textcard: { "title": "{{ title }}", "description": "{{ description }}", "url": "{{ url }}", "btntxt": "详情" } {% endif %}" }
  • 同时,我们需要一个自动化或脚本,来获取动态的access_token(令牌有效期2小时)。可以创建一个shell_command调用 curl,或者更优雅地,使用 HA 的rest传感器。这里提供一个脚本思路,在scripts.yaml中:
get_wecom_token: alias: “获取企业微信令牌” sequence: - service: rest_command.get_token data: url: “https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=你的CorpID&corpsecret=你的Secret” method: GET - service: python_script.set_token # 假设你用Python脚本解析响应并存储token

重要提示:上述rest_command配置是一个高度简化的示例。在实际生产中,你需要处理access_token的自动获取、刷新和存储。强烈建议使用社区成熟的集成,如WeCom(通过 HACS 安装),它能帮你自动化管理令牌和提供更简单的服务调用。例如,安装后,你只需要在集成界面配置 CorpID, Secret, AgentId,就可以直接调用notify.wecom服务发送消息,远比手动管理 RESTful 命令方便。

4. 构建自动化:从检测到通知的完整链路

组件都已就位,现在我们来编织逻辑,让系统“活”起来。

4.1 在 HA 中实现运动检测

我们有多种方式检测 reCamera 画面中的运动:

方法 A:使用 Camera 实体自带的运动检测属性一些摄像头集成(包括某些配置下的 Generic Camera)会提供一个二进制传感器实体,例如binary_sensor.front_door_camera_motion_detected。你可以直接在自动化中监听这个传感器的状态变化(从offon)。

方法 B:使用 Image Processing 集成这是更强大和灵活的方式。以image_processing中的dlibopencv组件为例。

  1. 通过 HACS 安装“Image Processing”相关集成,或在configuration.yaml中配置。
  2. 配置一个面部识别或运动检测的 image_processing 实体,其源就是 reCamera 实体。
  3. 该实体会在检测到目标时,其found类属性会发生变化,并可以输出识别到的数量、置信度以及快照。

方法 C:使用 Frigate NVR 或 Double-Take这是更专业的方案。你可以将 reCamera 的 RTSP 流同时推送给Frigate(一款 AI 本地视频分析软件),利用其 YOLO 模型进行人、车、宠物等对象的精准检测。Frigate 再通过 MQTT 将事件发送给 HA。此方案功能最强,但部署复杂度也最高。

为了简单起见,我们假设使用方法 A,即摄像头自身提供了运动传感器。

4.2 编写核心自动化

我们创建一个自动化,当门口摄像头检测到运动时,先抓拍一张图片,然后将图片上传到企业微信的临时素材库获取media_id,最后发送一条图文消息。

以下是一个概念性的自动化 YAML 代码(使用假设的wecom集成服务):

alias: “前门移动检测报警” description: “当 reCamera 检测到运动时,发送企业微信通知” trigger: - platform: state entity_id: binary_sensor.front_door_motion # 替换为你的运动传感器实体 from: “off” to: “on” condition: [] # 可以添加条件,如只在夜间触发 action: # 动作1:从摄像头抓拍一张快照 - service: camera.snapshot data: entity_id: camera.front_door_camera filename: “/tmp/front_door_latest.jpg” # 动作2:将图片上传到企业微信,获取 media_id (这里需要自定义服务或脚本) # 假设我们有一个自定义脚本 `wecom.upload_media` 来处理上传 - service: script.wecom_upload_media data: file_path: “/tmp/front_door_latest.jpg” type: “image” response_variable: upload_response # 动作3:解析上传响应,获取 media_id - variables: media_id: “{{ upload_response.media_id }}” # 动作4:发送企业微信图文消息 - service: notify.wecom # 假设 wecom 集成提供的服务 data: message: “前门检测到移动!请查看。” title: “家庭安防警报” data: image: media_id: “{{ media_id }}” msgtype: image

实操心得:在实际操作中,将图片上传并发送的步骤可能需要一个Python 脚本或更复杂的rest_command序列来实现。这正是社区集成(如WeCom)的价值所在,它将这些底层 API 调用封装成了简单的服务。如果你手动实现,请务必参考企业微信官方文档的“上传临时素材”和“发送应用消息”部分。

4.3 消息内容与格式优化

企业微信支持多种消息格式,我们可以让通知更友好:

  • 文本卡片 (textcard):非常适合报警,可以包含标题、描述和一个跳转链接(比如链接到 HA 的摄像头直播页面)。
  • 图文 (news):可以发送多张图片和详细描述。
  • Markdown:如果你需要格式化文本,Markdown 是不错的选择。

在自动化中,你可以根据不同的警报级别(如“一般移动” vs “检测到人脸”)选择不同的消息格式和内容。

5. 进阶优化与故障排查实录

系统跑起来只是第一步,让它稳定、可靠、智能才是目标。

5.1 提升系统稳定性的技巧

  1. 网络优化

    • 为 HA 虚拟机、安卓手机在路由器中设置静态 IP(DHCP 保留),防止 IP 变化导致流中断。
    • 如果视频流卡顿,尝试降低 reCamera 的分辨率或帧率。RTSP 流对网络抖动比较敏感。
  2. 电源与设备管理

    • 安卓手机长期插电运行,建议使用智能插座。在 HA 中设置一个自动化,每周定时给智能插座断电几秒钟再通电,实现手机软重启,清理长期运行可能产生的内存泄漏。
    • 在 HA 中创建一个ping传感器,监控手机是否在线。如果掉线,发送企业微信通知告警。
  3. HA 自动化防误报

    • 在运动检测自动化中加入“防抖” (debounce)条件。例如,使用for条件,要求运动状态持续 2 秒才触发,避免光影瞬间变化导致的误报。
    • 利用condition结合其他传感器,例如:只在sun_below_horizon(日落之后)且person_at_home(家中无人)的情况下,才触发高警戒级别的报警。

5.2 企业微信接入的常见问题与解决

以下是我在配置过程中遇到的实际问题及解决方案:

问题现象可能原因排查与解决
HA 调用企业微信 API 返回81013错误user & party & tag all invalid这是接收人参数错误。检查touser字段:
1. 确保填写的用户 ID 存在于该自建应用的可见范围内。
2. 如果要发给多人,用竖线分隔,如“UserID1|UserID2”
3. 发送给所有人使用“@all”
消息发送失败,返回40001invalid credential访问令牌无效或已过期。
1. 确保你的access_token获取逻辑正确。
2. 令牌有效期为 2 小时,必须实现定时刷新或失败重试机制。
3. 检查 CorpID 和 Secret 是否正确。
图片无法发送或显示media_id无效或过期1. 临时素材media_id有效期仅为 3 天,且仅能用于发送消息,不可重复使用。
2. 确保上传图片的 API 调用成功,并正确解析出了media_id
3. 图片大小不能超过 2MB,支持 JPG/PNG 格式。
在 Ubuntu/Debian 等 Linux 系统上,相关工具链出现问题deepin-wine运行企业微信桌面版失败我们的方案完全不依赖桌面版客户端。所有操作通过API完成,与操作系统无关。HA 可以运行在任何平台(虚拟机、Docker、树莓派),只要网络能通,就能调用企业微信 API。
消息有延迟网络延迟或自动化执行慢1. 检查 HA 自动化执行日志,看每个动作耗时。
2. 图片上传步骤最耗时,可以考虑先发送文本警报,再异步上传和发送图片。
3. 确保 HA 主机和手机的网络连接质量。

5.3 功能扩展思路

当基础联动稳定后,你可以考虑以下扩展,让系统更强大:

  1. 多摄像头管理与轮询:接入多个 reCamera 手机,监控不同房间。在 HA 中为每个摄像头创建独立的运动检测自动化和通知规则。
  2. 与其它智能设备深度联动
    • 触发报警时,联动智能音箱语音播报。
    • 触发报警时,联动智能灯泡闪烁红光。
    • 晚上检测到门口有人,自动点亮门厅灯。
  3. 引入更先进的 AI 识别:如前所述,使用Frigate + Coral USB 加速棒,实现精准的人形检测、宠物检测、车辆识别,大幅降低误报率。
  4. 消息路由与分级:根据警报的严重程度,将消息发送到不同的企业微信群。例如,“检测到人”发送到核心家庭群,“检测到猫”发送到宠物爱好者群。
  5. 状态反馈与确认:在企业微信收到的消息卡片中,可以嵌入链接,点击后跳转到一个 HA 的临时控制面板,上面有实时视频流和“误报,忽略”、“确认报警,我已查看”等按钮,实现人机交互闭环。

整个项目从构思到实现,最深的体会是:智能家居的乐趣不在于购买最贵的设备,而在于利用手头资源,通过软件和逻辑的编织,创造出真正贴合自己需求的自动化场景。reCamera 让旧手机重生,Home Assistant 提供了无限可能的舞台,而企业微信则架起了从智能世界到指尖的可靠桥梁。这套方案的核心成本几乎为零,但带来的安全感和便利性却是实实在在的。如果你也遇到了视频流偶尔中断的问题,不妨检查一下路由器的 Wi-Fi 信道拥堵情况,换个信道或许有奇效。

http://www.jsqmd.com/news/1313373/

相关文章:

  • 服务器入门指南:从零配置到Web服务部署
  • 为什么92%的AI教育项目止步于Demo?:资深架构师拆解“可规模化因材施教系统”的6层技术栈硬门槛
  • 液位传感器选型、原理与应用全解析:从静压式到雷达技术
  • 固件架构设计全解析:从分层解耦到安全启动的嵌入式开发实践
  • 树莓派Zero WH套件:从硬件解析到物联网项目实战
  • FF14 ACT辍学插件完整指南:三步快速跳过副本动画的终极方案
  • 蝰蛇战术-XM7模型发射器全金属升级方案:从核心部件到实战调试
  • 云服务API下线应对指南:从评估到迁移的5步技术框架
  • Seata AT模式深度解析:零侵入分布式事务原理与实战
  • 如何用79万对话构建医疗AI:3大突破性实战架构解析
  • 从ChatGPT幻觉到LLM可靠推理:AI逻辑思维训练的4层认知跃迁(附MIT实证数据集与评估量表)
  • 2026合肥复读安徽工贸公办校内集训提分!怎么报名?在哪报名?联系方式多少? - 最新资讯
  • 机器学习赋能蛋白质工程:从序列预测到功能设计的范式变革
  • Xadow传感器套件开发指南:从I2C协议到STM32多传感器数据采集
  • 3分钟上手!用这个网页版暗黑2存档编辑器,告别繁琐安装
  • 基于Jetson reComputer R1000与FIN Graphics Builder的工业站点图形快速开发实践
  • 国内知名摄影培训机构推荐,专家实测:莫瑶影视优选 - 职业学校推荐官
  • 网络表达困境:个体风格与群体文化的冲突与适配策略
  • XIAO nRF54LM20A Sense开发实战:从传感器驱动到低功耗蓝牙应用
  • 使用 Kiro AI IDE 小时实现全栈应用Admin系统
  • DeepSeek-V4 智能体能力解析:长上下文与 Agent 技术如何重塑 AI 应用开发
  • 网盘直链下载助手终极指南:如何免费解锁8大网盘的高速下载体验
  • Visual studio “无法解析的外部符号“
  • 2026年南宁/北海/钦州/梧州/贵港/桂林/柳州发电机组报价口碑榜TOP5——从负载核算到交付验收完整指南 - 优企甄选
  • Python模块:自定义模块的创建与调用方法
  • 东南大学通信复试攻略:从专业课到科研项目,全方位备战指南
  • 从LPL内战强势到S赛突破:解构电竞战队稳定性与适应性的技术分析
  • ComfyUI IPAdapter Plus终极指南:3步实现精准AI图像风格迁移
  • LaTeX表格宽度控制:缩放与定宽两种方法详解
  • Jetson与JetPack关系解析:嵌入式AI开发环境搭建与优化指南