Skip to main content

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

NameUUIDPurpose
SET_TEMPERATURE0f5639f7-3c4e-47d0-9496-0672c89ea48aSet target temperature
CURRENT_TEMPERATURE6ffdca46-d6a8-4fb2-8fd9-c6330f1939e3Read current temperature
TIMERa2b179f8-944e-436f-a246-c66caaf7061fTimer control
STATE54e53c60-367a-4783-a5c1-b1770c54142bDevice state management
SET_CLOCKd8a89692-cae8-4b74-96c3-0b99d3637793Set device clock
SYSTEM_INFO153c9432-7c83-4b88-9252-7588229d5473Read system information

Message Format

Command Encoding

  1. Create command JSON object
  2. Convert to JSON string
  3. UTF-8 encode
  4. Base64 encode
  5. Transmit to appropriate characteristic

Example encoding flow:

Command object → JSON string → UTF-8 bytes → Base64 encoded string

Response Decoding

  1. Receive base64 encoded data
  2. Base64 decode
  3. UTF-8 decode
  4. Parse JSON
  5. Process resulting object

Example decoding flow:

Base64 encoded string → UTF-8 bytes → JSON string → Object

Connection Process

  1. Device Discovery

    • Scan for devices advertising the Gen 3 service UUID
    • Optional: Filter by cooker ID (name prefix)
  2. Connection Setup

    • Connect to selected device
    • Verify all required characteristics exist
    • Send SET_CLOCK command to synchronize time
  3. 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
Pairing

The Mini requires explicit pairing acceptance on the host device. Watch for and accept the pairing prompt to maintain connection.

Command Response

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:

  1. Connection Failures

    • Implement connection timeout
    • Retry connection with exponential backoff
  2. Missing Characteristics

    • Verify service and all required characteristics are available
    • Gracefully handle the case when characteristics are missing
  3. Decode Errors

    • Handle Base64 decoding failures
    • Handle JSON parsing errors
    • Consider implementing error recovery mechanisms