Anova Precision® Cooker Mini
The Anova Precision® Cooker Mini is a compact sous vide device that can be controlled via Bluetooth Low Energy (BLE). 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
- JSON-Based Protocol: Commands are JSON-encoded for reliability
- Base64 Transmission: All messages are Base64 encoded for robust transmission
- Temperature Control: Precise temperature setting and monitoring
- Timer Management: Set and control cooking timers
- Unit Conversion: Support for both Celsius and Fahrenheit
- Clock Synchronization: Device clock can be synchronized to UTC
BLE Architecture
The Anova Precision Cooker Mini exposes a single service with multiple characteristics for different functions:
- Service UUID:
910772a8-a5e7-49a7-bc6d-701e9a783a5c
Characteristic UUIDs
Purpose | Characteristic Name | UUID | Direction |
---|---|---|---|
Set Temperature | SET_TEMPERATURE | 0f5639f7-3c4e-47d0-9496-0672c89ea48a | Bidirectional (Read/Write/Notify) |
Read Current Temperature | CURRENT_TEMPERATURE | 6ffdca46-d6a8-4fb2-8fd9-c6330f1939e3 | RX (Read/Notify) |
Timer | TIMER | a2b179f8-944e-436f-a246-c66caaf7061f | Bidirectional (Read/Write/Notify) |
State / Command | STATE | 54e53c60-367a-4783-a5c1-b1770c54142b | Bidirectional (Read/Write/Notify) |
Set Clock | SET_CLOCK | d8a89692-cae8-4b74-96e3-0b99d3637793 | TX (Write) – response required |
System Info | SYSTEM_INFO | 153c9432-7c83-4b88-9252-7588229d5473 | RX (Read) |
Message Format
All commands and responses use a two-step encoding process:
-
JSON Serialization:
- Create a structured JSON object with command parameters
- Convert to a JSON string
-
Base64 Encoding:
- UTF-8 encode the JSON string
- Base64 encode the resulting bytes
- Transmit the encoded string
Communication Workflow
-
Device Discovery:
- Scan for BLE devices advertising the service UUID
- Optionally filter by device name prefix
-
Connection:
- Connect to the selected device
- Verify required characteristics are present
- Set device clock (recommended)
-
Command Execution:
- Create appropriate JSON command
- Base64 encode the command
- Write to the correct characteristic
- For read operations, decode Base64 response to JSON
-
Specialized Controls:
- Use STATE characteristic for unit changes and cooking control
- Use dedicated characteristics for setting temperature and timer
Command Examples
Setting Temperature
{
"setpoint": 65.0
}
Starting a Cook
{
"command": "start",
"payload": {
"setpoint": 65.0,
"timer": 3600,
"cookableId": "recipe123",
"cookableType": "recipe"
}
}
Changing Units
{
"command": "changeUnit",
"payload": {
"temperatureUnit": "C"
}
}
Setting Clock
{
"currentTime": "2024-02-06T12:00:00Z"
}
Pairing Note
When prompted during connection, you must accept pairing on your host device to maintain the connection.
Command Overloading
The STATE characteristic serves dual purposes - both reading device state and sending control commands. Be mindful of this when implementing your application.