Run the Pot simulation from server startup, not just once a Sud loads
PotTask.on_process() only calls Pot.process() once Pot.is_configured() - which required plant params (M/C/L/Td) that, by design, only ever came from a Sud's own doc via SudTask.apply_plant_params(). So with no Sud loaded (or the temp controller disabled), the simulated Pot just sat inert: manually driving the heater never moved its temperature at all. EMPTY_SUD's pot_mass/pot_material defaulted to 0/None, which would have made a zero-mass plant (a ZeroDivisionError in Pot.process()) - they're actually the physical kettle's own properties, not really per-recipe (every sude/*.json so far uses the same pot), so default them to that real kettle's values instead. server/brewpi.py now seeds the Pot with derive_plant_params() from the not-yet-loaded Sud right away, same as ambient temperature already was - a real Sud's own doc still overrides these the moment one is loaded.
This commit is contained in:
+7
-8
@@ -69,16 +69,15 @@ if __name__ == '__main__':
|
||||
sensor_task = TempSensorTask(sensor, DT_TASK, dispatcher.msgio_get("Sensor"))
|
||||
taskmgr.add(sensor_task)
|
||||
|
||||
# Plant - deliberately left without plant params (M/C/L/Td) here: a
|
||||
# Sud's own doc is the only source for those now (see
|
||||
# tasks/sud.py's SudTask.apply_plant_params(), called immediately on
|
||||
# Load), so the plant stays inert (Pot.is_configured() is False,
|
||||
# PotTask skips process() - see there) until one actually is. Ambient
|
||||
# is independent of any Sud (a global setting, changeable live via
|
||||
# the System channel - see on_system_recv() below), so it's set
|
||||
# right away regardless.
|
||||
# Plant - seeded with the not-yet-loaded sud's own (now physically
|
||||
# sane, see Sud.EMPTY_SUD) plant params right away, same as ambient
|
||||
# below, so the simulated Pot already runs - manual heater
|
||||
# power/Sud disabled or not - instead of sitting inert until a real
|
||||
# Sud loads. A real Sud's own doc still overrides these the moment
|
||||
# one is loaded (see tasks/sud.py's SudTask.apply_plant_params()).
|
||||
pot = Pot(DT)
|
||||
pot.set_ambient_temperature(theta_amb)
|
||||
pot.set_plant_params(sud.derive_plant_params(sud.grain_mass, sud.water_mass))
|
||||
taskmgr.add(PotTask(pot, DT_TASK, dispatcher.msgio_get("Pot")))
|
||||
|
||||
# Heater
|
||||
|
||||
Reference in New Issue
Block a user