Wiki

Technical reference for system integrators and engineers.

Barometer

Pressure and altitude, reported differentially against a fixed anchor rather than absolutely — which is what makes floor-level accuracy possible at all.

Records travel as Sensor TLV types 0x03 raw and 0x04 aggregate. The same sensor is fitted to both anchors and tags, and that symmetry is the whole design.

Why differential

Absolute barometric altitude drifts by tens of metres with weather. A floor is about three metres. So an absolute reading cannot resolve a floor on Monday and still be right on Thursday.

The difference between two barometers reading at the same moment does not drift, because a weather system moves both readings together:

A pressure system passes over the site Absolute Differential anchor tag both readings drift tens of metres, together a floor is ~3 m — the drift swamps the signal difference the difference is unchanged the drift is common to both and cancels this works because anchors and tags carry the same sensor — it is a design decision, not a coincidence
The anchor is the reference end: it is fixed, so its reading is the site's current baseline.

altitude_cm in every record is therefore relative to an anchor reference, not height above sea level. A consumer that treats it as absolute will be wrong by whatever the weather is doing.

Raw sample — 0x03

pressure_pa   int32    4 B
altitude_cm   int16    2 B
                       6 B per sample

Aggregate — 0x04

FieldTypeUnitMeaning
window_msuint16msaggregation window
sample_countuint16samples included
altitude_cmint16cmmean, differential
alt_min_cmint16cmminimum in the window
alt_max_cmint16cmmaximum in the window
vert_vel_cm_sint16cm/srate of climb or descent
pressure_paint32Paraw, so the server can recompute
floor_indexuint8quantised level; 0xFF = unknown
flagsuint8bitsdisturbance flags, see below

Total 18 bytes. The raw pressure is carried alongside the derived altitude deliberately — a reference or conversion that turns out to be wrong can be recomputed from field data instead of being baked irreversibly into the altitude.

alt_min_cm and alt_max_cm bound the window rather than describing its shape. A wide spread with a mean at floor level usually means a lift or a stairwell, not a stable position — and the mean alone would hide that.

Disturbance flags

BitFlagMeaning
0Transientlocal pressure disturbance detected — doors, ventilation, passing vehicles
1Rapid descenta fall rate rather than a walk down stairs
2No referenceno anchor reference available yet, so the altitude is not yet differential
Differential barometry cancels weather; it does not cancel local transients. A door opening, a ventilation fan starting or a vehicle passing shifts pressure in one zone only, so anchor and tag do not see it together and the difference moves. Bit 0 is the device saying so — a backend should down-weight the altitude on that record rather than either trusting it or discarding it.

Bit 2 is the state before a reference exists — at first power-on, or when the anchor reference has not reached the device. The altitude field is populated but is not differential, so it carries the absolute drift the whole scheme exists to avoid.

Floor index

floor_index is the quantised level derived on-device from the differential altitude. 0xFF means unknown, which is a distinct state from floor zero — a consumer must test for it before using the value as an index.

Temperature — 0x05

Temperature is a separate record, not a field inside the barometer aggregate, for three reasons: it changes far more slowly than pressure and so warrants its own schedule; several sources exist on these boards and they are not interchangeable; and it has two unrelated consumers.

source     uint8      sensor_temp_src_t
reserved   uint8
temp_dc    int16      deci-degrees Celsius (0.1 °C)
                      4 B
SourceSensor
0Barometer
1IMU
2UWB radio die
3MCU
For ranging compensation — antenna delay and clock drift — only source 2, the UWB radio's own die temperature, is correct. The others describe the environment, not the part whose timing is being corrected. A consumer doing environmental monitoring wants the opposite.

The record is separate but still travels in the same frame. A standalone four-byte frame would spend far more airtime on preamble than on payload.

Related

  • Sensor TLV — the record envelope and full catalogue.
  • IMUvert_vel_cm_s alongside the IMU's freefall event is the stronger fall signal.
  • Locator Pro — a fixed anchor acting as the reference end.
  • MQTT — how these fields appear in the Baro object of a /Sensors message.