Files
story/docs/mini-auto-ble.md
T

32 lines
2.4 KiB
Markdown
Raw Normal View History

# 小程序直连与自动蓝牙配网
小程序目录:`C:\Users\19926\WeChatProjects\peibanzhushou`,AppID `wxfead7715305e1115`。
开发后端:`https://121.41.46.238`。使用已有服务器,不使用云开发。
## 用户操作
1. 登录家庭账号,打开设备 → 添加设备。
2. 长按设备屏幕底部 3 秒,搜索并选择 EchoEar。
3. 输入 2.4 GHz Wi-Fi 名称、密码,点击绑定设备。
4. 按设备屏幕提示轻点确认,等待绑定完成。
不再要求用户输入设备编号、标签配网密码或点击“验证设备身份”。单个使用者自动选择;多个使用者时选择归属。
管理账号可以登录查看管理数据,但不能冒用家庭身份绑定设备。
## 实现
原生登录接口见 `openapi/mini.yaml`。手机号密码和验证码沿用原账号体系;短期令牌由服务器签发并验证,存储中不保留密码。网页 Cookie/CSRF 不变。
BLE 服务和原有 20 字节分片不变:帧为 type:uint8 + length:uint16LE + payload。
新增 type=2 自动连接引导帧;该帧只能作为当前连接的首条请求,且只允许一次。type=0 为原 Security2 握手,type=1 为加密业务 JSON。
引导请求只有 `client_nonce`(安全随机16字节,无填充Base64URL)。设备返回 `device_id,model,key_version,client_nonce,server_nonce,proof`,其中 `server_nonce` 同样为随机16字节。
令 T 为五行 `device_id\nmodel\nkey_version\nclient_nonce\nserver_nonce`,无末尾换行。
proof = HMAC-SHA256(factory_key, "BLE-PROOF1\n" + T),小写十六进制。
session_password = HMAC-SHA256(factory_key, "BLE-PASS1\n" + T),小写十六进制。
服务器核验设备证明和当前家庭权限,通过 HTTPS 返回本次连接的 session_password;设备本地生成对应 SRP salt/verifier。小程序自动完成 Security2。密码不经过明文蓝牙,工厂密钥从不离开设备和后端。
随后自动 get_info,再发送加密的 `cmd:configure,wifi_ssid,wifi_password,bind_token`。平台账号密码绝不发送给设备。设备实体确认、DEVREQ1 签名绑定、持久化与重试保持原实现。云端成功不等于语音服务已开通。
无备案域名期间仅用于开发联调:微信开发者工具关闭域名校验,iPhone 使用真机调试;不能据此视为正式上线可用。正式发布仍需配置合法 HTTPS 域名及微信隐私声明。