Atmo 3D data: second seat, NMEA and your own software

How Atmo shares its wind and smart vario with a second-seat instrument over CAN, and the $LXBC,FUSION and $LXBC,FAST sentences field by field for anyone building on them.

4 MIN·AGGIORNATO OTT 2026

Atmo's results do not stay inside one instrument. The Era that runs Atmo shares its wind and smart vario over the CAN bus with a second-seat instrument, and sends them in two LX NMEA sentences to whatever is connected to its user port or Bluetooth. This article is for pilots setting up a two-seater and for anyone writing software that wants Atmo's numbers. For the protocol in general, start with LX NMEA sentences: a reference for developers and integrators.

Second seat: one licence, two cockpits

Atmo runs on the Era that carries the licence. That instrument publishes Atmo's current and average wind, its smart vario and its netto on the CAN bus.

A second-seat instrument on the same bus with current firmware picks them up: its own Wind page, the cyan smart-vario needle and, if ticked, the Smart vario sound all work from the front instrument's values. The SVAR navbox does not — on a second seat it reads 0.0. The second seat needs no licence of its own; it simply listens.

If the front instrument stops publishing — on the ground, before Atmo has settled after takeoff, or when the bus is disconnected — the second seat's values go blank after about three seconds rather than freeze on an old number.

On the wire: two sentences

Atmo's values travel in two sentences of the $LXBC broadcast family. Both are LX-specific: an app that does not know them ignores them and keeps working from the standard sentences, which are unchanged.

SentenceCarriesRateSwitched on by
$LXBC,FUSIONNetto, smart vario, current and average wind, confidence, statusAbout once a second, with each LXWP block — not configurableLXWPx output under Setup › NMEA, on an instrument running Atmo
$LXBC,FASTIAS, TAS, altitude, vario, netto, smart vario, SC/vario modeUp to 10 HzLXBC output under Setup › NMEA, plus your software on every connection — off by default

$LXBC,FUSION

$LXBC,FUSION,<netto>,<smart_vario>,<wind_dir>,<wind_speed>,<avg_dir>,<avg_speed>,<confidence>,<status>*CS
$LXBC,FUSION,0.42,0.55,245,3.4,251,2.9,0.87,18103*14
$LXBC,FUSION,,,,,,,0.00,434002*2E
FieldUnitNotes
nettom/sVertical motion of the airmass, up positive
smart_variom/sThe smart vario — the same value as the cyan needle
wind_dir, avg_dirdegreesDirection the wind blows from, current and average
wind_speed, avg_speedm/sCurrent and average wind speed
confidence0.0–1.0How sure Atmo is of its wind solution; 0.00 whenever it is not flying
statushex wordThe low byte is the solution state: 0 not started, 1 initial alignment, 2 converging, 3 locked, 4 degraded (a key sensor missing). The bits above it are flags, so a locked instrument sends something like 18103, never a bare 3

The value fields are empty unless the low byte of status is 3. The second example is a valid sentence from an instrument on the ground: state 02, confidence 0.00, no values. Mask the low byte of status before comparing it, and treat empty fields as no value, never as zero.

There is no request for this sentence: it simply arrives with the LXWP block.

$LXBC,FAST

$LXBC,FAST,<ias_kmh>,<tas_kmh>,<alt_m>,<vario>,<netto>,<smart_vario>,<sc_mode>*CS
$LXBC,FAST,102.4,108.9,1043.2,-0.45,0.82,0.31,0*02

FAST is the instrument's high-rate flight-data sentence, not an Atmo sentence as such: IAS and TAS in km/h, altitude in metres, and the classic vario and netto in m/s. Its smart_vario field is Atmo's smart vario and is empty unless Atmo is locked. FAST needs the LXBC output enabled, is off by default, and its interval is forgotten at every power cycle, so your software enables it on each connection:

$LXDT,SET,BC_INT,FAST,0.1*64

0.1 seconds is the 10 Hz ceiling. Firmware without FAST accepts the request but never sends the sentence; detect support by reading the intervals back with $LXDT,GET,BC_INT and looking for the FAST pair in the answer.

What a standard app sees

XCSoar, SeeYou Navigator and other flight apps that read the standard LX sentences keep receiving the instrument's classic vario and wind exactly as before. They show Atmo's values only if they read $LXBC,FUSION or $LXBC,FAST. If you maintain such an app and want to add them, the tables above are all you need — and we are glad to help: talk to us.

Checklist for integrators

  • Parse status first: mask its low byte for the solution state, and accept empty value fields.
  • Expect FUSION about once a second; use FAST for anything that needs the vario at a high rate.
  • Re-send SET,BC_INT for FAST after every reconnect and every power cycle.
  • Units differ between the sentences: FUSION wind speeds are m/s, FAST airspeeds km/h; varios are m/s, up positive; directions are from. Convert for display, never in the parser.
  • Accept upper- and lower-case hex in checksums.
  • Locked means Atmo's solution has converged, not that it is exact. Use the confidence field, and remember that its straight-flight wind can drift on long, smooth glides.

Where to go next

CONTINUA A LEGGERE