Skip to main content

Endpoint

WSS https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/ws

Query Parameters

ParameterTypeDefaultDescription
feedsstringgpsComma-separated feed names (e.g. gps,attitude,battery)
intervalfloat1.0Push interval in seconds. Range: 0.510.0

Auth handshake

Same first-message pattern as the Kit WebSocket:
Client → Server:  { "type": "auth", "key": "hlk_..." }
Server → Client:  { "type": "ready", "feeds": ["gps", "attitude"] }
Server → Client:  { "type": "data", "feed": "gps", "payload": {...}, "ts": "..." }

Available feeds by asset type

Drone (MAVLink)
FeedPayload fields
gpslat, lon, alt_m, ground_speed, heading
gps_rawlat, lon, alt_m, fix_type, satellites_visible
attituderoll, pitch, yaw (degrees)
batteryvoltage, current, remaining_pct
radiorssi, remote_rssi, noise, rx_errors
sys_statusarmed, flight_mode, ekf_ok
vfr_hudairspeed, groundspeed, throttle_pct, climb_mps, heading
Camera (Reolink)
FeedPayload fields
statusonline, motion_alarm, ai_alarm
motiondetected, timestamp
ai_detectiondetected, types, timestamp
Camera (ONVIF)
FeedPayload fields
statusonline, timestamp
motiondetected
Partner asset
FeedPayload fields
gpslat, lon, alt_m, bearing, speed_mps, source, timestamp

Example

# Stream drone telemetry
with client.stream(kit_id, asset_id, feeds=["gps", "attitude", "battery"]) as stream:
    for event in stream:
        feed = event["feed"]
        p = event["payload"]
        if feed == "gps":
            print(f"Pos: {p['lat']:.5f}, {p['lon']:.5f}  Alt: {p['alt_m']}m")
        elif feed == "attitude":
            print(f"Heading: {p['yaw']:.1f}°  Pitch: {p['pitch']:.1f}°")
        elif feed == "battery":
            print(f"Battery: {p['remaining_pct']}%  {p['voltage']}V")

# Stream camera motion events
with client.stream(kit_id, camera_id, feeds=["motion", "ai_detection"]) as stream:
    for event in stream:
        if event["feed"] == "ai_detection":
            p = event["payload"]
            if p["detected"]:
                print(f"AI detection: {p['types']}")
const stream = client.stream({
  kitId,
  assetId,
  feeds: ['gps', 'attitude', 'battery'],
  interval: 0.5,
})

stream.on('data', ({ feed, payload }) => {
  switch (feed) {
    case 'gps':
      console.log(payload.lat, payload.lon, payload.alt_m)
      break
    case 'attitude':
      console.log(`Heading: ${payload.yaw}°`)
      break
    case 'battery':
      console.log(`Battery: ${payload.remaining_pct}%`)
      break
  }
})

stream.close()
const ws = new WebSocket(
  `wss://argus.hoplynk.com/api/kits/${kitId}/assets/${assetId}/ws?feeds=gps,attitude&interval=0.5`
)

ws.onopen = () => ws.send(JSON.stringify({ type: 'auth', key: 'hlk_...' }))
ws.onmessage = ({ data }) => {
  const { feed, payload } = JSON.parse(data)
  if (feed === 'gps') console.log(payload.lat, payload.lon)
}