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

  1. Roasters → Simulator → On (for the drum, Simulated drum → On). Or start the server with ROASTWARDEN_VIRTUAL_ROASTER=1 or ROASTWARDEN_VIRTUAL_DRUM=1.
  2. Pick virtual_roaster (or virtual_drum) as the roaster, in the header or in the Roast page's Next step.
  3. 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.
  4. 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)
Takesheater, fan, setpoint, mode, PID gains, feedforward, lease, emergency stopburner, air, drum speed, emergency stop
Safe statebelow 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 roastBT follows the air with a 60 s lag when beans are loadedpreheated 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 asfixed: fluid bed, full controlwritten 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}).