Přeskočit na hlavní obsah
Sloučeno do jednoho dokumentu: 35 stránek. Tip: v tiskovém dialogu zapněte volbu Grafika na pozadí, aby si poznámky a upozornění zachovaly podbarvení.
Všechny příručky k tisku
Dronetag

Developers

Dokument
Developers
Kapitoly
35
Zdroj
help.dronetag.cz/cs/print/developers
Dronetag s.r.o. · Rozhodující je vždy aktuální online verze tohoto dokumentu.
Tento dokument je překlad. Liší-li se od anglického originálu na adrese help.dronetag.cz/print/developers, platí anglické znění.

Pro vývojáře

Vítejte v sekci pro vývojáře na webu Dronetag Help.

Najdete zde podklady a technické návody pro vývojáře. Je tu podrobná dokumentace API, pomocí které propojíte své systémy s řešeními Dronetagu pro Remote ID.

Kromě API zde najdete i návody, osvědčené postupy a další informace, které potřebujete ke spolehlivé integraci. Ať už propojujete naše produkty se svými stávajícími platformami, nebo zkoušíte něco nového, tato sekce vám k tomu dá potřebné nástroje i znalosti.

Projděte si, jak lze Dronetag zapojit do vašich systémů.

Podmínky použití​

Používání našeho API se řídí našimi podmínkami použití (Terms of Service).

Začínáme s integrací Dronetagu

Dronetag nabízí několik způsobů integrace, jak získat data z našich zařízení, především data Remote ID. Tento návod vám pomůže vybrat způsob, který se pro váš systém hodí nejlépe — ať už pracujete s platformami UTM, nebo stavíte vlastní řešení.

Chci použít existující integraci​

Pokud chcete využít zavedené platformy, Dronetag podporuje několik hotových integrací:

Integrace, které Dronetag v současnosti nabízí:

IntegraceK čemu sloužíZpůsob přístupu
AloftSdílení telemetrie Dronetagu se službami Aloft.Integrace v Dronetag App
SafeSkyZobrazení letů Dronetagu v SafeSky.Integrace v Dronetag App nebo Data Push
InterUSSVýměna letových dat se systémy U-Space / UTM prostřednictvím služeb InterUSS.Integrace na úrovni platformy
TAK ServerStreamování dat Remote ID do systémů kompatibilních s TAK.Data Push ve formátu Cursor on Target (CoT) XML
SAPIENTOdesílání telemetrie Remote ID jako detekčních hlášení SAPIENT.Data Push

Data Push umí doručovat i vlastní formáty Dronetagu, mezi nimi DUMP JSON, DUMP JSON Typed a Dronetag Legacy JSON. Hodí se tehdy, když místo napojení na některou z výše uvedených platforem stavíte vlastní integraci. Doporučené kombinace najdete na stránce Protokoly a formáty.

Chci si postavit vlastní integraci​

Pro vlastní řešení nebo nové integrace nabízíme několik možností:

Pokud si nejste jisti, který způsob integrace je pro vás ten pravý, podívejte se na návod Výběr vhodného způsobu integrace.

Integrace přes API

Integrace přes naše API je přímočarý způsob, jak si programově vyměňovat informace se systémy nebo službami třetích stran. Nabízíme dva hlavní způsoby.

Stahování dat z našeho API​

Když si data z našeho API stahujete (pull), získáte aktuální informace přesně ve chvíli, kdy je potřebujete. Pro běžné požadavky nabízíme HTTP REST API, pro přístup k datům v reálném čase Socket.io. Tento způsob se hodí pro integrace typu server–klient, vlastní skripty a další aplikace.

Posílání dat z našich systémů do vašeho API​

Pro trvalejší řešení si můžete nastavit datový tok, při kterém naše systémy posílají (push) provoz v reálném čase přímo do vašeho API, jakmile dorazí na naše servery. Data se tak průběžně aktualizují, aniž byste se museli neustále dotazovat. Tento způsob je vhodný pro integrace typu server–server.

Integrace přes InterUSS

Naše cloudová platforma podporuje služby InterUSS, které umožňují výměnu letových dat s distribuovanými systémy UTM. Pokud váš systém už protokol InterUSS implementuje, s velkou pravděpodobností si s naší platformou data vyměňovat dokáže a integrace bude jednoduchá.

Vývoj pozastaven

Kvůli nízké poptávce nabízí Dronetag v současnosti jen část služeb InterUSS a vývoj plné kompatibility je pozastavený. Hledáme partnery, kteří chtějí síť InterUSS využívat k výměně letových dat, a pro společné projekty jsme ochotni vývoj obnovit.

Pokud vás tato integrace zajímá, kontaktujte nás a domluvíme se na možné spolupráci.

Když váš systém pracuje ve stejné instanci DSS (Distributed Situational Awareness) jako náš, mohou si obě platformy data přímo vyměňovat, což usnadňuje koordinaci provozu.

Více informací najdete na oficiálním webu InterUSS Platform.

Aktuálně podporované služby:

  • Remote ID
  • Strategic Deconfliction (strategické řešení konfliktů)
  • Geo-awareness (geografické povědomí)

Přímá integrace hardwaru

Pokud potřebujete náš hardware integrovat přímo, bez cloudových služeb, máte k dispozici několik možností.

poznámka

Na této sekci se ještě pracuje.

Integrace do stávajících systémů na palubě​

Některé naše produkty jsou přímo navržené pro integraci do stávajících systémů. Podrobný postup najdete v uživatelské příručce k danému produktu:

Integrace přes Bluetooth​

Všechna zařízení Dronetag používají standardní datové formáty Remote ID, které odpovídají pravidlu FAA o dálkové identifikaci bezpilotních letadel (Remote Identification of Unmanned Aircraft Systems) a normě ASTM F3411-22. Jsou tak kompatibilní s ostatními zařízeními i s předpisy.

Pokud chcete data Remote ID přijímat přímo přes Bluetooth, můžete si napsat vlastní aplikaci, která signály vysílané našimi zařízeními dekóduje podle normy.

Upozorňujeme, že SDK pro dekódování Remote ID ani dokumentaci k našim proprietárním charakteristikám Bluetooth neposkytujeme. Máte-li konkrétní projekt, který byste s námi chtěli probrat, neváhejte nás kontaktovat.

Začínáme s REST API

REST API se nejlépe hodí k získání aktuálních i historických telemetrických dat a k přístupu k datům účtu, jako jsou prostředky (assets), zařízení, letadla a další. Protože si data musíte sami vyžádat, není příliš vhodné pro streamování dat v reálném čase. Pro data v reálném čase doporučujeme naše endpointy Socket.io.

Získání přihlašovacích údajů k API​

Pro přístup k našemu API se musíte ověřit. Máte dvě možnosti:

  1. Osobní token: Osobním tokenem získáte přístup k datům na svém účtu Dronetag. Vytvoříte ho v naší aplikaci nebo přes API.
  2. OpenID Connect: OIDC slouží k pokročilejšímu ověřování a umožní vaší aplikaci přistupovat k soukromým datům jiných uživatelů.

Používání API​

Jakmile máte přihlašovací údaje, můžete API začít používat. Doporučujeme se nejprve seznámit s dokumentací API, která popisuje všechny dostupné endpointy a datové struktury, se kterými budete pracovat.

Datový formát DUMP​

Naše API používá řadu datových schémat, každé pro konkrétní prostředek API. Jedno z nich se ale napříč našimi službami používá nejjednotněji: formát Dronetag Unified Message Protocol (DUMP). Pokud pracujete s daty Remote ID, je pro vás porozumění tomuto protokolu obzvlášť důležité.

Připravili jsme podrobný návod, který rozebírá strukturu zpráv DUMP a vysvětluje, jak s nimi efektivně pracovat:

Podmínky pro parametry telemetrických požadavků​

