Data format E1 (Extended v1)
Lifecycle: Beta
This data format uses Bluetooth 5 advertisement extension to provide more data than Bluetooth 4 advertisements can. Any Bluetooth 5.0 and upwards capable device should be able to receive the data format. It extends on data format 6; if the same device sends both in data format 6 and E1, the format 6 packet should be discarded.
The data is decoded from "Manufacturer Specific Data" -field, for more details please check Bluetooth Advertisements section. Manufacturer ID is 0x0499
, which is transmitted as 0x9904
in raw data. The actual data payload is:
0
E1
Data format (8bit)
1-2
-32767 ... 32767
Temperature in 0.005 degrees
3-4
0 ... 40 000
Humidity (16bit unsigned) in 0.0025% (0-163.83% range, though realistically 0-100%)
5-6
0 ... 65534
Pressure (16bit unsigned) in 1 Pa units, with offset of -50 000 Pa
7-8
0 ... 10000
PM 1.0, ug/m^3. Resolution 0.1/bit, range 0 ... 1000. 16bit unsigned
9-10
0 ... 10000
PM 2.5, ug/m^3. Resolution 0.1/bit, range 0 ... 1000. 16bit unsigned
11-12
0 ... 10000
PM 4.0, ug/m^3. Resolution 0.1/bit, range 0 ... 1000. 16bit unsigned
13-14
0 ... 10000
PM 10.0, ug/m^3. Resolution 0.1/bit, range 0 ... 1000. 16bit unsigned
15-16
0 ... 40000
CO2 concentration, ppm. Resolution 1/bit, range 0 ... 40000. 16bit unsigned
17, +FLAGS b6
0 ... 500
VOC index, unitless. Resolution 1 / bit, range 0 ... 500. 9 bit unsigned, least significant bit in Flags byte
18, +FLAGS b7
0 ... 500
NOX index, unitless. Resolution 1 / bit, range 0 ... 500. 9 bit unsigned, least significant bit in Flags byte
19-21
0 ... 14 428 400
Luminosity, Lux. Resolution 0.01/bit, range 0 ... 144 284
22
255
Reserved
23
255
Reserved
24
255
Reserved
25-27
0 ... 16 777 214
Measurement sequence counter. Each new sample increments counter by 1. 24bit unsigned
28
0bVVXXXXXV
Flags. Value of each bit is described below
29-33
0xFFFFFFFFFF
Reserved
34-39
Any valid mac
48bit MAC address.
Not available is signified by largest presentable number for unsigned values, smallest presentable number for signed values and all bits set for mac. All fields are MSB first 2-complement, i.e. 0xFC18
is read as -1000
and 0x03E8
is read as 1000
. If original data overflows the data format, data is clipped to closest value that can be represented. For example temperature 170.00 C becomes 163.835 C
Data field descriptions
Temperature
Values supported: -163.835 °C to +163.835 °C in 0.005 °C increments.
Example
0x0000
0 °C
0x01C3
+2.255 °C
0xFE3D
-2.255 °C
0x8000
Invalid / not available
Humidity
Values supported: 0.0 % to 100 % in 0.0025 % increments. Higher values than 100 % are possible, but they generally indicate a faulty or miscalibrated sensor.
Example
0
0%
10010
25.025%
40000
100.0%
65535
Invalid / not available
Atmospheric Pressure
Values supported: 50000 Pa to 115534 Pa in 1 Pa increments.
Example
00000
50000 Pa
51325
101325 Pa (average sea-level pressure)
65534
115534 Pa
65535
Invalid / not available
PM 1.0/2.5/4.0/10.0
Values supported: 0 to 6553.4 (ug/m^3), however the sensor on Ruuvi supports only 1000 ug/m^3. Values are uint16_t, MSB first. All channels are identical. Resolution is 0.1 per bit
Note: Each measurement means "particle smaller than this", i.e. 10.0 includes 4.0 includes 2.5 includes 1.0, so measured value for larger particles is always larger.
Example
0x0000
0 ug/m^3
0x03E8
100.0 ug/m^3
0xFFFF
Invalid / not available
CO2
Values supported: 0 to 65534 (ppm), however the sensor on Ruuvi supports only 40000 ppm and in natural environment CO2 is always at least around 400 ppm. Resolution is 1 per bit. Values are uint16_t, MSB first.
0x0000
0 ppm
0x03E8
1000 ppm
0xFFFF
Invalid / not available
VOC, NOX
Volatile Organic Compounds and Nitrogen Oxides are unitless indexes which learn the installation environment and track changes over time. For VOC the index average is 100, i.e. values under 100 mean the air quality is improving and values over 100 mean the air quality is getting worse.
Nox index has base value of 1, values higher than 1 meaning there's more nitrogen oxides in the air than usual.
Both values use 9 bits, least significant bit is in Flags byte.
0x000
0
0x0E8
232
0x1FF
Invalid / not available
Luminosity
Luminosity represents the light level in the environment of the sensor. The light level is compensated with human eye sensitivity curve. Value is 24-bit unsigned fixed-point number with resolution of 0.01
Please note that the highest valid value is 16 777 214, and 16 777 215 is reserved for the "not available".
Example
0x0000
0 lux
0x03E8
10.00 lux
16 777 215
Invalid / not available
Measurement sequence number
Measurement sequence number gets incremented by one for every measurement. It can be used to gauge signal quality and packet loss as well as to deduplicated data entries. You should note that the measurement sequence refers to data rather than transmission, so you might receive many transmissions with the same measurement sequence number. Please note that the highest valid value is 16 777 214, and 16 777 215 is reserved for the "not available".
Example
00
0 counts
1000
1000 counts
16 777 215
Invalid / not available
Flags
Flags byte contains additional information and is interpreted bit-by-bit. "X" Means "don't care, 1 or 0". "V" Means the value of bit. Bits 1...5 are reserved. Bit 0 is least significant, bit 7 is most significant.
0bXXXX XXXV
1 -> Calibration in progress, sensor data not fully accurate yet. 0 -> Calibration complete
0bXVXX XXXX
VOC bit 9, 1-> set, 0 -> not set
0bVXXX XXXX
NOX bit 9, 1-> set, 0 -> not set
MAC address
MAC address is static, statistically unique random identifier of the device. The address is 48 bits, with 2 most significant bits always set.
Test vectors
These test vectors are based on ruuvi.endpoints.c project. The tests are bidirectional, decode-encode results in original raw data. Encode-decode must result in same values with given precision, but floating point rounding differences may occur.
Case: valid data
Raw binary data: 0xE1170C5668C79E0065007004BD11CA00C90A0213E0AC3XXXXXXECDEE10XXXXXXXXXXCBB8334C884F
XX : Reserved
Data format
E1
Temperature
29.500
C
Pressure
101102
Pa
Humidity
55.300
RH-%
PM 1.0
10.1
ug/m^3
PM 2.5
11.2
ug/m^3
PM 4.0
121.3
ug/m^3
PM 10.0
455.4
ug/m^3
CO2
201
ppm
VOC
20
NOX
4
Luminosity
13 027.00
Lux
Measurement Sequence
14 601 710
Flags
Calibration in progress: True
VOC b9: false
NOX b9: false
MAC
CB B8 33 4C 88 4F
Case: maximum values
Raw binary data: 0xE17FFF9C40FFFE27102710271027109C40FAFADC28F0XXXXXXFFFFFE3FXXXXXXXXXXCBB8334C884F
XX : Reserved
Data format
E1
Temperature
163.835
C
Pressure
115534
Pa
Humidity
100.000
RH-%
PM 1.0
1000.0
ug/m^3
PM 2.5
1000.0
ug/m^3
PM 4.0
1000.0
ug/m^3
PM 10.0
1000.0
ug/m^3
CO2
40000
ppm
VOC
500
NOX
500
Luminosity
144284.00
Lux
Measurement Sequence
16 777 214
Flags
Calibration in progress: True
VOC b9: false
NOX b9: false
MAC
CB B8 33 4C 88 4F
Case: minimum values
Raw binary data: 0xE180010000000000000000000000000000000000000000XXXXXX000000XXXXXXXXXXCBB8334C884F
XX : Reserved
Data format
E1
Temperature
-163.835
C
Pressure
50000
Pa
Humidity
000.000
RH-%
PM 1.0
0000.0
ug/m^3
PM 2.5
0000.0
ug/m^3
PM 4.0
0000.0
ug/m^3
PM 10.0
0000.0
ug/m^3
CO2
00000
ppm
VOC
000
NOX
000
Luminosity
00000.00
Lux
Measurement Sequence
00 000 000
Flags
Calibration in progress: false
VOC b9: false
NOX b9: false
MAC
CB B8 33 4C 88 4F
Case: Invalid values
Raw binary data: 0xE18000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFXXXXXXFFFFFFFEXXXXXXXXXXFFFFFFFFFFFF
XX : Reserved
Data format
E1
Temperature
NaN
C
Pressure
NaN
Pa
Humidity
NaN
RH-%
PM 1.0
NaN
ug/m^3
PM 2.5
NaN
ug/m^3
PM 4.0
NaN
ug/m^3
PM 10.0
NaN
ug/m^3
CO2
NaN
ppm
VOC
NaN
NOX
NaN
Luminosity
NaN
Lux
Measurement Sequence
NaN
Flags
Calibration in progress: false
VOC b9: true
NOX b9: true
MAC
FF FF FF FF FF FF
Last updated