main
云端 Product.model 是内部型号代码(RV02="1"、RV03="01"),HA 设备页 直接展示会显示 "01"。改用产品列表接口的 productSign(RV02=9、 RV03=26),未知机型回退 Equip.model。 - const.py:新增 SWEEPER_PRODUCT_MODELS - models.py:新增 Equip.sweeper_model 属性 - __init__.py / vacuum.py / sensor.py / binary_sensor.py / select.py / image.py:DeviceInfo.model 改用 sweeper_model - tests/test_models.py:覆盖系列号映射与回退 - docs/api/集成实现.md:补充型号来源说明 Co-Authored-By: opencode v2.1.4
NeteaseIntelligentHomeAssistant
网易智造 App(主包 com.netease.intelligent,versionName 5.3.5)的 Home Assistant 自定义集成与 API 逆向仓库。
安装(HACS)
- 在 HACS 中将本仓库添加为自定义仓库,类别选择 集成(Integration)。
- 在 HACS 中搜索「网易智造」并下载。
- 重启 Home Assistant,然后在 设置 → 设备与服务 → 添加集成 中搜索「网易智造」。
Important
HACS 仅支持公开的 GitHub 仓库。本仓库的 HACS 安装源为 GitHub 镜像: https://github.com/readonly-42894/NeteaseIntelligentHomeAssistant (开发主仓库托管于 Gitea
git.o0kam1.dev,GitHub 仅为 HACS 分发镜像。)
目录结构
| 路径 | 说明 |
|---|---|
custom_components/netease_intelligent/ |
Home Assistant 自定义集成(HACS 托管目录) |
custom_components/netease_intelligent/manifest.json |
集成清单(domain / 版本 / 依赖等) |
custom_components/netease_intelligent/brand/ |
HACS brand 资源(icon.png / [email protected],取自 App 图标) |
hacs.json |
HACS 清单 |
.github/workflows/validate.yml |
HACS Action + hassfest 校验工作流 |
docs/openapi.yaml |
OpenAPI 3.0.3 端点/schema 规范 |
docs/API工作原理.md |
API 工作机制总览(架构/网络栈/Base URL/接口组织/源码定位) |
docs/api/ |
API 专题文档(认证机制/统一响应结构/登录流程/调用示例/集成实现) |
source/ |
原始安装包(Git LFS 跟踪) |
scripts/ |
生成器 gen_openapi.py;辅助脚本 extract_fields.sh、在线冒烟 live_smoke.py;官方推送通道探针 push_probe.py;地图字体获取 fetch_map_font.py |
tests/ |
单元测试(pytest,见「测试」一节) |
集成开发状态
- HACS 合规骨架(
hacs.json/manifest.json/ brand 资源 / 校验工作流) - 最小可加载集成(Config Flow 手动录入 Cookie 凭据)
- 登录流程:短信验证码 / 邮箱密码(网易 URS SDK),另保留手动录入 Cookie 兜底
- 家庭数据抽象(
models.py/api.py/coordinator.py,装配进hass.data) - 扫地机器人:设备登记 +
vacuum实体(清扫/暂停/回充/吸力/寻找)+select清扫模式(自动清扫/仿真拖地,Pro 款为探索建图、非 Pro 款为沿边清扫)+ 电量/今日清扫统计sensor+ 充电中binary_sensor - 扫地机器人:实时地图
image实体(下载mapUrl二进制地图包,解析并渲染为 PNG;复用 App drawable 图标/纹理,默认按清扫结果显示已清扫地面/房间与轨迹,叠加虚拟墙、清扫区域与带朝向的机器人/充电座标记;支持浅色/深色两种配色,并可配置整幅地图朝向(0°/90°/180°/270° 旋转);清扫中经推送 subtype 3 轨迹实时增长) - 扫地机器人:控制后即时反馈(
vacuum乐观更新 + 立即刷新);轮询频率固定(推送在线 10min、离线 5min,不随状态提速) - 官方推送通道:Socket.IO 长连接(
iot_class=cloud_push)为扫地机实时数据提供实时增补(轮询提供完整字段与基线);探针scripts/push_probe.py - 官方通知:复刻同一通道的
noti主题(回执notificationReply+lastNotiId持久化 + 按 id 去重),收到通知时在事件总线触发netease_intelligent_notification(仅事件总线,不落persistent_notification);只要取到pid即启用,不依赖扫地机 - 登录流程:手机号 + 密码 / 微信
- 设备 / 家庭 / 场景实体
集成结构
| 文件 | 说明 |
|---|---|
config_flow.py / urs.py |
登录配置流与网易 URS 登录 SDK 协议实现;选项流提供地图配色与朝向设置(map_theme / map_rotation) |
api.py |
业务 API 客户端(Cookie 认证 + ResponseWrapper 解包),实现家庭域与扫地机端点 |
models.py |
家庭域数据模型(Family/Room/Member/FamilyEquip/Equip/FamilyEnv 等 DTO)与扫地机数据 DTO(SweeperDeviceData) |
coordinator.py |
DataUpdateCoordinator,周期拉取家庭列表并缓存于 coordinator.data;另含 NeteaseIntelligentSweeperCoordinator 缓存单台扫地机实时数据(轮询为基础、推送实时增补) |
push.py / push_protocol.py |
官方 Socket.IO 推送通道(cloud_push):帧解析、载荷→SweeperDeviceData 映射、pushId 生成、noti 通知解析与回执;断线退避重连,不可用时轮询继续提供数据,收到通知在事件总线触发 netease_intelligent_notification |
vacuum.py |
扫地机器人 vacuum 实体(StateVacuumEntity + VacuumActivity:清扫/暂停/回充/吸力/寻找设备);控制指令后乐观更新并触发快速刷新 |
select.py |
扫地机器人 select 实体:清扫模式(复刻官方「模式选择」弹窗 ModeControlDialog——自动清扫/仿真拖地,Pro 款为探索建图、非 Pro 款为沿边清扫;当前模式由 workMode 反推,选择即 setWorkMode(ctrltype, Start) 切换,乐观更新 + 快速刷新) |
sensor.py |
扫地机器人 sensor:电量、今日清扫面积、今日清扫时长 |
binary_sensor.py |
扫地机器人 binary_sensor:充电中(device_class: battery_charging,chargeStatus == Charging),供前端给电量实体显示充电图标/动效 |
image.py |
扫地机器人 image 实体:把 mapUrl 地图包渲染为 PNG 展示(配色由选项 map_theme、朝向由选项 map_rotation 决定);清扫中按推送 subtype 3 轨迹增量重放 |
map_parser.py |
扫地机二进制地图包解析(复刻 App MapDataParser,纯标准库);含推送轨迹复刻(parse_trajectory / apply_trajectory,对应 App MapHistoryParser) |
map_render.py |
用 Pillow 把解析结果渲染为 PNG(复刻 App spirit 上色与坐标变换,直接贴 App drawable 图标/纹理;支持深色调色板与整幅地图朝向旋转;history 模式显示清扫结果与轨迹,叠加墙/区域/朝向标记) |
map_assets/ |
取自 App res/drawable* 的地图图标/纹理(机器人/充电座/定点透明 PNG,虚拟墙/区域/背景平铺纹理) |
fonts/ |
内置地图字体 Noto Sans SC(SIL OFL 1.1),保证房间名等 CJK 文字在无 CJK 系统字体的宿主(如 HA 容器)也能正确渲染 |
__init__.py |
装配:建 API 客户端与协调器,存入 hass.data[DOMAIN][entry_id],登记扫地机器人设备并装配 vacuum/select/sensor/binary_sensor/image 实体 |
API 逆向
- 重新生成 OpenAPI 规范:
python3 scripts/gen_openapi.py - 拉取 APK 实际内容:
git lfs pull - 端点与机制详见
docs/openapi.yaml与docs/API工作原理.md。
测试
pip install -r requirements_test.txt
pytest
tests/ 覆盖家庭域数据模型(models.py)的反序列化与容错、API 客户端(api.py)的认证/UA 生成、扫地机器人状态映射(sweeper_activity),以及地图包解析、实时轨迹(map_parser.py)与渲染(map_render.py)。测试环境通过 tests/conftest.py 用合成包名加载 const / models / api / map_parser / map_render 这些模块,避免引入 homeassistant 依赖;地图测试用 tests/map_fixture.py 合成的地图包(不含真实户型数据),渲染测试需要 Pillow(Home Assistant 核心自带,测试环境由 requirements_test.txt 安装)。
许可
本项目代码以 AGPL-3.0 许可发布。网易智造 App 及其商标归网易所有,本项目与网易无关联。
Description
网易智造 App 的 Home Assistant 自定义集成与 API 逆向:扫地机器人 vacuum / sensor / 实时地图 image 实体,附 OpenAPI 规范与网易 URS 登录协议,支持 HACS 安装。
api-reverse-engineeringcustom-componenthacshome-assistanthome-automationiotneteasenetease-intelligentopenapipythonrobot-vacuumsmart-homevacuum
Readme
AGPL-3.0
117 MiB
0 Stars
1 Watchers
0 Forks
Languages
Python
99.9%
Shell
0.1%