Edge SDK -- Models Reference

This document provides a comprehensive reference for all request, response, and data models used in the Zequent Edge SDK.

Table of Contents


Command Models

CommandResult

The universal return type for all EdgeAdapterService commands.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
successbooleanWhether the command succeeded
messageStringHuman-readable result message
tidStringTransaction ID for tracing
snStringDevice serial number
resultTypeCommandResultTypeResult classification

CommandResultType enum:

ValueDescription
SUCCESSCommand executed successfully
ERRORCommand failed
NOT_IMPLEMENTEDCommand is not supported by this adapter

Factory methods:

// Success
CommandResult.success("Message", sn)
CommandResult.success("Message", tid, sn)

// Accepted — still running asynchronously
CommandResult.success("Message", vendorExecutionId, sn)   // vendor id rides on the transaction id

// Error
CommandResult.error("Error message", sn)
CommandResult.error("Error message", tid, sn)

// Not implemented (used internally by default methods)
CommandResult.notImplemented("Not supported", sn)

Utility methods:

boolean isNotImplemented()  // returns true if resultType == NOT_IMPLEMENTED

CurrentCapabilities

Reports the set of capabilities that an adapter currently supports.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
assetTypeAssetTypeEnumType of asset
capabilitiesSet<Capability>Set of supported capabilities
timestamplongTimestamp when capabilities were reported

Factory methods:

// Empty capabilities
CurrentCapabilities.empty(sn)

// With specific capabilities
CurrentCapabilities.of(sn, AssetTypeEnum.ASSET_TYPE_DOCK, capabilitySet)

Capability

Describes a single capability of the adapter.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
commandStringCommand name (e.g., "takeOff", "openCover")
descriptionStringHuman-readable description
availableBooleanWhether the capability is currently available
unavailableReasonStringReason if not available (null if available)
metadataMap<String, String>Additional metadata key-value pairs

Flight Control Models

TakeOffRequest

Request to initiate takeoff.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
tidStringTransaction identifier
coordinatesCoordinatesTakeoff position (latitude, longitude, altitude)

ReturnToHomeRequest

Request to return the sub-asset (drone) to its home position.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
tidStringTransaction identifier
snStringDevice serial number
altitudeFloatReturn altitude in meters

GoToRequest

Request to navigate to specific coordinates.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
tidStringTransaction identifier
coordinatesCoordinatesTarget position

Coordinates

Geographic coordinates.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
latitudeFloatGPS latitude in degrees
longitudeFloatGPS longitude in degrees
altitudeFloatAltitude in meters

Manual Control Models

ManualControlRequest

Request to enter or exit manual control mode.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
enablebooleantrue to enter manual control, false to exit

ManualControlInput

A single frame of joystick/stick input for controlling the device in real-time.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
rollFloatRoll axis value (typically -1.0 to 1.0)
pitchFloatPitch axis value (typically -1.0 to 1.0)
yawFloatYaw axis value (typically -1.0 to 1.0)
throttleFloatThrottle value (typically -1.0 to 1.0)
gimbalPitchFloatGimbal pitch adjustment

This model supports the @Builder pattern:

ManualControlInput input = ManualControlInput.builder()
    .sn("DEVICE_SN")
    .roll(0.0f)
    .pitch(0.5f)
    .yaw(0.0f)
    .throttle(0.3f)
    .gimbalPitch(-0.2f)
    .build();

Camera and Gimbal Models

LookAtRequest

Request to point the camera at specific coordinates.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
latitudeDoubleTarget GPS latitude
longitudeDoubleTarget GPS longitude
altitudeFloatTarget altitude in meters
lockedBooleanWhether to lock the gimbal on the target
payloadIndexStringCamera/payload index identifier

ChangeLensRequest

Request to switch the active camera lens.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
lensStringTarget lens identifier (e.g., "wide", "zoom", "ir")
videoIdStringVideo stream identifier

ChangeZoomRequest

Request to adjust the camera zoom level.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
lensStringLens identifier
payloadIndexStringPayload index
zoomFloatTarget zoom factor

Live Streaming Models

LiveStreamStartRequest

Request to start a video live stream.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
tidStringTransaction identifier
videoIdStringVideo stream identifier
streamServerStringTarget streaming server URL
videoTypeStringStream type (e.g., RTMP, RTSP)

LiveStreamStopRequest

Request to stop a video live stream.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
snStringDevice serial number
tidStringTransaction identifier
videoIdStringVideo stream identifier to stop

Telemetry Models

