Jak wykonywać zapytania dotyczące urządzeń przy użyciu interfejsu API REST usługi IoT Central
Interfejs API REST usługi IoT Central umożliwia tworzenie aplikacji klienckich, które integrują się z aplikacjami usługi IoT Central. Interfejs API REST umożliwia wykonywanie zapytań dotyczących urządzeń w aplikacji usługi IoT Central. Poniżej przedstawiono przykłady użycia interfejsu API REST zapytań:
- Pobierz 10 ostatnich wartości telemetrycznych zgłoszonych przez urządzenie.
- Znajdź wszystkie urządzenia, które są w stanie błędu i mają nieaktualne oprogramowanie układowe.
- Trendy telemetryczne z urządzeń, średnio w 10-minutowych oknach.
- Pobierz bieżącą wersję oprogramowania układowego wszystkich urządzeń termostatu.
W tym artykule opisano sposób używania interfejsu /query
API do wykonywania zapytań dotyczących urządzeń.
Urządzenie może grupować właściwości, dane telemetryczne i polecenia, które obsługuje w składnikach i modułach.
Każde wywołanie interfejsu API REST usługi IoT Central wymaga nagłówka autoryzacji. Aby dowiedzieć się więcej, zobacz Jak uwierzytelniać i autoryzować wywołania interfejsu API REST usługi IoT Central.
Aby uzyskać dokumentację referencyjną interfejsu API REST usługi IoT Central, zobacz Dokumentacja interfejsu API REST usługi Azure IoT Central.
Aby dowiedzieć się, jak wykonywać zapytania dotyczące urządzeń przy użyciu interfejsu użytkownika usługi IoT Central, zobacz Jak używać eksploratora danych do analizowania danych urządzenia.
Uruchamianie zapytania
Użyj następującego żądania, aby uruchomić zapytanie:
POST https://{your app subdomain}.azureiotcentral.com/api/query?api-version=2022-10-31-preview
Zapytanie znajduje się w treści żądania i wygląda jak w poniższym przykładzie:
{
"query": "SELECT $id, $ts, temperature, humidity FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D)"
}
Wartość dtmi:eclipsethreadx:devkit:hlby5jgib2o
w klauzuli FROM
to identyfikator szablonu urządzenia. Aby znaleźć identyfikator szablonu urządzenia, przejdź do strony Urządzenia w aplikacji usługi IoT Central i umieść kursor na urządzeniu używającym szablonu. Karta zawiera identyfikator szablonu urządzenia:
Odpowiedź zawiera dane telemetryczne z wielu urządzeń, które współdzielą ten sam szablon urządzenia. Odpowiedź na to żądanie wygląda następująco:
{
"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
}
]
}
Składnia
Składnia zapytania jest podobna do składni SQL i składa się z następujących klauzul:
SELECT
jest wymagany i definiuje dane, które chcesz pobrać, takie jak wartości telemetrii urządzenia.FROM
jest wymagany i identyfikuje typ urządzenia, którego wykonujesz zapytanie. Ta klauzula określa identyfikator szablonu urządzenia.WHERE
jest opcjonalny i umożliwia filtrowanie wyników.ORDER BY
jest opcjonalny i umożliwia sortowanie wyników.GROUP BY
jest opcjonalny i umożliwia agregowanie wyników.
W poniższych sekcjach opisano te klauzule bardziej szczegółowo.
Klauzula SELECT
Klauzula SELECT
zawiera listę wartości danych do uwzględnienia w danych wyjściowych zapytania i może zawierać następujące elementy:
- Dane telemetryczne. Użyj nazw telemetrii z szablonu urządzenia.
$id
. Identyfikator urządzenia.$provisioned
. Wartość logiczna, która pokazuje, czy urządzenie jest jeszcze aprowizowane.$simulated
. Wartość logiczna, która pokazuje, czy urządzenie jest urządzeniem symulowanym.$ts
. Sygnatura czasowa skojarzona z wartością telemetrii.
Jeśli szablon urządzenia używa składników, należy odwołać się do telemetrii zdefiniowanej w składniku w następujący sposób:
{
"query": "SELECT ComponentName.TelemetryName FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o"
}
Nazwę składnika można znaleźć w szablonie urządzenia:
W klauzuli SELECT
obowiązują następujące limity:
- Nie ma operatora symboli wieloznacznych.
- Na liście wyboru nie można mieć więcej niż 15 elementów.
- Zapytanie zwraca maksymalnie 10 000 rekordów.
Aliasy
Użyj słowa kluczowego AS
, aby zdefiniować alias elementu w klauzuli SELECT
. Alias jest używany w danych wyjściowych zapytania. Możesz również użyć go w innym miejscu w zapytaniu. Na przykład:
{
"query": "SELECT $id as ID, $ts as timestamp, temperature as t, pressure as p FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND t > 0 AND p > 50"
}
Napiwek
Nie można użyć innego elementu na liście wyboru jako aliasu. Na przykład następujące wartości nie są dozwolone SELECT id, temp AS id...
.
Wynik wygląda podobnie do następujących danych wyjściowych:
{
"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
Użyj parametru , TOP
aby ograniczyć liczbę wyników zwracanych przez zapytanie. Na przykład następujące zapytanie zwraca pierwsze 10 wyników:
{
"query": "SELECT TOP 10 $id as ID, $ts as timestamp, temperature, humidity FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o"
}
Jeśli nie używasz TOP
metody , zapytanie zwraca maksymalnie 10 000 wyników.
Aby posortować wyniki przed TOP
ograniczeniem liczby wyników, użyj polecenia ORDER BY.
Klauzula FROM
Klauzula FROM
musi zawierać identyfikator szablonu urządzenia. Klauzula FROM
określa typ urządzenia, którego wykonujesz zapytanie.
Aby znaleźć identyfikator szablonu urządzenia, przejdź do strony Urządzenia w aplikacji usługi IoT Central i umieść kursor na urządzeniu używającym szablonu. Karta zawiera identyfikator szablonu urządzenia:
Możesz również użyć wywołania interfejsu API REST Urządzenia — Pobierz go, aby uzyskać identyfikator szablonu urządzenia dla urządzenia.
Klauzula WHERE
Klauzula WHERE
umożliwia filtrowanie wyników przy użyciu wartości i okien czasowych:
Okna czasu
Aby uzyskać dane telemetryczne odebrane przez aplikację w określonym przedziale czasu, użyj WITHIN_WINDOW
jej jako części klauzuli WHERE
. Aby na przykład pobrać dane telemetryczne dotyczące temperatury i wilgotności dla ostatniego dnia, użyj następującego zapytania:
{
"query": "SELECT $id, $ts, temperature, humidity FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D)"
}
Wartość przedziału czasu używa formatu czasów trwania ISO 8601. Poniższa tabela zawiera kilka przykładów:
Przykład | opis |
---|---|
PT10M | Ostatnie 10 minut |
P1D | Ostatni dzień |
P2DT12H | Ostatnie 2 dni i 12 godzin |
P1W | Ostatni tydzień |
PT5H | Ostatnie pięć godzin |
"2021-06-13T13:00:00Z/2021-06-13T15:30:00Z" | Określony zakres czasu |
Porównania wartości
Dane telemetryczne można uzyskać na podstawie określonych wartości. Na przykład następujące zapytanie zwraca wszystkie komunikaty, w których temperatura jest większa niż zero, ciśnienie jest większe niż 50, a identyfikator urządzenia jest jednym z przykładów 002 i sample-003:
{
"query": "SELECT $id, $ts, temperature AS t, pressure AS p FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND t > 0 AND p > 50 AND $id IN ['sample-002', 'sample-003']"
}
Obsługiwane są następujące operatory:
- Operatory
AND
logiczne iOR
. - Operatory
=
porównania ,>
>=
<
<=
!=
,<>
i .IN
Uwaga
Operator IN
działa tylko z danymi telemetrycznymi i $id
.
W klauzuli WHERE
obowiązują następujące limity:
- W jednym zapytaniu można użyć maksymalnie 10 operatorów.
- W zapytaniu klauzula
WHERE
może zawierać tylko filtry telemetrii i metadanych urządzenia. - W zapytaniu można pobrać maksymalnie 10 000 rekordów.
Agregacje i klauzula GROUP BY
Funkcje agregacji umożliwiają obliczanie wartości, takich jak średnia, maksimum i minimum danych telemetrycznych w przedziale czasu. Na przykład następujące zapytanie oblicza średnią temperaturę i wilgotność z urządzenia sample-001
w 10-minutowych oknach:
{
"query": "SELECT AVG(temperature), AVG(pressure) FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o WHERE WITHIN_WINDOW(P1D) AND $id='{{DEVICE_ID}}' GROUP BY WINDOW(PT10M)"
}
Wyniki wyglądają podobnie do następujących danych wyjściowych:
{
"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
}
]
}
Obsługiwane są następujące funkcje agregacji: SUM
, , MAX
, COUNT
MIN
, , AVG
, FIRST
i LAST
.
Użyj GROUP BY WINDOW
polecenia , aby określić rozmiar okna. Jeśli nie używasz GROUP BY WINDOW
metody , zapytanie agreguje dane telemetryczne w ciągu ostatnich 30 dni.
Uwaga
Można agregować tylko wartości telemetryczne.
Klauzula ORDER BY
Klauzula ORDER BY
umożliwia sortowanie wyników zapytania według wartości telemetrii, znacznika czasu lub identyfikatora urządzenia. Można sortować w kolejności rosnącej lub malejącej. Na przykład następujące zapytanie najpierw zwraca najnowsze wyniki:
{
"query": "SELECT $id as ID, $ts as timestamp, temperature, humidity FROM dtmi:eclipsethreadx:devkit:hlby5jgib2o ORDER BY timestamp DESC"
}
Napiwek
Połącz ORDER BY
z , TOP
aby ograniczyć liczbę wyników zwracanych przez zapytanie po sortowaniu.
Limity
Bieżące limity dla zapytań to:
- Nie więcej niż 15 elementów na
SELECT
liście klauzul. - Nie więcej niż 10 operacji logicznych w klauzuli
WHERE
. - Maksymalna długość ciągu zapytania wynosi 350 znaków.
- Nie można użyć symbolu wieloznakowego (
*
) naSELECT
liście klauzul. - Zapytania mogą pobierać maksymalnie 10 000 rekordów.
Następne kroki
Teraz, gdy wiesz już, jak wykonywać zapytania dotyczące urządzeń przy użyciu interfejsu API REST, sugerowanym następnym krokiem jest poznanie sposobu używania interfejsu API REST usługi IoT Central do zarządzania użytkownikami i rolami.