piuppi/localScenic

GitHub: piuppi/localScenic

通过逆向工程涂鸦OEM协议,为Proscenic 850T扫地机器人构建无云端依赖的纯局域网实时控制方案。

Stars: 0 | Forks: 0

localScenic 850T

Proscenic 扫地机器人的实时局域网控制方案。无云端依赖。零延迟。

通过逆向工程破解 Proscenic 850T 扫地机器人,绕过云端依赖,修复失效的遥控器功能。

![localScenic 机器人](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7c2a4c1441041443.png) ## 📖 背景 Proscenic 850T 使用 **Tuya OEM** 作为其 IoT 后端。官方 App 的虚拟遥控器存在一个结构性的设计缺陷:每个方向指令都是同步处理的,这意味着你必须等待机器人完成当前动作后才能发出下一个指令。根本无法进行实时控制。 本项目允许你**完全通过局域网**控制扫地机器人,绕过 Proscenic 云端——无需账号,无需互联网连接,也不会向第三方服务器发送任何数据。 完整的逆向工程过程(Frida、LDPlayer、localKey 提取、DP 映射)已记录在 Medium 的配套文章中: 📄 **[阅读文章 →](https://medium.com/@gianluca.palma)** ## ✨ 功能 - **实时方向遥控** — 键盘方向键 + 鼠标/触摸控制,`mousedown` 发送指令,`mouseup` 发送停止。零延迟。 - **智能 START/STOP 按钮** — 空闲时发送 `DP 25 = smart`,工作中发送 `DP 33 = false` - **清扫模式选择** — 自动、沿边、重点、拖地(未检测到水箱时自动锁定) - **吸力控制** — ECO / Normal / Strong,并高亮当前档位 - **水量控制** — 低 / 中 / 高(仅在安装拖地水箱时可见) - **配件磨损进度条** — 滤网、边刷、主刷、传感器,支持一键重置 - **故障横幅** — 动态红色横幅,将 DP 11 的位图错误解码为纯文本 - **设备信息气泡** — 悬停显示 IP、Device ID、Product Key、Serial Number - **零云端依赖** — 直接通过局域网通信,无需互联网 - **自动轮询** — 每 5 秒更新一次状态 ## 📸 预览 ![localScenic 网页应用](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/83b26f2be6041444.png) ## 🔧 环境要求 - Python 3.8+ - pip 依赖包:`flask`、`tinytuya`、`python-dotenv` - 机器人与服务器在同一局域网内 - 设备的 `devId`、`localKey` 和局域网 IP(参见[配置说明](#configuration)) ``` pip install flask tinytuya python-dotenv ``` ## 🚀 安装 ``` # Clone the repo git clone https://github.com/piuppi/localScenic.git cd localScenic # Install dependencies pip install flask tinytuya python-dotenv # Edit configuration nano .env # set DEVICE_ID, LOCAL_KEY, IP # Run python app.py ``` 在浏览器中打开 `http://localhost:5000` 为了让你局域网内的其他设备也能访问,服务器已默认绑定到 `0.0.0.0:5000`。 ## ⚙️ 配置 在项目根目录创建一个 `.env` 文件: ``` device_id="your_device_id_here" local_key="your_local_key_here" device_ip="10.10.x.x" ``` ### 如何获取 devId 和 localKey `devId` 和 `localKey` 是与机器人进行局域网通信所需的设备专属密钥。你无法通过 Proscenic 官方 App 或 Tuya 开发者门户获取它们(Proscenic 使用了独立的 OEM 云端)。 一种获取方法是在已 root 的 Android 模拟器上,使用 **Frida** 在运行时从 App 中提取它们;或者除非我们将机器人从 Proscenic App 中解绑,并通过 Smart Life (Tuya) 重新配对(但我没有选择这种做法)。 📄 完整的提取指南已在[配套 Medium 文章](https://medium.com/@gianluca.palma)中详细介绍。 ## 📡 数据点 (DP) 参考 Proscenic 850T 的完整 DP 映射,通过对官方 App 进行逆向工程获取。 ### 控制 DP | DP | 名称 | 值 | 访问权限 | |----|------|--------|--------| | 25 | 清扫模式 | `smart` · `wallfollow` · `sprial` · `mop` · `chargego` | rw | | 26 | 方向(遥控) | `forward` · `backward` · `turnleft` · `turnright` · `stop` | rw | | 27 | 吸力 | `ECO` · `normal` · `strong` | rw | | 33 | 开始 / 停止 | `true` = 工作中 · `false` = 停止 | rw | | 50 | 寻找机器人(蜂鸣) | `true` | rw | | 51 | 灯光 | `true` · `false` | rw | | 52 | 重启设备 | `true` | rw | | 53 | 风机开/关 | `true` · `false` | rw | | 60 | 水流量 | `small` · `medium` · `Big` | rw | ### 状态 DP | DP | 名称 | 值 | 访问权限 | |----|------|--------|--------| | 11 | 故障位图 | `0`=正常 · `16`=水箱缺失 · `32`=地面传感器 · ... | ro | | 38 | 当前状态 | `0`=待机 · `1`=清扫中 · `2`=拖地中 · `3`=沿边 · `4`=回充 · `5`=充电中 · `6`=重点清扫 · `7`=已暂停 · `9`=遥控 | ro | | 39 | 电池电量 | 0–100 % | ro | | 40 | 清扫记录 | 字符串 (时间戳 + 面积 + id) | ro | | 41 | 已清扫面积 | 数值 ÷ 10 = m² | ro | | 42 | 清扫时间 | 分钟 | ro | | 44 | 传感器寿命 | 0–30 小时 | ro | | 45 | 滤网寿命 | 0–150 小时 | ro | | 47 | 边刷寿命 | 0–200 小时 | ro | | 48 | 主刷寿命 | 0–300 小时 | ro | | 49 | 水箱类型 | `sweep` = 尘盒 · `mop` = 水箱 | ro | | 58 | 序列号 | 字符串 | ro | ### 配件重置 DP | DP | 名称 | 值 | |----|------|-------| | 54 | 重置传感器 | `true` | | 55 | 重置滤网 | `true` | | 56 | 重置边刷 | `true` | | 57 | 重置主刷 | `true` | ## 📁 项目结构 ``` localScenic/ ├── app.py # Flask backend ├── templates/ │ └── index.html # Frontend (single file, no JS framework) └── README.md ``` ## ⚖️ 法律免责声明 本项目是一个独立的社区驱动项目,与 Proscenic 或 Tuya **没有任何关联、认可或联系**。 所有的逆向工程均在作者私人所有的硬件和私有局域网上进行,目的仅为了实现软件互操作性。 未在未经授权的情况下访问任何 Proscenic 或 Tuya 服务器。未提取或使用任何属于其他用户的凭据。 **使用本软件的风险由您自行承担。** 作者不对任何设备损坏、网络故障,或违反当地法律及服务条款的行为负责。 ## 📜 许可证 MIT — 随你怎么用,但要是你的机器人把猫给吸了,可别怪我。
标签:AES-128加密, Docker支持, DP映射, Flask, Frida, IoT控制, MIT许可, Proscenic 850T, Python, TinyTuya, 云资产清单, 协议分析, 去云端化, 后端开发, 实时控制, 局域网控制, 无后门, 智能家居, 智能家居自动化, 智能家电, 本地密钥提取, 机器人吸尘器, 权限提升, 涂鸦智能, 逆向工具, 逆向工程, 防御绕过, 零延迟