Skip to main content
GET
/
api
/
kits
/
{kit_id}
/
assets
/
{asset_id}
/
telemetry
Get Asset Telemetry
curl --request GET \
  --url https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry
import requests

url = "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://argus.hoplynk.com/api/kits/{kit_id}/assets/{asset_id}/telemetry")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
kit_id
string
required
UUID of the kit.
asset_id
string
required
UUID of the asset.

Response

Returns an object keyed by feed name. Each value is the most recent payload published to that feed. Only feeds that have received at least one message are included.

Available feeds by asset type

Drone (MAVLink)
FeedDescription
gpsFused position: lat, lon, alt_m, ground_speed, heading
gps_rawRaw GPS: lat, lon, alt_m, fix_type, satellites_visible
batteryvoltage, current, remaining_pct
attituderoll, pitch, yaw (degrees)
radiorssi, remote_rssi, noise, rx_errors
sys_statusarmed, flight_mode, ekf_ok, pre_arm_check
vfr_hudairspeed, groundspeed, throttle_pct, climb_mps, heading
Camera (Reolink)
FeedDescription
statusonline, motion_alarm, ai_alarm
motiondetected, timestamp
ai_detectiondetected, types (people, vehicle, dog_cat, face, package), timestamp
Camera (ONVIF)
FeedDescription
statusonline, timestamp
motiondetected
Partner asset
FeedDescription
gpslat, lon, alt_m, bearing, speed_mps, source, timestamp

Example

telemetry = client.get_telemetry(kit_id, asset_id)

# Drone
gps = telemetry.get("gps") or {}
print(gps.get("lat"), gps.get("lon"), gps.get("alt_m"))

battery = telemetry.get("battery") or {}
print(f"Battery: {battery.get('remaining_pct')}%  {battery.get('voltage')}V")

attitude = telemetry.get("attitude") or {}
print(f"Heading: {attitude.get('yaw')}°")

# Camera
status = telemetry.get("status") or {}
print(f"Online: {status.get('online')}  Motion: {status.get('motion_alarm')}")
const telemetry = await client.getTelemetry(kitId, assetId)
const { lat, lon, alt_m } = telemetry.gps || {}
const { remaining_pct } = telemetry.battery || {}
console.log(lat, lon, `${remaining_pct}%`)
curl https://argus.hoplynk.com/api/kits/$KIT_ID/assets/$ASSET_ID/telemetry \
  -H "X-API-Key: hlk_..."
Response (drone)
{
  "gps": {
    "lat": 31.111,
    "lon": -93.273,
    "alt_m": 120.5,
    "ground_speed": 4.2,
    "heading": 247
  },
  "attitude": {
    "roll": 0.2,
    "pitch": -1.1,
    "yaw": 247.3
  },
  "battery": {
    "voltage": 14.8,
    "current": 22.4,
    "remaining_pct": 72
  },
  "sys_status": {
    "armed": true,
    "flight_mode": "GUIDED",
    "ekf_ok": true
  },
  "vfr_hud": {
    "groundspeed": 4.2,
    "throttle_pct": 38,
    "climb_mps": 0.1,
    "heading": 247
  }
}
Response (camera)
{
  "status": {
    "online": true,
    "motion_alarm": false,
    "ai_alarm": false
  }
}