资讯动态

华硕路由器接入HomeAssistant:基于MQTT的实时监控与自动化实践

发布时间:2026/9/6 11:25:55 来源:尧图企业网站定制
玩HomeAssistant这几年我一直觉得智能家居里最没存在感但又最关键的设备其实就是路由器。前阵子我把手头一台Asus华硕路由器成功接入HomeAssistant智能家居平台实现了路由器管理、终端在线状态、Wi-Fi设备接入联动还基于MQTT和Flash搭了一套实时监控平台。整个过程踩了不少坑今天把这章完整梳理出来。这篇文章适合两类人一是已经入了HomeAssistant的坑想让自动化更懂“人是否在家”的朋友二是手里正好有华硕路由器想知道它除了当AP还能干点啥的玩家。读完你至少能搞定三件事把路由器的基础信息接进HA用MQTT把状态数据实时上传到监控面板以及用这些数据实现几个价值感很强的离家回家自动化。1. 为什么要把路由器交给HomeAssistant统一管理1.1 路由器在智能家居中的隐藏地位智能家居的逻辑链条通常是这样传感器感知环境控制器下发指令设备执行动作。但这条链里最底层、最容易被忽略的其实是网络。没有网络HA和所有云平台都等于零。同样网络设备的状态也一直是个盲区——你可以在面板上看灯有没有关但很难一眼看出家里到底有几台手机连着Wi-Fi哪个设备正在疯狂跑流量。路由器接入HA之后这个盲区就补上了。HA能感知到哪些终端设备连上了网络能从数据里判断你是不是已经回家能在某个智能设备掉线时快速定位是设备问题还是网络问题。说白了路由器是家里唯一的“全设备感知层”其他传感器都有覆盖范围而网络状态是全局的。1.2 华硕路由器的天然优势市面上路由器品牌不少但能被HA“无缝”接管的华硕算是最顺手的之一。原因有三个华硕官方固件本身就带SSH服务和某种程度的API不需要刷机就能读取基础状态。如果你愿意刷梅林固件那就更强了。可以跑自定义脚本、读取CPU内存信息、抓客户端列表、控制Wi-Fi开关几乎把路由器变成一个半开放的迷你服务器。HA原生就有AsusWRT集成直接填IP、账号、密码就能连不需要写一行代码。这几点凑到一起华硕路由器就成了HA生态里“性价比最高的网络设备接入方案”之一。别家路由器可能也能通过SNMP或者自定义插件接入但像华硕这么成熟的集成路径还真不多。1.3 和“基于MQTT和Flash的智能家居监控平台”是什么关系很多人听说过MQTT但第一反应是传感器数据采集。确实温湿度计、门磁这类设备常用MQTT上报数据。但你有没有想过路由器本身也可以作为一个“传感器”它每分钟都在产生网络状态数据这些数据如果能通过MQTT推送到HA再由HA前端面板快速展示出来就形成了一套基于MQTT和Flash的实时监控平台。这里的Flash不是Adobe那个过时插件而是取它“闪现、快速刷新”的含义——数据从路由器采集后通过MQTT消息通道在1秒内抵达HA面板卡片上的数字立即更新不用手动刷新页面不需要等待后台轮询慢吞吞地拉取。配合HA的Lovelace仪表盘效果很像一个实时网络监控中心。我下面的实际搭建也是围绕这条链路展开的。2. 接入前的准备与环境检查2.1 确认路由器固件与型号是否支持先别急着配置第一步是确认设备是否在支持列表里。华硕常见的RT-AC68U、RT-AC86U、RT-AX86U、TUF-AX3000等型号只要固件是官方版或者梅林版基本都能用AsusWRT集成。老款型号如果官方固件太老SSH功能可能不稳定建议至少升级到官方最新固件。固件版本怎么确认登录路由器Web后台在“系统管理 - 固件升级”里能看到当前版本号。如果你是官方固件只要是近几年的版本都没问题。如果你追求更强大的功能手头有一台不需要当作主力生产环境的路由器可以考虑刷梅林。梅林固件基于官方源码二次开发API兼容性更好而且多了jffs分区支持存放自定义脚本很方便。需要特别提醒的是刷梅林有变砖风险如果只是想把路由器接入HA官方固件足够用。别为了一个监控功能去冒不必要的风险。2.2 开启SSH并设置固定地址在路由器后台找到“系统管理 - 系统设置”里面有一项“启用SSH”。推荐选择“LAN only”也就是只允许内网连接不要开放到公网。端口默认22可以保持默认。这一步很关键官方固件默认SSH是关闭的不打开的话HA根本连不进去。然后给路由器设置一个固定IP。如果你的HA通过Docker或者虚拟机运行路由器通常就是192.168.1.1或者192.168.50.1这类地址一般情况下不会变。但还是建议在路由器DHCP里把HA主机的IP也固定下来避免HA重启后IP漂移导致集成失联。操作办法是在“外部网络 - DHCP服务器”里找到“手动分配IP”把HA主机的MAC地址绑定到固定IP。2.3 创建专用管理账户而不是直接用admin这是很多人忽略的点。ASUSWRT集成需要用户名和密码连接SSH很多人图省事直接用admin。但这样做有风险万一HA配置被泄露或者某个自动化误操作触发了重启整个路由器后台等于门户大开。我建议单独创建一个低权限账户。梅林固件里可以通过useradd命令添加系统用户但要注意SSH登录OpenSSH用的是基础系统账户不同于Web后台的管理员。更简单的办法是日常Web管理用adminSSH接入用一个独立密码。官方固件对SSH的权限没有梅林那么细但至少不要用和Web后台完全一样的强密码其实更合理的做法是用admin账户但单独设置一个复杂的SSH密码。实测下来密码里尽量不要带$、#、\这类特殊字符否则集成解析时会踩坑后面我会专门说。2.4 安装HomeAssistant与HACSHA的安装方式因人而异不管你是HAOS、Supervised还是DockerAsusWRT集成都能用。如果你用的是HAOS打开“设置 - 设备与服务 - 添加集成”搜索AsusWRT基本就能找到。HACS不是必须的但如果你想要更丰富的路由器监控卡片建议提前装好因为后面那个“Flash”面板会用到一些HACS前端插件。HACS安装也很简单网上有官方的下载步骤在HA里添加HACS仓库地址下载压缩包重启HA配置完成。具体步骤不再展开这里只需要确认你的HA能访问GitHub、能正常获取HACS前端资源就行。2.5 网络拓扑确认最后检查一下网络是不是真的通了。在HA主机上ping一下路由器IPping 192.168.1.1然后测试22端口是否可达nc -vz 192.168.1.1 22如果通了说明SSH端口是开放的。如果nc命令不存在可以用telnet或者直接尝试用SSH客户端连接。这一步的问题经常出在路由器设置了防火墙规则限制了内网某些IP访问导致HA连不上。建好之后最好先手动用SSH客户端登录一次确保用户名密码正确。3. 官方AsusWRT集成5分钟完成基础接入3.1 添加集成填好三个关键参数官方集成的入口很友好。在HA的“设置 - 设备与服务”里点击“添加集成”搜索AsusWRT点进去后会让你填这些信息Host路由器的IP地址UsernameSSH登录用户名PasswordSSH登录密码Protocol默认是SSH保持默认即可填写完成后点击提交HA会自动连接路由器并拉取状态。如果一切正常几十秒后你就能在设备列表里看到新接入的路由器设备。这里最需要留意的是协议选择。老版本集成支持Telnet但Telnet明文传输且数据格式比较老解析不稳定。强烈建议选SSH。如果你的路由器是官方固件且没有开启SSH会提示连接失败回到上一步打开SSH即可。3.2 接入成功后自动生成的实体集成成功之后HA会自动生成一批实体主要包括以下几类实体类型名称示例含义sensorsensor.asuswrt_upload_speed当前上行速度单位Mbpssensorsensor.asuswrt_download_speed当前下行速度sensorsensor.asuswrt_connected_devices当前连接设备数量device_trackerdevice_tracker.*各终端的在线状态switchswitch.asuswrt_router重启路由器开关按钮updateupdate.asuswrt_router固件版本信息我首次接入后最常用的是sensor.asuswrt_connected_devices。把这张卡片放到HA面板上每次回家掏出手机这个数字就会变化非常有“仪式感”。你还可以点开设备追踪器看到当前在线终端的列表进而对应到每一台手机、电视、智能音箱。3.3 调整刷新频率别太贪心AsusWRT集成默认是每30秒向路由器发起一次SSH连接获取一次数据。这个频率足够日常监控使用。如果你希望面板上的速度数字更丝滑可以降低到10秒但我不推荐。SSH连接本身是有开销的每连接一次就要做一次认证太频繁会让路由器CPU负载升高尤其在老型号上表现更明显。如果确实需要秒级更新更好的办法是走SNMP或者MQTT脚本只采集特定数据而不是让集成频繁全量拉取。我后面要讲的MQTT方案就是为了解决这个问题。3.4 权限与安全补充AsusWRT集成拿到SSH权限后能做的操作其实很多。官方实体的switch允许你远程重启路由器。这个功能很方便但也有风险如果自动化配置错误或者HA重启时误触发了这个开关家里网络会立即断开。建议给这个开关写一个确认流程或者至少不要把它放在面板顺手的位置。另外如果路由器开启了2FA身份验证SSH登录会失败。ASUSWRT集成不支持双向验证需要确保该账户关闭2FA。还有一个细节官方固件的SSH用户是root密码就是后台管理员密码如果你改了后台密码HA集成里也要同步更新否则下次重启HA就会发现设备实体全部不可用。4. 基于MQTT与Flash的实时监控平台搭建4.1 为什么网络状态也适合走MQTTMQTT的核心特点是低功耗、低带宽、即时推送。路由器不像温湿度计那么“省电”但它的数据形态非常适合MQTT设备列表、CPU占用率、WAN IP、流量速率这些都是结构化的键值对使用JSON封装后通过Topic发布HA订阅后即可自动解析。更重要的是MQTT天然支持“一对多”。同一个Topic里的数据HomeAssistant能收Grafana也能收手机上的MQTT调试客户端也能看到。这样你就有了一个可复用的路由器数据源以后想接什么监控平台都行。这也是“基于MQTT和Flash的智能家居监控平台”里最核心的架构思想用MQTT把设备数据和展示层解耦。4.2 在HA里安装Mosquitto MQTT Broker如果你还没有MQTT Broker最省事的办法是在HA里安装Mosquitto插件。打开“设置 - 加载项商店”搜索Mosquitto broker安装并启动然后在HA的“设备与服务”里添加集成选择MQTT通常会自动发现本机已经运行的Broker直接提交就能建立连接。安装完成后记得在配置文件里开启自动发现mqtt: discovery: true discovery_prefix: homeassistant这样MQTT客户端只要发布特定格式的topicHA就能自动生成设备与实体不用手动一个个配置YAML。4.3 用Python脚本采集路由器状态并发布到MQTT接下来进入核心环节写一个采集脚本让路由器状态实时“流入”MQTT。这个脚本的运行环境建议独立于HA主机之外或者直接在HA容器里跑也行但需要确保能访问路由器的SSH端口和MQTT Broker。我用的方案是paramiko做SSH连接paho-mqtt做消息发布。核心代码如下import paramiko import paho.mqtt.client as mqtt import json import time ROUTER_HOST 192.168.1.1 ROUTER_USER admin ROUTER_PASS your_password MQTT_HOST ha.local MQTT_PORT 1883 MQTT_TOPIC asus/monitor/status def get_router_data(): ssh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ROUTER_HOST, usernameROUTER_USER, passwordROUTER_PASS, timeout10) commands { clients: nvram get client_list, wan_ip: nvram get wan0_ipaddr, uptime: uptime, cpu: top -b -n1 | head -3, mem: free } data {} for key, cmd in commands.items(): stdin, stdout, stderr ssh.exec_command(cmd) data[key] stdout.read().decode(utf-8, errorsignore).strip() ssh.close() return data def on_connect(client, userdata, flags, rc): print(MQTT connected with result code, rc) mqtt_client mqtt.Client() mqtt_client.on_connect on_connect mqtt_client.connect(MQTT_HOST, MQTT_PORT, 60) mqtt_client.loop_start() while True: try: data get_router_data() # 生产中可将cpu、mem进一步解析为数值这里仅做演示 payload json.dumps({ clients_len: len(data[clients].split()), wan_ip: data[wan_ip], uptime: data[uptime][:100], cpu: data[cpu][:200], mem: data[mem][:200] }, ensure_asciiFalse) mqtt_client.publish(MQTT_TOPIC, payload, qos1, retainTrue) print(published:, payload) except Exception as e: print(error:, e) time.sleep(60)注意几个点脚本里连接的nvram get client_list返回的是华硕固件内部格式字段间用分隔所以统计数量时可以先split。top和free的输出可以用正则或字符串切割进一步处理成结构化JSON这里因为我手头演示环境空间有限只做截取。你在实际使用中建议用psutil之类的库在路由器上跑或者复用梅林固件的stats.sh脚本。如果不想用SSH命令华硕路由器也支持SNMP。在路由器后台开启SNMP后可以用python3 -c import easysnmp之类的库直接OID读取数据。不过SNMP配置略繁琐我这里主推SSH方案兼容性更好。4.4 HA侧通过MQTT自动发现生成实体脚本发布到asus/monitor/status这个topic后因为HA开启了MQTT自动发现理论上稍等片刻就能自动出现实体。但自动发现需要遵循指定topic格式如果嫌麻烦手动在configuration.yaml里配置更直观mqtt: sensor: - name: 华硕路由器WAN IP state_topic: asus/monitor/status value_template: {{ value_json.wan_ip }} force_update: true - name: 华硕在线客户端数 state_topic: asus/monitor/status value_template: {{ value_json.clients_len }} unit_of_measurement: 台 remote: - name: 重启华硕路由器 command_off: echo 重启MQTT的retainTrue很重要。这样新订阅的客户端连接上Broker后可以立即收到最新状态而不是等下一次发布才更新。HA重启后也能立刻显示当前路由器状态不用干等一分钟。4.5 搭建Flash式监控面板数据打通之后剩下的就是好看的问题。HA前端面板的刷新速度本身很快配合MQTT推送基本可以实现“秒级闪烁式”的实时更新。我管它叫Flash面板因为每次数据到达卡片上的数字都会瞬间跳动更新。你可以组合三种卡片entities卡片直接展示WAN IP、在线客户端数、CPU占用率等文本数据。apexcharts-card用折线图展示上下行速率的变化趋势来自官方集成的sensor.asuswrt_upload_speed和sensor.asuswrt_download_speed。auto-entities自动列出所有device_tracker实体并实时显示在线状态绿色在网灰色离线。在Lovelace里新建一个面板采用vertical-stack把多个卡片叠起来效果类似一个网络运营中心的迷你大屏。你还可以把HACS里的config-template-card装好写一点模板语法实现“当在线设备数量大于10时显示网络拥挤警告”这类智能提示。至此“基于MQTT和Flash的智能家居监控平台”就从一个概念变成了实打实看得见的面板。4.6 接入后的自动化场景示例监控只是第一步联动才是终极目的。有了路由器的设备在线数据之后我立刻改写了原来的回家离家自动化。场景一回家模式触发条件手机在device_tracker中从not_home变为home执行动作客厅灯光亮度调到80%空调开启音箱播放舒缓音乐场景二离家模式触发条件全家人手机都变成not_home且持续10分钟执行动作关闭所有灯光关闭非必要电器警戒摄像头布防场景三网络异常警告触发条件MQTT传入的WAN IP在5分钟内改变执行动作发送消息到手机提示网络重新拨号IP已变更场景四某设备离线判断触发条件网络打印机在线状态变为离线执行动作推送通知给家里所有人附带上一次离线时间。这些场景如果不用路由器接入要么只能通过手机GPS判断回家精度差、耗电高要么得依赖智能门锁传感器无法区分到具体是谁回来了。而路由器Wi-Fi接入判断是“人是否在家”最朴素也最可靠的信号之一。5. 在线状态判断与网络自动化进阶5.1 手机在线状态为什么时灵时不灵用路由器判断在线状态时最容易遇到的问题就是手机休眠时Wi-Fi自动断开。苹果和安卓手机在锁屏后为了省电可能会关闭Wi-Fi模块一小段时间。这就导致device_tracker短暂显示离线。针对这个问题有几个优化手段将手机设置为“始终保持Wi-Fi连接”在系统开发者选项里把Wi-Fi休眠策略改成“从不”。接受“短时间离线”的噪声自动化里增加延时判断比如离线持续5分钟再触发离家模式。结合路由器ARP表而不是仅仅看当前Wi-Fi客户端列表。集成的track_devices通常已经通过ARP方式查询能捕捉到未完全断开的连接。5.2 用Ping方式补足二重判断如果某个设备被路由器踢出后真实仍然在线比如连着其他AP或者Mesh节点可以给它单独建一个Ping检测。HA原生支持ping平台的二进制传感器binary_sensor: - platform: ping host: 192.168.1.234 name: 客厅平板 count: 2 scan_interval: 30这个方案对任何网络设备都有效不依赖路由器固件。缺点是需要设备有固定IP。推荐用在打印机、NAS这类不经常移动的设备上在线状态判断非常准。5.3 路由器重启开关的使用边界官方AsusWRT集成会创建一个重启开关。把它添加到面板点击后会调用SSH命令让路由器重启。这个操作会中断所有网络连接HA自身如果运行在路由器后端的内网环境中也会短暂失联。我的建议是不要让它出现在公共面板的显眼位置最好只放一个“确认”对话框。你可以把开关实体单独放在一个管理分区并配合panel_iframe隐藏起来。或者干脆不用这个开关通过SSH命令手动重启更安心。另外有些华硕路由器使用AiMesh组网主路由重启后节点路由会短暂掉线。如果你的HA接的是主路由IP节点状态可能无法由官方集成直接呈现。这种情况可以去Merlin固件里写一个脚本通过wl -i eth6 assoclist命令获取各频段客户端信息再通过MQTT发布扩展性就会好很多。5.4 从路由器到全屋智能的闭环网络数据接入HA后围绕“人在/不在”的自动化不是终点它还能影响很多设备的策略。举个例子当在线设备数量为0也就是家里完全没人可以自动把扫地机器人离家出去作业避免工作时被误踩当在线设备数量从0变为1说明有第一个人回家可以调整热水器进入预约模式当半夜检测到客厅Wi-Fi有设备接入同时门磁状态为关闭那很可能是家人起夜只点亮夜灯而不是全屋开灯。路由器虽然只是一个“网络中转站”但接入HA后变成了全屋自动化的“人员传感器”。这种数据来源稳定、部署成本低比摄像头和人体红外判断更保护隐私也更省心。6. 常见问题与排查技巧实录6.1 SSH连接失败或登录失败这是接入时出现概率最高的一类问题。我一开始也折在这里折腾了半小时才反应过来密码里有一个特殊字符#导致集成一直报Login Failed。现象原因解决方法HA添加集成时提示Login failed用户名密码错误或密码含特殊字符换纯字母数字的密码临时用root/admin测试提示Connection refusedSSH未开启或端口不对检查路由器系统设置里的SSH开关和端口提示Timed outHA无法访问路由器IP检查IP是否输入正确、防火墙是否拦截登录后马上断开路由器开启了一次性密码或2FA关闭2FA或者使用梅林固件的独立SSH账户排查顺序建议是先用电脑SSH客户端手动连接路由器能连上再交给HA。手动连接能避免把锅甩给集成。6.2 MQTT数据不更新或断连脚本正常运行但HA面板上的数据一直不动。大概率不是脚本问题而是MQTT消息没有被正确消费。检查MQTT Broker是否正常在HA“开发工具 → 服务”里调用mqtt.publish发布一条测试消息看是否有反应。检查topic是否一致脚本发布的是asus/monitor/statusHA配置的也是同一个topic吗大小写都要一致。检查retain标志如果没有设置retainHA重启后会等待新消息而不是立即读到旧数据。检查QoSqos1能保证至少送达一次但如果网络抖动可能重复不过重复消息对HA无害。如果你发现自动发现一直没有响应可以手动重启HA配置或者直接用mqtt.sensor方案不要依赖自动发现毕竟稳定优先。6.3 集成实体空白或属性很久不更新有时候你添加了Integrations能看到路由器设备但里面实体数量少得可怜或者某些传感器一直是unknown。常见原因是路由器固件版本过新/过旧命令输出格式改变。AsusWRT集成底层是通过执行nvram get、top、ifconfig等命令并解析输出实现的一旦固件改版格式不匹配实体自然得不到数据。解决办法升级HA到最新版官方会跟进固件变化。检查路由器是否启用了Access Point模式。AP模式下很多WAN参数为空集成状态会少一半。如果是Merlin固件可以在SSH里手动运行nvram get rc_support确认支持的功能标签。6.4 路由器负载过高如果路由器是老款双核接入HA后明显感觉Web后台变卡那很可能是轮询频率太高或者多个脚本同时在连SSH。建议把AsusWRT集成的scan_interval从30秒拉长到60秒或120秒。停用非必要的浏览器页面不要频繁开着后台。使用我的MQTT脚本方案时把SSH连接改为单次连接后批量取所有字段再关闭连接。避免每秒都新建连接。如果仍觉得卡可以这样用官方集成负责设备在线状态MQTT脚本只负责流量和WAN IP。两个方案各管一块降低重复查询。6.5 安全边界不要把入口暴露到公网由于接入HA后路由器管理几乎变成了“API化可编程”。这很方便但也意味着任何能访问HA的人或服务都可能间接操控路由器。因此安全底线必须明确SSH端口保持在LAN only不要映射到公网。MQTT Broker如果需要外部访问务必开启账号密码和TLS加密。HA配置里别用远程URL直连整个管理页面尽量通过官方代理或者内网穿透工具并开启2FA。为路由器专用管理账户设置独立的强密码不要和Wi-Fi密码、后台密码重复。我自己踩过一次低安全教训早期为了远程查看设备状态映射了SSH端口到公网结果日志里出现很多暴力破解尝试。从那以后所有管理端口只允许内网访问远程需求一律通过HA的加密通道完成。这样既不影响功能又安全得多。最后说一点个人体会我接入华硕路由器到现在大概半年最满意的不是监控面板有多炫而是“设备归家”联动彻底改变了我的日常。以前下班回家要掏手机、按开关、调速现在手机一连上Wi-Fi灯自动亮音箱自动放歌整个过程不用做任何额外动作。踩过最大的坑是SSH密码里带特殊字符导致集成长时间报错改成专用账户后才稳定下来。如果你也准备把华硕路由器接入HomeAssistant我的建议是从官方AsusWRT集成开始先跑通基础功能再升级到MQTT和Flash监控面板一步一步来家里的自动化水平绝对会上一个台阶。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价