Anova Precision® Cooker Nano
The Anova Precision® Cooker Nano is a compact sous vide device with Bluetooth Low Energy (BLE) connectivity. This documentation covers the protocol and commands needed to interact with the device.
Quick Links
Key Features
- BLE Connectivity: Control your cooker remotely using Bluetooth Low Energy
- Protocol Buffer Format: Commands and responses use Protocol Buffers for efficient data exchange
- COBS Encoding: Message framing uses Consistent Overhead Byte Stuffing for reliable transmission
- Temperature Control: Precise temperature setting and monitoring
- Timer Management: Set and control cooking timers
- Unit Conversion: Support for both Celsius and Fahrenheit
- Sensor Readings: Access to multiple device sensor readings
BLE Architecture
The Anova Precision Cooker Nano communicates through a dedicated BLE service with three primary characteristics:
- Service UUID:
0e140000-0af1-4582-a242-773e63054c68
Characteristic UUIDs
Purpose | Characteristic Name | UUID | Direction |
---|---|---|---|
TX Characteristic | TX | 0e140001-0af1-4582-a242-773e63054c68 | Write (Send commands) |
RX Characteristic | RX | 0e140002-0af1-4582-a242-773e63054c68 | Receive (Command responses) |
Async Characteristic | ASYNC | 0e140003-0af1-4582-a242-773e63054c68 | Receive (Status updates) |
Command Structure
Each command follows a consistent format:
[Domain Byte][Message Type Byte][Optional Protobuf Payload]
- Domain Byte: Indicates command category (e.g., Configuration)
- Message Type: Specific command within the domain
- Payload: Optional Protocol Buffer encoded data (for commands that require parameters)
COBS Encoding
All commands use COBS (Consistent Overhead Byte Stuffing) encoding:
- Construct the raw command bytes (domain + message type + payload)
- COBS encode to remove all zero bytes from the data
- Append a zero byte terminator (0x00)
- Split into chunks for BLE transmission
Communication Workflow
-
Device Discovery:
- Scan for devices advertising the Nano service UUID
- Select a device from scan results
-
Connection:
- Connect to the selected device
- Subscribe to notifications on RX and Async characteristics
-
Command Execution:
- Create command with appropriate domain and message type
- Add Protocol Buffer payload if needed
- COBS encode the command
- Send to TX characteristic
- Process response from RX characteristic
-
Response Handling:
- Collect notification chunks until message is complete
- COBS decode the complete message
- Extract and parse the Protocol Buffer response
Command Examples
Temperature Units
// Get temperature units
[CONFIG_DOMAIN][GET_TEMP_UNITS]
// Set to Celsius
[CONFIG_DOMAIN][SET_TEMP_UNITS][IntegerValue(0)]
// Set to Fahrenheit
[CONFIG_DOMAIN][SET_TEMP_UNITS][IntegerValue(1)]
Temperature Control
// Get current temperature setpoint
[CONFIG_DOMAIN][GET_TEMP_SETPOINT]
// Set temperature to 65.5°C (scaled by 10 = 655)
[CONFIG_DOMAIN][SET_TEMP_SETPOINT][IntegerValue(655)]
// Read all sensor values (including current temperature)
[CONFIG_DOMAIN][GET_SENSORS]
Cooking Control
// Start cooking
[CONFIG_DOMAIN][START_COOKING]
// Stop cooking
[CONFIG_DOMAIN][STOP_COOKING]
Temperature Scaling
The Nano uses integer values scaled by 10 for temperature:
Actual Temperature | Scaled Value |
---|---|
65.5°C | 655 |
134.6°F | 1346 |
Always append a zero byte (0x00) terminator after COBS encoding to mark the end of a command frame.
Due to BLE limitations, commands exceeding 20 bytes must be split into chunks for transmission. Responses are also received in chunks that must be reassembled.