Při telemetrických požadavcích na endpointy vzdušného prostoru (/v2/airspace/*) musíte vždy zadat časový rozsah (from a to) i geografickou oblast (bbox).

Z tohoto pravidla existuje několik výjimek:

  • Pokud zadáte operation_id, žádné další parametry nejsou potřeba.
  • Pokud zadáte uas_id, můžete vynechat geografickou oblast bbox, časový rozsah je ale stále povinný.

Velikost bbox je omezená a je určená pro středně velké oblasti. Pomocí bbox nelze pokrýt velká území, jako jsou celé státy, kontinenty nebo celý svět.

Pokud je pro vás tato podmínka problémem, doporučujeme podívat se na způsoby, jak vám data posíláme (Data Push).

Další návody​

Pro běžné případy použití našeho API máme několik dalších návodů. Ať už chcete získat aktuální stav vzdušného prostoru, nebo historická data, najdete v nich vše potřebné:

Další návody najdete v levém postranním panelu.

Začínáme se Socket.io

API Socket.io je určené ke streamování telemetrických dat v reálném čase a poskytuje jen živé aktualizace (žádná historická ani absolutní data). Data, která zmeškáte během odpojení, se znovu neposílají — aktuální stav nebo chybějící data po opětovném připojení získáte přes REST API. Tento návod vás provede navázáním spojení v reálném čase mezi Dronetagem a vaší aplikací přes Socket.io.

Parametry spojení​

Ke spojení použijte ve svém klientovi Socket.io tyto konfigurační parametry:

  • Host: https://api.dronetag.app
  • Path: /v2/airspace/socket.io
  • Verze klienta: v3 nebo v4
Host a path se liší

Dejte si pozor na konfiguraci — host musí obsahovat jen doménu (https://api.dronetag.app) a path se zadává zvlášť. Záměna těchto dvou parametrů vede k chybám spojení.

Výběr klienta Socket.io​

Socket.io podporuje řada knihoven v mnoha programovacích jazycích. Úplný seznam podporovaných klientských implementací najdete zde.

Ověření relace​

Relaci Socket.io ověříte stejným přístupovým tokenem, jaký používáte pro požadavky na REST API. Jak přístupový token získat, popisuje návod k přihlašovacím údajům k API.

Pro Socket.io používejte OpenID Connect

Výše odkazovaná stránka o ověřování uvádí dva způsoby ověřování k API: osobní přístupové tokeny (PAT) a OpenID Connect (OIDC). API Socket.io osobní přístupové tokeny nepodporuje, proto pro Socket.io používejte jen tokeny OIDC.

Ověření není povinné. Relace bez tokenu dostává jen veřejně dostupná data, ověřená relace navíc i data, ke kterým má přístup váš účet.

Pokud pošlete neplatný token, server spojení odmítne a váš klient dostane connect_error se zprávou unauthorized.

Nativní ověření v Socket.io​

U klientů, které podporují nativní ověřování Socket.io, můžete přístupový token předat přímo v konfigurační volbě auth.

let socket = io("https://api.dronetag.app", {
path: "/v2/airspace/socket.io",
auth: "eyJhbGciOiJSUzI1NiIsInR5c...",
});

Více o ověřování v Socket.io najdete v dokumentaci Socket.io.

Bearer token v úvodním požadavku (handshake)​

Pokud váš klient volbu auth nepodporuje, můžete přístupový token poslat v hlavičce Authorization úvodního požadavku (handshake):

let socket = io("https://api.dronetag.app", {
path: "/v2/airspace/socket.io",
extraHeaders: { Authorization: "Bearer eyJhbGciOiJSUzI1NiIsInR5c..." }
});

Hodnota hlavičky musí mít tvar Bearer <token>, jinak server spojení odmítne se zprávou wrong bearer token format.

Tento postup se hodí i při testování v nástrojích, jako je Postman, které nativní ověřování obvykle nepodporují. Stačí přidat hlavičku Authorization na kartě Headers v Postmanu.

Ověření navázaného spojení​

Ověřit můžete i spojení, které už je navázané: pošlete přístupový token v události authenticate. Server ji potvrdí odpovědí {"result": "ok"}. Je-li token neplatný, server odpoví {"result": "not_authenticated"} a spojení zůstane otevřené jako neověřené, takže dostává jen veřejně dostupná data.

Odběr událostí​

Po připojení můžete naslouchat těmto událostem:

  • serverinfo – posílá se jednou, hned po navázání spojení. Obsahuje informace o serveru, například server_version, environment a your_sid (ID vaší relace, jak ho vidí server).
  • telemetry_ua – telemetrie bezpilotního letadla (UA)
  • telemetry_operator – telemetrie operátora
  • telemetry_system – systémová telemetrie
  • operation – změny operací

Každá událost telemetry_ua, telemetry_operator, telemetry_system a operation nese pole zpráv DUMP, ne jednu zprávu. Telemetrické události jsou omezené na nastavený viewport (viz níže), události operation viewport neomezuje. Událost operation nese zprávy OperationUpdate, které obsahují jen nedávné změny operace, ne její úplný stav.

Nejaktuálnější a úplný seznam dostupných událostí, jejich obsahu a odpovědí najdete v naší dokumentaci AsyncAPI.

Nastavení a aktualizace výřezu (viewport)​

Stejně jako u REST API musíte zadat geografickou oblast, o kterou se vaše aplikace zajímá.

Po připojení musí váš klient poslat úvodní událost viewport, která určí sledovanou geografickou oblast. Kdykoli se oblast zájmu změní, musí klient oblast aktualizovat novou událostí viewport. Každá událost viewport nahradí dříve nastavený viewport. Pokud viewport nenastavíte, relace nedostane telemetrii z žádné oblasti.

Viewport platí jen pro jedno spojení. Při každém připojení i opětovném připojení ho klient musí poslat znovu.

Viewport je řetězec ve tvaru lon_min,lat_min,lon_max,lat_max — zeměpisná délka a šířka ve stupních, oddělené čárkami bez mezer. Viewport nastavený například na Prahu může vypadat takto: emit("viewport", "14,49.9,15,50.3").

V aplikacích Dronetagu se například mapa dynamicky posouvá podle toho, co uživatel dělá. Po navázání spojení pošle aplikace úvodní viewport a při posouvání mapy ho aktualizuje. Doporučujeme tyto aktualizace tlumit (debounce), aby klient neposílal nový viewport při každém drobném posunu mapy.

Viewport vždy nastavujte uvážlivě. Musí pokrýt celou oblast vašeho zájmu, ale zároveň nesmí být zbytečně velký — dostávali byste data, která nechcete, a mohly by nastat problémy s výkonem. Doporučujeme přidat na každé straně dostatečnou rezervu několika kilometrů. Největší podporovaná plocha viewportu je zhruba 6 milionů km², takovým extrémním hodnotám se ale raději vyhněte.

Server každou událost viewport potvrdí jednou z těchto odpovědí:

  • {"result": "ok"} – viewport je nastavený.
  • {"result": "invalid-param", "messages": [...]} – viewport nemá očekávaný tvar nebo jsou jeho hodnoty mimo povolený rozsah.
  • {"result": "bbox_area_too_large", "messages": [...]} – plocha viewportu přesahuje největší podporovanou plochu. Dál platí dříve nastavený viewport.

Odpověď přečtete tak, že při odeslání události předáte callback pro potvrzení (acknowledgement), například socket.emit("viewport", "14,49.9,15,50.3", (response) => console.log(response)).

Řazení telemetrie​

Ve výchozím stavu je telemetrie v každé události seřazená vzestupně podle času. Řazení můžete pro každou telemetrickou událost změnit událostí ordering. Jejím obsahem musí být řetězec v kódování JSON, který názvům událostí přiřadí jednu z těchto hodnot:

  • time – vzestupně (výchozí)
  • -time – sestupně
socket.emit("ordering", JSON.stringify({
telemetry_ua: "-time",
telemetry_operator: "time",
telemetry_system: "time",
}));

Server událost potvrdí odpovědí {"result": "ok"}, nebo {"result": "invalid-param", "messages": [...]}, pokud obsah není platný. Stejně jako viewport platí i řazení jen pro jedno spojení.

Ukázky kódu​

Níže je několik krátkých ukázek, které vám se Socket.io pomohou začít v různých programovacích jazycích:

const { io } = require('socket.io-client');

const socket = io('https://api.dronetag.app', {
path: '/v2/airspace/socket.io',
auth: 'eyJhbGciOiJSUzI1NiIsInR5c...'
});

socket.on('connect', () => {
// The viewport must be sent after every (re)connect
socket.emit('viewport', '14,49.9,15,50.3', (response) => {
console.log('Viewport response:', response);
});
});

socket.on('connect_error', (err) => {
console.error('Connection error:', err.message);
});

socket.on('telemetry_ua', (batch) => {
for (const telemetry of batch) {
console.log('UA telemetry received:', telemetry);
}
});

Ověřování požadavků na API

Na této stránce se dozvíte, jak ověřovat požadavky, abyste získali přístup k prostředkům na účtech Dronetag.

Nabízíme dva způsoby ověřování: osobní přístupové tokeny (Personal Access Tokens, PAT) a OpenID Connect. Každý se hodí pro jiné použití, proto si přečtěte, který lépe odpovídá vašemu projektu.

Osobní přístupové tokeny (Personal Access Tokens, PAT)​

Pokud chcete pracovat s vlastními daty ze svého účtu Dronetag — například je dodatečně zpracovávat, vytvořit si vlastní nástroj pro příkazovou řádku (CLI) nebo data převádět do jiného softwaru —, nabízíme pro jednoduchý a přímý přístup k API osobní přístupové tokeny (PAT).

Tyto tokeny jsou snadno použitelné, ale méně bezpečné. Pro robustnější integrace určené veřejnosti doporučujeme spíše OpenID Connect.

Bezpečnost

Osobní přístupové tokeny dávají plný přístup k prostředkům vašeho účtu. Uchovávejte je bezpečně a dejte pozor, abyste je omylem nikomu nezpřístupnili (například zveřejněním na internetu).
Z bezpečnostních důvodů platí PAT nejvýše 90 dní.

Experimentální funkce

Osobní přístupové tokeny jsou zatím ve fázi experimentu. Pokud při jejich používání narazíte na problém, dejte nám vědět.

Vytvoření nového tokenu​

  1. Přihlaste se ke svému účtu Dronetag v aplikaci Dronetag.
  2. Přejděte na obrazovku Profile.
  3. Přejděte na obrazovku Account, kde uvidíte podrobnosti o účtu.
  4. Otevřete obrazovku Personal Access Tokens.

Zde vytvoříte nový token tlačítkem Create token.

Nově vydaný osobní přístupový token si bezpečně uložte. Znovu ho už zobrazit nepůjde.

Autorizace požadavků tokenem​

Token nyní můžete při požadavcích posílat v HTTP hlavičce X-Personal-Access-Token.

Omezení: podporovány jsou jen HTTP požadavky

Osobní přístupové tokeny lze použít jen pro HTTP požadavky. Websockety pomocí PAT ověřit nelze.

Příklad požadavku s PAT​

POST /v2/airspace/telemetry/ua HTTP/1.1
Host: api.dronetag.app
Accept: */*
X-Personal-Access-Token: 4c5250130bbce349.b0dc901facd944e999b32ebf984c5250130bbce349b0dc901facd944e999b32e

Implementace OpenID Connect​

Když implementujete přihlášení Sign in with Dronetag, umožníte uživatelům přistupovat k jejich datům přes vaši aplikaci. Tento způsob je spolehlivější a nabízí standardizovaný přístup k ověřování.

Co je OpenID Connect (OIDC)​

Naše implementace vychází z OpenID Connect (nezaměňujte s OpenID). Díky OIDC můžete využít existující knihovny a vaše aplikace ho možná už podporuje. Více se dozvíte na webu OpenID Foundation.

Abyste mohli OIDC ve své aplikaci použít, potřebujete vlastní client ID a secret. Pokud jste tyto přihlašovací údaje ještě nedostali, kontaktujte nás.

Implementace ověřování ve vaší aplikaci​

Doporučujeme projít certifikované implementace OpenID Connect a vybrat knihovnu, která se pro váš projekt hodí nejlépe.

Pokud to váš klient OIDC podporuje, můžete použít konfigurační JSON OpenID, který je k dispozici na adrese:

https://auth.dronetag.app/realms/dcp/.well-known/openid-configuration

Klienta OIDC můžete také nakonfigurovat ručně pomocí těchto endpointů:

PoložkaURL
Authorization Endpointhttps://auth.dronetag.app/realms/dcp/protocol/openid-connect/auth
Token Endpointhttps://auth.dronetag.app/realms/dcp/protocol/openid-connect/token
User Info Endpointhttps://auth.dronetag.app/realms/dcp/protocol/openid-connect/userinfo
Client IDPřidělen vaší aplikaci
Client SecretPřidělen vaší aplikaci

Tabulka výše předpokládá, že vaše aplikace už má přidělené „Client ID“ a „Client Secret“. Pro testování můžete použít obecné Client ID dronetag-integration-test, ke kterému secret není potřeba. Pro produkční provoz musí mít každá aplikace vlastní jedinečné Client ID, jinak může být omezen objem stahovaných dat. Přihlašovací údaje vám vydá podpora Dronetagu.

Použití přístupových tokenů​

Osobní přístupové tokeny i přístupové tokeny získané přes OIDC můžete k ověření požadavků na API posílat jako Bearer token v hlavičce Authorization.

Příklad požadavku​

POST /v2/airspace/telemetry/ua HTTP/1.1
Host: api.dronetag.app
Accept: */*
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItQllNT2...

Obnovování tokenů​

Přístupové tokeny vydávané jako JWT mají krátkou platnost a po vypršení je nutné je obnovit. Více o obnovovacích tokenech (refresh token) a jejich bezpečném používání najdete v těchto zdrojích (anglicky):

Začínáme s Data Push

Telemetrická data ze zařízení Dronetag můžete získávat i tak, že spojení navážou naše servery a data posílají (push) na ty vaše. Tato spojení spravujete v našem portálu integrací, kde si vše nakonfigurujete sami. Portál vám dává plnou kontrolu nad nastavením integrace — můžete zvolit protokol spojení, například HTTP webhooky, MQTT, TCP nebo UDP, snadno přepínat mezi testovacím a produkčním prostředím a upravovat další nastavení podle potřeby.

Jak získat přístup k portálu integrací​

K nastavení integrace Data Push potřebujete přístup k portálu. Ten mají uživatelé s předplatným Pro a obchodní partneři zapojení do našich společných projektů. Pokud o přístup máte zájem, ozvěte se nám.

Portál najdete na adrese https://integrations.dronetag.app.

V přehledném webovém rozhraní integraci nastavíte během několika kroků.

Co lze nastavit?​

Náš integrační systém je navržený tak, aby byl co nejflexibilnější. U každé integrace si můžete sami, bez naší pomoci, upravit řadu parametrů:

  • Protokol spojení: HTTP webhooky, MQTT, TCP nebo UDP.
  • Cílová adresa: Data můžete směrovat na produkční nebo testovací (staging) endpoint svého API — je to na vás.
  • Výstupní formát: Kromě našeho standardního formátu JSON podporujeme i různé systémy UTM. Doporučené kombinace najdete na stránce Protokoly a formáty.
  • Omezení provozu (throttling): Abyste nepřetížili své servery, můžete za cenu určitého zpoždění omezit počet požadavků.
  • Ověřování: Na výběr je řada způsobů ověřování, mimo jiné HTTP Basic Authentication, vlastní HTTP hlavičky, OAuth 2.0 a další.
  • … a další

Nastavení prvního cíle distribuce​

Abyste mohli začít přenášet data, musíte vytvořit cíl distribuce (distribution target). Ten představuje službu, do které chcete data posílat. Cílů můžete vytvořit několik, jejich počet je ale omezený. Jakmile cíl vytvoříte, náš systém do něj bude data automaticky posílat, dokud ho nedeaktivujete nebo neodstraníte.

  1. Přihlaste se do portálu integrací svým účtem Dronetag, nebo si vytvořte nový.
  2. Na hlavní stránce uvidíte všechny distribuce, které jste vytvořili.
  3. Vytvořte nový cíl distribuce tlačítkem Add New.
  4. Vyplňte formulář s konfigurací cíle. S nastavením vám pomohou další sekce na této stránce.
  5. Cíl uložte a počkejte několik minut, než se změny projeví.
  6. Chyby komunikace nebo konfigurace zkontrolujete v serverových lozích. Najděte novou distribuci na hlavní stránce a klikněte na View & Edit.

Pozastavení nebo ukončení distribuce​

Chcete-li dočasně přestat posílat data do svých služeb, distribuci pozastavte tím, že ji označíte jako neaktivní. Pokud distribuci už nepotřebujete, můžete ji trvale smazat.


Co dál?​

Protokoly a formáty

Každá distribuce Data Push kombinuje dvě nezávislé volby:

  • Protokol spojení - jak Dronetag posílá data do vašeho systému.
  • Výstupní formát - jak je zakódovaná každá telemetrická zpráva.

Většina formátů je technicky nezávislá na přenosu, ne každá kombinace má ale v praxi smysl. Protokol vyberte podle toho, jak váš systém data přijímá, a formát podle toho, co umí váš cílový systém zpracovat.

Produkt / název integraceDoporučený protokolDoporučený výstupní formátObvyklé nastavení
Vlastní HTTP API nebo webhookHTTP WebhooksDUMP JSON, DUMP JSON Typed nebo partnerský socketový formátPoužijte cílovou URL s HTTPS, podle potřeby HTTP Basic Authentication nebo OAuth 2.0 a vlastní hlavičky pro klíče API nebo ID tenantů.
Vlastní telemetrický kanál přes MQTTMQTT ClientDUMP JSON, DUMP JSON Typed nebo partnerský socketový formátPokud je to možné, použijte MQTT přes TLS, ověřování jménem a heslem, QoS podle požadavků vašeho brokeru a {msgtype} v tématu (topic), pokud chcete zprávy směrovat podle typu.
Vlastní kanál přes TCP socketTCP SocketDUMP JSON, DUMP JSON Typed nebo partnerský socketový formátPři přenosu přes veřejné sítě použijte TLS nebo mTLS. Vložená metadata zapněte, jen pokud s obálkou váš přijímač počítá.
Vlastní kanál přes UDP socketUDP SocketDUMP JSON nebo DUMP JSON Typed nebo partnerský socketový formátPoužijte jen tehdy, když je ztráta paketů přijatelná. Pokud to přijímač podporuje a síťová cesta není důvěryhodná, přidejte šifrování obsahu AES.
TAK Server / kanál CoTTCP SocketCursor on Target XMLPokud nasazení TAK vyžaduje klientské certifikáty, použijte TCP s mTLS.
Kanál SAPIENTTCP SocketSAPIENTNastavte režim protokolu TCP na sapient, podle potřeby nastavte interval stavových zpráv (heartbeat) a pokud přijímající uzel vyžaduje zabezpečení certifikáty, použijte TLS/mTLS.

Matice kompatibility​

Výstupní formátHTTP WebhooksMQTT ClientTCP SocketUDP SocketPoznámky
DUMP JSONDoporučenoDoporučenoPodporovánoPodporovánoNejlepší výchozí volba pro vlastní integrace.
DUMP JSON TypedDoporučenoDoporučenoPodporovánoPodporovánoStejné jako DUMP JSON, navíc s polem $type v obsahu zprávy.
Cursor on Target XMLMožnéNepodporovánoDoporučenoMožnéPoužívají ho systémy kompatibilní s TAK.
SAPIENTNepodporovánoNepodporovánoDoporučenoNepodporovánoVyžaduje režim protokolu TCP SAPIENT.

Názvy produktů​

Některé integrace jsou známější pod názvem produktu nebo ekosystému než pod svým protokolem a formátem:

Protokol + formátProdukt / název integrace
HTTP Webhooks + DUMP JSONVlastní webhook / vlastní integrace API
MQTT + DUMP JSONVlastní integrace MQTT
TCP nebo UDP + Cursor on Target XMLIntegrace TAK Server
TCP + SAPIENTIntegrace SAPIENT

Názvy v portálu a možnosti zabezpečení​

Portál integrací používá tyto názvy typů spojení:

Typ spojení v portáluKompatibilní způsoby ověřováníZabezpečení přenosu a obsahu
HTTP WebhooksHTTP Basic Authentication, OAuth 2.0Cílová URL s HTTPS
MQTT ClientHTTP Basic AuthenticationMQTT přes TLS, šifrování dat AES
TCP SocketŽádnéTLS/mTLS, šifrování dat AES
UDP SocketŽádnéŠifrování dat AES

Pokud váš přijímač ověřování nevyžaduje, můžete ho nechat prázdné. V této tabulce jsou HTTPS, MQTT over TLS a TLS/mTLS možnosti zabezpečení přenosu a AES data encryption je šifrování obsahu zprávy, nikoli způsob přihlášení. Popisek HTTP Basic Authentication se v portálu používá i pro jméno a heslo k MQTT.

Nastavení mTLS portál zobrazuje jen u distribucí typu TCP Socket. Portál přijímá buď samostatné soubory PEM, nebo balíčky PKCS#12 .p12:

  • PEM: certifikát CA, klientský certifikát, soukromý klíč klienta a volitelné heslo ke klíči klienta.
  • PKCS#12: truststore .p12 s jedním nebo více certifikáty pro ověření serveru a klientský .p12 s klientským certifikátem a odpovídajícím soukromým klíčem. Každý balíček může mít vlastní volitelné heslo. Portál oba balíčky před použitím v integraci převede do formátu PEM.
  • Verify host ověřuje název hostitele serveru proti certifikátu TLS.

Zvolený Data Source (zdroj dat) určuje, které zprávy smí cíl distribuce dostávat, ještě před převodem protokolu nebo formátu. Které typy zpráv umí jednotlivé výstupní formáty odeslat, popisuje stránka Pokrytí zpráv.

Portál nabízí také nastavení doručování:

  • Keep reliable určuje chování, když zprávy nelze doručit.
  • Throttle messages omezuje, jak často vám Dronetag data posílá.
  • Allow mixed content povoluje více typů zpráv v jednom požadavku, pokud to zvolený výstupní formát podporuje.
  • Send empty payloads posílá v intervalu omezení prázdný požadavek i tehdy, když nejsou k dispozici žádná nová telemetrická data. Vyžaduje zapnuté omezování (throttling).

Obvyklé sady nastavení​

HTTP Webhooks API​

Použijte pro vlastní API, webhooky a většinu integrací s API partnerů.

Obvyklé nastavení:

  • Cílová URL začíná https://.
  • Ověřování je HTTP Basic Authentication, OAuth 2.0, způsob specifický pro partnera nebo vlastní HTTP hlavičky.
  • Další hlavičky mohou nést klíče API, identifikátory tenantů nebo volbu prostředí.

MQTT Client​

Použijte, když vaše infrastruktura očekává telemetrii v tématech (topics) MQTT.

Obvyklé nastavení:

  • Cílová URI a port ukazují na váš broker MQTT.
  • Přenos je tcp nebo websockets podle vašeho brokeru.
  • Pokud to broker vyžaduje, je nastavené ověřování jménem a heslem.
  • Téma může obsahovat {msgtype} pro směrování DUMP JSON.
  • QoS je obvykle 0 nebo 1 podle toho, zda je důležitější nízká latence, nebo potvrzení doručení.

TAK / CoT​

Použijte pro TAK Server, ATAK, WinTAK, iTAK nebo middleware kompatibilní s TAK.

Obvyklé nastavení:

  • Výstupní formát je Cursor on Target XML.
  • Protokol je obvykle TCP nebo UDP socket.
  • TCP je vhodnější, když potřebujete stav spojení a spolehlivější doručování.
  • UDP je běžné u jednoduchých kanálů CoT, kde občasná ztráta paketu nevadí.
  • Pokud váš TAK Server vyžaduje klientské certifikáty, lze u TCP zapnout mTLS.

SAPIENT​

Použijte jen pro systémy, které SAPIENT výslovně implementují.

Obvyklé nastavení:

  • Protokol je TCP Socket.
  • Výstupní formát je SAPIENT.
  • Režim protokolu TCP je sapient.
  • Pokud to přijímající uzel vyžaduje, je nastavený interval stavových zpráv (heartbeat).
  • Pokud to nasazení SAPIENT vyžaduje, je zapnuté TLS nebo mTLS.

Poznámky k protokolům​

HTTP Webhooks​

HTTP je nejlepší volba, pokud váš systém poskytuje endpoint API. Dronetag posílá na vaši cílovou URL požadavky POST. URL musí začínat http:// nebo https://.

Nešifrované HTTP používejte jen při vývoji a testování. Pro produkční prostředí důrazně doporučujeme HTTPS.

HTTP může přenášet metadata v hlavičkách, například typ obsahu, typ zprávy, client ID integrace a viditelnost veřejných dat. Pro distribuci můžete nastavit i další vlastní HTTP hlavičky.

HTTP používejte pro formáty API specifické pro partnery, například Altitude Angel, ASTRA, Highlander a podobné integrace.

MQTT Client​

MQTT je nejlepší volba, pokud váš systém už provozuje broker MQTT a očekává telemetrii v tématech. Dronetag se připojí jako klient MQTT a převedené zprávy publikuje do nastaveného tématu.

MQTT se dobře hodí pro obsah ve formátu JSON. Pokud používáte DUMP JSON, můžete do názvu tématu vložit {msgtype} a směrovat tak telemetrii UA, telemetrii operátora, systémovou telemetrii a změny operací do samostatných témat.

TCP Socket​

TCP se hodí, když cílový systém očekává trvalé socketové spojení. Je to také doporučený protokol pro SAPIENT a jeden z doporučených protokolů pro TAK Server.

Pro SAPIENT nastavte režim protokolu TCP na sapient. Tím se zapne registrační postup SAPIENT a binární zprávy s délkovou předponou.

TCP může také používat TLS nebo vzájemné TLS (mutual TLS), pokud váš cíl vyžaduje zabezpečení certifikáty.

UDP Socket​

UDP se hodí pro jednoduché doručování bez potvrzení (fire-and-forget), zejména při integraci se systémy, které už kanály UDP přijímají, například některá nasazení TAK.

Protože UDP nepotvrzuje doručení, použijte TCP nebo HTTP, pokud vaše integrace vyžaduje spolehlivější doručování.

Metadata​

HTTP posílá metadata v hlavičkách požadavku. MQTT, TCP a UDP mohou u formátů, kde je to užitečné, metadata volitelně vkládat do obsahu zprávy.

Vložená metadata obalí obsah zprávy objektem s poli data a metadata. Používejte je jen tehdy, když je váš přijímač napsaný tak, aby tuto obálku zpracoval.

Když si nejste jisti​

U vlastních integrací začněte takto:

  1. HTTP Webhooks + DUMP JSON, pokud vaše služba může poskytnout endpoint HTTPS.
  2. MQTT + DUMP JSON, pokud vaše infrastruktura už MQTT používá.
  3. TCP + Cursor on Target XML, pokud se napojujete na TAK Server.
  4. TCP + SAPIENT, pokud váš cílový systém SAPIENT výslovně vyžaduje.

Zdroje dat

Při konfiguraci distribuce v našem portálu integrací narazíte na pole „data source“ (zdroj dat). Tento článek podrobně vysvětluje, co zdroje dat jsou a jak je ve své integraci využít.

Zdroj dat určuje, které zprávy připadají pro cíl distribuce v úvahu. Zvolený výstupní formát může okruh skutečně odesílaných typů zpráv dále zúžit. Podrobnosti najdete na stránce Pokrytí zpráv.

My Account​

Požadavky: žádné
Sdílená data: jen data spojená s účtem vlastníka distribuce

Tento zdroj dat má k dispozici každý, kdo používá portál integrací. Je určený hlavně k počátečnímu testování a vyzkoušení. Když ho zvolíte, získáte přístup jen k datům spojeným se stejným účtem, který distribuci vytvořil (vlastník). Viditelná jsou jen zařízení registrovaná k tomuto účtu, takže data ostatních uživatelů zůstávají soukromá a oddělená.

Device Group​

Požadavky: existující skupina zařízení vázaná na objednávku zařízení Dronetag
Sdílená data: všechna data bez ohledu na nastavení soukromí nebo stav registrace

Device Group (skupina zařízení) je určená zákazníkům, kteří s Dronetagem uzavřeli partnerství a zakoupili skupinu zařízení. Tato zařízení jsou zařazena do předem definované statické skupiny, kterou lze zvolit jako zdroj dat. Členství ve skupině je pevné a lze ho změnit jen na požádání. Běžní uživatelé Dronetagu skupiny zařízení nevidí a nemají k nim přístup.

Partner Integration​

Požadavky: registrace partnerství s Dronetagem
Sdílená data: podle souhlasu uživatelů (opt-in), všechna data bez ohledu na nastavení soukromí

Partnerské integrace (Partner Integration) uživatelé vidí a mají k nim přístup. Plně sami rozhodují, které integrace smějí k jejich datům přistupovat.

Přístup ke svým datům mohou uživatelé každé integraci povolit nebo zakázat v Dronetag App v sekci „Integrations“. Data tak mohou sdílet jen s vybranými integracemi a před ostatními je ponechat soukromá.

Partnerskou integraci lze nastavit tak, aby se uživatele při zapnutí integrace v Dronetag App zeptala na libovolný token, identifikátor nebo autorizační hodnotu. Uživatelé tak mohou zadat přihlašovací údaje nebo identifikátory, které vyžaduje služba třetí strany, a ta pak spolehlivě přiřadí uživatele Dronetagu k vlastním uživatelským účtům nebo autorizačním systémům.

Partnerské integrace zvyšují transparentnost a informovanost uživatelů: uživatelé mohou zůstat v soukromém režimu, a přesto integrace třetích stran využívat. Pro většinu integrací je to doporučený způsob.

Každá partnerská integrace vyžaduje následující údaje, které se pak zobrazují v sekci „Integrations“ v Dronetag App:

  • Plný/zobrazovaný název firmy nebo aplikace
  • URL loga (volitelné) – vodorovné logo pro lepší rozpoznání značky
  • Popis (volitelné) – krátký text o vaší firmě, aplikaci nebo platformě
  • URL webu – odkaz na váš web
  • Účet správce – účet Dronetag, který bude moci tuto partnerskou integraci vybrat v portálu integrací jako zdroj dat
  • Konfigurace Client ID (volitelné) – určuje, zda chcete, aby uživatelé před zapnutím integrace zadali identifikaci

All Public Data (zastaralé)​

Dřívější požadavky: žádné
Sdílená data: všechna veřejná data všech uživatelů Dronetagu (ale ne soukromá data)

Tento zdroj dat dříve umožňoval sdílet všechna veřejná data dostupná v Dronetag App s jakoukoli třetí stranou přes portál integrací.

Kvůli lepší uživatelské zkušenosti a ochraně soukromí byla tato možnost zrušena a už není k dispozici.

HTTP Webhooks

Nejběžnější typ distribuce posílá data protokolem HTTP.
Pro každou telemetrickou zprávu se vytvoří nový HTTP požadavek a odešle se na HTTP server vaší služby.

Specifická konfigurace​

Ve specifické konfiguraci lze zatím nastavit jen další HTTP hlavičky.

NázevPopisPlatné hodnoty
target_additional_http_headersDalší HTTP hlavičky odesílané s každým požadavkemobjekt JSON

Příklad specifické konfigurace​

Následuje příklad konfiguračního JSON, ve kterém se pomocí vlastních hlaviček posílá s každým požadavkem Bearer token.

{
"target_additional_http_headers": {
"X-My-Custom-Id": "12345"
}
}

MQTT Client

Pokud vaše služba provozuje server brokeru MQTT, můžete použít typ MQTT Client, který se k vašemu serveru připojí a data na něm publikuje.

Specifická konfigurace​

NázevPopisPlatné hodnoty
mqtt_dist_client_idClient ID pro MQTTLibovolný řetězec
mqtt_dist_transportTyp přenosu použitý pro připojení k serverutcp nebo websockets
mqtt_dist_tlsZda se má k připojení použít TLStrue nebo false
mqtt_dist_json_datastream_topicTéma (topic) pro odesílání telemetrických zprávLibovolný řetězec
mqtt_dist_publish_qos_defaultParametr QoS zpráv odesílaných klientemLibovolné celé číslo
embed_metadataPřidá do obsahu zprávy metadata jako account_visibility nebo integration_client_idtrue nebo false

Příklad specifické konfigurace​

Následuje příklad konfiguračního JSON.

{
"mqtt_dist_client_id": "dronetag_0001",
"mqtt_dist_transport": "tcp",
"mqtt_dist_tls": false,
"mqtt_dist_json_datastream_topic": "dronetag/telemetry/{msgtype}",
"mqtt_dist_publish_qos_default": 0
}

Použití {msgtype} v názvu tématu​

Pokud používáte formát Dronetag DUMP a chcete posílat různé typy zpráv do různých témat, můžete do názvu tématu vložit zástupný text {msgtype}. Před odesláním se nahradí skutečným typem zprávy. Je-li typem zprávy například „UA telemetry“, z tématu dronetag/telemetry/{msgtype} se stane dronetag/telemetry/tele-ua.

Dostupné typy zpráv:

  • tele-ua - zprávy s telemetrií UA
  • tele-operator - zprávy s telemetrií operátora
  • tele-system - zprávy se systémovou telemetrií
  • operation-update - zprávy o změně operace

Více o typech zpráv najdete na stránce Zprávy DUMP.

Doporučení ke konfiguraci​

  • Obvykle je nutné nastavit platný Target Port.

TCP a UDP sockety

Tento typ distribuce posílá data přes obyčejný TCP nebo UDP socket.

Specifická konfigurace​

NázevPopisPlatné hodnoty
embed_metadataPřidá do obsahu zprávy metadata jako account_visibility nebo integration_client_idtrue nebo false

Příklad specifické konfigurace​

Následuje příklad konfiguračního JSON

{
"embed_metadata": true
}

Doporučení ke konfiguraci​

  • Musí být nastavený 'Target port'
  • Pro zabezpečení provozu doporučujeme typ autorizace AES cipher

Pokrytí zpráv

Data Push používá před odesláním dat do vašeho cíle dva samostatné filtry:

  1. Nastavení Data Source (zdroj dat) určuje, které zprávy připadají pro cíl distribuce v úvahu.
  2. Nastavení Output Format (výstupní formát) určuje, které z těchto typů zpráv lze v daném formátu vyjádřit a odeslat.

Například cíl se zdrojem dat My account může dostávat jen zprávy, ke kterým má tento účet přístup. Pokud tentýž cíl používá partnerský formát pro polohu UAV, odesílají se jen zprávy o poloze letadla, protože tento formát neumí vyjádřit polohu operátora, systémovou telemetrii ani změny operací.

Typy zpráv podle výstupního formátu​

Typ datDUMP JSON / DUMP JSON TypedCursor on Target XMLSAPIENTPartnerské formáty pro polohu UAV
Telemetrie UAOdesílá se jako tele-uaOdesílá se jako události CoT letadlaOdesílá se jako detekce SAPIENTOdesílá se, pokud formát umí zprávu o poloze vyjádřit
Telemetrie polohy operátoraOdesílá se jako tele-operatorOdesílá se jako události CoT operátoraNeodesílá seNeodesílá se
Systémová telemetrieVe výchozím stavu se odesílá jako tele-systemOdesílá se jako systémové události CoTNeodesílá seNeodesílá se
Změny operacíOdesílá se jako operation-updateNeodesílá seNeodesílá seNeodesílá se
Provoz ADS-B, UAT, FLARM a OGNNeodesílá seNeodesílá seNeodesílá seNeodesílá se

DUMP JSON a DUMP JSON Typed jsou nejlepší volbou, pokud váš cíl potřebuje úplnou sadu zpráv Data Push.

Systémovou telemetrii lze pro daný cíl vypnout nastavením spojení distribute_system_telemetry.

Monitorování distribuce

Po nastavení první distribuce budete nejspíš chtít sledovat, zda funguje správně. Můžete to dělat několika způsoby.

Kontrola stavu v portálu integrací​

Aktuální stav distribuce zjistíte v portálu integrací, kde ověříte, že je distribuce zapnutá a správně nakonfigurovaná.

Po kliknutí na odkaz View & Edit uvidíte podrobnosti, jako je doba provozu (uptime) a statistiky za posledních 24 hodin. Zobrazí se i malý graf s rychlým přehledem, kolik zpráv touto distribucí za tu dobu prošlo.

Monitorování stavu přes Prometheus / OpenTelemetry​

Pokud chcete pokročilejší monitorování včetně historických dat a upozornění, můžete napojit Prometheus, který bude z našeho systému sbírat metriky. Tato funkce je dostupná všem uživatelům portálu integrací a poskytuje podrobná data o každé běžící integraci.

K vizualizaci dat doporučujeme Grafanu.

Ukázka dashboardu Grafany s metrikami distribuce

Ukázka dashboardu Grafany s metrikami běžící distribuce

Získání URL s metrikami​

  1. Přihlaste se do portálu integrací svým účtem Dronetag, nebo si vytvořte nový.
  2. Najděte cíl distribuce, který vás zajímá, a klikněte na View & Edit.
  3. Klikněte na tlačítko Get Prometheus Metrics.
  4. Zobrazí se metriky ve formátu Prometheus/OpenMetrics.
  5. Tuto URL pravidelně stahujte nástrojem, který vám vyhovuje (podrobnosti v další sekci).

URL vypadá takto:

https://relay.dronetag.app/metrics/[[your_distribution_id]]

Poznamenejte si ID své distribuce.

Sběr metrik pomocí Promethea​

Prometheus je open-source monitorovací systém, který umí náš export metrik sbírat (scrape). Více informací a návod k instalaci najdete v oficiální dokumentaci Promethea.

Doporučená konfigurace, se kterou můžete začít naše metriky sbírat:

prometheus.yml
global:
scrape_interval: 10s
scrape_configs:
- job_name: 'dronetag_distribution_metrics'
scrape_interval: 10s
metrics_path: '/metrics/[[your_distribution_id]]'
static_configs:
- targets: ['relay.dronetag.app']

Tato konfigurace sbírá metriky každých 10 sekund z URL https://relay.dronetag.app/metrics/[[your_distribution_id]].

Dostupné metriky​

NázevPopis
relay_messages_read_totalCelkový počet zpráv přečtených na vstupu
relay_messages_distributed_totalCelkový počet distribuovaných zpráv. Může být nižší než na vstupu kvůli filtrům nebo neúspěšnému doručení.
relay_message_conversion_secondsPrůměrná doba převodu zprávy do zvoleného výstupního formátu (v sekundách)
relay_message_distribution_secondsPrůměrná doba doručení zprávy do vašeho cíle (v sekundách), z velké části odpovídá latenci serveru.

Vizualizace dat v Grafaně​

Grafana je open-source nástroj pro monitorování a analýzu dat, který umí Prometheus používat jako zdroj dat.

Jak Grafanu nainstalovat a nastavit v ní Prometheus jako zdroj dat, popisuje návod 'Get started with Grafana and Prometheus'.

Ukázkový dashboard pro Grafanu​

Připravili jsme jednoduchý ukázkový dashboard pro Grafanu. Soubor JSON můžete importovat do své instance Grafany a upravit podle svých potřeb.

Details
grafana-dashboard.json
{ "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "-- Grafana --" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": false, "tags": [], "type": "dashboard" }, "type": "dashboard" } ] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 47, "links": [ { "asDropdown": false, "icon": "cloud", "includeVars": false, "keepTime": false, "tags": [], "targetBlank": false, "title": "Dronetag Integration Portal", "tooltip": "", "type": "link", "url": "https://integrations.dronetag.app" } ], "liveNow": false, "panels": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "dark-purple", "value": null } ] }, "unit": "string" }, "overrides": [] }, "gridPos": { "h": 3, "w": 16, "x": 0, "y": 0 }, "id": 3, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "/^relay_distribution_name$/", "values": false }, "text": { "valueSize": 40 }, "textMode": "value" }, "pluginVersion": "10.1.1", "targets": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "relay_messages_read_created{distribution_id=\"$distribution_id\"}", "format": "table", "instant": false, "legendFormat": "__auto", "range": true, "refId": "A" } ], "transformations": [], "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "dark-blue", "value": 80 } ] }, "unit": "dateTimeFromNow" }, "overrides": [] }, "gridPos": { "h": 3, "w": 8, "x": 16, "y": 0 }, "id": 2, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "/^Created$/", "values": false }, "textMode": "value_and_name" }, "pluginVersion": "10.1.1", "targets": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "relay_messages_read_created{distribution_id=\"$distribution_id\"}", "format": "time_series", "instant": false, "legendFormat": "Created at", "range": true, "refId": "A" } ], "transformations": [ { "id": "calculateField", "options": { "alias": "Created", "binary": { "left": "Created at", "operator": "*", "reducer": "sum", "right": "1000" }, "mode": "binary", "reduce": { "reducer": "sum" }, "replaceFields": true } } ], "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "description": "Average rates of sent (distributed) messages. Dotted line shows source input rate, which can be higher if there are filters applied (such as filter to specific device group).", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "bars", "fillOpacity": 100, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 0, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "mps" }, "overrides": [ { "matcher": { "id": "byName", "options": "Input rate" }, "properties": [ { "id": "custom.lineWidth", "value": 1 }, { "id": "custom.lineStyle", "value": { "dash": [ 2, 6 ], "fill": "dot" } }, { "id": "color", "value": { "mode": "fixed" } }, { "id": "custom.drawStyle", "value": "line" }, { "id": "custom.fillOpacity", "value": 0 } ] } ] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 3 }, "id": 1, "interval": "15s", "maxDataPoints": 128, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "sum(rate(relay_messages_distributed_total{distribution_id=\"$distribution_id\"}[$__rate_interval])) by (distribution_id)", "instant": false, "legendFormat": "Distributed rate", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "sum(rate(relay_messages_read_total{distribution_id=\"$distribution_id\"}[$__rate_interval])) by (distribution_id)", "hide": false, "instant": false, "legendFormat": "Input rate", "range": true, "refId": "B" } ], "title": "Average distribution rate", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "description": "The duration of how long it takes to convert the source input data to the output format. Includes filtering or other data pre-processing.", "fieldConfig": { "defaults": { "color": { "mode": "fixed", "seriesBy": "last" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "line" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "blue", "value": null } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 11 }, "id": 4, "interval": "15s", "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "sum(rate(relay_message_conversion_seconds_sum{distribution_id=\"$distribution_id\"}[$__rate_interval]) / rate(relay_message_conversion_seconds_count{distribution_id=\"$distribution_id\"}[$__rate_interval])) by (distribution_id)", "instant": false, "legendFormat": "__auto", "range": true, "refId": "A" } ], "title": "Average conversion duration", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "description": "The duration of how long it takes to distribute the data. The largest part is usually the server latency. Some distribution types can be missing a support for this metric.", "fieldConfig": { "defaults": { "color": { "mode": "thresholds", "seriesBy": "max" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "dashed" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "blue", "value": null }, { "color": "dark-orange", "value": 0.7 }, { "color": "semi-dark-red", "value": 1 } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 11 }, "id": 5, "interval": "15s", "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "editorMode": "code", "expr": "sum(rate(relay_message_distribution_seconds_sum{distribution_id=\"$distribution_id\"}[$__rate_interval]) / rate(relay_message_distribution_seconds_count{distribution_id=\"$distribution_id\"}[$__rate_interval])) by (distribution_id)", "instant": false, "legendFormat": "__auto", "range": true, "refId": "A" } ], "title": "Average distribute duration", "type": "timeseries" } ], "refresh": "", "schemaVersion": 38, "style": "dark", "tags": [ "dronetag" ], "templating": { "list": [ { "current": { "selected": false, "text": "cc2129b7-30e4-469e-8b13-92e7e097d528", "value": "cc2129b7-30e4-469e-8b13-92e7e097d528" }, "datasource": { "type": "prometheus", "uid": "aRT0ZzYnk" }, "definition": "label_values(relay_messages_read_total,distribution_id)", "hide": 0, "includeAll": false, "label": "Distribution ID", "multi": false, "name": "distribution_id", "options": [], "query": { "query": "label_values(relay_messages_read_total,distribution_id)", "refId": "PrometheusVariableQueryEditor-VariableQuery" }, "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "type": "query" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": { "nowDelay": "", "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m" ] }, "timezone": "", "title": "Dronetag Single Distribution Monitoring", "uid": "f2370455-bdac-4098-baf5-ea8857bc199d", "version": 5, "weekStart": "" }

Řešení problémů

Pokud máte potíže s integrací Data Push nebo s nastavením distribuce, pomůže vám tento návod najít a vyřešit nejčastější problémy.

Časté problémy a jejich řešení​

1. Distribuce neposílá data​

Pokud je distribuce nastavená, ale žádná data se neposílají, zkuste tento postup:

  • Zkontrolujte stav distribuce: Přihlaste se do portálu integrací a ověřte, že je distribuce aktivní a správně nakonfigurovaná. Podívejte se do logů, zda v nich nejsou chyby nebo varování.
  • Ověřte cílovou adresu: Zkontrolujte, že je cílová adresa (endpoint API, broker MQTT atd.) správná. Otestujte spojení a ověřte, že je vaše služba dosažitelná.
  • Firewall nebo síťová omezení: Ověřte, že příchozí data z našich serverů neblokuje firewall ani žádné síťové pravidlo. Zkontrolujte, že jsou otevřené potřebné porty (zejména při použití vlastních portů pro TCP/UDP).

2. Zpožděná data nebo vysoká latence​

Pokud data přicházejí se zpožděním nebo s vysokou latencí, příčinou může být:

  • Omezení provozu (throttling): Zkontrolujte, zda nemáte v portálu integrací nastavené omezení provozu. Silné omezení může latenci zvýšit.
  • Výkon sítě: Prověřte výkon sítě a dobu odezvy svého serveru. Vysoká latence může být způsobená i pomalým zpracováním na vašem serveru. Latenci požadavků na vaše servery můžete sledovat v našich metrikách pro Prometheus.

3. Chyby ověřování​

Pokud distribuce selhává kvůli chybám ověřování:

  • Zkontrolujte způsob ověřování: Ověřte, že je v portálu integrací nastavený správný způsob ověřování (HTTP Basic Authentication, OAuth 2.0, vlastní hlavičky atd.).
  • Přihlašovací údaje: Zkontrolujte, že jsou přihlašovací údaje k API nebo tokeny aktuální a ve vaší cílové službě správně nastavené.

4. Neúspěšné doručení zpráv​

Pokud se zprávy nedaří doručit nebo je počet distribuovaných zpráv nižší než počet zpráv na vstupu:

  • Zkontrolujte filtry: Systém může některé zprávy podle vaší konfigurace odfiltrovat. Zkontrolujte položku konfigurace Data Source.
  • Projděte serverové logy: Hledejte v serverových lozích distribuce chybová hlášení nebo varování. Najdete je v portálu integrací po kliknutí na View & Edit u dané distribuce.
  • Problémy se spojením: Pokud je cílová služba mimo provoz nebo nedosažitelná, systém zprávy doručit nemůže. Ověřte, že je vaše služba online a dostupná.

5. Metriky v Prometheu se nezobrazují​

Pokud metriky sbíráte Prometheem, ale nevidíte žádná data:

  • URL s metrikami: Zkontrolujte URL s metrikami v konfiguraci Promethea. Musí mít správný tvar: https://relay.dronetag.app/metrics/[[your_distribution_id]].
  • Konfigurace Promethea: Projděte konfigurační soubor prometheus.yml a ověřte, že je cesta k metrikám správná a že Prometheus sbírá data ve správném intervalu.
  • Chyby distribuce: Pokud se distribuce nedokáže správně spustit nebo selhává, bývá endpoint s metrikami prázdný. V serverových lozích distribuce zkontrolujte, zda běží správně.

Potřebujete další pomoc?​

Pokud tyto kroky problém nevyřeší, obraťte se na naši podporu. Přiložte všechny užitečné podrobnosti, například chybové logy nebo snímky obrazovky, abychom mohli problém rychle diagnostikovat.

Výběr vhodného způsobu integrace

Tento návod je určený zákazníkům a partnerům, kteří chtějí řešení Dronetagu zapojit do svých systémů. Najdete v něm podklady a odkazy podle toho, jakou integraci potřebujete.

Než začnete, ujasněte si požadavky na integraci:

  • Jaká data potřebujete a v jakých formátech? Jaké protokoly váš systém preferuje?
  • V jakém prostředí bude integrace běžet — na straně klienta, na straně serveru, nebo v obou?
  • Chcete výměnu dat zahajovat ze svého systému, nebo chcete, aby vám data posílal (streamoval) přímo Dronetag?

Jednorázový import dat do jiné aplikace​

„Chci jen importovat data o svých letech do jiné aplikace.“

Pokud nepotřebujete přístup v reálném čase ani průběžný sběr dat, můžete data z našich aplikací exportovat v otevřených formátech, jako je CSV, KML nebo GPX.

Více o aplikaci Dronetag najdete zde.

Skript pro sběr historických letových dat​

„Chci napsat skript, který stáhne všechna data o mých letech za minulý týden ve formátu KML.“

Pro automatizovaný sběr historických dat umožňuje naše REST API export v několika formátech. Ve výchozím stavu používáme náš formát JSON, můžete si ale vyžádat i CSV, KML, GPX nebo GeoJSON tak, že požadovaný typ MIME uvedete v hlavičce Accept.

Protože budete přistupovat k vlastním zařízením na svém účtu, nejjednodušším způsobem ověřování jsou pro vás osobní přístupové tokeny (Personal Access Tokens).

Podrobnosti najdete v návodu k získání telemetrických dat nebo v naší dokumentaci API.

Data v reálném čase ze všech vašich zařízení​

„Chci svá zařízení Dronetag zobrazovat v reálném čase v jiném softwaru.“

Pokud jsou pro vás prioritou data v reálném čase, doporučujeme buď existující integraci, nebo kombinaci našeho REST API a API Socket.io pro reálný čas.

Podívejte se na stránku Začínáme, kde je seznam aktuálně dostupných integrací s našimi partnery a softwarem třetích stran.

Pokud taková integrace k dispozici není, můžete se napojit na naše REST API a API Socket.io. Protože budete přistupovat k vlastním zařízením na svém účtu, nejjednodušším způsobem ověřování jsou pro vás osobní přístupové tokeny (Personal Access Tokens).

Viz náš návod k získávání dat v reálném čase nebo dokumentace API.

Zobrazení dat uživatelů v klientské aplikaci​

„Mám webovou aplikaci a chci uživatelům Dronetagu umožnit, aby si v ní zobrazovali svá data a spravovali svá zařízení a další prostředky Dronetag.“

Aby si uživatelé mohli prohlížet svá data z Dronetagu ve vaší klientské aplikaci, doporučujeme integrovat OpenID Connect. Uživatelé se pak do vaší aplikace mohou přihlásit přímo svým účtem Dronetag.

Více o ověřování k API.

Sdílení telemetrie uživatelů do serverového řešení​

„Mám cloudové řešení a chtěl bych sbírat data ze zařízení Dronetag jiných uživatelů.“

Pokud máte serverovou aplikaci a chcete v ní uživatelům zpřístupnit jejich telemetrická data, doporučujeme náš portál integrací. Můžete v něm navázat trvalé spojení mezi cloudovou platformou Dronetagu a vaším serverem. Uživatelé pak mohou vaši integraci autorizovat v Dronetag App a telemetrická data z jejich zařízení se začnou posílat na vaše servery.

Začněte návodem Začínáme s Data Push.

Integrace dat U-Space​

Pokud potřebujete integraci se službami U-Space, podporujeme také hlášení do U-Space přes InterUSS. Data můžeme posílat do několika instancí DSS (Discovery and Synchronization Service). Pokud váš systém už protokol InterUSS implementuje, můžeme nejspíš pracovat s vaší stávající DSS nebo vaši instanci DSS zapojit.

Více o integraci s U-Space najdete v naší sekci o InterUSS.

Nenašli jste, co potřebujete?​

Pro běžné použití nabízíme robustní API pro reálný čas. Pokud jsou ale vaše požadavky na integraci složitější, nabízíme v rámci předplatného Enterprise vyhrazenou podporu. Kontaktujte nás a probereme vaše potřeby.

Přístup k historické telemetrii

Tento podrobný návod ukazuje, jak po dokončení letů se zařízeními Dronetag získat letová data z našeho API.

Podle toho, jaké údaje o letu máte, existují dva hlavní postupy. Buď si vyžádáte seznam proběhlých letů, jeden vyberete a stáhnete všechna dostupná data k tomuto letu, nebo — pokud znáte jen přibližný čas a místo — si stáhnete výsek historie vzdušného prostoru. Obě možnosti podporuje naše REST API.

Telemetrie jednoho letu​

Tímto postupem získáte úplnou historii telemetrie jednoho konkrétního letu z jednoho zařízení. Odpověď API obsahuje data, která toto zařízení nasbíralo.

  1. Ověřte své požadavky na API​

    Nejprve si zajistěte přístup k potřebným prostředkům. Jak ověřovat požadavky na API, popisuje návod k ověřování.

  2. Vypište dostupné lety​

    get/v1/flights/ dokumentace API »

    Vyžádejte si seznam dostupných letů spojených s vaším ověřeným účtem Dronetag. Poznamenejte si id letu, který vás zajímá.

  3. Vyžádejte si telemetrická data letu​

    get/v2/airspace/telemetry/ua dokumentace API »

    Jako parametr dotazu operation_id použijte id letu. Dostanete telemetrická data vybraného letu, aniž byste museli zadávat časový rozsah nebo geografickou oblast.

    Naše telemetrické endpointy podporují několik výstupních formátů. Zvolte si preferovaný formát a uveďte ho v hlavičce Accept požadavku.

    K dispozici jsou i další telemetrické proudy pro sledování operátora UA nebo systému RID.
    Podrobnosti najdete v návodu k DUMP.

    Poznámka

    Možná narazíte i na endpoint /v1/flights/{id}/telemetry. Doporučujeme ale používat endpoint v2, protože v1 bude postupně ukončen.

Historie vzdušného prostoru​

Tímto postupem získáte historická data o vzdušném prostoru pro zadané místo a časové období.

  1. Ověřte své požadavky na API​

    Zajistěte si přístup k potřebným prostředkům. Jak ověřovat požadavky na API, popisuje návod k ověřování.

  2. Zvolte parametry​

    Podle údajů, které máte, získáte historii vzdušného prostoru buď:

    • zadáním časového rozsahu (from, to) a geografické oblasti (bbox), nebo
    • zadáním časového rozsahu (from, to) a UAS ID (sériového čísla zařízení, uas_id).
  3. Vyžádejte si telemetrická data vzdušného prostoru​

    get/v2/airspace/telemetry/ua dokumentace API »

    Zvolte si preferovaný výstupní formát a uveďte ho v hlavičce Accept požadavku.

    K dispozici jsou i další telemetrické proudy pro sledování operátora UA nebo systému RID.
    Více o těchto typech telemetrie najdete v návodu k DUMP.

  4. Vyžádejte si podrobnosti o operaci​

    get/v2/airspace/operation/{operation_id} dokumentace API »

    Předchozí požadavek sice vrací telemetrická data, neobsahuje ale všechny informace o letu, například identifikaci a typ UA. Další podrobnosti získáte z endpointu Operation API, který vrací úplnější informace o operaci.

Přístup k telemetrii v reálném čase

Tento návod vysvětluje, jak získat a zobrazit telemetrii v reálném čase. Obvykle se ke sledování dění ve vzdušném prostoru v reálném čase kombinuje REST API a Socket.io pro reálný čas.

  1. Ověřte své požadavky na API​

    Zajistěte si potřebný přístup k prostředkům. Podrobný postup najdete v návodu k ověřování.

  2. Nastavte parametry sledování​

    Rozhodněte se, zda chcete sledovat určitou geografickou oblast (bbox), nebo konkrétní zařízení (uas_id).

    Poznámka: Geografická oblast má svá omezení. Velká území, jako jsou kontinenty nebo státy, sledovat nelze. Podrobnosti najdete v návodu k REST API.

  3. (Volitelné) Úvodním požadavkem zjistěte stav vzdušného prostoru​

    get/v2/airspace/telemetry/ua?from=-00:05:00&bbox=... dokumentace API »

    Než začnete přijímat aktualizace v reálném čase, doporučujeme stáhnout výchozí stav vzdušného prostoru, podle kterého aplikace nastaví svůj počáteční stav. Stáhněte například data o vzdušném prostoru za posledních 5 minut jako výchozí bod pro sledování v reálném čase.

  4. Přijímejte aktualizace telemetrie v reálném čase​

    Možnost 1: Připojení k Socket.io pro aktualizace v reálném čase​

    wswss://api.dronetag.app/v2/airspace/socket.io telemetry_ua dokumentace API »

    Přes Socket.io dostáváte aktualizace v reálném čase s nízkou latencí a nemusíte řešit parametry časového rozsahu v dotazu. Pro aplikace, které mají rychle reagovat, je to preferovaná možnost.

    Možnost 2: Opakované dotazování REST API​

    get/v2/airspace/telemetry/ua?from=$last_date&bbox=... dokumentace API »

    Aktualizace můžete také získávat pravidelným dotazováním API (polling). Pro aplikace, které potřebují časté aktualizace, je ale tento přístup méně efektivní.

    Pokud zvolíte tuto možnost, použijte v dalších voláních jako parametr from hodnotu hlavičky Date z poslední odpovědi (je nutné ji převést do ISO 8601). Vyhnete se tak duplicitním datům.

    Nedoporučujeme

    Opakované dotazování se pro vysokou frekvenci aktualizací obecně nehodí. Při dotazování tohoto endpointu s vysokou frekvencí (> 1 za sekundu) může dojít k chybám kvůli omezení počtu požadavků (rate limiting).

  5. Zjistěte podrobnosti o operaci​

    Telemetrická data sice poskytují informace o letu v reálném čase, nemusí ale obsahovat důležité podrobnosti, jako je identifikace a typ UA. Další informace si můžete vyžádat o samotné operaci.

    Možnost 1: Naslouchání změnám operací přes Socket.io​

    wswss://api.dronetag.app/v2/airspace/socket.io operation dokumentace API »

    Přes Socket.io můžete naslouchat kanálu operation, kde dostanete aktualizaci, když vznikne nová operace nebo se změní existující. Výpadky sítě ale mohou způsobit ztrátu dat, proto je nejlepší tento způsob kombinovat s občasnými HTTP požadavky, aby aplikace zůstala synchronizovaná.

    Možnost 2: HTTP požadavky podle potřeby​

    get/v2/airspace/operations/{operation_id} dokumentace API »

    Podrobnosti o operaci si můžete podle potřeby vyžádat přes Operation API pomocí operation_id. Dostanete uložené informace o operaci ve vzdušném prostoru.

  6. Udržujte výřez (viewport) aktuální​

    Pokud vaše aplikace zobrazuje dynamickou mapu nebo se oblast zájmu v čase mění, aktualizujte parametr dotazu bbox v požadavcích na API, případně při použití Socket.io posílejte události viewport.

    Více informací najdete v dokumentaci API a v návodu k Socket.io.


V reálném čase máte k dispozici i další telemetrické proudy pro sledování operátora UA nebo systému RID. Podrobnosti najdete v návodu k DUMP.

Stav zařízení v reálném čase

Tento návod vysvětluje, jak v reálném čase sledovat stav zařízení Dronetag, například nabití baterie, sílu signálu LTE a GNSS a další důležité ukazatele. Data můžete získávat přes REST API nebo přes API Socket.io pro reálný čas.

Rozdíly oproti ostatním typům telemetrie​

Na rozdíl od ostatních telemetrických dat, jako je Telemetry-UA nebo Telemetry-Operator, která se posílají často, se telemetrie o stavu systému zařízení (Telemetry-System) posílá zpravidla v delších intervalech — obvykle jednou za 10 až 15 sekund nebo i méně často.

Více o všech typech telemetrie najdete v návodu k DUMP.

Sledování konkrétního zařízení podle UAS ID​

Ke zjištění stavu zařízení Dronetag v reálném čase musíte použít UAS ID zařízení, které odpovídá jeho sériovému číslu. Na rozdíl od ostatních typů telemetrie, které lze sledovat podle geografické oblasti (pomocí bbox), tento endpoint sledování podle geografické oblasti nepodporuje. Pro přístup k datům konkrétního zařízení musíte zadat jeho UAS ID.

  1. Ověřte své požadavky na API​

    Ověřením požadavků na API si zajistěte přístup k potřebným prostředkům. Podrobnosti o ověřování najdete v návodu k ověřování.

  2. Určete zařízení podle UAS ID​

    Než začnete posílat požadavky, zjistěte UAS ID (sériové číslo) zařízení, které chcete sledovat. UAS ID najdete na samotném zařízení Dronetag, v nastavení účtu v Dronetag App nebo v jiných odpovědích API.

  3. Vyžádejte si data o stavu systému v reálném čase​

    Možnost 1: Získání dat přes REST API​

    K datům o stavu zařízení v reálném čase přes REST API použijte tento endpoint:

    get/v2/airspace/telemetry/system dokumentace API »

    Parametr dotazu uas_id nastavte na sériové číslo zařízení Dronetag a časový rozsah určete parametrem from, případně from a to.

    Možnost 2: Aktualizace v reálném čase přes API Socket.io​

    Zatím není k dispozici

    Tato možnost zatím není k dispozici

    wswss://api.dronetag.app/v2/airspace/socket.io telemetry_system dokumentace API »

    Pro aktualizace v reálném čase se přes Socket.io připojte ke kanálu telemetry_system. Tento způsob přináší aktualizace s nižší latencí než opakované dotazování REST API.

Nastavení integrace s TAK Serverem

Všechny cloudově připojené produkty Dronetag lze integrovat s TAK Serverem přes náš portál integrací a streamovat jejich data Remote ID ve formátu Cursor on Target (CoT) přímo na váš TAK server v reálném čase.

Zařízení se síťovým Remote ID (NRI), například Dronetag Mini, mohou streamovat polohu UA. Přijímače přímého Remote ID (DRI), například Dronetag RIDER nebo Dronetag Scout, mohou navíc streamovat polohu operátora a polohu samotného přijímače.

informace

Tento článek popisuje nastavení integrace s TAK Serverem z našeho cloudového prostředí přes veřejný internet. Pracujeme na tom, aby se Dronetag Scout v režimu Sensor+ Mode mohl s TAK integrovat přímo. Pokud vás přímá integrace s TAK zajímá a chcete znát její aktuální stav, kontaktujte nás.

Co budete potřebovat​

Než začnete, ověřte, že máte:

  • účet Dronetag (vytvoříte ho na https://dronetag.app/signup),
  • podporovaný produkt Dronetag (jeden nebo více) registrovaný k vašemu účtu
    • podporované jsou Dronetag Mini, Dronetag Mini 4G, Dronetag RIDER a Dronetag Scout,
  • aktivní předplatné Pro nebo Enterprise (nutné pro přístup k portálu integrací),
  • instanci TAK Serveru
    • s veřejně dostupným endpointem TAK Serveru (IP adresa nebo doménové jméno).

Postup nastavení​

  1. Nakonfigurujte svůj TAK Server​

    Před nastavením integrace připravte TAK Server:

    1. Otevřete potřebný port ve firewallu
    2. Nastavte TAK Server tak, aby na tomto portu přijímal datové kanály
    3. Poznamenejte si údaje pro připojení:
      • IP adresu nebo doménu serveru (např. tak.yourcompany.com nebo 203.0.100.200)
      • číslo portu (např. 8087)

    Pokud konfiguraci TAK Serveru neznáte, podívejte se do oficiální dokumentace TAK Serveru.

  2. Otevřete portál integrací​

    Přejděte na https://integrations.dronetag.app a přihlaste se svými přihlašovacími údaji

  3. Vytvořte novou distribuci​

    Vytvořte novou distribuci s touto konfigurací:

    Povinná nastavení​

    • Connection type — TCP nebo UDP Socket
    • Target URI — adresa vašeho TAK Serveru (např. tak.yourcompany.com nebo 203.0.100.200)
    • Target port — port vašeho TAK Serveru (např. 8087)
    • Output format — Cursor on Target XML

    Ostatní volby ponechte ve výchozím stavu, nebo je upravte podle svých potřeb. Ne všechny volby se ale integrace TCP+XML týkají.

    Výběr zdroje dat​

    Všimněte si, jaký zdroj dat je zvolený. Výchozí „My account“ streamuje data ze všech zařízení registrovaných k vašemu účtu. Další možnosti jsou „Device Groups“ (statický seznam zařízení) a „Partnered Integration“ (umožňuje kterémukoli uživateli Dronetagu sdílet data na váš TAK server). Podrobnosti vám sdělíme na požádání.

    Volitelné ověřování mTLS​

    Pokud váš TAK Server vyžaduje vzájemné ověřování TLS (mutual TLS), zapněte volbu mTLS a nahrajte potřebný klientský certifikát a soubory se soukromým klíčem ve formátu PEM. Tato volba je dostupná jen pro spojení TCP.

  4. Ověřte spojení​

    • Počkejte 2–3 minuty, než se integrace inicializuje a naváže spojení
    • Zapněte zařízení Dronetag a ověřte, že aktivně vysílá
    • Otevřete klienta TAK (ATAK, WinTAK nebo iTAK) a zkontrolujte, že se na mapě v místě zařízení objevila ikona dronu
    • Ověřte, že se poloha aktualizuje v reálném čase

Řešení problémů​

Pokud máte potíže, zkuste tyto kroky v uvedeném pořadí:

  1. Ověřte spojení s TAK Serverem — Zkontrolujte, že je IP adresa nebo doména TAK Serveru správná a veřejně dostupná a že pravidla firewallu povolují příchozí spojení na zadaném portu.

  2. Zkontrolujte stav zařízení — Ověřte, že je zařízení Dronetag zapnuté, má přesnou polohu z GNSS, je ve stavu „Online“ a je vidět na mapě ve vašem účtu na https://dronetag.app.

  3. Projděte logy v portálu integrací — Podívejte se do sekce „Server logs“ v portálu integrací a několikrát zobrazení obnovte (logy se neaktualizují v reálném čase). Hledejte chyby spojení nebo stavová hlášení.

  4. Dejte inicializaci čas — Integrace potřebuje k navázání spojení 2–3 minuty. Pokud problémy trvají i potom, restartujte distribuci v portálu integrací tak, že ji vypnete a znovu zapnete.

Pokud problémy přetrvávají, kontaktujte podporu a přiložte serverové logy a údaje o konfiguraci.

Související zdroje​

Hodnoty výšky

V našem API narazíte u bodů letové telemetrie na tři různé hodnoty výšky. Tato sekce vysvětluje, co tyto hodnoty představují, jak se získávají a jak je můžete ve svých aplikacích využít.

Hodnoty výšky​

  • WGS84 HAE (Height Above Ellipsoid) — výška nad elipsoidem WGS84 v metrech

    • Jde o surovou výšku, kterou hlásí přímo vnitřní přijímač GNSS v zařízení Dronetag.
    • Představuje výšku nad elipsoidem (nikoli nad geoidem ani nad střední hladinou moře). Někdy se mylně vykládá jako MSL, WGS84-HAE však udává výšku nad elipsoidem, ne nad hladinou moře.
    • Přesnost této výšky se může měnit podle podmínek příjmu signálu GNSS a podle omezení modelu Země uloženého v přijímačích GNSS.
    • V API je k dispozici jako HAE-WGS84
  • QNE (Pressure Altitude) — tlaková výška vypočtená z barometrického tlaku, v metrech

    • Tato hodnota se počítá z palubního barometru při standardním tlaku na hladině moře 1013,25 hPa (QNE).
    • Je velmi přesná pro relativní měření, například pro porovnání výšek blízkých dronů, nemusí ale odpovídat přesné absolutní výšce nad terénem.
    • V letectví se často používá pro standardní údaje o výšce, zejména při letu ve větších výškách, kde atmosférický tlak klesá předvídatelně.
    • V API je k dispozici jako PA-QNE
  • ATO (Above Takeoff Level) — výška nad místem vzletu, v metrech

    • Tato hodnota se počítá jako rozdíl mezi aktuální QNE (tlakovou výškou) a tlakovou výškou v okamžiku vzletu.
    • Udává relativní výšku nad výchozím místem vzletu, což se hodí ke sledování změn výšky během letu.
    • Hodnoty ATO jsou citlivé na změny atmosférického tlaku v čase, takže se jejich přesnost může při delších letech nebo výrazné změně počasí zhoršovat.
    • Pokud se prostředí nemění a let začal na zemi, lze tuto výšku někdy chápat jako AGL (výšku nad terénem).
    • V API je k dispozici jako ATO
Připravovaná funkce

Brzy plánujeme zavést výšky MSL (Mean Sea Level, nad střední hladinou moře), které budou založené na globálních modelech a poskytnou standardizovanější měření výšky.

Časté dotazy​

Proč neexistuje spolehlivá výška AGL (nad terénem)?​

Výšku AGL nenabízíme, protože naše zařízení nemají senzory, které by dokázaly kdekoli na světě přímo měřit vzdálenost k zemi nebo terénu. Bez konzistentních a přesných údajů o tlaku nebo nadmořské výšce na úrovni terénu by byl výpočet skutečné výšky AGL nespolehlivý.

Uživatelé si ale mohou výšku AGL odhadnout sami, pokud mají pro svou oblast k dispozici spolehlivé údaje o tlaku na úrovni terénu. Surové hodnoty tlaku hlášené zařízením pak mohou porovnat se známým tlakem na úrovni terénu a výšku odhadnout.

Proč moje výška ATO někdy ukazuje záporné hodnoty?​

Pole ATO se počítá vzhledem k tlakové výšce zaznamenané při vzletu. Záporné hodnoty mohou mít dvě hlavní příčiny:

  1. Tlak při vzletu: Pokud začnete let sledovat, až když je dron už ve vzduchu (např. 10 m nad zemí), tlak při vzletu odpovídá této výšce. Po přistání pak výška ukáže zápornou hodnotu (např. -10 m), protože dron je níž než původní místo vzletu.

  2. Změny tlaku v čase: Atmosférický tlak se během dne mění podle počasí. Pokud sledujete dlouhý let trvající hodiny, může výška postupně ujíždět, protože referenční tlak při vzletu už neodpovídá aktuálnímu tlaku u země. To může vést k nesprávným údajům, zejména u dlouhých letů.

Proč můj komerční dron ukazuje výšku AGL, ale Dronetag ne?​

Většina komerčních dronů ve skutečnosti výšku AGL neukazuje. Používá podobný princip jako naše ATO (výška nad místem vzletu): řídicí jednotka dronu zaznamená tlak při vzletu a pak zobrazuje rozdíl mezi výškou vzletu a aktuální výškou. Ten se prezentuje jako výška dronu nad zemí, i když je to technicky jen výška vzhledem k místu vzletu, nikoli skutečná AGL.

Zprávy DUMP

Názorné vysvětlení typů zpráv DUMP

DUMP (Dronetag Unified Message Protocol) je interní formát zpráv Dronetagu, který jednotně používají všechny naše služby. Ať pracujete s naším REST API, se Socket.io, nebo s integrací přes náš portál, můžete se spolehnout, že standardním formátem pro výměnu dat je DUMP.

Aktuální verze je DUMP v1.

DUMP podporuje tyto typy zpráv:​

Podrobnosti o těchto typech zpráv, včetně toho, kdy a jak se používají, najdete níže.

Jednotnost napříč službami

Přestože usilujeme o úplnou jednotnost, některé služby mohou ještě používat starší formáty zpráv. Na převodu všech služeb na formát DUMP aktivně pracujeme, zatím ale musíme zachovat zpětnou kompatibilitu se staršími API. Dokud API v1 úplně neukončíme, můžete narazit na formáty, které DUMP neodpovídají.

Typy zpráv DUMP​

Operation (nebo OperationUpdate)​

Náhled schématu JSON
VlastnostTypPopisPovinná
idstringJedinečné ID operace (obvykle ve tvaru UUID)Ano
statusObject 'DUMPOperationStatus'Aktuální stav operaceAno
sensor_idstringJedinečný identifikátor senzoru nebo zařízení této operace.Ano
uas_operator_idanyID provozovatele UAS (obvykle ve tvaru UUID)Ne
ua_classificationanyTODONe
ua_classification_typeanyTODONe
ua_identifiersarray of 'DUMPUAIdentifier' objectsKolekce identifikátorů UANe
authenticationarray of 'DUMPSignature' objectsKolekce podpisů prokazujících pravostNe
descriptionsarray of 'DUMPOperationDescription' objectsKolekce různých popisů operace, například pro podrobný slovní popis stavu operaceNe
warningsarray of 'DUMPWarning' objectsSeznam varování k operaci. Varování obvykle vznikají při příjmu telemetrických dat, která nesplňují požadavky nebo obsahují problematické hodnoty. Varování se vygeneruje například tehdy, když telemetrická data obsahují neplatná pole nebo časová razítka.Ne

📋 Úplné schéma JSON najdete v naší dokumentaci API


Zpráva Operation obsahuje statické informace o konkrétním letu. Tato data se oddělují do objektu operace proto, aby se v každé telemetrické zprávě neopakovaly neměnné informace, jako je sériové číslo dronu nebo ID modulu Remote ID (RID).

Jedna operace nemusí vždy odpovídat přesně jednomu letu. Pokud se let zaznamenává několika systémy — například kombinací síťového Remote ID a pozemních přijímačů přímého Remote ID —, může být rozdělen do více operací.

Rozdíl mezi Operation a OperationUpdate je podstatný. Zpráva Operation představuje úplný stav letu v okamžiku požadavku a vrací se při dotazu přes REST API. Naproti tomu zprávy OperationUpdate představují dílčí změny, které se posílají hlavně v reálném čase (např. přes Socket.io nebo přes náš portál integrací). OperationUpdate obsahuje jen nedávné změny, ne celý stav.

Příklad​

{
"id": "a45cb00e-b600-4111-bd52-42537c28feb3",
"status": "current",
"uas_operator_id": "FIN87astrdge12k8",
"ua_classification": "class1",
"ua_classification_type": "open",
"ua_identifiers": [
{
"type": "serial_number",
"value": "15968AB92D361"
},
{
"type": "caa_assigned",
"value": "JA.JU12345ABCDE"
}
],
"authentication": [],
"descriptions": []
}

Telemetry-UA​

Náhled schématu JSON
VlastnostTypPopisPovinná
timestampstring (date-time)Původní časové razítko telemetrie. Čas z přijímače GNSS (UTC)Ano
timestamp_accuracynumberPřesnost časového razítka (max. chyba) [s]Ne
sensor_idstringJedinečný identifikátor senzoru nebo zařízení, které telemetrická data původně přijalo. Ve zprávách Telemetry-System toto pole určuje systém, ze kterého zpráva pochází.Ano
operation_idstringID operace (obvykle ve tvaru UUID)Ano
operational_stateObject 'DUMPOperationalState'Aktuální stav UAAno
locationanyPoloha UA z GNSSNe
altitudesarray of 'DUMPAltitude' objectsKolekce výšekNe
velocityanyRychlost UA a související údajeNe
air_pressureanyNaměřený tlak vzduchu [hPa]Ne

📋 Úplné schéma JSON najdete v naší dokumentaci API


Zpráva Telemetry-UA je hlavní datový objekt pro Remote ID. Zachycuje okamžitou geografickou polohu bezpilotního letadla (UA), jeho stav a další údaje, které vyžadují předpisy o Remote ID.

Každá zpráva Telemetry-UA je přes pole operation_id přiřazena k jedné zprávě Operation. Každé zařízení s Remote ID během provozu generuje zprávy Telemetry-UA.

Příklad​

{
"operation_id": "a45cb00e-b600-4111-bd52-42537c28feb3",
"timestamp": "2024-10-05T10:15:06.100Z",
"timestamp_accuracy": 0.1,
"operational_state": "airborne",
"location": {
"latitude": 50.073873, "longitude": 14.466586, "accuracy": 50
},
"altitudes": [
{ "type": "WGS84", "value": 192.5, "accuracy": 10 },
{ "type": "QNE", "value": 323.1, "accuracy": 0.5 },
{ "type": "AGL", "value": -10.0, "accuracy": 0.5 }
],
"velocity": {
"heading": 92, "horizontal_speed": 9.72, "vertical_speed": 1.22, "speed_accuracy": 0.5
},
"air_pressure": 1017.712
}

Telemetry-Operator​

Náhled schématu JSON
VlastnostTypPopisPovinná
timestampstring (date-time)Původní časové razítko telemetrie. Čas z přijímače GNSS (UTC)Ano
timestamp_accuracynumberPřesnost časového razítka (max. chyba) [s]Ne
sensor_idstringJedinečný identifikátor senzoru nebo zařízení, které telemetrická data původně přijalo. Ve zprávách Telemetry-System toto pole určuje systém, ze kterého zpráva pochází.Ano
operation_idstringID operace (obvykle ve tvaru UUID)Ano
locationObject 'DUMPLocation'Poloha z GNSSAno
altitudeObject 'DUMPAltitude'Výška operátoraAno
source_typeObject 'DUMPOperatorSourceType'Povaha polohy operátoraAno

📋 Úplné schéma JSON najdete v naší dokumentaci API


Zpráva Telemetry-Operator sleduje polohu operátora. Některé systémy UAV hlásí polohu pilota v reálném čase prostřednictvím svého ovládacího vybavení. Drony se standardním Remote ID mohou poskytovat sledování operátora, kdežto moduly Remote ID obvykle hlásí jen místo vzletu.

Příklad​

{
"operation_id": "a45cb00e-b600-4111-bd52-42537c28feb3",
"timestamp": "2024-10-05T10:15:06.100Z",
"timestamp_accuracy": 0.1,
"location": {
"latitude": 50.073873, "longitude": 14.466586, "accuracy": 50
},
"altitude": {
"type": "WGS84", "value": 202.5, "accuracy": 10
},
"source_type": "take_off"
}

Telemetry-System​

Náhled schématu JSON
VlastnostTypPopisPovinná
timestampstring (date-time)Původní časové razítko telemetrie. Čas z přijímače GNSS (UTC)Ano
timestamp_accuracynumberPřesnost časového razítka (max. chyba) [s]Ne
sensor_idstringJedinečný identifikátor senzoru nebo zařízení, které telemetrická data původně přijalo. Ve zprávách Telemetry-System toto pole určuje systém, ze kterého zpráva pochází.Ano
operation_idanyID operace (obvykle ve tvaru UUID). Nepovinné, protože zprávy Telemetry-SYSTEM jsou k operacím přiřazeny jen ve zvláštních případech, například když je systémem systém NRI (síťové Remote ID).Ne
system_typeObject 'DUMPSystemType'Typ zařízeníAno
system_statusObject 'DUMPSystemStatus'Aktuální stav systémuAno
locationanyAktuální poloha systémuNe
altitudeanyAktuální výška systémuNe
power_sourceanyAktuální zdroj napájení systému a jeho stavNe
lte_connectivityanyAktuální připojení LTE systému a jeho stavNe
gnss_connectivityanyAktuální připojení GNSS systému a jeho stavNe

📋 Úplné schéma JSON najdete v naší dokumentaci API


Zpráva Telemetry-System nese informace o stavu samotného modulu Remote ID, nikoli letadla. Obsahuje údaje o nabití baterie, připojení GNSS, signálu LTE a dalších parametrech systému. Zprávy Telemetry-System zatím generují jen zařízení Dronetag.

Příklad​

{
"operation_id": "a45cb00e-b600-4111-bd52-42537c28feb3",
"timestamp": "2024-10-05T10:15:06.100Z",
"timestamp_accuracy": 0.1,
"system_type": "rid_module",
"system_status": "operational",
"power_source": {
"type": "battery",
"input_voltage": 4.11,
"charge_percentage": 90,
"is_being_charged": false
},
"lte_connectivity": {
"status": "connected",
"rsrq": -10,
"rsrp": -97,
"snr": 9,
"tac": "291E",
"cell_id": "555CA02"
},
"gnss_connectivity": {
"status": "connected",
"satellites": 12
}
}

Using the Dronetag ATAK Plugin

The Dronetag ATAK Plugin connects a Dronetag RIDER to ATAK (Android Team Awareness Kit) over a USB-C cable or Bluetooth LE — no cellular data or cloud connectivity required. Every drone (and pilot) detection decoded by RIDER appears as a live track on the ATAK map and is shared with the rest of your TAK network via CoT (Cursor on Target).

Because it works entirely over USB or Bluetooth, the plugin keeps working in terrain with poor or no cellular coverage — exactly where RIDER and ATAK are most often used together.

poznámka

This guide assumes you already have ATAK-CIV installed and running, configured with (or without) a connection to your TAK server. The plugin works the same way whether or not ATAK is currently connected to a server — a server connection only affects whether your detections are relayed to other TAK users.

Prerequisites​

Before you begin, make sure you have:

  • ATAK-CIV installed, version 5.6.0 or later (check under Settings → About ATAK)
  • Android 11 or later
  • A Dronetag RIDER, with a USB-C cable or paired over Bluetooth LE
tip

The plugin is built to run on ATAK 5.6.0 and stays compatible with newer ATAK releases (5.7, 5.8, …) as they come out — you don't need to match an exact version, just that minimum.

Installing the plugin​

The plugin is distributed through the Play Store, under the Dronetag developer account:

Get it on Google Play

Install it like any other Android app. Because it's an ATAK plugin, not a standalone app, it won't appear with its own icon on your home screen — opening it always happens from inside ATAK.

Checking that the plugin loaded​

The first time a new plugin is installed, ATAK requires you to approve it before it loads. Open Settings → Tool Preferences → Package Management:

Look for Dronetag ATAK Plugin in the list:

  • Loaded (green, checked) — the plugin is active and ready to use.
  • Unloaded / unchecked — tap the checkbox next to it to load it.
poznámka

If you install a new build of the plugin while ATAK is running, it can get stuck in an "unloaded" state until you check the box here again — this is normal ATAK behavior for any plugin update, not specific to Dronetag.

Main UI​

Once loaded, the plugin adds a Dronetag tile to ATAK's tools menu (the hamburger icon in the top toolbar → Tools). It sits near the end of the tools grid, after the built-in tools:

Tapping it opens the Dronetag side panel, which is your main interface — a running list of all current detections, and a Device Manager button in the top-right corner to manage your RIDER connection:

Connecting your RIDER​

Open Device Manager (top-right of the Dronetag panel) to manage connections:

  • USB cable — turn this on and plug your RIDER in with a USB-C cable. ATAK will prompt for USB permission the first time.
  • Test beacon — see Using the test device below.
  • Scan for devices — searches for nearby RIDERs over Bluetooth LE and lists any found so you can connect:
varování

Only one app can hold the Bluetooth connection at a time. A RIDER accepts a single Bluetooth central connection at once. If the Dronetag App, Dronetag Toolbox, or Drone Scanner is already connected to your RIDER over Bluetooth, the ATAK plugin will fail to connect — often with no clear error, since Bluetooth doesn't tell a rejected device why it was refused.

If your RIDER won't connect in ATAK, check whether another Dronetag app on the same phone (or a different phone) already holds the Bluetooth link, and disconnect it there first. If you're not sure, power-cycle the RIDER to force it to drop any stale connection.

Information displayed​

Tap any entry in the detections list to open its detail page:

This shows everything decoded from the drone's Remote ID broadcast: status, UID, serial number, callsign, affiliation, the technology used (Bluetooth or Wi-Fi), signal strength, position, altitude, height above ground, speed, vertical speed, heading, and when it was first/last seen. If the broadcast includes a pilot location, a separate pilot marker appears on the map linked to the same drone.

From this page you can also:

  • Callsign — set a custom callsign for this detection, overriding the default name:

  • Details — look up the maker, model, and specifications of the aircraft, when identifiable from its serial number

  • Show on map — center the map on this detection

  • Back — return to the detections list

Using the test device​

The Test beacon, toggled on from Device Manager, simulates a synthetic drone orbiting your own location — no real RIDER or real drone required. It's useful for:

  • Verifying connectivity: confirming the full pipeline (plugin → ATAK → CoT → your TAK server) works before you need it in the field
  • Demonstrating the plugin: showing a team how detections look and behave without waiting for real air traffic

It behaves exactly like a real detection — it appears in the list, has a position and heading, and can be renamed or inspected the same way — so it's a safe way to learn the UI before your first real deployment.

Settings​

The plugin's own settings live under Settings → Tool Preferences → Specific Tool Preferences → Dronetag ATAK Plugin:

Detections

  • Mark stale after — how long a detection can go without an update before it's shown as stale on the map
  • Remove after — how long before a stale detection is removed from the list and map entirely

Callsigns — see below.

Working with the Callsign list​

Instead of naming detections one at a time, you can bulk-assign callsigns and affiliations from a CSV file:

  1. Prepare a CSV with one row per known drone:
    SN,Callsign,{friendly,hostile,neutral}
    For example:
    1596M0170424A1234,Patrol 1,friendly
    1596M0170424A5678,Unknown Contact,hostile
  2. Go to Settings → Tool Preferences → Specific Tool Preferences → Dronetag ATAK Plugin → Callsign CSV file, and pick the file using ATAK's file browser.
  3. The plugin matches detections to rows by serial number, applying the callsign and affiliation from the matching row.

A few things worth knowing:

  • The CSV is reloaded automatically whenever the file changes — no need to reselect it after an edit.
  • A manual callsign set from a detection's detail page (see Information displayed) always takes priority over the CSV for that detection.
  • If a detection's serial isn't in the CSV, it falls back to a generated name (Drone <last 4 characters of serial>).
  • Clear callsign CSV stops using the file entirely — all detections fall back to their default names and affiliations.

Simulovaná data

Dronetag nabízí simulační nástroj Mocker, se kterým můžete během vývoje testovat svou integraci bez fyzického zařízení. V Mockeru vytvoříte virtuální lety a ověříte, že váš systém data z Dronetagu správně přijímá a zpracovává.


👉 https://mocker.dronetag.app


Závěrečné ověření provádějte s fyzickými zařízeními

Simulátor se výborně hodí k ověření spojení a obecné výměny dat, nemusí ale vytvářet data zcela shodná se skutečnými zařízeními Dronetag. Před nasazením do produkce důrazně doporučujeme otestovat integraci s fyzickým zařízením.

Co budete potřebovat​

  • Účet Dronetag — pokud ho nemáte, vytvořte si ho zdarma
  • Virtuální zařízení Mocker registrované k vašemu účtu (viz níže)
  • Přístup k aplikaci Mocker — obvykle ho dostanete spolu s prvním virtuálním zařízením

Získání virtuálních zařízení​

Virtuální zařízení získáte, když nás kontaktujete a uvedete údaje o svém účtu Dronetag. Virtuální zařízení pro testování a vývoj zpravidla rádi poskytneme. Jakmile je virtuální zařízení registrované k vašemu účtu, můžete s ním simulovat lety a testovat svou integraci.

Vytvoření simulace​

Mocker podporuje dva simulační engine podle typu zařízení, které chcete simulovat:

EngineTyp zařízeníPříklady zařízení
nri_via_liveZařízení NRI (síťové Remote ID)Dronetag Mini
dri_via_funnelPřijímač DRIDronetag Scout, RIDER

Simulace zařízení NRI (nri_via_live)​

Simulace NRI napodobuje zařízení, které do sítě hlásí vlastní polohu. Stačí jeden identifikátor, protože simulované zařízení hlásí samo sebe.

  1. Otevřete aplikaci Mocker a přihlaste se
  2. Klepnutím kamkoli do mapy umístěte novou simulaci
  3. Zvolte engine nri_via_live
  4. Vyberte letový scénář
  5. V poli UAS Identifier vyberte jedno ze svých zařízení Mocker — bude fungovat jako zařízení NRI
  6. Nastavte zbývající parametry zvoleného scénáře a klikněte na Create

Simulace přijímače DRI (dri_via_funnel)​

Simulace přijímače DRI napodobuje zařízení, které detekuje letadla s Remote ID ve svém okolí a hlásí je. Potřebuje dva identifikátory: jeden pro přijímač a jeden pro detekované letadlo.

  1. Otevřete aplikaci Mocker a přihlaste se
  2. Klepnutím kamkoli do mapy umístěte novou simulaci
  3. Zvolte engine dri_via_funnel
  4. Vyberte letový scénář
  5. Do pole UAS Identifier zadejte libovolné platné sériové číslo Remote ID podle ANSI — představuje letadlo, které váš přijímač detekuje
  6. V poli Sensor ID vyberte jedno ze svých zařízení Mocker — bude fungovat jako přijímač DRI
  7. Nastavte zbývající parametry zvoleného scénáře a klikněte na Create

Ovládání simulací​

Vytvořené simulované zařízení se objeví na mapě a v levém postranním panelu. V postranním panelu můžete simulaci:

  • Pause — pozastavit
  • End — řádně ukončit
  • Force kill — násilně ukončit; použijte jen k otestování situace se ztrátou spojení
Simulace mají omezenou dobu trvání

Simulace běží dál, i když zavřete prohlížeč, a po uplynutí časového limitu se samy ukončí. Simulace, které už nepoužíváte, prosím ukončete.

Which Export to Choose

Dronetag exports flights and detections in a few file formats. The formats are the same wherever you export from, for example the Dronetag App, the Dronetag Export service or your own software through the Dronetag API. This section describes the files. What you can choose in each place is described on that place's own page, such as Exporting Data in the Dronetag App.

This page helps you pick a format.

A flight is reported by a Dronetag device on your own drone. A detection is a drone that one or more of your receivers heard, for example a Dronetag Scout. Flights and detections use the same file formats. A detection fills in a few extra fields, such as which receiver heard it.

Pick a Format​

I want toChooseRead more
Replay a flight in 3DKMZKMZ for Google Earth
Give someone a printable reportPDFOne report per flight or detection
Work with every position in ExcelCSV, With tracksCSV Telemetry
List many flights in Excel, one row eachCSV, SummaryCSV Summary
Feed my own softwareJSONJSON

KML is the same map as KMZ, but without the icons and the colour legend. Google Earth shows its own default pins instead. Choose KML only if a tool can't open KMZ.

With Tracks or Summary​

JSON and CSV come in two versions. You pick one when you export.

  • With tracks has every recorded position. This is the default.
  • Summary has one entry per flight or detection, without the positions.

The figures in a Summary are still calculated from the whole track. Choose Summary when you export many flights. For 80 flights, a Summary is a few hundred kilobytes and With tracks is tens of megabytes.

Units and Times​

JSON and CSV always use metres, metres per second, degrees and seconds. Their times are in UTC.

KMZ and PDF use metric units, or imperial ones where the place you export from lets you choose. Their times are also in UTC, marked "(UTC)".

File Names​

You exportedFile name
80 flights from 1 to 7 May 2026dronetag-flights-80_20260501-20260507-telemetry.csv
One flightdronetag-flight_1596CEXAMPLE00001_20260917-0742Z-telemetry.csv

Detections say operations or operation instead of flights or flight. A Summary ends in -summary instead of -telemetry. A zip has the same name with the extension .zip. Dates and times in file names are in UTC.

Format Versions​

JSON, CSV Telemetry and CSV Summary are all version 1.0, and each has its own version. When something is only added, the second number goes up. When something is removed, renamed or changes meaning, the first number goes up. If your software reads JSON, read schema_version and check the first number before you read the rest.

When You Get a Zip File​

A CSV can arrive in a zip together with a file called ATTRIBUTION.txt. This happens when heights in the CSV were calculated from terrain data that must be credited. Keep the two files together when you pass the data on. See Terrain Data and Attribution.

Some places also put several formats, or a large selection split into parts, into one zip.

Files Safe to Share Publicly​

Some places can make a file that is safe to share publicly. The file then leaves out the pilot's name and ID, the pilot's positions and the take-off point. It also leaves out the callsign, the Self-ID text, the return-to-home point and the receivers that heard a detection.

Serial numbers keep their first four and last four characters. Registration numbers and operator IDs are hidden completely. The drone's own track stays in the file.

Example Files​

The examples on these pages come from these files. They are synthetic. Every name, serial number, receiver and registration in them is invented.

FileWhat it shows
telemetry-1-flight.jsonJSON With tracks, one flight
telemetry-1-detection.jsonJSON With tracks, one detection with its pilot positions
summary-3-flights.jsonJSON Summary, three flights
summary-3-detections.jsonJSON Summary, three detections
telemetry-1-flight.csvCSV Telemetry, one flight
telemetry-1-detection.csvCSV Telemetry, one detection
summary-3-flights.csvCSV Summary, three flights
summary-3-detections.csvCSV Summary, three detections
ATTRIBUTION.txtThe terrain credits that come in a zip with a CSV

In a real download the file names follow the pattern under File Names, and each of these CSVs would arrive in a zip with its ATTRIBUTION.txt.

CSV Telemetry

CSV Telemetry is the CSV you get with With tracks. It has one row for every recorded position. The file name ends in -telemetry.csv.

Flights and detections use the same 15 columns in the same order. A column that one kind never fills stays empty.

Columns​

#ColumnMeaningUnitEmpty whenIn JSON
1operation_idID of the flight or detectionoperations[].id
2timestampTime of the position, UTCtrack[].timestamp
3serial_numberSerial number. For a flight, the Dronetag device's.Not reportedIdentifier of type serial_number
4sensor_idReceiver that heard this positionFlights, or shared publiclytrack[].sensor_id
5operational_stategrounded, airborne or emergencyFlights, or not reportedtrack[].operational_state
6latitudeLatitude, WGS 84degreestrack[].location.latitude
7longitudeLongitude, WGS 84degreestrack[].location.longitude
8horizontal_speedSpeed over the groundm/sNot reportedtrack[].velocity.horizontal_speed
9vertical_speedClimb rate, positive when climbingm/sNot reportedtrack[].velocity.vertical_speed
10headingDirection of travel, clockwise from northdegreesNot reportedtrack[].velocity.heading
11alt_hae_wgs84Height above the WGS 84 ellipsoidmNot reportedAltitude of type HAE-WGS84
12alt_atoHeight above the take-off pointmNot reportedAltitude of type ATO
13alt_pressurePressure altitudemNot reportedAltitude of type PA-QNE
14alt_mslAltitude above mean sea levelmCan't be worked outAltitude of type MSL
15alt_aglHeight above the groundmNo sea level or no terrain dataAltitude of type AGL

The five altitude columns are explained in Altitudes Explained.

An empty cell means the value wasn't reported and Dronetag couldn't calculate it. A real zero, such as the speed of a hovering drone, is written as zero and never left empty.

CSV has no accuracies. If you need to know how exact a value is, use JSON.

Facts about the aircraft and the pilot are in CSV Summary. Its id column holds the same value as operation_id, so you can join the two files.

Example​

The first row of the example flight and of the example detection (synthetic data):

operation_id,timestamp,serial_number,sensor_id,operational_state,latitude,longitude,horizontal_speed,vertical_speed,heading,alt_hae_wgs84,alt_ato,alt_pressure,alt_msl,alt_agl
3f6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,2026-09-17T07:42:13.350390Z,1596CEXAMPLE00001,,,49.1679989,16.4950113,0.0,0.0,,327.1,0.08,255.81,282.13207082568454,0.43031044931819906
6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60,2026-09-22T15:31:04.048000Z,1581FEXAMPLE00000004,SCT-EXAMPLE-01,grounded,49.9599978,14.4999964,0.0,0.0,0.0,400.3,0.0,327.7,354.9,1.0917571914229143

The flight row has no receiver and no state. The detection row has both.

Opening It in Excel​

A CSV is written in one of two styles. Some places let you choose the style when you export.

  • Decimal point writes 1.5 and separates columns with commas. It suits English-language Excel, Numbers and LibreOffice.
  • Decimal comma writes 1,5 and separates columns with semicolons. It suits Czech, German and most other European set-ups.

When the style matches your Excel, double-click the file and it opens in columns. Accents and the degree sign display correctly.

If everything lands in one column, the file was written in the other style. Import it instead.

  1. In Excel, choose Data → From Text/CSV and pick the file.
  2. Set the delimiter to comma or semicolon.
  3. If numbers come out as text, choose Transform Data, select the columns and use Change Type → Using Locale.

The example detection&#39;s CSV Telemetry opened in Excel, one column per field

Numbers keep every digit the source reported. Format the cells in Excel if you want fewer decimals.

Reading It in a Program​

The file is UTF-8 with a byte order mark. In Python, open it with encoding="utf-8-sig". Lines end in CRLF and times end in Z (UTC). Numbers have full precision and no thousands separators. The header always has the same 15 columns.

If You Get a Zip File​

When alt_msl or alt_agl came from terrain data that must be credited, the CSV arrives in a zip with ATTRIBUTION.txt. Keep the two files together. See Terrain Data and Attribution.

CSV Summary

CSV Summary is the CSV you get with Summary. It has one row for each flight or detection. It doesn't contain the positions. The file name ends in -summary.csv.

Flights and detections use the same 37 columns in the same order. The figures are calculated from the whole track, exactly as in a With tracks export.

Columns​

The Who column says which kind fills the column. F means flights, D means detections.

Identity​

#ColumnWhoMeaningUnitEmpty whenIn JSON
1idF DID of the flight or detectionNeverid
2statusF DSee Status valuesNot reportedsummary.status
3sensor_idsDReceivers that heard it, separated by |Flightssummary.source.sources[].name
4serial_numberF DSerial number. For a flight, the Dronetag device's.Not reportedIdentifier of type serial_number
5callsignF DName the pilot gave the flight, or a manned aircraft's callsignNot setIdentifier of type custom_callsign, otherwise callsign
6caa_assignedDRegistration number from the aviation authorityNot broadcastIdentifier of type caa_assigned

Aircraft and Operator​

#ColumnWhoMeaningUnitEmpty whenIn JSON
7aircraft_manufacturerDManufacturer, such as DJIUnknownsummary.aircraft_manufacturer
8aircraft_modelF DModel, such as DJI Mavic 3Unknownsummary.aircraft_model
9aircraft_categoryDKind of aircraft, such as rotorcraftUnknownsummary.aircraft_category
10ua_classificationDEU category and class, such as open class_1Not broadcastsummary.ua_classification category and class
11uas_operator_idF DOperator registration numberNot reportedsummary.uas_operator_id
12pilot_idFPilot's ID in the Dronetag platformDetectionssummary.pilot.id
13pilot_nameFPilot's nameDetectionssummary.pilot.name
14message_countDMessages heard by all receivers togetherFlightssummary.message_count

When​

#ColumnWhoMeaningUnitEmpty whenIn JSON
15durationF DFrom the first to the last positionsNo positionssummary.duration
16time_first_telemetryF DTime of the first position, UTCNo positionssummary.time_first_telemetry
17time_last_telemetryF DTime of the last position, UTCNo positionssummary.time_last_telemetry

Where​

#ColumnWhoMeaningUnitEmpty whenIn JSON
18, 19take_off_latitude, take_off_longitudeF (D rarely)Take-off locationdegreesNot reportedsummary.take_off.location
20, 21first_latitude, first_longitudeF DFirst positiondegreesNo positionssummary.first
22, 23last_latitude, last_longitudeF DLast positiondegreesNo positionssummary.last
24, 25min_latitude, max_latitudeF DSouthern and northern edge of the trackdegreesNo positionssummary.bbox[1], summary.bbox[3]
26, 27min_longitude, max_longitudeF DWestern and eastern edge of the trackdegreesNo positionssummary.bbox[0], summary.bbox[2]

The first and last positions are where the record starts and ends. They are often not the take-off and landing, because a receiver starts hearing a drone when it comes into range.

How Far and How Fast​

#ColumnWhoMeaningUnitEmpty whenIn JSON
28point_countF DNumber of positionsNo positionssummary.point_count
29total_distanceF DDistance flown over the groundmFewer than 2 positionssummary.total_distance
30max_horizontal_speedF DHighest ground speedm/sNo speed reportedsummary.max_horizontal_speed
31operator_track_kindDoperator, take_off or mixed, see belowNo pilot positionsummary.operator_track_kind
32max_operator_distanceDLargest distance between drone and pilotmNo pilot positionsummary.max_operator_distance
33operator_movement_extentDHow far the pilot movedmNo pilot positionsummary.operator_movement_extent
34transmission_technologiesDHow the drone was heard, such as wifi_beacon, separated by |Flightssummary.source.transmission_technologies

operator_track_kind tells you what the pilot position is. operator is the pilot's real position. take_off means the drone sent only its take-off location, so the distances are measured from there. mixed is some of each.

Altitudes​

#ColumnWhoMeaningUnitEmpty whenIn JSON
35max_alt_atoF DHighest height above take-offmNot in the tracksummary.max_altitudes[] of type ATO
36max_alt_mslF DHighest altitude above sea levelmNot in the tracksummary.max_altitudes[] of type MSL
37max_alt_aglF DHighest height above the groundmNot in the tracksummary.max_altitudes[] of type AGL

There are no minimums. See Altitudes Explained.

Status Values​

ValueKindMeaning
plannedFlightCreated ahead of time and not started yet
currentFlight, detectionStill in progress when you exported it. The track may still grow.
inactiveFlightStill open, but the device stopped reporting
uploadingFlightRecorded offline and still being uploaded
processingFlightOver, and still being processed
errorFlightProcessing failed, so the record may be incomplete
finishedFlightOver and processed
cancelledFlightPlanned and never flown
pastDetectionOver
upcomingDetectionAnnounced and not started yet

Only in JSON​

CSV Summary keeps to the fields most people need. These are only in JSON:

  • Accuracies.
  • Start and end times as the source states them. These can differ from the first and last position.
  • The return-to-home point and the declared operation area of a flight.
  • Rare identifiers, the Self-ID text and the flight's colour.

Example​

One example flight and one example detection (synthetic data):

id,status,sensor_ids,serial_number,callsign,caa_assigned,aircraft_manufacturer,aircraft_model,aircraft_category,ua_classification,uas_operator_id,pilot_id,pilot_name,message_count,duration,time_first_telemetry,time_last_telemetry,take_off_latitude,take_off_longitude,first_latitude,first_longitude,last_latitude,last_longitude,min_latitude,max_latitude,min_longitude,max_longitude,point_count,total_distance,max_horizontal_speed,operator_track_kind,max_operator_distance,operator_movement_extent,transmission_technologies,max_alt_ato,max_alt_msl,max_alt_agl
3f6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,finished,,1596CEXAMPLE00001,EXAMPLE-FLIGHT-1,,,DJI Matrice 350 RTK,,,CZEexampleoper01,9b6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,Tomáš Example,,260.963047,2026-09-17T07:42:13.350390Z,2026-09-17T07:46:34.313437Z,49.1679989,16.4950113,49.1679989,16.4950113,49.168003,16.4949982,49.167991,49.1699201,16.4949881,16.4979653,262,1373.6529667703585,10.14401301260995,,,,,80.33,364.0258824461374,83.32078650204227
6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60,past,SCT-EXAMPLE-01|SCT-EXAMPLE-02,1581FEXAMPLE00000004,,OK-UAS-EXAMPLE-4,DJI,DJI Mavic 3,rotorcraft,open class_1,CZEexampleoper04,,,194,192.977,2026-09-22T15:31:04.048000Z,2026-09-22T15:34:17.025000Z,,,49.9599978,14.4999964,49.9599977,14.4999876,49.9599864,49.9620193,14.4999838,14.5036452,194,973.7599886011964,12.16,operator,261.9408504975598,44.46384785221796,wifi_beacon|wifi_nan,95.1,449.4,97.37793678299658

CSV Summary of three detections in Excel, columns A to N and AE to AK

The same columns for three flights. The detection-only columns stay empty.

CSV Summary of three flights in Excel, columns A to N and AE to AK

Joining It With CSV Telemetry​

id here and operation_id in CSV Telemetry hold the same value. Put both files in one workbook, with the summary on a sheet called Summary. In the telemetry sheet, add a column with this formula:

=XLOOKUP(A2, Summary!A:A, Summary!H:H)

It copies aircraft_model (column H) into each position row. If your Excel separates formula arguments with semicolons, use semicolons instead of the commas.

Cells With Several Values​

sensor_ids and transmission_technologies can hold several values separated by |. If a value itself contains | or \, a backslash is written in front of it.

Reading It in a Program​

The rules are the same as for CSV Telemetry. The file is UTF-8 with a byte order mark, lines end in CRLF and times are in UTC. The header always has the same 37 columns.

JSON

JSON is the complete export, meant for your own software. It has everything the CSV files have, plus accuracies, all identifiers, the pilot's positions and the terrain credits. The current version is 1.0.

  • With tracks has every flight or detection with all its positions. The file name ends in -telemetry.json.
  • Summary is the same file without track and operator_track. Everything else is identical. The file name ends in -summary.json.

The file is written on one line to keep it small. To read it, open it in a code editor and format it, or run jq . file.json.

Where DUMP (Dronetag Unified Message Protocol) has a name and shape for something, the export uses it. The JSON Schema of the file is published at:

https://api.dronetag.app/v2/export/schemas/export-v1.json

This page describes the file. The export endpoints are described in the Dronetag API documentation.

The Shape of the File​

{ schema_version, operations: [ { id, summary, operator_track, track }, … ], attribution }
KeyTypePresentWhat it is
schema_versionstringAlways"1.0"
operations[]arrayAlwaysThe flights and detections
attributionobjectWhen neededTerrain credits for the whole file. See Attribution.

summary.source.kind tells you what each entry is. rid_transmitter is a flight from a Dronetag device, rid_receiver is a detection and network_rid is network Remote ID.

The Who column in the tables on this page says which kind fills a key. F means flights, D means detections, F D means both when the source stated it.

Each entry has up to four keys, always in this order.

KeyTypeWhoWhat it is
idstringF DID of the flight or detection, the same as in the CSV files
summaryobjectF DEverything about it. First what the source reported, then what Dronetag calculated from the track. Identical in both exports.
operator_track[]array of operator pointsDThe pilot's positions. With tracks only.
track[]array of track pointsF DThe aircraft's positions. Always the last key. With tracks only.

CSV Summary is a flat copy of summary.

When a value wasn't reported and couldn't be calculated, its key is left out. It is never null and never replaced by zero.

Positions and Altitudes​

A track point from the example detection, formatted for reading:

{
"timestamp": "2026-09-22T15:31:25.923000Z",
"timestamp_accuracy": 0.1,
"sensor_id": "SCT-EXAMPLE-01",
"operational_state": "airborne",
"location": { "latitude": 49.9600514, "longitude": 14.5000551, "accuracy": 3.0 },
"altitudes": [
{ "type": "HAE-WGS84", "value": 459.4, "accuracy": 10.0 },
{ "type": "MSL", "value": 413.9 },
{ "type": "ATO", "value": 60.9 },
{ "type": "PA-QNE", "value": 388.6 },
{ "type": "AGL", "value": 59.99999999999994, "accuracy": 10.009657003780566 }
],
"velocity": { "horizontal_speed": 9.12, "vertical_speed": 0.83, "heading": 32.7, "speed_accuracy": 0.3 }
}

altitudes is a list with one item per kind of altitude. Look items up by type, not by their place in the list. The five types are explained in Altitudes Explained.

accuracy says how exact a value is, in metres (m/s for speeds). Roughly two times in three, the true value is within this amount. It appears only when the source reported it or Dronetag calculated it.

Two keys list longitude before latitude, because they follow the GeoJSON standard. They are summary.bbox (west, south, east, north) and summary.operation_area. Everywhere else latitude and longitude are named keys.

A Short Example​

The example detection, shortened. … marks what was left out.

{
"schema_version": "1.0",
"operations": [
{
"id": "6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60",
"summary": {
"source": {
"kind": "rid_receiver",
"transmission_technologies": ["wifi_beacon", "wifi_nan"],
"sources": [
{ "name": "SCT-EXAMPLE-01", "type": "rid_receiver", "message_count": 66 },
{ "name": "SCT-EXAMPLE-02", "type": "rid_receiver", "message_count": 128 }
]
},
"identifiers": [
{ "type": "caa_assigned", "value": "OK-UAS-EXAMPLE-4" },
{ "type": "serial_number", "value": "1581FEXAMPLE00000004" },
…
],
"uas_operator_id": "CZEexampleoper04",
"ua_classification": { "type": "european_union", "category": "open", "class": "class_1" },
…
"aircraft_model": "DJI Mavic 3",
"status": "past",
…
"duration": 192.977,
…
"point_count": 194,
"total_distance": 973.7599886011964,
…
"max_altitudes": [
{ "type": "HAE-WGS84", "value": 494.7, "accuracy": 3.0 },
…
{ "type": "AGL", "value": 97.37793678299658, "accuracy": 3.0320345204719112 }
],
"operator_track_kind": "operator",
"max_operator_distance": 261.9408504975598,
…
},
"operator_track": [
{ "timestamp": "2026-09-22T15:31:04.091000Z",
"location": { "latitude": 49.9599127, "longitude": 14.4998279, "accuracy": 4.0 },
"altitudes": [{ "type": "HAE-WGS84", "value": 401.4 }],
"source_type": "dynamic" },
…
],
"track": [ … 194 points like the one above … ]
}
],
"attribution": {
"terrain_credits": ["„ČÚZK, 2026“ … by Dronetag"]
}
}

The complete example files can be downloaded from Which Export to Choose.

Every Key​

Summary Keys Stated by the Source​

These come first in summary, in this order.

KeyTypeWhoDescription
sourceobjectF DWhere the data come from. See Source.
identifiers[]array of {type, value}F DTypes per DUMP. For drones serial_number, caa_assigned (registration from the aviation authority), utm_assigned, specific_session_id, custom_callsign (the name the pilot gave the flight). For manned aircraft callsign, icao_address, registration, squawk_code, flarm_id, ogn_address. Also other. A flight has serial_number (the device's) and custom_callsign.
uas_operator_idstringF DThe UAS operator's registration number
ua_classificationobject {type, category, class}Dtype is european_union. category is open, specific or certified. class is class_0 to class_6.
aircraft_categorystringDDUMP value, for example rotorcraft (helicopter and multirotor), aeroplane, glider or unknown. The full list of 28 values is in the JSON Schema.
aircraft_manufacturerstringDManufacturer
aircraft_modelstringF DFull model name, usually starting with the manufacturer, for example DJI Mavic 3
descriptions[]array of {type, value}F DTypes text_description (Self-ID text), emergency_description, extended_status_description, custom_color. The callsign is not here. It is in identifiers as custom_callsign.
statusstringF DThe values and their meaning are listed in CSV Summary.
pilotobject {id, name}FThe pilot. Removed when the export is made safe to share publicly.
time_start, time_endstring (time)F DStart and end as the source states them. These are not the first and last positions.
take_offpoint objectF (D rarely)Take-off location as the source states it
home_locationpoint objectF DReturn-to-home point, if the source states it
operation_areaobjectFThe declared area, exactly the GeoJSON the source sends. Any geometry or Feature, longitude before latitude.

Source​

KeyTypeWhoDescription
kindstringF Drid_transmitter (a flight from a Dronetag device), network_rid (network Remote ID) or rid_receiver (a detection)
standardstringF DThe Remote ID standard, if the source states it
transmission_technologies[]array of stringDDUMP 0.15 values. Remote ID wifi_beacon, wifi_nan, bluetooth_legacy, bluetooth_long_range. Manned aviation ads_b, ads_l, uat, flarm, ogn. Also ocusync and external.
sources[]array of {name, type, position, message_count}DThe receivers that heard the operation. name is the receiver ID, type is rid_receiver, position is a point object when known and message_count is how many messages it heard.

Track Point​

KeyType, unitWhoDescription
timestampstring (time)F DTime of the position
timestamp_accuracynumber, sDStated accuracy of the time
sensor_idstringDThe receiver that heard the position
operational_statestringDgrounded, airborne or emergency
locationobjectF Dlatitude and longitude in degrees (WGS 84), accuracy in metres when stated
altitudes[]array of altitude itemsF DEvery altitude of the point
velocityobjectF Dhorizontal_speed (m/s), vertical_speed (m/s, positive up), heading (degrees clockwise from north), speed_accuracy (m/s). Also turn_rate (degrees per second), components (east, north and up speed in m/s) and components_accuracy (m/s). Each key only when stated.
rssinumber, dBmDSignal strength, only when the source states it

Altitude Item​

KeyType, unitDescription
typestringHAE-WGS84, MSL, ATO, PA-QNE or AGL. See Altitudes Explained.
valuenumber, mThe value
accuracynumber, mOne standard deviation. When it is present is described in Altitudes Explained.

A flight from a Dronetag device usually has HAE-WGS84, ATO and PA-QNE. A detection usually has HAE-WGS84 and PA-QNE, often ATO and sometimes MSL stated by the source. Dronetag adds MSL when the source didn't state it and it can be calculated, and AGL when terrain data is available.

Point Object​

Used for take_off, home_location and sources[].position.

{"location":{"latitude":49.1679989,"longitude":16.4950113},"altitudes":[{"type":"HAE-WGS84","value":327.1},{"type":"PA-QNE","value":255.81}]}
KeyTypeDescription
locationobjectlatitude and longitude in degrees, accuracy in metres when stated
altitudes[]array of altitude itemsThe altitudes the source stated for the point. May be empty.

Operator Point​

KeyTypeDescription
timestampstring (time)Time of the position
locationobjectAs in a track point
altitudes[]array of altitude itemsWhen the source stated them
source_typestringdynamic (the pilot's real position over time), fixed (stated once) or take_off (the take-off location sent in place of the pilot's position)

Summary Keys Calculated by Dronetag​

These follow the source keys in summary and are identical in both exports.

KeyType, unitWhoDescription
time_first_telemetry, time_last_telemetrystring (time)F DFirst and last received position
durationnumber, sF DThe difference of the two
first, lastobject {latitude, longitude}F DFirst and last position in degrees
bboxarray of 4 numbersF DEnvelope of the track as a GeoJSON bbox, [min_lon, min_lat, max_lon, max_lat]
point_countintegerF DNumber of received positions
total_distancenumber, mF DHorizontal distance flown. Small movement while standing still is not counted.
max_horizontal_speednumber, m/sF DHighest ground speed
max_altitudes[]array of altitude itemsF DThe highest value of each altitude type in the track, with the accuracy of the point where it occurred (only when that point has one). There are no minimums.
operator_track_kindstringDoperator (real positions), take_off (take-off location only) or mixed
max_operator_distancenumber, mDLargest horizontal distance between the aircraft and the pilot, or the take-off location
operator_movement_extentnumber, mDDiagonal of the envelope of the pilot's positions
message_countintegerDMessages heard by all receivers together

Attribution​

{"terrain_credits":["…"],"terrain_liability_notices":["…"]}
KeyTypeDescription
terrain_credits[]array of stringThe credit each terrain model's licence requires, word for word, each text once
terrain_liability_notices[]array of stringThe legal notice, when a licence requires one, each text once

The credits belong to the whole file, not to an operation. When they appear and why they must stay with the data is described in Terrain Data and Attribution.

Altitudes Explained

A drone's height can be measured from several starting points, and Remote ID reports several of them. The exports keep each one under its own name, so you always know which one you are reading.

JSON typeCSV columnMeasured fromComes from
HAE-WGS84alt_hae_wgs84The WGS 84 ellipsoid, the smooth model of the Earth that GPS usesThe drone (GPS)
MSLalt_mslMean sea levelThe drone, or calculated by Dronetag
ATOalt_atoThe take-off pointThe drone
PA-QNEalt_pressureStandard air pressure (1013.25 hPa)The drone (barometer)
AGLalt_aglThe ground under the droneCalculated by Dronetag

All values are in metres.

A drone 60 m above a hill, with arrows for its five altitudes

One Point, Five Altitudes​

A point from the example detection, about 60 m above the ground:

TypeValueWhat it means
HAE-WGS84459.4 mHeight above the ellipsoid. In Czechia the ellipsoid lies about 45 m below sea level, so this number is the highest.
MSL413.9 mAltitude above sea level
ATO60.9 mHeight above the place it took off from
AGL60.0 mHeight above the ground under it. It is close to ATO here because the ground is about as high as at take-off. On a slope the two differ.
PA-QNE388.6 mThe barometer's reading. It is 25 m off the sea-level altitude because real air pressure is never exactly standard.

Which One to Use​

QuestionUse
How high above the ground?AGL
How high above where it took off?ATO
How high above sea level, for example to compare with airspace limits?MSL
What did the GPS say?HAE-WGS84

Pressure altitude changes with the weather and isn't corrected for local air pressure. Don't use it as height above sea level.

Why the height above take-off can be negative, and why many drones show it as "AGL", is explained in Understanding Altitude Values.

When MSL Is Empty​

If the drone reported a sea-level altitude, the export keeps it. Otherwise Dronetag calculates one from the GPS height. If there is no GPS height, Dronetag uses the height of the take-off point plus the height above take-off.

When none of this is possible, MSL is empty. The file doesn't say which way the value was found.

When AGL Is Empty​

AGL is the sea-level altitude minus the height of the ground at that place. The ground height comes from a terrain model. AGL is empty when there is no sea-level altitude or no terrain data for that place. See Terrain Data and Attribution.

A height slightly below zero is normal for a drone standing on the ground. The example flight starts at 0.43 m and goes down to -1.04 m before take-off. Values this close to zero mean "on the ground".

Over forest and in towns, AGL can read low. Some terrain models measure the top of trees and roofs, not the soil.

Accuracy​

In JSON, an altitude can have an accuracy in metres. Roughly two times in three, the true value is within this amount.

  • A value the drone reported has an accuracy only if the drone reported one.
  • AGL has an accuracy.
  • A calculated MSL has one when the value it was calculated from had one. It also includes the error of the conversion, 0.4 m through the geoid or 3.5 m through the take-off point.

CSV files have no accuracies. KMZ and PDF show the height above ground as an estimate, for example "97 m (estimated, ±3.0 m)".

KMZ and PDF calculate the height above ground from the GPS height. When a drone also reported its own sea-level altitude, their figure can differ a little from the one in JSON and CSV.

Altitudes in the Summary​

The summary of each flight or detection has the highest value of each altitude type. In JSON this is max_altitudes. In CSV Summary it is max_alt_ato, max_alt_msl and max_alt_agl. There are no minimums.

KMZ for Google Earth

A KMZ file shows your flights or detections on a 3D map. You can replay them, see where the pilot stood and click a marker for details. Open the file in Google Earth Pro. Most GIS tools can import it too.

Heights are drawn above sea level, so the track sits at the right height over the terrain in Google Earth.

What Is in the File​

Each flight or detection has its own folder, named after its serial number. Inside, every layer is a folder with its own checkbox in the Places panel, so you can turn layers on and off.

The Places panel in Google Earth Pro with the first detection&#39;s folder open

Shown When You Open the File​

LayerLooks likeWhat it shows
AircraftLight-blue dot with a white rimThe drone. It moves when you replay the flight.
PathLine coloured by speedThe whole track. Blue is slow, red is fast. The legend in the corner gives the values.
PilotWhite figure on a blue discWhere the pilot was. It moves with the replay. Detections only.
Take-off pointOrange take-off symbol on a white discShown when the drone sent its take-off location instead of the pilot's position. Detections only.
First seenGreen triangle pointing upThe first recorded position
Last seenRed triangle pointing downThe last recorded position
SummaryBlue dot with a white rim, in the middle of the trackClick it for the summary
Operation areaOutlined areaThe area declared for the flight, when there is one. Flights only.

First seen and last seen are not the take-off and landing. A receiver starts hearing a drone when it comes into range, often in mid-flight.

A detection in Google Earth Pro, tilted, with the path coloured by speed, the pilot and the summary dot

A flight in Google Earth Pro with its operation area

Turned Off When You Open the File​

Tick these in the Places panel when you need them.

LayerWhat it shows
Altitude curtainA wall from the track down to the ground, which makes the height easier to see
Velocity arrowsArrows in the direction of travel. Click one for the speed and time.
TethersLines from the drone to the pilot or take-off point, with the distance. Detections only.

The Summary​

Click the summary dot to see what the aircraft was, its identifiers and operator, when it was first seen, how long and how far it flew, its top speed and its greatest heights. A detection also shows the largest distance from the pilot and the receivers that heard it.

The summary balloon of a detection in Google Earth Pro

A few rows use different names from the CSV and JSON.

In the KMZIn CSV and JSON
Callsigncallsign (JSON: custom_callsign)
DescriptionThe Self-ID text the drone sent. JSON only.
First positiontime_first_telemetry
Max. Height (AGL)max_alt_agl

A record with no positions shows Start instead of First position.

Replaying a Flight​

Use the time slider at the top of the map. Press play or drag it. If you don't see the slider, choose View → Show Time.

The Follow the aircraft tour flies the camera along the track. Find it in the Places panel and press play.

Units, Times and Credits​

Distances, speeds and heights are in metric units, or imperial ones where the place you export from lets you choose. Times are in UTC, for example "15:31:04 (UTC)".

If the heights above ground came from terrain data that must be credited, the credit is in the description of each flight's folder, under Terrain data. See Terrain Data and Attribution.

Terrain Data and Attribution

To work out how high a drone was above the ground, Dronetag needs to know how high the ground is. That comes from terrain models, maps of ground height published by survey agencies and space programmes. Some of them may only be used if you credit them. This page says what you need to keep when you pass exported data on.

What Terrain Data Is Used For​

Terrain data gives the height above the ground (AGL) at every point.

It is also used for the sea-level altitude (MSL) in one case. When the drone reported no GPS height, Dronetag reads the ground height at the take-off point and adds the height above take-off.

Terrain Models​

Dronetag can use the terrain models below. For each place it uses the most detailed one available.

ModelCoversDetailMeasuresCredit needed
ČÚZK DMR 5GCzechia5 mBare groundYes
USGS 3DEPUnited StatesAbout 30 mBare groundNo
Copernicus DEM GLO-30Most of Europe30 mSurfaceYes, with a disclaimer
NOAA ETOPO 2022The whole worldAbout 1 to 2 kmBare groundNo

The map shows which model is used where. Drag it to move around and use the buttons to zoom in. Click an area or a model name to see its details.

Click a coloured area or a model above to see its details.

The Copernicus models measure the top of trees and buildings. Over forest or in towns, the height above the ground reads low by about the height of the trees or roofs.

Where the Credits Are​

An export carries credits only for the terrain it actually used, and only when that terrain needs a credit.

FormatWhere to find the credits
CSVThe download is a zip with the CSV and ATTRIBUTION.txt. If no credit is needed, you get the plain CSV.
JSONThe attribution key at the end of the file
KMZThe description of each flight's folder, under Terrain data
PDFThe Terrain Data section of the report

What ATTRIBUTION.txt Contains​

ATTRIBUTION.txt is a short English text file in UTF-8. It names the CSV it belongs to and the columns whose values came from terrain data. These are alt_agl and alt_msl in CSV Telemetry, and max_alt_agl and max_alt_msl in CSV Summary. Then it lists each terrain model with three parts.

  • The notice is the credit, word for word as the licence asks for it.
  • The disclaimer appears only when the licence asks for one. Copernicus does.
  • The licence line names the licence and links to it.

Lines are wrapped, but the wording never changes. A complete example is in ATTRIBUTION.txt.

A CSV zip opened in Windows Explorer, holding the CSV and ATTRIBUTION.txt

Why the Credits Must Stay With the Data​

The licences let you use and share the heights as long as the credit goes with them.

  • Keep ATTRIBUTION.txt with the CSV when you send, upload or publish it.
  • Keep the attribution block when you pass the JSON on.
  • If you publish something built from these heights, such as a chart or a report, include the notice texts exactly as written. Some licences require the exact wording.

If you are unsure what a licence allows, read it through the link in the file or ask the data provider.

Průvodce migrací: přechod na získávání telemetrie podle oblasti

Do února 2025

V rámci vylepšení přechází Dronetag na získávání telemetrie podle oblasti a podle časového úseku. Při dotazech na telemetrii a data v reálném čase proto musíte nově zadat geografickou oblast nebo časový rozsah. Postupujte podle tohoto průvodce, aby přechod na nový systém proběhl hladce.

Čeho se změna týká​

  • Všech HTTP požadavků na telemetrii po letu z api.dronetag.app
    • Endpointy:
      • https://api.dronetag.app/v1/flights/*/telemetry*
      • https://api.dronetag.app/v1/devices/*/status-history
  • Všech HTTP požadavků na živou telemetrii z live.dronetag.app
    • Endpointy:
      • https://live.dronetag.app/api/v2/airspace/overview
      • https://live.dronetag.app/api/v2/devices/*/telemetry
      • https://live.dronetag.app/api/v2/devices/*/status_history
      • https://live.dronetag.app/api/v2/flights/*/telemetry
  • Všech spojení Socket.IO pro letovou telemetrii v reálném čase z live.dronetag.app

Hlavní změny​

  • Pro každé získání telemetrie je nyní nutné zadat geografické hranice nebo UAS ID (sériové číslo zařízení).
  • Létající objekty už služba neidentifikuje podle UAS ID, ale podle Operation ID.
  • Naše telemetrické endpointy nyní používají nový datový formát DUMP, který budou jednotně používat všechny naše služby.
  • Několik endpointů, mezi nimi https://live.dronetag.app/api/v2/airspace/overview, bude do února 2025 označeno jako zastaralé (deprecated).

Harmonogram migrace​

  • Únor 2025: Všechny zastaralé endpointy API a Socket.IO na live.dronetag.app budou odstraněny. Do tohoto data dokončete migraci.

Migrace krok za krokem​

1. Pro získávání telemetrie přejděte na api.dronetag.app/v2/airspace​

Při získávání telemetrie nahraďte dotazy na live.dronetag.app dotazy na api.dronetag.app/v2/airspace.

Náhrada za GET https://live.dronetag.app/api/v2/airspace/overview​

  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/ua.
  • Zadejte časový rozsah, geografické hranice nebo UAS ID.
  • Poznámka: Létající objekty se nyní identifikují podle Operation ID. UAS ID zjistíte přes /operations/{operation_id}.

Náhrada za GET https://live.dronetag.app/api/v2/devices/*/telemetry​

  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/ua?uas_id=xxx s filtrem podle UAS ID.
  • K zjištění UAS ID budete možná potřebovat /operations/{operation_id}.

Náhrada za GET https://live.dronetag.app/api/v2/devices/*/status_history​

  • Historie stavu zařízení je nyní součástí systémové telemetrie.
  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/system?uas_id=xxx s filtrem podle UAS ID.

Náhrada za GET https://live.dronetag.app/api/v2/flights/*/telemetry​

  • Letová telemetrie je nyní vázaná na Operation ID.
  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/ua?operation_id=xxx.

2. Pro spojení Socket.IO přejděte na api.dronetag.app/v2/airspace​

  • Služby Socket.IO na live.dronetag.app budou ukončeny. Pro telemetrii v reálném čase používejte api.dronetag.app/v2/airspace.
  • Po připojení pošlete zprávu viewport, kterou určíte sledovanou geografickou oblast. Novou zprávu viewport pošlete pokaždé, když se oblast změní, a také po každém opětovném připojení.
  • Podrobnosti najdete na stránce Začínáme se Socket.io.

3. Pro data po letu přejděte na api.dronetag.app/v2/airspace​

Telemetrie po letu se nyní získává přes stejné API jako data v reálném čase. V nových požadavcích použijte své flight_id jako operation_id.

Náhrada za GET https://api.dronetag.app/v1/flights/*/telemetry*​

  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/ua?operation_id=xxx s Operation ID a časem začátku a konce letu.

Náhrada za GET https://api.dronetag.app/v1/flights/*/status-history*​

  • Použijte GET https://api.dronetag.app/v2/airspace/telemetry/system?operation_id=xxx s Operation ID a časem začátku a konce letu.

Průvodce migrací: změna způsobu ověřování

Do února 2025

Postupně vylepšujeme naši cloudovou platformu, a proto je nutné převést váš způsob ověřování na nový systém. Tento průvodce vám pomůže přejít na přepracovanou ověřovací vrstvu, která přináší vyšší zabezpečení, lepší kompatibilitu a podporu OpenID Connect (OIDC). Postupujte podle kroků níže, aby přechod proběhl hladce.

Čeho se změna týká​

  • Všech požadavků na API – autorizovaných i neautorizovaných.
  • Všech požadavků na ověření – změnili jsme službu, která vydává přístupové tokeny.

Hlavní změny​

  • Zastaralé endpointy: Stávající autorizační endpointy API (https://api.dronetag.app/v1/auth/*) jsou nyní zastaralé (deprecated). Musíte přejít na novou službu (https://auth.dronetag.app).
  • Přihlašovací údaje OAuth 2.0: K přihlášení budou nově potřeba přihlašovací údaje aplikace OAuth 2.0. Dokud nebude k dispozici automatizovaná správa OAuth 2.0, vydáváme je ručně.

Harmonogram migrace​

  • Do konce února 2025: Původní autorizační endpointy budou úplně odstraněny. Všechny autorizační požadavky musí do té doby přejít na novou službu.

Migrace krok za krokem​

Přechod si nejvíce usnadníte, když použijete existující knihovnu OIDC pro OAuth 2.0. Tyto knihovny obsluhují celý tok OAuth 2.0 včetně přístupových tokenů, obnovovacích tokenů (refresh token) a dalších úloh souvisejících s OIDC.

Seznam certifikovaných implementací OIDC najdete zde: OpenID Connect Certified Libraries.

2. Převeďte autorizační požadavky na novou ověřovací službu​

Všechny autorizační požadavky musí směřovat na nový endpoint:

  • Původní endpoint: POST https://api.dronetag.app/v1/auth/jwt/token
  • Nový endpoint: POST https://auth.dronetag.app/realms/master/protocol/openid-connect/token

Upravte logiku požadavků tak, aby mířila na novou URL, a počítejte s jinou strukturou odpovědi JSON. Nová odpověď obsahuje mimo jiné pole access_token a refresh_token.

Zdrojové stránky

Každá kapitola tohoto dokumentu je stránkou nápovědy Dronetag. Na těchto adresách najdete vždy aktuální verzi.

  1. 1Úvodhelp.dronetag.cz/cs/developers
  2. 2Začínámehelp.dronetag.cz/cs/developers/integrations/getting-started
  3. 3Integrace přes APIhelp.dronetag.cz/cs/developers/integrations/using-api
  4. 4Integrace přes InterUSShelp.dronetag.cz/cs/developers/integrations/using-interuss
  5. 5Přímá integrace hardwaruhelp.dronetag.cz/cs/developers/integrations/hardware
  6. 6Začínáme s REST APIhelp.dronetag.cz/cs/developers/data-pull/getting-started-rest
  7. 7Začínáme se Socket.iohelp.dronetag.cz/cs/developers/data-pull/getting-started-sio
  8. 8Ověřování požadavků na APIhelp.dronetag.cz/cs/developers/data-pull/authenticating
  9. 9Začínámehelp.dronetag.cz/cs/developers/data-push/getting-started
  10. 10Protokoly a formátyhelp.dronetag.cz/cs/developers/data-push/protocols-and-formats
  11. 11Zdroje dathelp.dronetag.cz/cs/developers/data-push/data-sources
  12. 12HTTP Webhookshelp.dronetag.cz/cs/developers/data-push/distribution-types/http
  13. 13MQTT Clienthelp.dronetag.cz/cs/developers/data-push/distribution-types/mqtt
  14. 14TCP a UDP socketyhelp.dronetag.cz/cs/developers/data-push/distribution-types/tcp
  15. 15Pokrytí zprávhelp.dronetag.cz/cs/developers/data-push/message-coverage
  16. 16Monitorování distribucehelp.dronetag.cz/cs/developers/data-push/monitoring
  17. 17Řešení problémůhelp.dronetag.cz/cs/developers/data-push/troubleshooting
  18. 18Výběr vhodného způsobu integracehelp.dronetag.cz/cs/developers/guides/choosing-right-method
  19. 19Přístup k historické telemetriihelp.dronetag.cz/cs/developers/guides/accessing-historical-telemetry
  20. 20Přístup k telemetrii v reálném časehelp.dronetag.cz/cs/developers/guides/accessing-realtime-telemetry
  21. 21Stav zařízení v reálném časehelp.dronetag.cz/cs/developers/guides/accessing-device-status
  22. 22Nastavení integrace s TAK Serveremhelp.dronetag.cz/cs/developers/guides/setting-up-tak
  23. 23Hodnoty výškyhelp.dronetag.cz/cs/developers/guides/understanding-altitude
  24. 24Zprávy DUMPhelp.dronetag.cz/cs/developers/guides/understanding-dump
  25. 25Using the Dronetag ATAK Pluginhelp.dronetag.cz/cs/developers/guides/using-atak-plugin
  26. 26Simulovaná datahelp.dronetag.cz/cs/developers/guides/using-simulated-data
  27. 27Which Export to Choosehelp.dronetag.cz/cs/developers/export-formats/which-export-to-choose
  28. 28CSV Telemetryhelp.dronetag.cz/cs/developers/export-formats/csv-telemetry
  29. 29CSV Summaryhelp.dronetag.cz/cs/developers/export-formats/csv-summary
  30. 30JSONhelp.dronetag.cz/cs/developers/export-formats/json
  31. 31Altitudes Explainedhelp.dronetag.cz/cs/developers/export-formats/altitudes-explained
  32. 32KMZ for Google Earthhelp.dronetag.cz/cs/developers/export-formats/kmz
  33. 33Terrain Data and Attributionhelp.dronetag.cz/cs/developers/export-formats/terrain-data-and-attribution
  34. 34Přechod na získávání telemetrie podle oblastihelp.dronetag.cz/cs/developers/migration-guides/transition-to-region-based
  35. 35Změna způsobu ověřováníhelp.dronetag.cz/cs/developers/migration-guides/updating-authentication