TelemetryRequestData

Top-level wrapper for pushing telemetry data to the Live Data Service.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
tidStringTransaction identifier
snStringDevice serial number
assetIdStringPlatform asset identifier
timestampLocalDateTimeWhen the telemetry was recorded
telemetryTelemetryDataThe actual telemetry payload — see below

Supports the @Builder pattern:

TelemetryRequestData data = TelemetryRequestData.builder()
    .sn("DEVICE_SN")
    .tid(UUID.randomUUID().toString())
    .timestamp(LocalDateTime.now())
    .telemetry(telemetryData)
    .build();

TelemetryData

Unified asset and sub-asset telemetry. Exactly one of asset / subAsset must be set — which one determines getSourceType() (ASSET, SUB_ASSET, or UNSPECIFIED if neither/both are set). Position and movement fields that both an asset and a sub-asset can report (latitude, longitude, absoluteAltitude, relativeAltitude, windSpeed, heading) live directly on TelemetryData, not duplicated per source type.

asset and subAsset describe the source/context of the reading — which entity it is about — not a device category. An Asset is the registered top-level entity (a drone, dock, ground vehicle, sensor gateway, camera or station); a SubAsset is an optional child entity belonging to an Asset. Set .asset(...) when the reading describes the Asset itself, including when that Asset is the drone, and .subAsset(...) when it describes a child SubAsset. A drone registered directly as an Asset therefore correctly reports sourceType = ASSET with subAsset left null. See Assets & Sub-Assets for worked examples of both configurations.

Package: com.zqnt.utils.edge.sdk.domains

FieldTypeDescription
idStringTelemetry identifier (required)
timestampLocalDateTimeMeasurement time (required)
snStringDevice serial number (required)
latitudeDoubleGPS latitude
longitudeDoubleGPS longitude
absoluteAltitudeFloatAltitude above sea level (m)
relativeAltitudeFloatAltitude above ground (m)
windSpeedFloatWind speed (m/s)
headingFloatHeading (degrees)
assetAssetDetailsSet when the reading describes the registered top-level Asset itself (a standalone drone, a dock, a vehicle, a sensor gateway, ...)
subAssetSubAssetDetailsSet when the reading describes a child SubAsset belonging to an Asset (e.g. a drone docked in a station)

validate() throws IllegalArgumentException if id/timestamp/sn are missing, or if asset/subAsset aren't set to exactly one.

TelemetryData telemetry = TelemetryData.builder()
    .id(UUID.randomUUID().toString())
    .timestamp(LocalDateTime.now())
    .sn("DOCK-1")          // or a standalone drone's own SN, e.g. "SIM-DRONE-001"
    .latitude(47.3769)
    .longitude(8.5417)
    .absoluteAltitude(450.0f)
    .asset(assetDetails)   // or .subAsset(subAssetDetails) — exactly one
    .build();

AssetDetails

Telemetry describing the registered top-level Asset itself. Nested under TelemetryData.asset.

This is a superset covering every kind of Asset, so not every field applies to every device. A dock populates the enclosure and climate fields (coverState, airConditioner, insideTemp, workingVoltage); a standalone drone registered as an Asset leaves those null and populates only what it physically has. Leaving inapplicable fields null is correct behaviour, not incomplete telemetry.

FieldTypeDescription
environmentTempFloatAmbient temperature (C)
insideTempFloatInternal temperature (C)
humidityFloatHumidity (%)
modeAssetModeOperational mode
rainfallRainfallEnumRainfall condition
subAssetInformationSubAssetInformationPaired sub-asset info
subAssetAtHomeBooleanSub-asset at dock
subAssetChargingBooleanSub-asset charging
subAssetPercentageFloatSub-asset battery (%)
debugModeOpenBooleanDebug mode active
hasActiveManualControlSessionBooleanManual control active
coverStateAssetCoverStateEnumCover state
workingVoltageIntegerWorking voltage (mV)
workingCurrentIntegerWorking current (mA)
supplyVoltageIntegerSupply voltage (mV)
positionValidBooleanGPS position valid
networkInformationNetworkInformationNetwork info
airConditionerAirConditionerAC state
manualControlStateManualControlStateEnumDRC state
positionStatePositionStateGNSS fix quality
wirelessLinkWirelessLinkInformationCellular/SDR link diagnostics
sdrStateSdrStateSDR link diagnostics

SubAssetDetails

Telemetry specific to a sub-asset (drone, vehicle). Nested under TelemetryData.subAsset.

