# Kaliedo Protocol

Kaliedo Roaster Protocol

Quick command reference for Artisan / HiBean serial control

# Format Conventions

Instruction stream uses {\[ as prefix and \]} as suffix.

Data stream uses { as prefix and } as suffix. Responses start with sid (status byte).

All keywords are uppercase. Each command is terminated with a newline (\\n).

Multiple commands can share one {\[ \]} pair, separated by commas — for example: {\[HP 80,FC 60,RC 90\]}

# Connection and Setup

<div align="left" dir="ltr" id="bkmrk-command-description-"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[PI\]}

</td><td>Ping — connection test. Returns {sid}.

</td></tr><tr><td>{\[SC AR\]}

</td><td>Start Artisan session. Returns {sid,SN:xxxxxxxx}.

</td></tr><tr><td>{\[SC CP\]}

</td><td>Start Cropster session. Returns {sid,SN:xxxxxxxx}.

</td></tr><tr><td>{\[CL AR\]}

</td><td>Close Artisan session.

</td></tr><tr><td>{\[CL CP\]}

</td><td>Close Cropster session.

</td></tr><tr><td>{\[TU C\]}

</td><td>Set temperature unit to Celsius.

</td></tr><tr><td>{\[TU F\]}

</td><td>Set temperature unit to Fahrenheit.

</td></tr></tbody></table>

</div># Reading Data

<div align="left" dir="ltr" id="bkmrk-command-description--1"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[RD A0\]}

</td><td>Read main parameters (BT, ET, AT, HP, FC, RC, AH, TS).

</td></tr><tr><td>{\[RD A1\]}

</td><td>Read main parameters plus heating status (adds HS field).

</td></tr></tbody></table>

</div>## Example response (A1)

{0,BT:190.5,ET:185.0,AT:25.0,HP:80,FC:55,RC:90,AH:0,TS:180.0,HS:1}

## Response fields

BT — bean temperature (0-300 °C / 32-572 °F)

ET — drum / environment temperature

AT — ambient temperature

HP — heater power %, step 5

FC — smoke fan speed %, step 5

RC — drum roll speed %, step 10

AH — auto-heat enabled (0 or 1)

TS — target temperature setpoint

HS — heating active (0 or 1, A1 mode only)

# Heat Control

<div align="left" dir="ltr" id="bkmrk-command-description--2"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[HS 0\]}

</td><td>Stop heating.

</td></tr><tr><td>{\[HS 1\]}

</td><td>Start heating.

</td></tr><tr><td>{\[HP n\]}

</td><td>Set heater power n% (step 5, range 0-100).

</td></tr><tr><td>{\[HP UP\]}

</td><td>Step heater up by 5%.

</td></tr><tr><td>{\[HP DW\]}

</td><td>Step heater down by 5%.

</td></tr><tr><td>{\[TS n.n\]}

</td><td>Set target temperature (0-250 °C / 32-482 °F).

</td></tr><tr><td>{\[AH 0\]}

</td><td>Disable auto-heat (manual power mode).

</td></tr><tr><td>{\[AH 1\]}

</td><td>Enable auto-heat (device PID controls heat to TS).

</td></tr></tbody></table>

</div># Fan and Drum

<div align="left" dir="ltr" id="bkmrk-command-description--3"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[FC n\]}

</td><td>Smoke fan n% (step 5, range 0-100).

</td></tr><tr><td>{\[FC UP\]}

</td><td>Step fan up by 5%.

</td></tr><tr><td>{\[FC DW\]}

</td><td>Step fan down by 5%.

</td></tr><tr><td>{\[RC n\]}

</td><td>Drum roll n% (step 10, range 0-100).

</td></tr><tr><td>{\[RC UP\]}

</td><td>Step drum up by 10%.

</td></tr><tr><td>{\[RC DW\]}

</td><td>Step drum down by 10%.

</td></tr></tbody></table>

</div># Cooling

<div align="left" dir="ltr" id="bkmrk-command-description--4"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[CS 0\]}

</td><td>Cooling off.

</td></tr><tr><td>{\[CS 1\]}

</td><td>Cooling on.

</td></tr></tbody></table>

</div># Roast Event Markers

Sends a user-tagged roast event to the device. The device synchronizes the event to its embedded control panel.

<div align="left" dir="ltr" id="bkmrk-command-description--5"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[EV 1\]}

</td><td>Charge — beans loaded into drum.

</td></tr><tr><td>{\[EV 2\]}

</td><td>Temp Return (TP) — turning point.

</td></tr><tr><td>{\[EV 3\]}

</td><td>Dry End — end of drying phase.

</td></tr><tr><td>{\[EV 4\]}

</td><td>First Crack Start.

</td></tr><tr><td>{\[EV 5\]}

</td><td>First Crack End.

</td></tr><tr><td>{\[EV 6\]}

</td><td>Second Crack Start.

</td></tr><tr><td>{\[EV 7\]}

</td><td>Second Crack End.

</td></tr><tr><td>{\[EV 8\]}

</td><td>Drop — beans dropped to cooling tray.

</td></tr><tr><td>{\[EV 9\]}

</td><td>Cool End — cooling complete.

</td></tr></tbody></table>

</div># Status Byte (sid) Decoder

Every response begins with a status byte. Convert sid to 8-bit binary, then read the low 4 bits when the lowest bit of the high nibble is 0:

<div align="left" dir="ltr" id="bkmrk-command-description--6"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>0000

</td><td>IDLE

</td></tr><tr><td>0001

</td><td>CHARGE

</td></tr><tr><td>0010

</td><td>TP (Turning Point)

</td></tr><tr><td>0011

</td><td>DRY END

</td></tr><tr><td>0100

</td><td>FC (First Crack)

</td></tr><tr><td>0101

</td><td>FC END

</td></tr><tr><td>0110

</td><td>SC (Second Crack)

</td></tr><tr><td>0111

</td><td>SC END

</td></tr><tr><td>1000

</td><td>DROP

</td></tr><tr><td>1001

</td><td>COOL END

</td></tr></tbody></table>

</div># Typical Session Sequence

The handshake Artisan uses on connection, captured live from a real roaster:

<div align="left" dir="ltr" id="bkmrk-command-description--7"><table><colgroup><col width="213"></col><col width="411"></col></colgroup><thead><tr><th scope="col">Command

</th><th scope="col">Description

</th></tr></thead><tbody><tr><td>{\[PI\]}

</td><td>Ping the roaster to verify connection.

</td></tr><tr><td>{\[TU C\]}

</td><td>Set the unit (C or F).

</td></tr><tr><td>{\[SC AR\]}

</td><td>Open an Artisan session — roaster returns its serial number.

</td></tr><tr><td>{\[RD A0\]}

</td><td>Poll for live data, repeated about every 1.5 seconds.

</td></tr><tr><td>{\[CL AR\]}

</td><td>Close the session when disconnecting.

</td></tr></tbody></table>

</div># Notes

Polling interval for RD should be at least 1 second. Default 1.5 seconds. Repeated queries faster than 1 second are ignored.

The roaster responds to RD without requiring SC AR first, though using SC AR is the documented startup sequence.

Baud rate observed: 57600, 8 data bits, no parity, 1 stop bit, no flow control.

CP210x VID:PID is 10C4:EA60.