Sud now parses top-level grain_mass/water_mass (sibling to pot_mass/ pot_material/L/Td, defaulting to 0/0) - what's actually in the pot before the brew starts, as opposed to default.step's grain_mass/water_mass, which is just inert template filler. All sude/*.json docs gain explicit values matching what their first step already resolved to. tasks/sud.py's apply_plant_params() now takes grain_mass/water_mass directly instead of a step dict: on_step_changed() still passes the active step's own (these vary as malt goes in/water boils off), but the Load handler now reads Sud.grain_mass/water_mass directly instead of parsing schedule[0]. The GUI's status-line mass preview (shown immediately on Load, before Start) does the same. Also fixes a latent bug found along the way: _continue_forecast_after_confirm()'s reconstructed sub-doc was missing L/Td/grain_mass/water_mass entirely, silently falling back to generic defaults instead of the real Sud's own values - invisible only because every current sude/*.json happens to use those same defaults. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DkkuG48uHFCGKe6dPSERFk
120 lines
1.9 KiB
JSON
120 lines
1.9 KiB
JSON
{
|
|
"Name": "Sud-0010",
|
|
"Description": "Rotfraenkisch, Dunkles Lager",
|
|
"pot_mass": 5.96,
|
|
"pot_material": "Edelstahl 18/10",
|
|
"L": 0.2,
|
|
"Td": 30,
|
|
"grain_mass": 0,
|
|
"water_mass": 22,
|
|
"default": {
|
|
"step": {
|
|
"descr": "Put description here",
|
|
"user_message": "Put user message here",
|
|
"user_wait_for_continue": false,
|
|
"grain_mass": 5.21,
|
|
"water_mass": 22,
|
|
"ramp": {
|
|
"rate": 1.0,
|
|
"temp": 0,
|
|
"stirrer": {
|
|
"speed": 50,
|
|
"interval_time": 0,
|
|
"on_ratio": 1.0
|
|
}
|
|
},
|
|
"hold": {
|
|
"duration": 0,
|
|
"stirrer": {
|
|
"speed": 30,
|
|
"interval_time": 60,
|
|
"on_ratio": 0.5
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"steps": [
|
|
{
|
|
"grain_mass": 0,
|
|
"descr": "Heizen f\u00fcr Einmaischen",
|
|
"ramp": {
|
|
"rate": 1.8,
|
|
"temp": 57,
|
|
"stirrer": {
|
|
"speed": 75
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"descr": "Einmaischen einf\u00fcllen",
|
|
"user_message": "Bitte Malz einf\u00fcllen und best\u00e4tigen",
|
|
"user_wait_for_continue": true,
|
|
"hold": {
|
|
"stirrer": {
|
|
"speed": 0
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"descr": "Einmaischen Rast",
|
|
"hold": {
|
|
"duration": 2000
|
|
}
|
|
},
|
|
{
|
|
"descr": "Heizen Glucose-Rast",
|
|
"ramp": {
|
|
"rate": 1.0,
|
|
"temp": 63
|
|
}
|
|
},
|
|
{
|
|
"descr": "Halten Glucose-Rast",
|
|
"hold": {
|
|
"duration": 4000,
|
|
"stirrer": {
|
|
"speed": 20,
|
|
"interval_time": 90,
|
|
"on_ratio": 0.8
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"descr": "Heizen Verzuckerungs-Rast",
|
|
"ramp": {
|
|
"rate": 1.0,
|
|
"temp": 72
|
|
}
|
|
},
|
|
{
|
|
"descr": "Halten Verzuckerungs-Rast",
|
|
"hold": {
|
|
"duration": 3000,
|
|
"stirrer": {
|
|
"speed": 35,
|
|
"interval_time": 120
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"water_mass": 20,
|
|
"descr": "Heizen Abmaischen",
|
|
"ramp": {
|
|
"rate": 1.0,
|
|
"temp": 76
|
|
}
|
|
},
|
|
{
|
|
"water_mass": 20,
|
|
"descr": "Halten Abmaischen",
|
|
"user_message": "Quittieren zum Abmaischen",
|
|
"user_wait_for_continue": true,
|
|
"hold": {
|
|
"duration": 300,
|
|
"stirrer": {
|
|
"speed": 50
|
|
}
|
|
}
|
|
}
|
|
]
|
|
} |