Data produced by the SimConnect module
One entity per tick: the user’s own aircraft. Neither package captures AI traffic or any aircraft other than the one the user is flying.
Entity
| Field | Value |
|---|---|
| Id | An FNV-1a hash of the aircraft’s TITLE SimVar - deterministic across runs, not randomized per process. 0 if the simulator ever reports an empty title. |
| Name | The aircraft’s TITLE, or the literal string "Unknown Aircraft" if SimConnect reports none |
Aircraft type (fixed-wing, rotary-wing, or unknown) is classified from the CATEGORY SimVar:
Helicopter maps to rotary-wing; Airplane, Glider and Amphibian map to fixed-wing;
anything else is unknown. This classification gates which events can fire - see below.
Shared components
Both packages populate the same components from the same SimConnect variable groups. Units are converted to SI where HEAT ProtoLib expects it (feet to meters, knots to meters/second, pounds-force to newtons); everything else keeps the unit stated in its field description.
| Component | What it carries |
|---|---|
WorldPositionComponent | Latitude, longitude, altitude, true heading |
DynamicsComponent | World velocity and acceleration, ground speed |
AirDataComponent | Ambient temperature, pressure, wind, visibility, in-cloud state |
GenericAircraftComponent | Indicated altitude, radio height, G-force |
AircraftEngineComponent | Combustion state, throttle position, jet thrust, reverse thrust |
AircraftLandingGearComponent | Gear position, gear handle, parking brake |
FWAControlSurfacesComponent, FWAInputComponent, FWADataComponent | Fixed-wing only: control surfaces, trim, flaps, spoilers, pedal/yoke input, airspeed, mach, stall/overspeed flags |
RotaryWingDataComponent | Rotary-wing only: rotor torque and trim |
AircraftAvionicsComponent | Autopilot master, flight director, autothrottle, selected heading/altitude/airspeed/mach/vertical speed, hold-mode states |
ResourceStoresComponent, FuelSystemComponent | Fuel quantities per tank (main, center, aux, tip, external), dump and crossfeed state. Transfer rate, refuel state and selected source fields are published at their proto default since SimConnect does not provide them |
ATCDataComponent | ATC identity, callsign, transponder code |
The PropulsionControlData group (throttle lever, reverse thrust, afterburner state) is
subscribed and shown in this module’s own debug view, but is not mapped into any published
component in this version.
Transition events
All state-change events are StateChangedEvents with a plain
string state label, detected by comparing this tick’s value against the previous tick’s - not
against every value SimConnect delivered in between. See Configure
for why a fast transition can be missed entirely if Interval is too high.
| Event | state value(s) | Condition |
|---|---|---|
| Ground/air transition | grounded, airborne | Any aircraft type |
| Engine state | engine_running, engine_stopped | Any aircraft type |
| Stall warning | stall_warning_on, stall_warning_off | Fixed-wing only - never fires for a rotary-wing or unknown-type aircraft |
| Overspeed warning | overspeed_warning_on | Fixed-wing only. There is no overspeed_warning_off - once triggered, nothing in this module’s output signals the warning clearing |
Because the event detector’s internal “previous state” resets to a fixed default at the start of
every session (assumes grounded, engine off), starting a session with the aircraft already
airborne or with the engine already running publishes a grounded-to-airborne or
engine_stopped-to-engine_running transition on the very first tick, even though nothing
actually changed at that instant. Treat the first tick’s events as suspect, not a real transition.
Prepar3D-only: weapons and combat
Prepar3D’s package additionally polls weapon, gun, countermeasure and fire-control-system state every tick and emits discrete events on change - MSFS’s package has none of this.
| Event | Trigger | Real limitation |
|---|---|---|
FiredEvent (weapon) | A weapon station’s object count decreases | bullet_entity_id is the station’s own object id; weapon_name/munition_name both come from the same WEAPON TYPE SimVar |
FiredEvent (gun) | The gun trigger’s rising edge | Fires on the trigger edge alone, with no ammo-count check - weapon_name: "gun", munition_name: "rounds" regardless of whether rounds actually left the gun |
CountermeasureEvent | A countermeasure station’s object count decreases | countermeasure_name is always empty - there is no chaff/flare/decoy identification, only “something was dispensed” |
TargetTrackingEvent | The FCS targeted object id changes | Emits a Released for the old target (if any) followed by a Locked for the new one (if any) in the same tick when switching directly between two targets |
StateChangedEvent | Master arm toggles, or weapon selection changes | master_arm_on/master_arm_off; weapon_selected:<type> where <type> is whatever WEAPON TYPE reports, not a fixed vocabulary. No event fires when the selection clears to none |
Up to 16 weapon/gun/countermeasure stations are tracked; SimConnect itself reports 0 for
stations beyond the aircraft’s actual STATION COUNT, so this cap is not usually a practical
limit.
Prepar3D-only: cockpit display state
A small always-on probe reports two fixed display slots, primary_flight_display and
multifunction_display, into
AircraftDisplayStateComponent, each with a coarse
active_page value: off, active, or a *_partial value naming which avionics circuit is
degraded. This reads only Prepar3D’s generic, simulator-wide A: variables; it cannot see
aircraft-specific gauge (L:) variables, so it cannot represent a custom multi-function-display
page layout - only whether the avionics behind it are powered and intact.