Dotazování zařízení s využitím rozhraní IoT Central REST API
Rozhraní IoT Central REST API umožňuje vyvíjet klientské aplikace, které se integrují s aplikacemi IoT Central. K dotazování zařízení v aplikaci IoT Central můžete použít rozhraní REST API. Tady jsou příklady použití rozhraní REST API pro dotazy:
- Získejte posledních 10 hodnot telemetrie hlášených zařízením.
- Získejte posledních 24 hodin dat ze zařízení, která jsou ve stejné místnosti. Místnost je vlastnost zařízení nebo cloudu.
- Vyhledejte všechna zařízení, která jsou ve stavu chyby a mají zastaralý firmware.
- Trendy telemetrie ze zařízení v průměru v 10minutových oknech
- Získejte aktuální verzi firmwaru všech vašich termostatových zařízení.
Tento článek popisuje, jak pomocí /query
rozhraní API dotazovat zařízení.
Zařízení může seskupit vlastnosti, telemetrii a příkazy, které podporuje, do komponent a modulů.
Každé volání rozhraní REST API služby IoT Central vyžaduje autorizační hlavičku. Další informace najdete v tématu Ověřování a autorizace volání rozhraní REST API služby IoT Central.
Referenční dokumentaci k rozhraní IOT Central REST API najdete v referenčních informacích k rozhraní REST API služby Azure IoT Central.
Tip
Pomocí Nástroje Postman můžete vyzkoušet volání rozhraní REST API popsaná v tomto článku. Stáhněte si kolekci IoT Central Postman a naimportujte ji do Postmanu. V kolekci budete muset nastavit proměnné, jako je subdoména aplikace a token správce.
Informace o dotazování zařízení pomocí uživatelského rozhraní IoT Central najdete v tématu Použití Průzkumníka dat k analýze dat zařízení.
Spuštění dotazu
Pomocí následujícího požadavku spusťte dotaz:
POST https://{your app subdomain}.azureiotcentral.com/api/query?api-version=1.2-preview
Dotaz je v textu požadavku a vypadá jako v následujícím příkladu:
{
"query": "SELECT $id, $ts, temperature, humidity FROM dtmi:azurertos:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D)"
}
Hodnota dtmi:azurertos:devkit:hlby5jgib2o
v klauzuli FROM
je ID šablony zařízení. Pokud chcete najít ID šablony zařízení, přejděte ve své aplikaci IoT Central na stránku Zařízení a najeďte myší na zařízení, které šablonu používá. Karta obsahuje ID šablony zařízení:
Odpověď zahrnuje telemetrii z více zařízení, která sdílejí stejnou šablonu zařízení. Odpověď na tento požadavek vypadá jako v následujícím příkladu:
{
"results": [
{
"$id": "sample-003",
"$ts": "2021-09-10T12:59:52.015Z",
"temperature": 47.632160152311016,
"humidity": 49.726422005390816
},
{
"$id": "sample-001",
"$ts": "2021-09-10T13:01:34.286Z",
"temperature": 58.898120617808495,
"humidity": 44.66125772328022
},
{
"$id": "sample-001",
"$ts": "2021-09-10T13:04:04.96Z",
"temperature": 52.79601469228174,
"humidity": 71.5067230188416
},
{
"$id": "sample-002",
"$ts": "2021-09-10T13:04:36.877Z",
"temperature": 49.610062789623264,
"humidity": 52.78538601804491
}
]
}
Syntax
Syntaxe dotazu se podobá syntaxi SQL a skládá se z následujících klauzulí:
SELECT
je povinný a definuje data, která chcete načíst, například hodnoty telemetrie zařízení.FROM
je povinný a identifikuje typ zařízení, na který se dotazujete. Tato klauzule určuje ID šablony zařízení.WHERE
je nepovinný a umožňuje filtrovat výsledky.ORDER BY
je nepovinný a umožňuje seřadit výsledky.GROUP BY
je nepovinný a umožňuje agregovat výsledky.
Následující části popisují tyto klauzule podrobněji.
Klauzule SELECT
Klauzule SELECT
uvádí hodnoty dat, které se mají zahrnout do výstupu dotazu, a může obsahovat následující položky:
- Telemetrie. Použijte názvy telemetrických dat ze šablony zařízení.
- Ohlášené vlastnosti Použijte názvy vlastností ze šablony zařízení.
- Vlastnosti cloudu. Použijte názvy cloudových vlastností ze šablony zařízení.
$id
. ID zařízení.$provisioned
. Logická hodnota, která ukazuje, jestli je zařízení ještě zřízené.$simulated
. Logická hodnota, která ukazuje, jestli je zařízení simulované zařízení.$ts
. Časové razítko přidružené k hodnotě telemetrie.
Pokud vaše šablona zařízení používá komponenty, jako je součást Informace o zařízení , pak odkazujete na telemetrii nebo vlastnosti definované v této komponentě následujícím způsobem:
{
"query": "SELECT deviceInformation.model, deviceInformation.swVersion FROM dtmi:azurertos:devkit:hlby5jgib2o"
}
Název komponenty najdete v šabloně zařízení:
V klauzuli SELECT
platí následující limity:
- Neexistuje žádný operátor se zástupným znakem.
- V seznamu pro výběr nemůžete mít více než 15 položek.
- V jednom dotazu buď vyberete telemetrii, nebo vlastnosti, ale ne obojí. Dotaz na vlastnosti může obsahovat ohlášené vlastnosti i vlastnosti cloudu.
Aliasy
Pomocí klíčového AS
slova definujte alias pro položku v klauzuli SELECT
. Alias se používá ve výstupu dotazu. Můžete ho také použít jinde v dotazu. Příklad:
{
"query": "SELECT $id as ID, $ts as timestamp, temperature as t, pressure as p FROM dtmi:azurertos:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND t > 0 AND p > 50"
}
Tip
Jako alias nemůžete použít jinou položku v seznamu pro výběr. Například následující možnost není povolená SELECT id, temp AS id...
.
Výsledek vypadá jako následující výstup:
{
"results": [
{
"ID": "sample-002",
"timestamp": "2021-09-10T11:40:29.188Z",
"t": 40.20355053736378,
"p": 79.26806508746755
},
{
"ID": "sample-001",
"timestamp": "2021-09-10T11:43:42.61Z",
"t": 68.03536237975348,
"p": 58.33517075380311
}
]
}
TOP
TOP
Použijte k omezení počtu výsledků, které dotaz vrátí. Například následující dotaz vrátí prvních 10 výsledků:
{
"query": "SELECT TOP 10 $id as ID, $ts as timestamp, temperature, humidity FROM dtmi:azurertos:devkit:hlby5jgib2o"
}
Pokud dotaz nepoužíváte TOP
, vrátí maximálně 10 000 výsledků.
Pokud chcete výsledky seřadit před TOP
omezením počtu výsledků, použijte ORDER BY.
Klauzule FROM
Klauzule FROM
musí obsahovat ID šablony zařízení. Klauzule FROM
určuje typ zařízení, na které dotazujete.
Pokud chcete najít ID šablony zařízení, přejděte ve své aplikaci IoT Central na stránku Zařízení a najeďte myší na zařízení, které šablonu používá. Karta obsahuje ID šablony zařízení:
K získání ID šablony zařízení pro zařízení můžete použít také zařízení – Získání volání rozhraní REST API.
Klauzule WHERE
Klauzule WHERE
umožňuje použít hodnoty a časová okna k filtrování výsledků:
Časová okna
Pokud chcete získat telemetrii přijatou vaší aplikací v zadaném časovém intervaluWHERE
, použijte WITHIN_WINDOW
ji jako součást klauzule. Pokud například chcete načíst telemetrii teploty a vlhkosti za poslední den, použijte následující dotaz:
{
"query": "SELECT $id, $ts, temperature, humidity FROM dtmi:azurertos:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D)"
}
Hodnota časového intervalu používá formát doby trvání ISO 8601. Následující tabulka obsahuje některé příklady:
Příklad | Description |
---|---|
PT10M | Posledních 10 minut |
P1D | Minulý den |
P2DT12H | Posledních 2 dní a 12 hodin |
P1W | Minulý týden |
PT5H | Posledních pět hodin |
'2021-06-13T13:00:00Z/2021-06-13T15:30:00Z' | Konkrétní časový rozsah |
Poznámka
Časové intervaly můžete použít jenom při dotazování na telemetrii.
Porovnání hodnot
Můžete získat telemetrická data nebo hodnoty vlastností na základě konkrétních hodnot. Následující dotaz například vrátí všechny zprávy, ve kterých je teplota větší než nula, tlak je větší než 50 a ID zařízení je jedním z vzorků 002 a sample-003:
{
"query": "SELECT $id, $ts, temperature AS t, pressure AS p FROM dtmi:azurertos:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND t > 0 AND p > 50 AND $id IN ['sample-002', 'sample-003']"
}
Podporují se následující operátory:
- Logické operátory
AND
aOR
. - Relační operátory
=
,<
>=
>
<=
!=
, ,<>
a .IN
Poznámka
Operátor IN
funguje jenom s telemetrií a $id
.
V klauzuli WHERE
platí následující limity:
- V jednom dotazu můžete použít maximálně 10 operátorů.
- V dotazu
WHERE
telemetrie může klauzule obsahovat pouze filtry telemetrie a metadat zařízení. - V dotazu
WHERE
na vlastnost může klauzule obsahovat pouze ohlášené vlastnosti, vlastnosti cloudu a filtry metadat zařízení.
Agregace a klauzule GROUP BY
Funkce agregace umožňují vypočítat hodnoty, jako je průměr, maximum a minimum dat telemetrie v časovém intervalu. Například následující dotaz vypočítá průměrnou teplotu a vlhkost ze zařízení sample-001
v 10minutových oknech:
{
"query": "SELECT AVG(temperature), AVG(pressure) FROM dtmi:azurertos:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND $id='{{DEVICE_ID}}' GROUP BY WINDOW(PT10M)"
}
Výsledky vypadají jako následující výstup:
{
"results": [
{
"$ts": "2021-09-14T11:40:00Z",
"avg_temperature": 49.212146114456104,
"avg_pressure": 48.590304135023764
},
{
"$ts": "2021-09-14T11:30:00Z",
"avg_temperature": 52.44844454703927,
"avg_pressure": 52.25973211022142
},
{
"$ts": "2021-09-14T11:20:00Z",
"avg_temperature": 50.14626272506926,
"avg_pressure": 48.98400386898757
}
]
}
Podporují se následující agregační funkce: SUM
, MIN
AVG
FIRST
MAX
COUNT
a .LAST
Slouží GROUP BY WINDOW
k určení velikosti okna. Pokud nepoužíváte GROUP BY WINDOW
, dotaz agreguje telemetrii za posledních 30 dnů.
Poznámka
Můžete agregovat pouze hodnoty telemetrie.
Klauzule ORDER BY
Klauzule ORDER BY
umožňuje seřadit výsledky dotazu podle hodnoty telemetrie, časového razítka nebo ID zařízení. Můžete řadit vzestupně nebo sestupně. Například následující dotaz nejprve vrátí nejnovější výsledky:
{
"query": "SELECT $id as ID, $ts as timestamp, temperature, humidity FROM dtmi:azurertos:devkit:hlby5jgib2o ORDER BY timestamp DESC"
}
Tip
Zkombinujte ORDER BY
s TOP
cílem omezit počet výsledků, které dotaz vrátí po řazení.
Omezení
Aktuální limity pro dotazy jsou:
- V seznamu klauzulí není více než 15 položek
SELECT
. - V klauzuli
WHERE
není více než 10 logických operací. - Dotazy vrací maximálně 10 000 záznamů.
- Maximální délka řetězce dotazu je 350 znaků.
- Zástupný znak (
*
) vSELECT
seznamu klauzulí nemůžete použít.
Další kroky
Teď, když jste se dozvěděli, jak dotazovat zařízení pomocí rozhraní REST API, je navrhovaným dalším krokem informace o tom, jak používat rozhraní IOT Central REST API ke správě uživatelů a rolí.