📌 项目地址:mbillow/localthings | ⭐ 1,063 颗星 | 🔧 Python
三星洗衣机跑完一缸,官方 SmartThings 集成可能过十几秒才更新状态;家里断网,所有三星家电直接从 Home Assistant 里消失。这不是玄学,云端集成就是这样工作的:指令和状态都要绕三星服务器一圈。
LocalThings 干的事很直接:在局域网里和三星家电通信,不登账号,配置完成后不再联系三星服务器。支持推送的家电状态变了就实时上报,其余的每 30 秒轮询一次。断网时洗衣机剩余时间照样能查,自动化照常触发。
有一点要说清楚:LocalThings 只保证自己不向三星发数据,家电和三星云的那条连接它不去动。想彻底断掉家电联网,得自己在路由器上封。
不是逆向,家电本来就说着标准协议
这是这个项目最值得说的部分。三星的联网家电是 OCF(Open Connectivity Foundation)设备,本地接口是有公开规范的。LocalThings 通过 /oic/res 发现家电暴露的资源,从 /oic/d 读出设备类型(洗衣机就是 oic.d.washer)。某个状态如果家电既提供标准 OCF 资源又提供三星私有扩展,LocalThings 优先用标准那份。
通信走 CoAP(RFC 7252),跑在加密的 DTLS 会话里,用 X.509 客户端证书认证。实时推送靠 CoAP Observe 实现。
这套做法比纯逆向靠谱。协议是公开规范,固件小更新一般不会让它突然变样。
支持的设备清单相当长
空调(含多联机)、洗衣机、烘干机、洗烘一体机、冰箱(泡菜冰箱和酒柜也有)、烤箱、灶具和油烟机、洗碗机、微波炉、扫地机器人(早期支持)、空气净化器、除湿机、净水器、EHS 热泵,连回音壁的设置和状态都能读。
能控制什么取决于家电自己上报什么。典型功能:开关机、程序和模式选择、启动/暂停/停止、温度设定、剩余时间和预计结束时间、门和童锁状态、能耗、滤网状态、报警。
兼容性:2022 年之后的大部分三星家电都能用;一些更早的洗衣机、空调和嵌入式烤箱走旧的本机接口(TCP 8888),README 有专门一节讲。配置时自动检测家电用的是哪种接口,检测不到会直接告诉你。
配置前做两件事
配置只需要给家电的 IP 地址,LocalThings 会自动识别类型和型号,生成对应的控件和传感器。
所以第一件事是在路由器上给家电做 DHCP 静态分配,固定 IP。不然家电换个地址,集成就断了。
第二件事:遇到识别不了的设备别急着放弃。如果某台家电配置成功但没被认出来,或者缺某个控制项,Home Assistant 会弹提示请你下载诊断数据。维护者通常凭这一份诊断文件就能补上支持,README 的 “Reporting a capability gap” 一节写了怎么提交。
和官方集成对比
| 维度 | SmartThings 云集成 | LocalThings |
|---|---|---|
| 三星账号 | 需要 | 不需要 |
| 状态更新 | 依赖云端 | 本地推送 / 30 秒轮询 |
| 断网后 | 不可用 | 可用 |
| 协议 | 云 API | OCF / CoAP over DTLS |
Python 写的 Home Assistant 自定义集成,安装细节和许可证以仓库页面为准。条件符合的话,它可能就是你要找的东西:把 SmartThings 云集成从系统里删掉的最后一环。