1. 项目概述:为什么我们需要一个Windows端的Home Assistant伴侣
如果你和我一样,是个重度智能家居玩家,把Home Assistant(HA)作为家庭自动化的大脑,那你肯定遇到过这个痛点:你的手机、平板甚至智能手表都能无缝接收HA的通知,但你的Windows电脑,这个每天陪伴你最久的设备,却像个信息孤岛。想用电脑快速关个灯、查个传感器状态,还得掏出手机或者打开浏览器,体验上总差那么一口气。
这就是HASS.Agent诞生的初衷。它不是一个简单的通知转发器,而是一个功能完整的Windows本地客户端。你可以把它理解为你电脑上的“Home Assistant遥控器+状态监视器”。它用.NET 6开发,直接运行在你的Windows系统托盘里,通过MQTT或Home Assistant的REST API与你的HA服务器通信,实现了双向的数据和控制流。
简单来说,它能帮你做三件核心事情:
- 把HA的通知“推”到电脑上:不仅仅是文字,还能带图片,甚至支持可交互的通知按钮,让你直接在弹窗里执行HA的自动化或服务调用。
- 把电脑的状态“拉”到HA里:CPU温度、内存占用、网络状态、当前播放的媒体……多达37种传感器数据,让你的HA能全面感知电脑的健康状况,并据此触发自动化(比如CPU温度过高时自动调高风扇转速)。
- 把电脑变成HA的“执行终端”:通过预设的快捷操作或命令,直接用键盘快捷键或HA的自动化,控制电脑执行关机、锁屏、运行程序、模拟按键等24种操作。
对于追求全屋自动化无缝体验的玩家来说,HASS.Agent填补了Windows生态的最后一块拼图。它适合所有在Windows环境下工作或娱乐,并希望将电脑深度融入Home Assistant自动化体系的用户。无论你是想打造一个“离开电脑自动锁屏并关灯”的场景,还是想在游戏中收到HA的智能提醒,这个工具都能让你事半功倍。
2. 核心功能深度解析:不止于通知
很多人第一眼看到HASS.Agent,会以为它只是个“通知工具”。这大大低估了它的能力。经过我数月的深度使用,我认为它的核心价值在于将Windows系统本身及其上运行的各种状态,都变成了Home Assistant生态中可被感知、可被控制的一等公民。
2.1 通知系统:从被动接收到主动交互
传统的通知只是单向的信息传递。HASS.Agent的通知系统则构建了一个双向的交互通道。
- 富媒体支持:除了文本,通知可以携带从URL或本地路径加载的图片。这意味着你可以把摄像头快照、图表甚至二维码直接推送到桌面。
- 可操作通知:这是杀手级功能。你可以在通知上添加按钮,每个按钮可以绑定一个HA的服务调用。例如,门口摄像头检测到快递员,电脑弹出带抓拍图的通知,并附带“已取件”和“稍后处理”两个按钮。点击“已取件”,HA会自动执行“标记快递为已接收”并关闭通知的自动化流程。这完全改变了人机交互的逻辑,从“看到信息-打开APP-执行操作”简化为“看到信息-点击按钮”。
- 原生集成:它利用Windows的Toast通知系统,这意味着通知会出现在操作中心,支持勿扰模式同步,体验与系统原生应用无异。
2.2 传感器集成:让HA成为你的电脑管家
这是数据流入HA的方向。HASS.Agent目前提供了37种传感器,我将其分为四大类:
- 硬件监控类:CPU/GPU温度、负载、风扇转速(依赖LibreHardwareMonitor)、内存与虚拟内存使用量、磁盘剩余空间与IO。这些数据对于构建“智能电脑健康”自动化至关重要。例如,当GPU温度持续超过阈值时,HA可以自动向你的手机发送警报。
- 系统状态类:当前登录用户、会话状态(是否锁屏)、系统启动时间、网络连接状态(包括当前Wi-Fi SSID)、电池状态(笔记本)。这可以用来做场景判断,比如“用户锁屏且离开Wi-Fi范围”触发“电脑休眠并关闭房间所有灯”。
- 活动状态类:最活跃窗口标题、系统是否空闲。这能实现更精细的场景,比如“检测到窗口标题为‘Visual Studio’且时间超过晚上10点”,HA自动调暗智能灯光并播放专注白噪音。
- 媒体播放类:当前播放的媒体标题、艺术家、播放状态(播放/暂停/停止)。这需要与它的媒体播放器功能配合,实现了跨设备的媒体控制同步。
这些传感器以可配置的间隔(默认10秒)向HA报告状态,所有实体在HA中自动生成,无需手动编写YAML。
2.3 命令与快捷操作:将电脑控制权交给HA
这是控制流出的方向。24个内置命令覆盖了大部分常用操作:
- 基础系统控制:关机、重启、休眠、锁屏、注销。
- 进程与应用控制:启动程序、结束进程、设置音量。
- 输入模拟:发送按键序列(如
Ctrl+S保存)、输入文本。这个功能潜力巨大,可以用于自动化填写表单、快速执行软件内的固定操作流。 - 自定义命令:执行PowerShell脚本、批处理文件或任何可执行文件,并将输出结果返回给HA。
而“快捷操作”是命令的图形化、快捷化封装。你可以为任何HA的服务调用(比如开关灯、调整恒温器)或本地命令(比如静音)创建一个带图标的按钮,并分配一个全局键盘快捷键(如Ctrl+Alt+L)。按下快捷键,一个简洁的按钮面板会瞬间弹出,让你无需鼠标点击即可快速触发。这相当于为你的电脑打造了一个专属的、可高度定化的智能家居物理遥控器。
2.4 媒体播放器与WebView:扩展应用场景
- 媒体播放器:将你的电脑在HA中虚拟成一个媒体播放器设备。你可以从HA的控制面板或自动化中,直接控制电脑上媒体的播放/暂停/停止,或者发送TTS(文字转语音)指令,让电脑扬声器播报信息。比如,让HA在天气预报有雨时,用TTS提醒你“今天记得带伞”。
- WebView:一个内嵌的、无边框浏览器窗口。你可以将其配置为右键点击系统托盘图标时,快速弹出你的HA仪表盘、监控页面或任何其他网页。它比打开完整浏览器更快速、更轻量,且不干扰你的主要工作流。
3. 从安装到配置:手把手搭建全流程
理论讲完,我们进入实战环节。HASS.Agent的安装和初始配置非常友好,但有几个关键步骤和配置项决定了后续使用的稳定性和体验。
3.1 环境准备与安装部署
首先,确保你的系统满足要求:Windows 10或更高版本(推荐Windows 11),并且需要安装 .NET 6.0 Desktop Runtime 。这是运行.NET 6应用的基石,如果没装,安装程序会提示你。
安装步骤:
- 下载安装器:直接访问项目GitHub的 Release页面 ,下载
HASS.Agent.Installer.exe。这是官方推荐的安装方式,它已签名,安全可靠。 - 运行安装:以管理员身份运行安装器。安装过程极其简单,几乎就是一路“Next”。它会自动创建开始菜单快捷方式,并将主程序添加到开机启动项。
- 首次运行与引导:安装完成后,HASS.Agent会自动启动,并弹出“引导配置”窗口。这个引导流程设计得很棒,会带你完成最关键的几步。
3.2 核心配置详解:连接HA与MQTT
引导流程的核心是建立与Home Assistant的连接。这里有两种主要方式:Home Assistant REST API和MQTT。我强烈推荐使用MQTT,理由如下:
- 实时性更好:MQTT是发布/订阅模型,对于传感器数据持续上报和命令的即时响应,延迟更低。
- 降低HA负载:传感器数据直接发布到MQTT Broker,不频繁调用HA API。
- 网络容错性:MQTT有持久化会话和遗言(Last Will)机制,网络波动时状态更清晰。
配置步骤(以MQTT为例):
- 准备MQTT Broker:确保你的HA已经集成了MQTT Broker(如Mosquitto插件)。记下Broker的地址(通常是HA的IP加端口1883)、用户名和密码。
- 在引导中配置:
- 在“连接”步骤,选择“MQTT”。
- 填写MQTT Broker的IP、端口、用户名、密码。
- 关键点:Client ID。这里建议填写一个具有唯一性、易识别的名称,例如
HASS_Agent_PC_Office。这有助于在MQTT客户端列表中快速识别。 - 发现前缀:保持默认
homeassistant即可,这是HA自动发现设备的标准前缀。
- 配置HA连接(仍需):下一步仍需填写HA的地址和长期访问令牌(Long-Lived Access Token)。这是因为一些功能(如获取实体列表用于快捷操作)仍需通过HA的API进行。在HA中,点击你的用户名 -> 底部“创建令牌”来生成一个。
- 卫星服务配置:引导会询问你是否安装“卫星服务”。务必勾选“是”。这个服务以后台服务形式运行,即使你注销了Windows用户,它依然能收集传感器数据和执行命令。这是实现“无人值守自动化”的关键。
完成引导后,HASS.Agent会最小化到系统托盘。此时,打开你的Home Assistant,进入“设置” -> “设备与服务”,你应该能看到一个名为“HASS.Agent”的新集成被自动发现,里面包含了你的电脑设备以及一大堆传感器实体。这说明基础连接已经成功。
3.3 传感器与命令的精细化管理
初始集成后,所有默认传感器和命令都会被添加。你需要在HASS.Agent客户端里进行精细化管理。
- 右键点击系统托盘图标,选择“设置”。
- 传感器管理:在“传感器”标签页,你可以看到所有已启用的传感器。你可以:
- 禁用不需要的传感器:比如笔记本上不需要的“电池”传感器,或者你不关心的某个磁盘分区。
- 调整更新间隔:对于CPU温度这种变化快的,可以保持10秒;对于“已登录用户”这种变化少的,可以设为30秒或更长,以减少不必要的网络通信。
- 重命名:为了让HA中实体名称更友好,你可以在这里修改传感器的“名称”(Name),这会影响HA中实体的
friendly_name。
- 命令管理:在“命令”标签页,同样可以启用/禁用或修改内置命令。更重要的是,你可以创建自定义命令。例如,创建一个执行特定PowerShell脚本的命令,用于执行复杂的本地操作。
实操心得:命名规范强烈建议在HASS.Agent设置中,为你的设备设置一个清晰的“设备名称”(如
Office_PC)。这会使所有生成的HA实体ID都包含此前缀(如sensor.office_pc_cpu_temperature),在HA的自动化、仪表盘编辑中更容易查找和管理,避免与家中其他设备混淆。
4. 高级应用与自动化场景实战
配置好基础功能后,我们就可以玩些高级的了。HASS.Agent的真正威力在于与Home Assistant的自动化深度结合。
4.1 构建基于电脑状态的智能场景
利用传感器数据作为自动化触发条件或状态条件。
场景一:节能与舒适
- 触发条件:传感器
sensor.[device_name]_session_state变为Locked(电脑锁屏)。 - 动作:
- 等待5分钟(防止短暂离开)。
- 如果传感器
sensor.[device_name]_active_window不包含“VideoPlayer”、“Game”等关键词(判断是否在娱乐)。 - 则调用
light.turn_off关闭办公室灯光。 - 调用媒体播放器
media_player.[device_name]的media_stop服务(如果正在播放)。
- 效果:当你离开电脑并锁屏后,系统自动帮你关灯、停止媒体播放,实现节能。
- 触发条件:传感器
场景二:硬件监控与告警
- 触发条件:传感器
sensor.[device_name]_cpu_temperature高于75°C持续超过1分钟。 - 动作:
- 向你的手机发送一条紧急通知:“办公室电脑CPU温度过高!”
- 通过HASS.Agent的TTS功能,在电脑上语音播报:“CPU温度警告,请检查散热!”
- 效果:在电脑因过热导致性能下降或死机前,你就能收到跨设备告警。
- 触发条件:传感器
4.2 利用快捷操作与命令提升效率
将常用操作固化到快捷键或HA面板中。
案例:一键会议模式
- 在HASS.Agent中创建一个“快捷操作”。
- 添加多个动作:
- 调用服务
light.turn_on,将办公室主灯调至70%亮度、4000K色温(专注光)。 - 调用服务
switch.turn_off,关闭装饰灯带。 - 调用本地命令“设置音量”,将系统音量设为30%。
- 调用服务
- 为该快捷操作分配快捷键
Ctrl+Shift+M。 - 效果:需要开始视频会议时,一个快捷键,灯光、声音环境瞬间准备就绪。
案例:自动化文件备份
- 在HASS.Agent中创建一个“自定义命令”,指向一个备份用的PowerShell脚本
D:\Scripts\Backup-Work.ps1。 - 在HA中创建一个自动化,每周五下午6点触发。
- 动作为:调用服务
hass_agent.command_[command_id],执行该自定义命令。 - 效果:每周定时自动触发电脑上的备份脚本,无需人工干预。
- 在HASS.Agent中创建一个“自定义命令”,指向一个备份用的PowerShell脚本
4.3 可操作通知的创意用法
这是最具交互性的功能,设计关键在于让按钮动作闭环。
- 案例:包裹送达交互
- HA自动化:当门廊摄像头AI识别到快递员时,触发自动化。
- 动作:调用通知服务
hass_agent.notification,设置:title: “快递已送达”message: “门口有包裹,请查收。”image: 摄像头快照的URL。actions: 两个按钮:action: “picked_up”,title: “已取件”action: “later”,title: “稍后处理”
- 后续自动化:
- 当
hass_agent.notification_action事件触发,且action为picked_up时,标记该快递为已完成,并关闭通知。 - 当动作为
later时,则创建一个1小时后的提醒。
- 当
- 效果:通知不仅是提醒,更是一个轻量级的任务处理中心。
5. 常见问题排查与性能优化心得
即使配置再顺利,在实际长期使用中也可能遇到一些小问题。以下是我踩过坑后总结的排查清单和优化建议。
5.1 连接类问题
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| HASS.Agent托盘图标显示“未连接”(红色) | 1. MQTT Broker连接失败 2. HA API连接失败 3. 网络防火墙阻止 | 1. 检查MQTT Broker地址、端口、用户名密码是否正确。可在HASS.Agent设置中测试MQTT连接。 2. 检查HA地址和长期令牌是否正确。确保HA实例可访问。 3. 临时关闭Windows防火墙或添加出入站规则,放行HASS.Agent主程序及卫星服务。 |
| HA中无法发现HASS.Agent设备 | 1. MQTT自动发现未启用 2. 发现前缀不一致 3. MQTT客户端ID冲突 | 1. 确认HA中MQTT集成的“启用发现”选项已打开。 2. 检查HASS.Agent中设置的“发现前缀”与HA MQTT集成配置是否一致(默认均为 homeassistant)。3. 尝试在HASS.Agent中修改一个更独特的客户端ID,重启后观察。 |
| 传感器数据不更新 | 1. 卫星服务未运行或崩溃 2. 传感器被意外禁用 3. 更新间隔设置过长 | 1. 在HASS.Agent设置的服务管理中,重启卫星服务。 2. 在HASS.Agent传感器列表中,确认对应传感器是启用状态。 3. 检查传感器的更新间隔设置。 |
5.2 功能类问题
通知不弹出:
- 首要检查:Windows通知设置。进入“设置 -> 系统 -> 通知”,确保HASS.Agent的通知权限是打开的,并且没有开启“专注助手”屏蔽了通知。
- 检查HA集成:确保已正确安装并配置了 HASS.Agent集成 (通过HACS或手动安装)。通知功能依赖此集成提供的服务。
- 测试通知:在HA开发者工具中,调用服务
hass_agent.notification,填入标题和消息,看是否能正常弹出。
快捷操作快捷键无效:
- 快捷键可能被其他全局软件(如游戏平台、录屏软件、输入法)占用。尝试更换一个不常用的组合键,如
Ctrl+Alt+Shift + 字母。 - 确保HASS.Agent主程序正在运行。快捷键监听由主程序负责,卫星服务不处理这个。
- 快捷键可能被其他全局软件(如游戏平台、录屏软件、输入法)占用。尝试更换一个不常用的组合键,如
部分传感器(如GPU温度)显示“不可用”:
- 这通常是因为底层硬件监控库(LibreHardwareMonitor)无法识别你的特定硬件。可以尝试以管理员身份运行HASS.Agent,有时能获取更多权限。
- 访问LibreHardwareMonitor的官网或社区,查看你的硬件是否在支持列表中。这是一个上游依赖问题,HASS.Agent本身无法解决所有硬件的兼容性。
5.3 性能与稳定性优化建议
- 精简传感器:禁用所有你不需要的传感器。每个活跃的传感器都会以固定频率查询系统信息并发布MQTT消息,过多的传感器会增加CPU和网络负担。通常保留CPU/内存/磁盘核心传感器、会话状态、活动窗口就足够了。
- 调整更新频率:对于变化不频繁的状态(如已登录用户、磁盘总容量),将更新间隔从10秒调整为30秒甚至60秒。对于CPU温度等关键指标,保持10-15秒即可。
- 使用稳定的MQTT Broker:确保你的MQTT Broker(如Mosquitto)运行在稳定的设备上(如HA主机本身),并考虑为其配置持久化,避免Broker重启导致设备状态丢失。
- 留意卫星服务:卫星服务在系统后台运行,如果发现传感器数据停止更新但主程序连接正常,首先尝试重启该服务。在HASS.Agent设置的“服务”页面可以方便地操作。
- 定期更新:关注项目的GitHub发布页,新版本通常会修复已知问题并提升稳定性。在更新前,建议先阅读更新日志。
经过这番从原理到实操,从配置到排错的梳理,你应该已经能驾驭HASS.Agent这个强大的工具了。它的核心价值在于“连接”,将原本割裂的Windows桌面环境与整个家庭的智能生态无缝桥接。我个人的使用体会是,一旦配置妥当,它就会安静而可靠地运行在后台,而你几乎会忘记它的存在,直到那些恰到好处的通知弹出,或者你下意识地用快捷键完成一系列操作时,才会意识到它带来的流畅与便捷。智能家居的终极体验,不正是这种“无感”的智能吗?HASS.Agent正是迈向这个目标的一块坚实拼图。