How it works
Simulated roasters
The virtual fluid bed and the simulated gas drum in the server, for trying control without a roaster.
Two simulated roasters run inside the server, so you can try Roastwarden without beans or a roaster: rehearse a profile, an alarm set, Profile drive or fan assist, or learn how adding a roaster works. Both are closed loop: the heater and fan you set change what happens (Artisan's simulator replays a recorded roast instead).
virtual_roaster, an electric fluid bed. It speaks Roastwarden's own MQTT and has a PID of its own, like a roaster built for Roastwarden, and always has full control. Its heat model was fitted to a real fluid-bed roaster: at full fan it holds 165 °C on about 88 % heater and tops out near 184 °C.virtual_drum, a gas drum. It speaks a dialect of its own in °F, so it is read through a normal connection with a mapping and a setup, as a stranger's roaster would be. Burner, air and drum speed, an exhaust probe and an inlet channel, and no PID: Profile drive runs the server's loop on it.
Using it
- Roasters → Simulator → On (for the drum, Simulated drum → On). Or start the server
with
ROASTWARDEN_VIRTUAL_ROASTER=1orROASTWARDEN_VIRTUAL_DRUM=1. - Pick
virtual_roaster(orvirtual_drum) as the roaster, in the header or in the Roast page's Next step. - Pick a profile, Start roast, set the fan and switch the heater on, then Charge: on a simulated roaster that also loads cold beans, and BT drops to room temperature. Start Profile drive if the profile should drive it.
- Drop marks DROP and dumps the beans; on the fluid bed the roast sequence also cuts the heater and cools.
The Simulator panel's Charge beans and Dump beans do the same by hand. Both roasters run in real time: replay, alarms and fan assist work on the wall clock, so a simulated roast cannot be sped up.
How they behave
Fluid bed (virtual_roaster) | Gas drum (virtual_drum) | |
|---|---|---|
| Takes | heater, fan, setpoint, mode, PID gains, feedforward, lease, emergency stop | burner, air, drum speed, emergency stop |
| Safe state | below 40 % fan, or heater power off, no heat reaches the element; an expired lease or emergency stop turns the heater off (emergency stop also runs the fan at 100 %) | emergency stop, or the server gone for 10 s with the burner on: burner 0, air 100 %, drum still turning |
| A roast | BT follows the air with a 60 s lag when beans are loaded | preheated at 60 % burner the probe reads about 218 °C; charged and held there, the turning point is near 1:30 and first crack near 9:20, the exhaust above BT |
| Set up as | fixed: fluid bed, full control | written the first time it is switched on: gas drum, control full, Burner 0–100 % in 5 % steps, Air 0–100 %, Drum 40–70 %, the channel Inlet. What you change afterwards stays |
The fluid bed's own firmware autotune command is not simulated; the server's autotune runs on it as on any roaster. The drum's model is not fitted to a real machine; it only behaves like one. A simulated roaster never holds up a server update.
There is no roast command for the simulators: an agent switches them with
roast api PUT /api/virtual-roaster --body '{"enabled": true}' (or {"drum": true}).