diff --git a/components/sud.py b/components/sud.py index 968036a..993a314 100644 --- a/components/sud.py +++ b/components/sud.py @@ -59,8 +59,17 @@ def _build_step(number, defaults, raw_step): EMPTY_SUD = { 'Name': '', 'Description': '', - 'pot_mass': 0, - 'pot_material': None, + # pot_mass/pot_material are the physical kettle's own properties, not + # really per-recipe (every sude/*.json so far uses this exact pot) - + # defaulting to 0/None here used to make derive_plant_params() come out + # with a zero-mass plant (a ZeroDivisionError in Pot.process() waiting + # to happen) for as long as no Sud had ever been loaded yet. Matching + # the real kettle here instead lets server/brewpi.py seed the Pot with + # a physically sane default at startup, so its simulation actually + # runs - and a real Sud's own doc still overrides these the moment one + # is loaded (see SudTask.apply_plant_params()). + 'pot_mass': 5.96, + 'pot_material': "Edelstahl 18/10", # Pot energy loss coefficient [W/(kg*K)] and transport propagation # delay [s] - see derive_plant_params(). Defaults match the generic # values brewpi.py used to hardcode for every brew alike. diff --git a/server/brewpi.py b/server/brewpi.py index 8d93b5e..34f24d0 100755 --- a/server/brewpi.py +++ b/server/brewpi.py @@ -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