© Combustion 2022 – DRAFT 0.1
Protocol Overview
This document describes how to interface with the Combustion Predictive Thermometer via Combustion’s open source Bluetooth communication protocol. The protocol supports accessing the follow thermometer features:
- 4 high-accuracy (± 0.2 °C) integrated circuit (IC) temperature sensors, used in low-temperature zone (up to 100 °C) at the front half of the thermometer. These are described as
T1
throughT4
respectively. - 4 medium-accuracy (± 1.0 °C) thermistor temperature sensors, used in high-temperature zone (up to 300 °C) at the rear half of the thermometer. These are described as
T5
throughT8
(handle) respectively. - 4 virtual sensors:
Instant Reading
,Core
,Surface
, andAmbient
temperatures algorithmically extracted from the physical sensors. - Current device state:
Instant Read
,Inserted
into food,Cooking
,Resting
, andRemoved
from food. - Prediction engine that accepts a user-configured target temperature and outputs an estimated cooking time remaining.
- Data logs and device specific information, including firmware revision.
Bluetooth Advertising
The Predictive Thermometer is turned on and off by removing or replacing it from the charging sleeve. When removed, the thermometer will continuously transmit advertising packets. Any number of devices can listen to these packets.
The thermometer also supports up to 3 concurrent BLE connections. When the probe has fewer than 3 active connections, it will advertised Connectable packets, otherwise it will advertise Unconnectable packets. Connections are used for requesting information not included in the advertising packets, such as device serial number or data records.
Advertising Packet Frequency
The thermometer’s advertising interval is dependent on its current mode of operation, with a default advertising interval of 250ms.
Legacy (BLE 4.0) Advertising Packet
The format of the Advertising packet and scan response are shown in the following tables.
Field | Byte | Value |
Service UUID | 16 | Thermometer status service UUID |
Legacy (BLE 4.0) Scan Response
Field | Byte | Value |
Service UUID | 16 | Thermometer status service UUID |
Manufacture Specific Data
Field | Byte | Value |
Vendor ID | 2 | 0x09C7 |
Product Type | 1 | |
Serial Number | 4 | Device serial number |
Raw Temperature Data | 13 | See raw temperature data |
Mode/ID | 1 | See mode and ID data |
Battery Status and Virtual Sensors | 1 | See battery status and virtual sensors |
Reserved | 2 | Reserved for future use |
GATT Services and Other Characteristics
The probe's connection interval is dependent on its mode of operation. During normal operation the probe expects a connection interval between TBD and TBD. While in Instant Read mode, the probe updates its status more often and expects a connection interval between TBD and TBD.
The Predictive Probe implements the following GATT Services and Characteristics.
Device Information Service
This standard BLE service provides static information about the Predictive Probe. The UUID for the Device Information Service is 0x180A
.
Characteristic | UUID | Description | Properties |
Manufacturer Name String | 0x2A29 | Manufacturer: Combustion Inc | Read |
Model Number String | 0x2A24 | Model: device specific | Read |
Serial Number String | 0x2A25 | Device serial number | Read |
Hardware Revision String | 0x2A27 | Hardware revision | Read |
Firmware Revision String | 0x2A26 | Firmware revision | Read |
Thermometer Status Service
Probe Status is a custom service that provides the current status of the Predictive Probe. The UUID for the Probe Status service is 00000100-CAAB-3792-3D44-97AE51C1407A
.
This service has a single characteristic that supports BLE notifications. Each time a measurement is taken, the probe status is sent to each connected device that has subscribed to these notifications. The probe status includes the sequence number for first and last record on the probe and the current temperature from each sensor.
Characteristic | UUID | Description | Properties |
Thermometer Status | 00000101-CAAB-3792-3D44-97AE51C1407A | See table below | Read, Write |
Value | Format | Bytes | Description |
Log Range | uint32_t | 8 | Range of logs available on the thermometer. Two uint32_t numbers (min , max ) |
Current Raw Temperature Data | uint8_t | 13 | See raw temperature data |
Mode & ID | uint8_t | 1 | See mode & ID data |
Battery Status | uint8_t | 1 | See battery status and virtual sensors |
Prediction Engine Status | uint8_t | 7 | See prediction engine status |
UART Service
The UART service is a custom BLE service that emulates a UART. The UUID for the UART service is 6E400001-B5A3-F393-E0A9-E50E24DCCA9E
. The RX characteristic is used to receive data and the TX characteristic is used to transmit data via BLE notifications. The format of the data sent and received over this service is described in the UART Messages section.
Characteristic | UUID | Description | Properties |
RX | 6E400002-B5A3-F393-E0A9-E50E24DCCA9E | Peer device can send data to Thermometer on RX characteristic | Write |
TX | 6E400003-B5A3-F393-E0A9-E50E24DCCA9E | Thermometer can send data to a peer device on TX characteristic | Read/Notify |
UART Command Header
Each message will begin with the same 5 byte header, followed by the message payload.
Value | Format | Bytes | Description |
Sync bytes | uint8_t | 2 | {0xCA, 0xFE} |
CRC | uint16_t | 2 | CRC of message type, payload length, and payload bytes. CRC-16-CCITT (polynomial 0x1021 ) with 0xFFFF initial value |
Message type | uint8_t | 1 | |
Payload length | uint8_t | 1 |
UART Response Header
Each response message will include a 7 byte header with the following format.
Value | Format | Bytes | Description |
Sync Bytes | uint8_t | 2 | {0xCA, 0xFE} |
CRC | uint16_t | 2 | CRC of message type, payload length, and payload bytes. CRC-16-CCITT (polynomial 0x1021 ) with 0xFFFF initial value |
Message type | uint8_t | 1 | |
Success | uint8_t | 1 | 1 for success, 0 for failure |
Payload length | uint8_t | 1 | Length of the message payload in bytes |
UART Messages
The following describes UART Messages relevant to the thermometer, other UART Messages for the Display & Range Extender are described here.
Set Thermometer ID 0x01
After receiving this message, the thermometer will update the thermometer ID in both its Advertising packet and its Status Characteristic.
Request Payload
Value | Format | Bytes | Description |
New Thermometer ID | uint8_t | 1 | Thermometer ID (0-7) |
Response Payload
The Set Thermometer ID response message has no payload.
Set Thermometer Color 0x02
After receiving this message, the thermometer will update the thermometer color in both its Advertising Packet and its Status Characteristic.
Request Payload
Value | Format | Bytes | Description |
New Thermometer Color | uint8_t | 1 | Thermometer color (0-7) |
Response Payload
The Set Thermometer Color response message has no payload.
Read Session Information 0x03
After receiving this message the thermometer will respond with a randomly generated session ID associated with currently logged data, and the interval between log entries.
Request Payload
Value | Format | Bytes | Description |
Session ID | uint32_t | 4 | Random number that is generated when thermometer is removed from charger. |
Sample Period | uint16_t | 2 | Number of milliseconds between each log entry. |
Response Payload
The Read Session Information response message has no payload.
Read Logged Data 0x04
After receiving this message the thermometer will respond with a sequence of Read Log Response messages.
Request Payload
Value | Format | Bytes | Description |
Session ID | uint32_t | 4 | The first log entry requested |
Sample Period | uint32_t | 4 | The last log entry requested |
Response Payload
Value | Format | Bytes | Description |
Sequence Number | uint32_t | 4 | Sequence number of the record |
Raw Temperature Data | uint8_t | 1 | See raw temperature data |
Virtual Sensors | uint8_t | 1 | See virtual sensors |
Prediction Engine State | uint8_t | 1 | See prediction engine state |
Set Prediction Engine 0x05
After receiving this message and successful response, the thermometer will enter Prediction Mode with the specified target temperature. The thermometer will update the fields in the Prediction Status of its Status Characteristic.
Request Payload
Value | Format | Bytes | Description |
Set Prediction Target | uint16_t | 2 | See Set Prediction. |
Response Payload
The Set Prediction Engine response message has no payload.
Device Firmware Update
The Device Firmware Update (DFU) Service is a custom service provided by Nordic for updating the firmware on Combustion devices. Details TBD.
Data Formats
These are the definitions of the data formats common between advertising data and characteristic data used throughout this documentation.
Product Type
The product type is an enumerated value in an 8-bit (1-byte) field:
0
Unknown
1
Predictive Thermometer
2
Display & Range Extender
Raw Temperature Data
Raw temperature data is expressed in a packed 104-bit (13-byte) field.
Bits | Sensor Label | Sensor Type | Accuracy (±) |
1-13 | T1 | Integrated Circuit | 0.2 °C |
14-26 | T2 | Integrated Circuit | 0.2 °C |
27-39 | T3 | Integrated Circuit | 0.2 °C |
40-52 | T4 | Integrated Circuit | 0.2 °C |
53-65 | T5 | Thermistor | 1.0 °C |
66-78 | T6 | Thermistor | 1.0 °C |
79-91 | T7 | Thermistor | 1.0 °C |
92-104 | T8 | Thermistor | 1.0 °C |
The allowable range for each sensor is -20°C - 369°C, and is quantized in steps of 0.05°C:
Temperature = (Raw Temperature Value * 0.05) - 20
Mode and ID Data
Mode and ID data are expressed in a packed 8-bit (1-byte) field. The Mode
field differentiates the current state of the probe and is used to adjust advertising and sensor sampling rates. Color ID
and Probe ID
provide a configurable thermometer identity (ID number, color, or both) that can be changed from time to time.
Bits | Description |
1-2 | Mode: 0 Normal 1 Instant Read 2 Reserved 3 Error |
3-5 | Color ID: 0 yellow 1 white 2-7 reserved |
6-8 | Probe ID: 0 through 7 |
Battery Status
Battery Status is expressed in a packed 8-bit (1-byte) field along with the Virtual Sensors described below.
Bits | Description |
1 | Battery Status: 0 normal 1 low-battery, approximately TBD minutes of run time remaining. |
2-8 | Virtual Sensors, described below |
Virtual Sensors
Virtual Sensors are expressed in the trailing 7-bits of an packed 8-bit field. The leading bit is reserved for battery status as described above.
Virtual Core Temperature
Sensor nearest the geometric center of the food. This measurement will always be available, but defaults to the T1 sensor when the probe has not detected its insertion into food.
0
T1 sensor, located at tip of thermometer
1
T2 sensor
2
T3 sensor
3
T4 sensor, located tip-side of the minimum insertion line
4
T5 sensor, located handle-side of the minimum insertion line
5
T6 sensor
6
T7 sensor
7
T8 sensor, located in handle and thermal connected to heat-pipe mounting screw
Virtual Surface Temperature
Sensor that is both inside the food and nearest to the surface of the food. Because the thermometer must be inserted to the minimum insertion line above T4, the only sensors that can reasonably be near the surface of the food are T4 through T7. Available only when the thermometer has detected its insertion into food.
0
T4 sensor
1
T5 sensor
2
T6 sensor
3
T7 sensor
Virtual Ambient Sensor
Sensor most representative of the prevailing ambient temperature near the surface of the food. Typically this will default to T8 located in the thermometer’s handle, but in certain situations the faster response time of sensors T5, T6, or T7 provide a more representative measurement. Because the thermometer must be inserted to the minimum insertion line above T4, the only sensors that can reasonably be outside of the food are T5 through T8. This measurement will always be available, but will default to T8 when the probe has not detected its insertion into food.
0
T5 sensor
1
T6 sensor
2
T7 sensor
3
T8 sensor
Virtual Sensors and State Log
The Virtual Sensors and Prediction Engine state log are expressed as a 16-bit (2-byte) field.
Bits | Description |
1-7 | Virtual Sensors, 7-bit field |
8-11 | Prediction Engine State, 4-bit enumeration |
12-16 | Reserved |
Prediction Engine
TK
Prediction Engine Status
The prediction engine status is expressed in a packed 56-bit (7-byte) field.
Bits | Description |
1-4 | Prediction State, 4-bit enumeration |
5-6 | Prediction Mode, 2-bit enumeration |
7-8 | Prediction Type, 2-bit enumeration |
9-18 | Prediction Target Temperature, 10-bit field (0 to 1023) |
19-28 | Heating State Temperature, 10-bit field (0 to 1023) |
29-45 | Prediction Value in seconds, 17-bit field (0 to 131,071) |
46-56 | Estimated Core Temperature, 11-bit field |
Set Prediction Engine Data
The set prediction data is expressed in a packed 16-bit (2-byte) field.
Bits | Description |
1-10 | Set prediction target temperature |
11-12 | Prediction mode, 2-bit enumeration |
Prediction Data Types
Prediction State
The prediction state value is expressed in a 4-bit enumerated field.
0
Thermometer not inserted
1
Thermometer inserted
2
Heating
3
Predicting
4
Prediction Complete
5-15
Reserved states
Prediction Mode
The prediction mode expresses the input mode in a 2-bit enumerated field.
0
None
1
Time to removal
2
Removal and resting time
3
Reserved
Prediction Type
Value describing the type of prediction being provided in the Prediction Value field. Enumerated in a 2-bit field.
0
None
1
Cooking
2
Resting
3
Reserved
Prediction Target Temperature
User-configured input of target core doneness temperature. 10-bit value (0 to 1023) in units of 0.1 °C.
Prediction Target Temeprature = User-Supplied Raw Temperature Value * 0.1
Heating Start Temperature
The measured Virtual Core temperature at the detected start of heating. 10-bit value (0 to 1023) in units of 0.1 °C.
Heating Start Temperature = Raw Virtual Core Temperature Value * 0.1
Additionally, progress from start to done is calculated on a percentage basis:
Percentage Progress to Done = (Virtual Core Temperature - Heating Start Temperature) / (Prediction Target Temperature - Heating Start Temperature)
Prediction Value
The current predicted time to the Target Temperature, in seconds, from now as a 17-bit value.
Estimated Core Temperature
11-bit value. The estimated current core temperature from -200 to 1847 in units of 1/10 degree Celsius.
Estimated Core Temperature = (raw value * 0.1 C) - 20 C.
Instant Read
TBD
- Protocol Overview
- Bluetooth Advertising
- Advertising Packet Frequency
- Legacy (BLE 4.0) Advertising Packet
- Legacy (BLE 4.0) Scan Response
- Manufacture Specific Data
- GATT Services and Other Characteristics
- Device Information Service
- Thermometer Status Service
- UART Service
- UART Command Header
- UART Response Header
- UART Messages
- Set Thermometer ID 0x01
- Set Thermometer Color 0x02
- Read Session Information 0x03
- Read Logged Data 0x04
- Set Prediction Engine 0x05
- Device Firmware Update
- Data Formats
- Product Type
- Raw Temperature Data
- Mode and ID Data
- Battery Status
- Virtual Sensors
- Virtual Core Temperature
- Virtual Surface Temperature
- Virtual Ambient Sensor
- Virtual Sensors and State Log
- Prediction Engine
- Prediction Engine Status
- Set Prediction Engine Data
- Prediction Data Types
- Prediction Mode
- Prediction Type
- Prediction Target Temperature
- Heating Start Temperature
- Prediction Value
- Estimated Core Temperature
- Instant Read