airwiseOS Data Exchange
Learn how to push aircraft telemetry and sensor data into NexusX. We support multiple protocols and have a powerful generic mapping engine to quickly and easily integrate your data into NexusX.
NexusX
Overview
airwiseOS supports multiple ingestion options so partners can connect existing drone, sensor, and tracking systems using the protocol that best fits their product and operating environment.
Supported protocols: udp, tcp, mqtt, http.
Protocols
UDP
Raw datagrams delivered over UDP. UDP (User Datagram Protocol) is a lightweight, connectionless transport protocol — messages are sent without a handshake and are not acknowledged, retried, or guaranteed to arrive in order, which makes it well suited to high-frequency, low-latency telemetry.
Endpoint: data.airwisesolutions.app
Security
- IP allowlisting is required — only datagrams arriving from your registered source IP address are accepted.
Sample code (Node.js / TypeScript)
import dgram from "node:dgram";
// Host is your NexusX ingestion endpoint; port is provided during onboarding.
const HOST = "data.airwisesolutions.app";
const PORT = Number(process.env.NEXUSX_UDP_PORT);
const socket = dgram.createSocket("udp4");
const payload = Buffer.from(JSON.stringify({ /* your telemetry payload */ }));
socket.send(payload, PORT, HOST, (error) => {
if (error) console.error("NexusX UDP send failed:", error);
socket.close();
});
TCP
A length-framed binary stream over TCP. TCP (Transmission Control Protocol) is a connection-oriented transport protocol — it establishes a persistent connection via a handshake and guarantees messages arrive complete, in order, and without duplication, which makes it well suited to reliable delivery of continuous data streams.
Endpoint: data.airwisesolutions.app
Security
- IP allowlisting is required — only connections from your registered source IP address are accepted.
Sample code (Node.js / TypeScript)
import net from "node:net";
// Host is your NexusX ingestion endpoint; port is provided during onboarding.
const HOST = "data.airwisesolutions.app";
const PORT = Number(process.env.NEXUSX_TCP_PORT);
const socket = net.createConnection({ host: HOST, port: PORT }, () => {
const payload = Buffer.from(JSON.stringify({ /* your telemetry payload */ }));
const length = Buffer.alloc(4);
length.writeUInt32BE(payload.length);
socket.write(Buffer.concat([length, payload]));
socket.end();
});
socket.on("error", (error) => console.error("NexusX TCP connection failed:", error));
MQTT
Messages published over MQTT. MQTT (Message Queuing Telemetry Transport) is a lightweight publish/subscribe messaging protocol built on top of a persistent TCP connection — clients authenticate once and then publish messages to a topic, which makes it well suited to devices with intermittent connectivity or constrained bandwidth.
Endpoint: data.airwisesolutions.app
Security
- Each MQTT client must authenticate with a client ID and password.
Sample code (Node.js / TypeScript)
import mqtt from "mqtt";
// clientId and username are provided independently during onboarding — they
// do not need to match.
const client = mqtt.connect("mqtts://data.airwisesolutions.app", {
clientId: process.env.NEXUSX_MQTT_CLIENT_ID,
username: process.env.NEXUSX_MQTT_USERNAME,
password: process.env.NEXUSX_MQTT_CLIENT_PASSWORD,
});
client.on("connect", () => {
const payload = JSON.stringify({ /* your telemetry payload */ });
client.publish("<your-assigned-topic>", payload, { qos: 1 }, (error) => {
if (error) console.error("NexusX MQTT publish failed:", error);
client.end();
});
});
client.on("error", (error) => console.error("NexusX MQTT connection failed:", error));
HTTP
Data pushed as an HTTP POST request. HTTP (Hypertext Transfer Protocol) is a request/response protocol over TLS — each message is sent as a discrete POST request and acknowledged with a standard HTTP status code, which makes it well suited to integrations that already have an HTTP client and prefer simple request/response semantics over a persistent connection.
Endpoint: POST https://data.airwisesolutions.app/ingest
Security
- Caller sends a pre-shared API key in the
x-api-keyrequest header.
Sample code (Node.js / TypeScript)
const response = await fetch("https://data.airwisesolutions.app/ingest", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.NEXUSX_API_KEY as string,
},
body: JSON.stringify({ /* your telemetry payload */ }),
});
if (!response.ok) {
throw new Error("NexusX HTTP ingest failed: " + response.status);
}
Data Structures
NexusX Simple Telemetry
NexusX Simple Telemetry is a ready-to-use custom data structure for reporting telemetry position to NexusX. Each telemetry record is a JSON object with the shape below.
{
"parser": "custom",
"customParserCode": "nexusx-simple-telemetry",
"objectId": "<unique identifier for the tracked object>",
"latitude": <decimal latitude, WGS84>,
"longitude": <decimal longitude, WGS84>,
"elevationAgl": <decimal AGL in meters>,
"timestamp": <epoch milliseconds>
}
ASTERIX CAT021
ASTERIX is a binary format defined by EUROCONTROL for air traffic surveillance data exchange. airwiseOS ingests ASTERIX Category 021 (ADS-B reports) per the EUROCONTROL ASTERIX specifications.
Messages are sent as raw binary datagrams or byte streams. The consumer decodes each message using the ASTERIX CAT021 specification.
Custom
NexusX includes a custom data structure engine that lets a partner's own payload shape be ingested without matching one of the built-in parsers listed below. Contact airwise to have your data structure quickly and easily mapped onto NexusX's ingestion schema.
Vehicle Integrations
Remote ID
Radars
uAvionix
CASIA
Contact airwise to connect your CASIA system to airwiseOS.
Flightline
Contact airwise to connect your uAvionix Flightline system to airwiseOS.