© Combustion 2022 – DRAFT 0.1
Protocol Overview
This document describes how to interface with the Combustion Display & Range Extender over Combustion’s open source Bluetooth communication protocol.
Bluetooth Advertising
The Display & Range Extender continuously broadcasts advertising packets when powered on. The device supports up to 4 simultaneous incoming BLE connections, and up to 4 simultaneous outgoing BLE connections. If the device has fewer than 4 incoming BLE connections, it will transmit Connectable Advertising packets, otherwise it will transmit Unconnectable Advertising packets.
Advertising Packet Frequency
The device’s advertising interval is dependent on its mode of operation. When one or more associated thermometers are in Instant Read mode, the Display & Range Extender will have an advertising interval of 100ms. Otherwise, the device has an 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 |
Manufacturer Specific Data | 22 | See manufacture specific data |
Legacy (BLE 4.0) Scan Response
Field | Byte | Value |
Service UUID | 16 | Node status service UUID |
Manufacture Specific Data
Field | Byte | Value |
Vendor ID | 2 | 0x09C7 (See Bluetooth company IDs) |
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 Display & Range Extenders connection interval is dependent on its mode of operation. During normal operation the thermometer expects a connection interval between 400ms and 500ms. While in Instant Read mode, the Display & Range Extender updates its status more often and expects a connection interval between 10ms and 30ms.
The Kitchen Timer implements the following GATT Services and Characteristics.
Device Information Service
This standard BLE service provides static information about the Display & Range Extender. The UUID for the Device Information Service is 0x181A
.
.
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 |
Node Information Service
Node Status is a custom service that provides the current status of the Display & Range Extender's repeater network. The UUID for the Node Status service is 00000200-CAAB-3792-3D44-97AE51C1407A
.
This service has a single characteristic that supports BLE notifications. Each time a new set of measurements is received for a thermometer on the repeater network, the status is sent to each connected device that has subscribed to these notifications. The thermometer status includes the sequence number for first and last record on the thermometer and the current temperature from each sensor.
Characteristic | UUID | Description | Properties |
Status | 00000201-CAAB-3792-3D44-97AE51C1407A | See Node Status below | Read, Notify |
Node Status
Value | Format | Bytes | Description |
Message ID | uint32_t | 4 | Random unique ID for this message, for repeater network propagation |
Probe Serial Number | uint32_t | 4 | Serial number of thermometer for which this the following data pertains. |
Log Range | uint32_t | 8 | Range of logs available on the thermometer. Two uint32_t sequence numbers (min , max ). |
Current Raw Temperature Data | uint8_t | 13 | See raw temperature data |
Mode/ID | uint8_t | 1 | See mode and ID data |
Battery Status and Virtual Sensors | uint8_t | 1 | See battery status and virtual sensors |
Prediction Status | uint8_t | 1 | See prediction status |
Network Information | uint8_t | 1 | See network information |
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 Display & Range Extender, other UART Messages for the thermometer are described here.
Set Thermometer ID 0x01
After receiving this message, the Display & Range Extender will propagate this message across the repeater network in order to get it to the thermometer referenced by the serial number in the message. Once successfully propagated the thermometer will update its ID in both its Advertising Packet and its Status Characteristic.
Request Payload
Value | Format | Bytes | Description |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number |
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 Display & Range Extender will propagate this message across the repeater network in order to get it to the thermometer referenced by the serial number in the message. Once successfully propagated the thermometer will update its color in both its Advertising Packet and its Status Characteristic.
Request Payload
Value | Format | Bytes | Description |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number |
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 Display & Range Extender will respond with session information for all thermometers on the repeater network.
Request Payload
Value | Format | Bytes | Description |
Page | uint8_t | 1 | Page number to request (0 = first page, 1 = second) |
Response Payload
The response payload supports up to 5 thermometers associated with a specific Display & Range extender.
Value | Format | Bytes | Description |
Page | uint8_t | 1 | Page number to request (0 = first page, 1 = second) |
Total Pages | uint8_t | 1 | Total number of pages that can be requested |
Thermometer Count | uint8_t | 1 | Number of thermometer connected to the network |
Thermometers on this Page | uint8_t | 1 | Number of thermometers on this page |
N-th Thermometer Device Number | uint8_t | 1 | N-th thermometer Device Number as shown on Display & Range Extender. |
N-th Thermometer Serial Number | uint32_t | 4 | N-th thermometer serial number (0 = not present) |
N-th Thermometer Session ID | uint32_t | 4 | Random number that is generated when thermometer is turned on, and used to identify logging session. |
N-th Thermometer Sample Period | uint16_t | 2 | Number of milliseconds between each log on N-th thermometer. |
Read Logged Data 0x04
After receiving this message the Display & Range Extender will respond with a sequence of Read Log Response messages.
Request Payload
Value | Format | Bytes | Description |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number |
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
Value | Format | Bytes | Description |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number |
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 probe will enter the specified prediction mode with the specified set point temperature. The probe will update the fields in the Prediction Status of its status characteristic.
Request Payload
Value | Format | Bytes | Description |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number |
Set Prediction Data | uint16_t | 2 | See set prediction data |
Response Payload
The Set Prediction Engine response message has no payload.
Device Connected 0x40
Sent to notify other devices on the repeater network that a device has connected to the network.
Request Payload
Value | Format | Bytes | Description |
Product Type | uint8_t | 1 | Thermometer, repeater node, etc |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number, if applicable |
Node Serial Number | uint8_t | 10 | Repeater node serial number, if applicable |
Response Payload
The Device Connected response message has no payload.
Device Disconnected 0x41
Sent to notify other devices on the repeater network that a device has disconnected from the network.
Request Payload
Value | Format | Bytes | Description |
Product Type | uint8_t | 1 | Thermometer, repeater node, etc |
Thermometer Serial Number | uint32_t | 4 | Thermometer serial number, if applicable |
Node Serial Number | uint8_t | 10 | Repeater node serial number, if applicable |
Response Payload
The Device Disconnected response message has no payload.
Read Node List 0x42
Gets information about all Node devices on the repeater network.
Request Payload
Value | Format | Bytes | Description |
Page | uint8_t | 1 | Page number to request (0 = first page, 1 = second) |
Response Payload
Value | Format | Bytes | Description |
Page | uint8_t | 1 | Page number to request (0 = first page, 1 = second) |
Total Pages | uint8_t | 1 | Total number of pages that can be requested |
Node Count | uint8_t | 1 | Number of repeating nodes connected to the network |
Nodes on this Page | uint8_t | 1 | Number of thermometers on this page |
N-th Node Device Number | uint8_t | 1 | Used to identify N-th node in topology list (Nodes start at 20) |
N-th Node Product Type | uint8_t | 1 | N-th node’s product type |
N-th Node Serial Number | uint32_t | 4 | N-th node’s serial number (0 = not present) |
Read Node List 0x43
Gets information about devices connected to a node on the repeater network.
Request Payload
Value | Format | Bytes | Description |
Node Serial Number | uint8_t | 1 | Node serial number to query |
Response Payload
Value | Format | Bytes | Description |
Node Device Number | uint8_t | 1 | Node device number queried (based on node list response) |
Node Product Type | uint8_t | 1 | Product type of this node |
Node Serial Number | uint8_t | 10 | This node's serial number |
Inbound Connection Count | uint8_t | 1 | Number of inbound connections to this node |
N-th Inbound Device ID | uint8_t | 1 | Device number of N-th inbound device (N = 1 to Inbound Connection Count) |
N-th Inbound Device RSSI | int8_t | 1 | RSSI signal strength of N-th inbound device connection |
Outbound Connection Count | uint8_t | 1 | Number of outbound connections to this node |
N-th Outbound Device ID | uint8_t | 1 | Device number of N-th outbound device (N = 1 to Outbound Connection Count) |
N-th Outbound Device RSSI | int8_t | 1 | RSSI signal strength of N-th outbound device connection |
Thermometer Session Changed 0x44
Sends notification that a thermometer’s session information changed.
Request Payload
Value | Format | Bytes | Description |
Thermometer Device Number | uint8_t | 1 | Used to index this thermometer and shown on Display & Range Extender or other display nodes (mobile apps, etc) |
Thermometer Serial Number | uint32_t | 4 | Thermometer’s serial number |
Thermometer Session ID | uint32_t | 4 | Random number that is generated when thermometer is turned on |
Response Payload
The Thermometer Session Changed response message has no payload.
Common Data Formats
- 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
- Node Information Service
- Node Status
- 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 Connected 0x40
- Device Disconnected 0x41
- Read Node List 0x42
- Read Node List 0x43
- Thermometer Session Changed 0x44
- Common Data Formats