Files
story/docs/device-reconnect-20260930.md
T
Codex Local bf1233d5df
ci / verify (push) Canceled after 0s
feat: expand companion platform, device controls, and memoir workflows
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
2026-10-08 10:06:44 +08:00

43 lines
5.0 KiB
Markdown

# EchoEar 重新联网与配网检查
日期:2026-09-30。当前小程序:`C:\Users\19926\WeChatProjects\voicelink`。
## 出门后更换网络
1. 准备有互联网的 2.4 GHz WPA2 Wi-Fi,或手机的 2.4 GHz 热点。热点和路由器密码需 8–63 位可打印 ASCII;设备不支持本流程下的开放网络、需要网页认证的公共 Wi-Fi 或仅 5 GHz 网络。
2. 长按**设备触摸屏底部中央 3 秒**,看到蓝牙配网提示后松手。固件触摸区域为 x=60–300、y=280–335;这是屏幕操作,不是电源键。语音未就绪时双击也能开启,语音就绪时双击会发起聊天,因此界面统一提示长按。
3. 登录原来的小程序账号,在“设备 → 设备管理 → 重新配网”打开操作页。开启手机蓝牙和微信蓝牙权限,搜索并选择该设备;当前固件广播名称为 `vl-ECHOEAR-S3-xxxxxxxx`,这台 COM6 为 `vl-ECHOEAR-S3-26091601`。
4. 填新 Wi-Fi 名称和密码,发送后在 **60 秒内轻点设备屏幕确认**。`received` 仅表示收到了信息。
5. 等小程序显示 `Wi-Fi 已更新` / 设备状态 `success`,设备约 15 秒后重启。仅修改 Wi-Fi 时蓝牙断开不能单独作为成功证据;应回设备页确认实时在线及固件版本。
已绑定设备发送空 `bind_token`,设备调用只读 `/api/v1/device/ble-state` 核对仍有有效绑定,再保存新 Wi-Fi。不会解绑、创建新归属、删除历史聊天或清除工厂身份。检查前不要使用“恢复出厂”或“解除绑定”操作。
## 自动恢复规则
| 场景 | 当前行为 |
| --- | --- |
| 正常运行时 Wi-Fi 短暂掉线 | 快速重连 5 次,随后每 10 秒继续尝试;取得 IP 后清掉失败标记和重试计数。 |
| 开机旧 Wi-Fi 不可用,且有 BLE 工厂身份 | 正常联网等待最多 30 秒(扫描另有耗时)后,记录配网请求并重启进入 BLE;不会回到旧的 192.168.4.1 热点流程。 |
| 已完成 v2 配网,手动/自动进入 BLE 后未确认新任务 | 5 分钟窗口结束停止广播;检查没有持久化待执行任务后清配网请求,重启连接旧 Wi-Fi。旧 Wi-Fi 仍不可用则再次进入 BLE。 |
| 已收到新 Wi-Fi,但 60 秒内没有轻点确认 | 标记确认超时,可重新发送;窗口结束后可按上行规则回到旧 Wi-Fi。 |
| 已实体确认并持久化,Wi-Fi/平台调用仍处理中 | 保留任务继续恢复/重试;窗口结束不会清除已确认操作或绑定凭据。 |
| 首次配网,没有完成记录或保存的旧 Wi-Fi | 窗口结束后不会凭空恢复网络;长按底部中央 3 秒重新开启。 |
| 传统设备没有 BLE 工厂身份 | 保留原有 Wi-Fi 热点配网页兼容流程。 |
已确认任务在平台超时、429 或服务器异常时保留相同任务继续重试。处于 `binding` 时不要把断线当成功;如果新网络没有互联网,应先恢复该网络的互联网连接。当前任务没有通用取消入口。
## 本次修复与验证
- 修复普通运行断网重试耗尽后永久离线;恢复 IP 清除过期失败状态。
- 修复已完成 BLE 配网的设备去新地点开机时落入旧热点配网页,改成与小程序一致的 BLE 流程。
- 修复 BLE 超时后一直留在配网模式,导致保存的原网络无法恢复;关闭广告只做一次,避免每秒重复调用 stop。
- 修复确认过期后 `received` 状态吞掉短触摸,造成窗口到期无法双击重开的情况。
- 修复 BLE 服务初始化失败后误继续普通 Wi-Fi 初始化,避免两个模块重复持有 STA。
- 网页与当前小程序提示改成真实可用的屏幕底部中央长按入口。
- 新测试 `tests/network-reconnect-host.cjs` 编译完整生产 `network.c`,覆盖连续 25 次重连、BSSID 回退、延迟回调、IP 恢复、驱动停止防护、BLE/传统 AP 启动分流、旧凭据保留和存储失败。
- 新测试 `tests/ble-timeout-host.cjs` 运行生产确认/超时恢复函数,覆盖无人确认后回旧 Wi-Fi、持久化任务保护、首次配网保护、存储失败、处理中状态及仅重启一次。
- 上述真实 C 测试与原有 plaintext endpoint、22 项 BLE Wi-Fi 生命周期测试,在隔离 `/tmp` 内经 GCC AddressSanitizer / UndefinedBehaviorSanitizer 通过。
- 当前 voicelink 小程序家庭端微信一键登录改造后 140 项测试通过;9 个原生页面、事件处理、路由以及 WXML/WXSS 编译通过。源代码已修改,本次未上传发布小程序。
这些测试验证代码行为;本机现已通过真实无线 OTA 运行 `controls.22`,实物自动恢复保存的 Wi-Fi 并实时在线。接收容量优化仅将运行时动态 Wi-Fi 接收缓存改为 32、TCP 接收队列改为 24,原配网和重连规则保持不变,最终版本的联网/BLE 回归再次通过。真实手机热点切换仍未验收;真实 OTA 结果以 [远程升级记录](device-remote-ota-20260930.md) 为准。重新配网需要手机在设备附近通过蓝牙操作;云端“重新配网”入口不会远程打开蓝牙,也不能向离线设备直接写入陌生 Wi-Fi。