Files
brewpi/sude/sud_0010.json
T
jensandClaude Sonnet 4.6 5ccfcef679 Add explicit initial grain_mass/water_mass to the Sud doc
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
2026-06-22 20:19:25 +02:00

111 lines
1.8 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,
"temperature": 0,
"ramp": {
"rate": 1.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ür Einmaischen",
"temperature": 57,
"ramp": {
"rate": 1.5,
"stirrer": {
"speed": 75
}
}
},
{
"descr": "Einmaischen einfüllen",
"user_message": "Bitte Malz einfüllen und bestätigen",
"user_wait_for_continue": true,
"hold": {
"stirrer": {
"speed": 0
}
}
},
{
"descr": "Einmaischen Rast",
"hold": {
"duration": 20
}
},
{
"descr": "Glucose-Rast",
"temperature": 63,
"ramp": {
"rate": 1.0
},
"hold": {
"duration": 40,
"stirrer": {
"speed": 20,
"interval_time": 90,
"on_ratio": 0.8
}
}
},
{
"descr": "Verzuckerungs-Rast",
"temperature": 72,
"ramp": {
"rate": 1.0
},
"hold": {
"duration": 30,
"stirrer": {
"speed": 35,
"interval_time": 120
}
}
},
{
"water_mass": 20,
"descr": "Abmaischen",
"user_message": "Quittieren zum Abmaischen",
"user_wait_for_continue": true,
"temperature": 76,
"ramp": {
"rate": 1.0
},
"hold": {
"duration": 30,
"stirrer": {
"speed": 50
}
}
}
]
}