Session notes for AOC telemetry integration changes
Date: January 16, 2026
Session: AOC Telemetry Integration
Status: ✅ COMPLETE
Added support for Virtual Airlines (AOC) to push flight sim telemetry via the SWIM ingest API. Key fields like vertical_rate_fpm and OOOI times can now be received from flight simulators rather than being calculated server-side.
Key Decision: Receive telemetry from AOC sources rather than calculate in ADL.
Investigated SWIM API field population rates:
| Field | VATSIM Sync | Status |
| vertical_rate_fpm | ❌ Not provided | Now via AOC |
| out_utc | ⚠️ Zone detection (36%) | Now via AOC |
| off_utc | ⚠️ Zone detection (~10%) | Now via AOC |
| on_utc | ⚠️ Zone detection (~10%) | Now via AOC |
| in_utc | ⚠️ Zone detection (~10%) | Now via AOC |
api/swim/v1/ingest/adl.php (v3.2.0)
vertical_rate_fpm field mappingout_utc, off_utc, on_utc, in_utc)eta_utc and etd_utc for FMC timesapi/swim/v1/ingest/track.php (v1.2.0)
$conn_swim instead of $conn_adl)vertical_rate_fpm supportAll telemetry columns already exist in swim_flights:
-- From 003_swim_api_database_fixed.sql
vertical_rate_fpm INT NULL,
out_utc DATETIME2 NULL,
off_utc DATETIME2 NULL,
on_utc DATETIME2 NULL,
in_utc DATETIME2 NULL,
eta_utc DATETIME2 NULL,
etd_utc DATETIME2 NULL,
SWIM_TODO.md - Added AOC Telemetry sectionVATSIM_SWIM_API.postman_collection.json - Added AOC examples| File | Change |
api/swim/v1/ingest/adl.php | Added telemetry fields, v3.2.0 |
api/swim/v1/ingest/track.php | Fixed DB connection, added vertical_rate, v1.2.0 |
docs/swim/SWIM_TODO.md | Added AOC Telemetry section |
docs/swim/VATSIM_SWIM_API.postman_collection.json | Added AOC examples |
adl/procedures/sp_Adl_CalculateVerticalRate.sql (not needed)adl/migrations/050_add_vertical_rate_calculation.sql (not needed)database/migrations/swim/005_swim_add_telemetry_columns.sql (columns exist)curl -X POST "https://perti.vatcscc.org/api/swim/v1/ingest/adl" \
-H "Authorization: Bearer swim_par_your_key" \
-H "Content-Type: application/json" \
-d '{
"flights": [{
"callsign": "DLH401",
"dept_icao": "KJFK",
"dest_icao": "EDDF",
"phase": "climbing",
"latitude": 41.2345,
"longitude": -72.5678,
"altitude_ft": 18500,
"groundspeed_kts": 320,
"vertical_rate_fpm": 2200
}]
}'
curl -X POST "https://perti.vatcscc.org/api/swim/v1/ingest/adl" \
-H "Authorization: Bearer swim_par_your_key" \
-H "Content-Type: application/json" \
-d '{
"flights": [{
"callsign": "DLH401",
"dept_icao": "KJFK",
"dest_icao": "EDDF",
"out_utc": "2026-01-16T14:30:00Z",
"off_utc": "2026-01-16T14:45:00Z"
}]
}'
curl -X POST "https://perti.vatcscc.org/api/swim/v1/ingest/track" \
-H "Authorization: Bearer swim_par_your_key" \
-H "Content-Type: application/json" \
-d '{
"tracks": [{
"callsign": "DLH401",
"latitude": 54.5123,
"longitude": -24.8765,
"altitude_ft": 39000,
"ground_speed_kts": 486,
"heading_deg": 78,
"vertical_rate_fpm": 0
}]
}'
┌─────────────────────┐
│ VATSIM Network │──────────────────────────┐
│ │ │
└─────────────────────┘ │
│
┌─────────────────────┐ ┌─────────────────┐ │ ┌─────────────────┐
│ Virtual Airline │ │ ADL Daemon │◄─┴──▶│ SWIM_API DB │
│ (smartCARS, etc) │ │ (15s refresh) │ │ (Azure SQL) │
└──────────┬──────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ telemetry │ sync │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ SWIM Ingest API │
│ │
│ vertical_rate_fpm ◄── From flight sim │
│ OOOI times ◄── From ACARS/flight sim │
│ eta_utc ◄── From FMC │
└─────────────────────────────────────────────────────────────┘
| Field | Type | Description | Source |
vertical_rate_fpm | INT | Climb/descent rate (ft/min) | Flight sim |
out_utc | DATETIME | Gate departure (pushback) | ACARS |
off_utc | DATETIME | Wheels up (takeoff) | ACARS |
on_utc | DATETIME | Wheels down (landing) | ACARS |
in_utc | DATETIME | Gate arrival | ACARS |
eta_utc | DATETIME | FMC-calculated ETA | FMC |
etd_utc | DATETIME | Expected departure | Dispatch |
1. Test with live virtual airline - Coordinate with VA to test integration
2. Expand airport geometry - Improve zone detection coverage (currently 201 airports)
3. C#/Java SDKs - Build when consumers need them
Initially considered calculating vertical_rate_fpm from trajectory altitude deltas in ADL. However:
1. Flight sims have native data - MSFS, X-Plane, P3D all expose vertical speed directly
2. More accurate - Sim data is instantaneous; calculation has 15-60s lag
3. Less compute - No need to query trajectory tables
4. Already in schema - Column exists, just needed ingest mapping
OOOI zone detection in ADL continues to work as fallback:
Session completed January 16, 2026