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

发布时间:2026/8/2 12:09:06
基于RTSP与Home Assistant构建低成本家庭安防系统:旧手机改造与微信通知集成 1. 项目概述打造一个智能化的家庭安防与通知中枢最近在折腾智能家居总想把手头闲置的设备都利用起来。我手头有一台老旧的安卓手机性能一般但摄像头还行一直想把它变成一个常开的监控摄像头。同时家里的智能设备都接入了 Home Assistant如果能把这台“摄像头”也接进去再结合企业微信的推送能力不就能实现一个低成本的、高度自定义的家庭安防和状态通知系统了吗比如当摄像头检测到门口有人移动时不仅能在 Home Assistant 里弹窗提醒还能立刻给我的企业微信发一条带截图的消息甚至能联动家里的智能灯闪烁报警。这个想法听起来复杂但拆解开来就是三个核心组件的联动reCamera将安卓手机变为网络摄像头、Home Assistant智能家居中枢负责接收视频流、分析事件并触发自动化、企业微信作为高效、可靠的消息推送渠道。整个过程不涉及任何复杂的硬件改造核心在于软件配置与网络服务的打通。无论是想 DIY 一个宝宝看护器、宠物监视器还是简单的门口安防这套方案都提供了一个非常灵活和可扩展的框架。下面我就把自己从零搭建、踩坑、到最终稳定运行的完整过程记录下来分享给同样爱折腾的你。2. 核心组件选型与部署思路在开始动手之前我们需要明确每个组件扮演的角色以及为什么选择它们。一个清晰的架构图能在脑海中形成后续的配置才不会乱。2.1 为什么是 reCamera市面上将手机变成摄像头的 App 很多比如 IP Webcam、DroidCam。我选择reCamera的原因主要有几点纯粹的 RTSP 服务器它不像一些 App 附带复杂的网页界面或云服务reCamera 启动后就是一个标准的 RTSP实时流传输协议视频流服务器。这对于 Home Assistant 这类需要直接拉取流媒体的平台来说兼容性最好也最稳定。低资源消耗由于功能单一它在老旧手机上的后台运行资源占用相对较低更不容易被系统“杀掉”进程。无广告与隐私可控数据流完全在本地局域网内不经过任何第三方服务器隐私安全有保障。它的作用就是让安卓手机化身为一个标准的网络摄像头为 Home Assistant 提供视频源。2.2 Home Assistant 的核心枢纽作用Home Assistant 在这里是绝对的大脑。它需要完成以下任务集成摄像头通过generic或onvif集成接入 reCamera 提供的 RTSP 视频流。事件分析与自动化利用其强大的图像处理或运动检测功能例如内置的image_processing或camera组件的运动检测属性对视频流进行实时分析。触发与执行当检测到预设的事件如运动、人脸、包裹后触发自动化流程。调用消息服务在自动化中调用集成的企业微信通知服务将报警信息、快照图片发送出去。我选择将 Home Assistant 安装在一台常年开机的VirtualBox 虚拟机中。这样既保证了 7x24 小时运行又便于备份和迁移。当然树莓派、旧电脑、NAS 也都是不错的选择。2.3 企业微信作为推送渠道的优势为什么不用 Telegram、钉钉或者普通的微信企业微信在智能家居通知场景下有独特优势高送达率与稳定性企业微信的消息通道非常稳定几乎不会被屏蔽或延迟这对于安防报警至关重要。丰富的消息格式支持文本、图片、文件、图文链接等多种格式非常适合发送带截图的报警信息。易于管理的接收群组可以创建一个专门的家庭通知“群聊”将家庭成员都拉进来实现消息的集中接收与管理。免费且配额充足对于个人或家庭使用企业微信自建应用的消息推送 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 第二步在安卓手机上设置 reCamera1. 安装与基础设置在安卓手机上下载并安装 reCamera。打开 App你会看到一个非常简洁的界面。核心设置如下分辨率与码率根据手机性能和网络情况选择例如1080p码率2000kbps。太高可能导致流不稳定。帧率15或20fps 对于安防监控足够。方向根据手机摆放位置调整横屏或竖屏。最重要的信息是 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 集成推荐最通用进入 HA“配置” - “设备与服务” - “添加集成”。搜索并选择“Generic Camera”。在配置页面填写名称给你的摄像头起个名字如Front Door Camera。静止图像 URL留空或填写 RTSP 地址某些卡片预览需要。流源这是关键。填入 reCamera 的 RTSP 地址例如rtsp://192.168.1.105:8554/。验证选择basic如果 reCamera 设置了用户名密码。提交后集成添加成功。你可以在“概览”页添加一个picture-glance或webrtc卡片来验证视频流是否正常。方法二通过 ONVIF 集成如果支持确保 reCamera 设置中开启了 ONVIF 服务部分版本支持。在 HA 添加“ONVIF”集成。配置时HA 可能会自动发现设备。如果未发现手动输入手机的 IP 地址、端口通常是 80、用户名和密码。ONVIF 集成通常会同时添加摄像头实体和运动传感器实体更加方便。注意事项首次添加后视频流加载可能会有几秒到十几秒的延迟这是正常的缓冲过程。如果长时间黑屏或报错请检查1. RTSP 地址是否正确2. 手机和 HA 主机是否在同一局域网3. 防火墙是否阻止了 8554 端口。3.4 第四步配置企业微信自建应用与 HA 通知这是联动中最关键的一步打通从 HA 到手机的通知通道。1. 创建企业微信企业如果没有企业需要先注册一个。使用个人手机号即可注册过程很简单相当于创建一个“团队”。注册成功后记下你的企业 ID (CorpID)。可以在“我的企业” - “企业信息”底部找到。2. 创建自建应用进入“应用管理” - “自建应用” - “创建应用”。上传一个 logo填写应用名称如“家庭安防助手”选择可见范围可以选你自己或者创建一个包含家庭成员的企业微信部门。创建成功后进入应用详情页记录下AgentId和Secret。这两项至关重要且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;charsetutf-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你的CorpIDcorpsecret你的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。你可以直接在自动化中监听这个传感器的状态变化从off到on。方法 B使用 Image Processing 集成这是更强大和灵活的方式。以image_processing中的dlib或opencv组件为例。通过 HACS 安装“Image Processing”相关集成或在configuration.yaml中配置。配置一个面部识别或运动检测的 image_processing 实体其源就是 reCamera 实体。该实体会在检测到目标时其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 提升系统稳定性的技巧网络优化为 HA 虚拟机、安卓手机在路由器中设置静态 IPDHCP 保留防止 IP 变化导致流中断。如果视频流卡顿尝试降低 reCamera 的分辨率或帧率。RTSP 流对网络抖动比较敏感。电源与设备管理安卓手机长期插电运行建议使用智能插座。在 HA 中设置一个自动化每周定时给智能插座断电几秒钟再通电实现手机软重启清理长期运行可能产生的内存泄漏。在 HA 中创建一个ping传感器监控手机是否在线。如果掉线发送企业微信通知告警。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 功能扩展思路当基础联动稳定后你可以考虑以下扩展让系统更强大多摄像头管理与轮询接入多个 reCamera 手机监控不同房间。在 HA 中为每个摄像头创建独立的运动检测自动化和通知规则。与其它智能设备深度联动触发报警时联动智能音箱语音播报。触发报警时联动智能灯泡闪烁红光。晚上检测到门口有人自动点亮门厅灯。引入更先进的 AI 识别如前所述使用Frigate Coral USB 加速棒实现精准的人形检测、宠物检测、车辆识别大幅降低误报率。消息路由与分级根据警报的严重程度将消息发送到不同的企业微信群。例如“检测到人”发送到核心家庭群“检测到猫”发送到宠物爱好者群。状态反馈与确认在企业微信收到的消息卡片中可以嵌入链接点击后跳转到一个 HA 的临时控制面板上面有实时视频流和“误报忽略”、“确认报警我已查看”等按钮实现人机交互闭环。整个项目从构思到实现最深的体会是智能家居的乐趣不在于购买最贵的设备而在于利用手头资源通过软件和逻辑的编织创造出真正贴合自己需求的自动化场景。reCamera 让旧手机重生Home Assistant 提供了无限可能的舞台而企业微信则架起了从智能世界到指尖的可靠桥梁。这套方案的核心成本几乎为零但带来的安全感和便利性却是实实在在的。如果你也遇到了视频流偶尔中断的问题不妨检查一下路由器的 Wi-Fi 信道拥堵情况换个信道或许有奇效。