FieldTypeDescription
horizontalSpeedFloatHorizontal speed (m/s)
verticalSpeedFloatVertical speed (m/s)
windDirectionStringWind direction
gearIntegerLanding gear state
payloadTelemetryPayloadTelemetryPrimary payload/camera data
batteryInformationBatteryInformationBattery data
heightLimitIntegerMax height limit (m)
homeDistanceFloatDistance to home (m)
totalMovementDistanceDoubleTotal distance traveled (m)
totalMovementTimeDoubleTotal flight time (s)
modeSubAssetModeFlight mode
countryStringCountry code
componentTelemetryList<ComponentTelemetryData>Per-component telemetry (multiple payloads/sensors)

Nested types

SubAssetInformation:

FieldTypeDescription
snStringSub-asset serial number
modelStringSub-asset model name
pairedBooleanWhether paired
onlineBooleanWhether online

NetworkInformation:

FieldTypeDescription
typeNetworkTypeEnumNetwork type (4G, 5G, etc.)
rateFloatData rate
qualityNetworkStateQualityEnumSignal quality

AirConditioner:

FieldTypeDescription
stateAssetAirConditionerStateEnumAC state
switchTimeIntegerTime until state switch

BatteryInformation:

FieldTypeDescription
percentageStringBattery percentage
remainingTimeIntegerRemaining time (seconds)
returnToHomePowerStringPower needed for RTH

PayloadTelemetry:

FieldTypeDescription
idStringPayload identifier
timestampLocalDateTimeMeasurement time
nameStringPayload name
cameraDataCameraDataCamera state
rangeFinderDataRangeFinderDataRangefinder data
sensorDataSensorDataSensor readings

ComponentTelemetryData (one entry per physical component/payload on a sub-asset):

FieldTypeDescription
componentIdStringComponent identifier
externalIdStringVendor-assigned identifier
kindStringComponent kind (e.g. "camera")
timestampLocalDateTimeMeasurement time
cameraDataCameraDataCamera state
rangeFinderDataRangeFinderDataRangefinder data
sensorDataSensorDataSensor readings
attributesMap<String, Object>Free-form additional attributes

CameraData:

FieldTypeDescription
currentLensStringActive lens
gimbalPitchFloatGimbal pitch (degrees)
gimbalYawFloatGimbal yaw (degrees)
gimbalRollFloatGimbal roll (degrees)
zoomFactorFloatCurrent zoom level

RangeFinderData:

FieldTypeDescription
targetLatitudeDoubleTarget latitude
targetLongitudeDoubleTarget longitude
targetDistanceFloatDistance to target (m)
targetAltitudeFloatTarget altitude (m)

SensorData:

FieldTypeDescription
targetTemperatureFloatMeasured temperature (C)

PositionState:

FieldTypeDescription
gpsNumberIntegerNumber of GPS satellites in view
rtkNumberIntegerNumber of RTK satellites in view
qualityIntegerFix quality indicator

WirelessLinkInformation and SdrState carry low-level 4G/SDR link diagnostics (frequency band, quality, link state) — populate them only if your device actually reports this level of detail; both are optional.


Mission Models

MissionData

Represents a mission returned by the Mission Autonomy Service.

Package: com.zqnt.sdk.edge.adapter.domains

FieldTypeDescription
idUUIDUnique mission identifier
nameStringMission name

Configuration Models

EdgeClientConfig

The edge adapter configuration interface, mapped from application.properties with @ConfigMapping(prefix = "zequent.edge").

Package: com.zqnt.sdk.edge.config

MethodReturn TypePropertyDefaultDescription
endpoint()Stringzequent.edge.endpoint--Adapter listen address
sn()Stringzequent.edge.sn--Device serial number
timeout()Durationzequent.edge.timeout30sCommand timeout
maxRetries()intzequent.edge.max-retries3Max retry attempts
assetType()AssetTypeEnumzequent.edge.asset-type--Asset type
assetVendor()AssetVendorzequent.edge.asset-vendor--Asset vendor
assetId()Optional<String>zequent.edge.asset-idemptyPlatform asset ID

Access these values in your code via the EdgeClient bean:

@Inject
EdgeClient edgeClient;

String sn = edgeClient.getSn();
EdgeClientConfig config = edgeClient.getConfig();
Duration timeout = config.timeout();

Or inject EdgeClientConfig directly:

@Inject
EdgeClientConfig config;

String sn = config.sn();
AssetTypeEnum type = config.assetType();

Was this page helpful?