Files
brewpi/components/plant/TODO.md
T
jensandClaude Sonnet 4.6 6711ab2200 Remove leftover debug prints from Pot.process()
The unconditional p_loss/theta_amb/temp prints (left over from the
heat-loss-units fix) ran every tick, spamming stdout in both the
server and every demo script. Drop them and check off the matching
TODO.md item.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 17:03:48 +02:00

2.5 KiB

components/plant design backlog

Findings from reviewing pot.py's water-bath model against real-plant behavior (sim/real control mismatch reported by user), refreshed against the current delay-line rewrite of Pot.

  • Heat-loss term has wrong units. Fixed by the Pot rewrite: process() now computes p_loss = self.L * self.M * (self.temp - self.theta_amb) in Watts and applies `self.temp += (self.delay.get()

    • p_loss) / (self.M * self.C) * self.dt— the same/(M*C)normalization for both the gain and loss terms, instead of the old mismatchedleak = 1/self.M * self.L * (...)/ self.theta_amb`.
  • Thermal lag modeled as single-pole lag, not transport delay. Fixed: Pot no longer uses HeatDiffusion's alpha=dt/Td exponential smoothing (that module was deleted). It now delays the input power through plant/delay.py's Delay (true dead time) before integrating it, matching what this item recommended.

  • kn is loaded but never applied. Resolved differently than originally proposed: kn was removed from Pot entirely rather than wired up as plant-side measurement noise. Sensor noise is now modeled one layer up, in TempSensorSim (temp_offset/variance, wired from brewpi.py's TempSensorFactory.create(..., temp_offset= -0.15, variance=0.01)), not in the plant model. Note: config.json.templ and config.json.sim still carry stale Model.kn/Plant.kn keys that nothing reads anymore — harmless but worth deleting (see components/pid/TODO.md's config-validation item).

  • theta_amb is hardcoded, not configured. Still true — brewpi.py: pot = Pot(DT, pot_params, 20) passes a literal 20 instead of reading it from config or a live ambient sensor. Real ambient temperature drifts and is never modeled as a disturbance, so the controller's robustness to it is untested.

  • No actuator/process realism. Partially improved: process() now clamps self.temp to min(100, ...) (won't simulate past boiling), but there's still no heater power saturation enforced inside Pot itself (handled ad hoc in demo harnesses), no evaporation/lid heat loss, and no varying thermal mass M as volume changes (e.g. boil-off, adding water/grain) — M is a fixed constant for the whole simulation.

  • Debug print()s left in Pot.process(). Fixed: the unconditional p_loss/theta_amb/temp prints (leftover from the heat-loss-units fix) were removed.