Skip to content

Data Parsing

This page documents the binary data formats used by Aranet sensors for current readings, historical data, and advertisements.

Characteristic: f0cd3001-95da-4f4b-9ac8-aa55d312af0c
Total Length: 13 bytes

OffsetBytesNameTypeTransform
0-1SS:SSCO₂ (ppm)u16LEnone
2-3TT:TTTemperatureu16LE÷ 20.0 → °C
4-5UU:UUPressureu16LE÷ 10 → hPa
6VVHumidity (%)u8none
7WWBattery (%)u8none
8XXStatusu8See color enum
9-10YY:YYInterval (s)u16LEnone
11-12ZZ:ZZAge (s)u16LEnone
use byteorder::{LittleEndian, ReadBytesExt};
use std::io::Cursor;
fn parse_aranet4_reading(data: &[u8]) -> Result<CurrentReading, Error> {
let mut cursor = Cursor::new(data);
Ok(CurrentReading {
co2: cursor.read_u16::<LittleEndian>()?,
temperature: cursor.read_u16::<LittleEndian>()? as f32 / 20.0,
pressure: cursor.read_u16::<LittleEndian>()? as f32 / 10.0,
humidity: cursor.read_u8()?,
battery: cursor.read_u8()?,
status: Status::try_from(cursor.read_u8()?)?,
interval: cursor.read_u16::<LittleEndian>()?,
age: cursor.read_u16::<LittleEndian>()?,
})
}

Characteristic: f0cd1504-95da-4f4b-9ac8-aa55d312af0c

OffsetNameTypeTransform
0-1Unknownu16LE
2-3Interval (s)u16LEnone
4-5Age (s)u16LEnone
6Battery (%)u8none
7-8Temperatureu16LE÷ 20.0 → °C
9-10Humidityu16LE÷ 10.0 → %
11Status Flagsu8bits[0:1]=humidity, bits[2:3]=temp

Characteristic: f0cd3001-95da-4f4b-9ac8-aa55d312af0c Minimum Length: 18 bytes (extended format with averages is 42 bytes)

OffsetNameTypeTransform
0-1Device Typeu16LE0x0003 = Radon
2-3Interval (s)u16LEnone
4-5Age (s)u16LEnone
6Battery (%)u8none
7-8Temperatureu16LE÷ 20.0 → °C
9-10Pressureu16LE÷ 10 → hPa
11-12Humidityu16LE÷ 10.0 → %
13-16Radon (Bq/m³)u32LEnone
17Statusu8color enum
18-2124h Avg Timeu32LEseconds since epoch
22-2524h Avg Valueu32LEBq/m³ (≥0xff000000 = in progress)
26-297d Avg Timeu32LEseconds since epoch
30-337d Avg Valueu32LEBq/m³ (≥0xff000000 = in progress)
34-3730d Avg Timeu32LEseconds since epoch
38-4130d Avg Valueu32LEBq/m³ (≥0xff000000 = in progress)
OffsetNameTypeTransform
0-1Unknownu16LE
2-3Interval (s)u16LEnone
4-5Age (s)u16LEnone
6Battery (%)u8none
7-10Dose Rateu32LE÷ 1000 → µSv/h
11-18Dose Totalu64LE÷ 1,000,000 → mSv
19-26Duration (s)u64LEnone
27Statusu8

When downloading historical data, each parameter type must be requested separately:

ValueNameData SizeNotes
1TEMPERATUREu16Raw ÷ 20 = °C
2HUMIDITYu16Percentage (0-100)
3PRESSUREu16Raw ÷ 10 = hPa
4CO2u16ppm
5HUMIDITY2u16Tenths of % (AranetRn+)
6PULSESu16Radiation pulses
7RADIATION_DOSEu32Total dose (nSv)
8RADIATION_DOSE_RATEu32Dose rate (nSv/h)
9RADIATION_DOSE_INTEGRALu64Integral dose
10RADON_CONCENTRATIONu32Bq/m³ (4 bytes)
Bytes: 90:XX
XX = Interval in minutes (01, 02, 05, 0A)
Bytes: 92:XX
XX = 00 (standard) or 01 (extended)
Bytes: 61:PP:SS:SS
PP = Parameter (see table above)
SS:SS = Start index (u16LE)

Made with ❤️ by Cameron Rye