固件 0.1.19~0.1.21-c5:配网热点(SoftAP + 网页)、风扇 40 ℃ 以下断电
- 0.1.19 配网热点:没配 WiFi / 连续 60 s 连不上时自己开 SoftAP,192.168.4.1 网页里加删 WiFi、改 MQTT; 配置拼成 wifi / mqtt 命令走唯一的命令处理器(新链路号 3 CMD_LINK_AP),MQTT 仍不收配置命令 - 0.1.20 热点口令固定 88888888 - 0.1.21 风扇:板温 >=40 ℃ 上电、<38 ℃ 断电,40~65 ℃ 线性调速;fan 命令加可选 sec(下限到点自动交回) - mqtt 命令加 keep_pass;net 回应加 ap;status 的 fan 加 left - 新增 test_prov(13 例),test_t_thermal +3;29 ctest 全绿 Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -110,7 +110,7 @@ USB 通断」这些原本要人手做的动作全部电气化,交给板上 MCU
|
||||
| **FR-7** | 对外只用**一根 USB 线**,五路下行由板载 Hub 分 | 必须 | §15.1 |
|
||||
| **FR-8** | 每路可实时读取**输出电压与电流**;整板可读取**输入电压与电流** | 必须 | §8.2 |
|
||||
| **FR-9** | 上报每路 eFuse 故障、电源好(PG)等状态 | 必须 | §8.2 |
|
||||
| **FR-10** | 主动风冷,风扇转速可调、可检测「有风扇停转」 | 必须 | §22.6 |
|
||||
| **FR-10** | 主动风冷,风扇转速可调、可检测「有风扇停转」。**固件 0.1.21(2026-10-06 用户定)**:板温(两路 NTC 取高)低于 40 ℃ 风扇断电(≥40 ℃ 开、<38 ℃ 关),40→65 ℃ 按 30 %→100 % 线性调速;温度读不到或上位机给了下限时一律开着。`fan` 命令的下限只抬不压,可带 `sec` 到点自动交回(rack 网页与 AppTask「机架」页都能发) | 必须 | §22.6 |
|
||||
| **FR-11** | 记录过流 / 故障事件(哪一路、何时、多大电流) | 高 | §8.3 |
|
||||
| **FR-12** | 模拟电量曲线,避免系统因「电量永远 100%」触发异常逻辑 | 中(可选) | §8.3 |
|
||||
| **FR-13** | 板级温度监控,超阈值先降流再关路 | 高 | §8.3 |
|
||||
@@ -234,7 +234,7 @@ USB 通断」这些原本要人手做的动作全部电气化,交给板上 MCU
|
||||
| **IF-12** | 上游 USB | 载板 USB-C(UFP),一根线接电脑 |
|
||||
| **IF-13** | 调试 USB | 下板 USB-C,ESP32-S3 原生 USB-Serial-JTAG;**VBUS 故意不接**(物理上杜绝反灌 3V3)。**同一个口兼作 SW-12 的兜底命令链路**(原生 USB-Serial-JTAG 本身就是 CDC-ACM,不影响 esptool 下载),分帧要求见 §10.8 |
|
||||
| **IF-14** | 风扇 | 5 × KF2510-3A(+12 V / 回流 / TACH) |
|
||||
| **IF-19** | 控制网络 | **WiFi(ESP32-S3 板载,无需增加器件)**,SW-12 的常态命令链路。凭据与服务端地址存 NVS,**不编译进固件** —— 新板上架时先用 IF-13 的 USB 链路配网 |
|
||||
| **IF-19** | 控制网络 | **WiFi(ESP32-S3 板载,无需增加器件)**,SW-12 的常态命令链路。凭据与服务端地址存 NVS,**不编译进固件** —— 新板上架时用**配网热点**(固件 0.1.19,2026-10-06:没配网 / 连续 60 s 连不上 WiFi 时板子自己开 SoftAP `PhoneRail-<id 末 6 位>`,手机连上在 192.168.4.1 网页里填)或 IF-13 的 USB 链路配网 |
|
||||
|
||||
> ⚠️ **IF-12 与 IF-13 是两个长得一样的 USB-C,插错的现象是「adb 整排不见」**,
|
||||
> 很难联想到是插错口。**丝印必须写清楚**,建议用不同颜色座子或在外壳上做标记。
|
||||
@@ -765,6 +765,7 @@ ESP32.KEY_SER → U21 → U22 → U33 (先移入的字节落在链尾 U
|
||||
|
||||
> ⚠️ **别把 WiFi 凭据和 MQTT 地址编译进固件。** 放 NVS,用 USB 链路配置 ——
|
||||
> 这正好是兜底链路的第二个用途:新板子上架时先插 USB 配网。
|
||||
> (0.1.19 起多一条不用插线的路:配网热点,见下面「配网热点」那一条。)
|
||||
|
||||
命令语义与链路无关,两条链路完全一致:
|
||||
|
||||
@@ -842,8 +843,20 @@ base = `phonerail/<id>`,id = 板子 STA MAC 的 12 位小写十六进制(板
|
||||
| `<base>/tele` | 板 → 服务器 | 0 | 否 | 周期遥测 = 一条 status 回应(无 seq),默认 1 s(`tele_ms` 200~60000) |
|
||||
| `<base>/state` | 板 → 服务器 | 1 | 是 | `{"online":true,"fw":..,"ip":..}`;掉线由遗嘱改成 `{"online":false}`(keepalive 15 s) |
|
||||
|
||||
- **配网(C1)**:`wifi`(ssid / pass)与 `mqtt`(uri / user / pass / tele_ms)两条命令,存 NVS,**只收 USB**(经 WiFi 来回 `link` 并记事件)。
|
||||
- **配网(C1)**:`wifi`(ssid / pass)与 `mqtt`(uri / user / pass / tele_ms)两条命令,存 NVS,**只收 USB 与配网热点**(经 MQTT 来回 `link` 并记事件)。
|
||||
`net` 查网络状态,**永不回显密码**(只报 `pass_set` / `mpass_set`);含 `wifi_reason`(最近一次断开原因码)。
|
||||
`mqtt` 可带 `"keep_pass":true` = 口令沿用已存的(与 `pass` 同时给回 `arg`)。
|
||||
- **配网热点(0.1.19,2026-10-06 用户定「SoftAP + 网页,连 WiFi 失败后默认回到配网模式」)**,`firmware/main/prov.h`:
|
||||
- 开:一组 WiFi 都没配 ⇒ 立刻;配了但**连续 60 s 没拿到地址** ⇒ 开。开着期间 STA 照常在后台重连,**热点不设超时**。
|
||||
- 关:STA 连上 ⇒ 热点上没人立刻关,有人再留 60 s(让网页看到结果)。
|
||||
- 热点 `PhoneRail-<id 末 6 位>`,WPA2,口令**所有板子固定 `88888888`**(0.1.20,2026-10-06 用户定;0.1.19 曾是每板随机),
|
||||
`net` 回应的 `"ap":{"on","why","sta","ssid","pass"}` 里也报(两条链路都报)。
|
||||
- 网页 `http://192.168.4.1/`(DNS 劫持 ⇒ 手机连上自动弹出):看状态、扫描、加 / 删 WiFi、改 MQTT。
|
||||
提交的内容拼成 `wifi` / `mqtt` 命令走**同一个命令处理器**(链路号 3 `CMD_LINK_AP`),这条链路拼不出别的命令;
|
||||
网页同样不回显任何已存口令。只应答热点那一侧来的连接。
|
||||
- 有人在网页上操作时 STA 重连间隔不短于 20 s(每次重连要离开热点信道扫一圈);只放慢、不停。
|
||||
- **热点不碰任何输出**(同「失联不动作」)。代价:路由器短暂重启也会让热点冒出来约一分钟;
|
||||
口令是公开的固定值 ⇒ 在无线范围内的任何人,都能在板子没网时把它指向别的 broker(等同拿到这块板)。
|
||||
- uri 收 `mqtts://`(TLS,CA 编在固件:`firmware/main/certs/evse_ca.pem`)或 `mqtt://`(只该用在局域网)。
|
||||
- **broker = home 服务器现有 mosquitto 的 8883(TLS)**,与 evse 共用:板子用户名 = id,ACL 用 `pattern … phonerail/%u/…`
|
||||
只许碰自己的四个 topic;后端用户 `phonerail-backend` 可读写 `phonerail/#`。口令在服务器 `/root/phonerail/mqtt.env`(仅 root)。
|
||||
|
||||
在新工单中引用
屏蔽一个用户