Redesign Sud schedule format: separate ramp/hold keys with defaults

Steps now declare a "ramp" or "hold" key instead of a flat "type", and
unspecified fields (including nested stirrer settings) fall back to a
new top-level default.step structure. Stirrer config is now
interval_time/on_ratio, mapping directly onto AStirrer's cycle
time/duty cycle instead of separate on/off durations. Update
components/sud.py, tasks/sud.py, the Sud demo, sude/sud_0010.json, and
the README to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgR9tPaSzFkAwRAUyeaaCD
This commit is contained in:
2026-06-20 07:20:52 +02:00
co-authored by Claude Sonnet 4.6
parent 2dcf644bed
commit 123318ac85
5 changed files with 172 additions and 107 deletions
+77 -49
View File
@@ -5,83 +5,111 @@
"pot_material" : "Edelstahl 18/10",
"grain_mass" : 5.21,
"water_mass" : 22,
"schedule":
"default":
{
"step" : {
"descr": "Put description here",
"user_message": "Put user message here",
"user_wait_for_continue": false,
"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":
[
{
"type": "heat",
"descr": "Heizen für Einmaischen",
"rate": 1.8,
"temp": 57,
"stirrer_speed": 50,
"stirrer_time_on": 90,
"stirrer_time_off": 0
"ramp": {
"rate": 1.8,
"temp": 57,
"stirrer": {
"speed": 75
}
}
},
{
"type": "hold",
"descr": "Einmaischen einfüllen",
"stirrer_speed": 0,
"user_message": "Bitte Malz einfüllen und bestätigen",
"user_wait_for_continue" : true
"user_wait_for_continue": true,
"hold": {
"stirrer": {
"speed": 0
}
}
},
{
"type": "hold",
"descr": "Einmaischen Rast",
"duration" : 200,
"stirrer_speed": 30,
"stirrer_time_on": 30,
"stirrer_time_off": 30
"hold": {
"duration": 2000
}
},
{
"type": "heat",
"descr": "Heizen Glucose-Rast",
"rate": 1.0,
"temp": 63,
"stirrer_speed": 50,
"stirrer_time_on": 90,
"stirrer_time_off": 0
"ramp": {
"rate": 1.0,
"temp": 63
}
},
{
"type": "hold",
"descr": "Halten Glucose-Rast",
"duration" : 400,
"stirrer_speed": 30,
"stirrer_time_on": 30,
"stirrer_time_off": 30
"hold": {
"duration": 4000,
"stirrer": {
"speed": 20,
"interval_time": 90,
"on_ratio": 0.8
}
}
},
{
"type": "heat",
"descr": "Heizen Verzuckerungs-Rast",
"rate": 1.0,
"temp": 72,
"stirrer_speed": 50,
"stirrer_time_on": 90,
"stirrer_time_off": 0
"ramp": {
"rate": 1.0,
"temp": 72
}
},
{
"type": "hold",
"descr": "Halten Verzuckerungs-Rast",
"duration" : 300,
"stirrer_speed": 30,
"stirrer_time_on": 30,
"stirrer_time_off": 30
"hold": {
"duration": 3000,
"stirrer": {
"speed": 35,
"interval_time": 120
}
}
},
{
"type": "heat",
"descr": "Heizen Abmaischen",
"rate": 1.0,
"temp": 76,
"stirrer_speed": 50,
"stirrer_time_on": 90,
"stirrer_time_off": 0
"ramp": {
"rate": 1.0,
"temp": 76
}
},
{
"type": "hold",
"descr": "Halten Abmaischen",
"duration" : 300,
"stirrer_speed": 30,
"stirrer_time_on": 30,
"stirrer_time_off": 30,
"user_wait_for_continue" : true
"user_message": "Quittieren zum Abmaischen",
"user_wait_for_continue": true,
"hold": {
"duration": 300,
"stirrer": {
"speed": 50
}
}
}
]
}