BLE Communication Protocol
Service & Characteristic UUIDs
The Anova Precision® Cooker Mini uses a unique set of BLE services and characteristics:
Main Service UUID
910772a8-a5e7-49a7-bc6d-701e9a783a5c
Characteristics
Name | UUID | Purpose |
---|---|---|
SET_TEMPERATURE | 0f5639f7-3c4e-47d0-9496-0672c89ea48a | Set target temperature |
CURRENT_TEMPERATURE | 6ffdca46-d6a8-4fb2-8fd9-c6330f1939e3 | Read current temperature |
TIMER | a2b179f8-944e-436f-a246-c66caaf7061f | Timer control |
STATE | 54e53c60-367a-4783-a5c1-b1770c54142b | Device state management |
SET_CLOCK | d8a89692-cae8-4b74-96c3-0b99d3637793 | Set device clock |
SYSTEM_INFO | 153c9432-7c83-4b88-9252-7588229d5473 | Read system information |
Message Format
Command Encoding
- Create command JSON object
- Convert to JSON string
- UTF-8 encode
- Base64 encode
- Transmit to appropriate characteristic
Example encoding flow:
Command object → JSON string → UTF-8 bytes → Base64 encoded string
Response Decoding
- Receive base64 encoded data
- Base64 decode
- UTF-8 decode
- Parse JSON
- Process resulting object
Example decoding flow:
Base64 encoded string → UTF-8 bytes → JSON string → Object
Connection Process
-
Device Discovery
- Scan for devices advertising the Gen 3 service UUID
- Optional: Filter by cooker ID (name prefix)
-
Connection Setup
- Connect to selected device
- Verify all required characteristics exist
- Send SET_CLOCK command to synchronize time
-
Service Verification The implementation should verify that all required characteristics are available before proceeding with the connection.
Writing Commands
Different characteristics require different command formats:
Temperature Setting (SET_TEMPERATURE characteristic)
{
"setpoint": 65.0
}
Clock Setting (SET_CLOCK characteristic)
{
"currentTime": "2024-02-06T12:00:00Z"
}
Starting a Cook (STATE characteristic)
{
"command": "start",
"payload": {
"setpoint": 65.0,
"timer": 3600,
"cookableId": "recipe123",
"cookableType": "recipe"
}
}
Changing Unit (STATE characteristic)
{
"command": "changeUnit",
"payload": {
"temperatureUnit": "C"
}
}
Stopping a Cook (STATE characteristic)
{
"command": "stop"
}
Best Practices
- Clock Synchronization: Always set the device clock on connection
- Command Acknowledgment: For critical commands, check for response/acknowledgment
- Error Handling: Implement robust error handling for encoding/decoding operations
- Disconnection: Always implement proper disconnection procedures
- Characteristic Verification: Verify all required characteristics during connection
The Mini requires explicit pairing acceptance on the host device. Watch for and accept the pairing prompt to maintain connection.
Some characteristics (like SET_CLOCK) should be written with a response flag enabled to ensure the command is acknowledged before proceeding.
Error Handling
Implement error handling for these common scenarios:
-
Connection Failures
- Implement connection timeout
- Retry connection with exponential backoff
-
Missing Characteristics
- Verify service and all required characteristics are available
- Gracefully handle the case when characteristics are missing
-
Decode Errors
- Handle Base64 decoding failures
- Handle JSON parsing errors
- Consider implementing error recovery mechanisms