Skip to main content

Available Commands

The Anova Precision® Cooker Nano uses a structured command system based on Protocol Buffers, organized by domain and message type.

Command Structure

Each command consists of:

  1. Domain byte (function category)
  2. Message type byte (specific command)
  3. Optional Protocol Buffer payload

Domain Categories

DomainValueDescription
CONFIG0x01Device configuration commands

Available Commands

Configuration Domain (0x01)

CommandMessage TypePayloadDescription
GET_TEMP_UNITS0x04NoneRead temperature unit
SET_TEMP_UNITS0x03IntegerValueSet temperature unit (0=C, 1=F)
GET_TEMP_SETPOINT0x02NoneRead target temperature
SET_TEMP_SETPOINT0x01IntegerValueSet target temperature (scaled ×10)
GET_COOKING_TIMER0x06NoneRead current timer value
SET_COOKING_TIMER0x05IntegerValueSet timer in minutes
GET_FIRMWARE_INFO0x01NoneRead firmware information
GET_SENSORS0x01NoneRead all sensor values
START_COOKING0x01NoneStart cooking process
STOP_COOKING0x02NoneStop cooking process

Command Examples

Setting Temperature

To set the temperature to 65.5°C:

  1. Create an IntegerValue with value 655 (65.5 × 10)
  2. Construct command: [CONFIG_DOMAIN, SET_TEMP_SETPOINT, serialized_value]
  3. COBS encode the command
  4. Append terminator byte (0x00)
  5. Send to TX characteristic

Starting a Cook

To start cooking:

  1. Construct command: [CONFIG_DOMAIN, START_COOKING]
  2. COBS encode the command
  3. Append terminator byte (0x00)
  4. Send to TX characteristic

Reading Sensors

To request sensor values:

  1. Construct command: [CONFIG_DOMAIN, GET_SENSORS]
  2. COBS encode the command
  3. Append terminator byte (0x00)
  4. Send to TX characteristic
  5. Receive and decode response as SensorValueList protocol buffer

Response Formats

Temperature Reading

message SensorValue {
int32 value = 1; // Scaled by 10
UnitType units = 2; // 0=C, 1=F
SensorType type = 3; // Sensor identifier
}

Firmware Information

message FirmwareInfo {
string commit_id = 1;
string tag = 2;
int32 date_code = 3;
}

Scale Factors

Remember to apply appropriate scaling when working with temperature values:

Value TypeScale FactorExample
Target Temperature×1065.5°C → 655
Sensor Temperature×1024.7°C → 247

Command Data Flow

The following steps outline a typical data flow when issuing a command:

  1. Encoding the Command:

    • Construct a 2-byte header: [Domain, MessageType]
    • Append any required payload data
    • Encode using COBS algorithm
    • Append trailing zero byte
  2. Transmitting the Command:

    • Split the encoded command into chunks (≤ 20 bytes)
    • Write chunks sequentially to TX characteristic
  3. Receiving the Response:

    • Listen for notifications on RX characteristic
    • Aggregate chunks until complete message is received
    • COBS decode the complete message
    • Parse using appropriate protocol buffer type
Command Validation

The device validates both the command structure and payload values. Invalid commands will return an error response.

Temperature Scaling

Remember that temperature values use a scale factor of 10 when communicating with the device.

Protocol Buffers

Refer to the Protocol Buffer Definitions page for detailed message type specifications.