ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

SonoffLAN 调优:让百台设备 2 秒内全部响应

SonoffLAN 调优:让百台设备 2 秒内全部响应 SonoffLAN 调优让百台设备 2 秒内全部响应【免费下载链接】SonoffLANControl Sonoff Devices with eWeLink (original) firmware over LAN and/or Cloud from Home Assistant项目地址: https://gitcode.com/gh_mirrors/so/SonoffLAN同一套 SonoffLAN 集成20 台设备时岁月静好80 台之后早晨的自动化一触发UI 开关卡住 10 秒recorder 一天写掉上百万行。本文只解决三件事传感器写入压力、命令排队超时、本地组播发现失败。刷 Tasmota 固件和 eWeLink 云端限流策略不在范围内。先定位慢在哪一层一眼定出来看 System Health 里的在线设备数Settings System Tools System Health找到 Sonoff 条目。预期输出是一个Online devices: 72之类的数字——它是本地或云端任一链路确认可达的设备计数。这个数明显低于你的设备总数说明本地组播链路断了所有命令被挤上云端排队从这一刻就注定了。如果基本等于总数瓶颈不在连接而在处理量。在 debug 页面看日志行前缀集成选项里打开 debug再进 Integration Known issues或直接访问/api/sonoff/集成uuid。盯每一行的前缀1000xxxxxx Local4 | … | switch {switch: on}后跟 {error: 0}说明局域网直连在毫秒级完成出现 timeout 5或E#CON是本地失败后落到云端看到 Cloud4里夹着DDoS |排队标记就是云端 0.1 秒间隔在吞你的命令。Local4走 LANCloud4走 eWeLink WebSocket——满屏 Cloud4 还带着 DDoS 标记问题定性完毕。数一下 recorder 每天写多少行状态直接查库sqlite3 /config/home-assistant_v2.db SELECT count(*) FROM states WHERE entity_idsensor.sonoff_1000xxxxxx_power AND last_updated datetime(now,-1 day)预期输出一个数。86400 就是每秒一行这是 Sonoff Pow 功率传感器的教科书特征设备本身 1Hz 推送不过滤就条条入库数据库膨胀就是这么来的。⚡ 分层修复从改一行 YAML 到改自动化写法把 1Hz 功率上报压到 30 秒一档坑长什么样单台 Pow 一天写 86400 行状态它的历史页面要加载 2 秒多recorder 磁盘一周涨 200MB。根因不配reporting时设备 1Hz 推来的数据直接进状态机。过滤逻辑在custom_components/sonoff/sensor.py的XSensor.set_state里其实已经写好了——最小间隔 / 最大间隔 / 最小差值三参数但不显式打开就是关的。最小修复sonoff: devices: 1000xxxxxx: reporting: power: [30, 3600, 1] # 30s最小间隔差值1W current: [5, 3600, 0.1] voltage: [60, 3600, 5]回归标准重跑上面的 sqlite 计数单日 3000 行改前 86400数值变化超过差值时仍会立刻写入曲线不会变成直线。修好本地组播把命令交给局域网坑长什么样Hass 重启后设备全离线过几分钟才陆续回来手动切一次开关要等 5 秒超时debug 页面一片E#CON。根因设备内置 web 服务器是单线程一次只处理一个请求——custom_components/sonoff/core/ewelink/local.py的send里对 ECONNRESET 做了 0.1 秒退避重试注释写得很直白。而 Docker NAT 或双路由组网下组播过不去zeroconf 发现不到设备全部命令被挤到云端cloud.py的send里那个 0.1 秒的全局间隔就是你感觉到的队列。最小修复# 容器走 host 网络让 mDNS 过去 sonoff: devices: 1000xxxxxx: host: 192.168.1.123 # 固定IP直连不等组播Docker 部署改成--network hostHassOS 组播默认通只需补 host。回归标准重启后 3 秒内 debug 页面出现Local4上线记录连续手动切 10 次 timeout行数为 0。把多路批量命令合成一个包坑长什么样早晨自动化给 4CH 开 4 个通道4 个动作逐个下发UI 反馈超过 1 秒其中 2 次直接连接重置。根因custom_components/sonoff/core/ewelink/__init__.py的XRegistry.send先试本地、失败落云端、成功后再补一次状态查询云端还有uiActive参数 1.0 秒的额外节流。4 条命令串起来就是 4×(延迟排队)设备单线程服务器还会直接重置并发连接。最小修复组件自带 0.1 秒合并窗口用服务的switches批量参数触发- service: sonoff.send_command data: device: 1000xxxxxx switches: - {outlet: 0, switch: on} - {outlet: 1, switch: on} - {outlet: 2, switch: on} - {outlet: 3, switch: on}回归标准同一 4 通道批量动作 P95 400ms改前 1.2sE#CRE归零。一次完整调优记录86 台设备的家改前86 台设备12 台 Pow5:30 的自动化逐个开 34 个通道UI 卡住 10 秒功率传感器一天写 100 万 行30 次云端命令里 4 次超时。动作序列给 12 台 Pow 补上reporting30s / 1W 差值Docker 切 host 网络对本地总失败的 5 台补了固定host早晨自动化从 34 次串行switch.turn_on改成 9 次send_command批量。改后自动化总耗时 10 秒 → 2.1 秒功率传感器 86400 行/天 → 约 2900 行云端超时 4/30 → 0重启后设备全部上线从几分钟缩到 3 秒。我们当时把reporting的最小间隔先设成了 1 秒想让它实时一点结果入库量比不设还大只好退回 30 秒。切local模式那次也忘了容器还在 NAT 组网设备集体掉线追了两小时日志才发现是 mDNS 没通。指标改前 → 改后早晨自动化总耗时10s → 2.1s功率传感器日写入86400 → 约 2900 行云端命令超时4/30 → 0重启后设备上线几分钟 → 3s下一站值得盯的是高频原始数据与 recorder 的存储方式——想要 Pow 功率进秒级历史得绕过状态机另走时序路径。【免费下载链接】SonoffLANControl Sonoff Devices with eWeLink (original) firmware over LAN and/or Cloud from Home Assistant项目地址: https://gitcode.com/gh_mirrors/so/SonoffLAN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表