Dotazy na dvojčata IoT Hub zařízení a modulů
Dvojčata zařízení a dvojčata modulů můžou obsahovat libovolné objekty JSON jako značky i vlastnosti. IoT Hub umožňuje dotazovat se na dvojčata zařízení a dvojčata modulů jako jeden dokument JSON obsahující všechny informace o dvojčatech.
Tady je ukázka dvojčete zařízení služby IoT Hub (dvojče modulu by bylo podobné jenom s parametrem moduleId):
{
"deviceId": "myDeviceId",
"etag": "AAAAAAAAAAc=",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00",
"connectionState": "Disconnected",
"lastActivityTime": "0001-01-01T00:00:00",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 2,
"tags": {
"location": {
"region": "US",
"plant": "Redmond43"
}
},
"properties": {
"desired": {
"telemetryConfig": {
"configId": "db00ebf5-eeeb-42be-86a1-458cccb69e57",
"sendFrequencyInSecs": 300
},
"$metadata": {
...
},
"$version": 4
},
"reported": {
"connectivity": {
"type": "cellular"
},
"telemetryConfig": {
"configId": "db00ebf5-eeeb-42be-86a1-458cccb69e57",
"sendFrequencyInSecs": 300,
"status": "Success"
},
"$metadata": {
...
},
"$version": 7
}
}
}
Dotazy dvojčat zařízení
IoT Hub zpřístupňuje dvojčata zařízení jako kolekci dokumentů s názvem zařízení. Například nejzákladnější dotaz načte celou sadu dvojčat zařízení:
SELECT * FROM devices
Poznámka
Sady Azure IoT SDK podporují stránkování velkých výsledků.
Výsledky dotazu můžete agregovat pomocí klauzule SELECT. Následující dotaz například získá počet celkového počtu zařízení ve službě IoT Hub:
SELECT COUNT() as totalNumberOfDevices FROM devices
Výsledky dotazu můžete filtrovat pomocí klauzule WHERE. Pokud chcete například přijímat dvojčata zařízení, kde je značka location.region nastavená na USA , použijte následující dotaz:
SELECT * FROM devices
WHERE tags.location.region = 'US'
Vytvářejte složité klauzule WHERE pomocí logických operátorů a aritmetických porovnání. Následující dotaz například načte dvojčata zařízení umístěná v USA a nakonfigurovaná tak, aby odesílala telemetrická data méně než každou minutu:
SELECT * FROM devices
WHERE tags.location.region = 'US'
AND properties.reported.telemetryConfig.sendFrequencyInSecs >= 60
Můžete také použít maticové konstanty s operátory IN a NIN (ne in). Následující dotaz například načte dvojčata zařízení, která hlásí připojení Wi-Fi nebo kabelové připojení:
SELECT * FROM devices
WHERE properties.reported.connectivity IN ['wired', 'wifi']
Často je potřeba identifikovat všechna dvojčata zařízení, která obsahují určitou vlastnost. IoT Hub podporuje funkci is_defined()
pro tento účel. Například následující dotaz načte dvojčata zařízení, která definují connectivity
vlastnost:
SELECT * FROM devices
WHERE is_defined(properties.reported.connectivity)
Úplný odkaz na možnosti filtrování najdete v části KLAUZULE WHERE .
Podporuje se také seskupení. Například následující dotaz vrátí počet zařízení v každém stavu konfigurace telemetrie:
SELECT properties.reported.telemetryConfig.status AS status,
COUNT() AS numberOfDevices
FROM devices
GROUP BY properties.reported.telemetryConfig.status
Tento seskupovací dotaz by vrátil výsledek podobný následujícímu příkladu:
[
{
"numberOfDevices": 3,
"status": "Success"
},
{
"numberOfDevices": 2,
"status": "Pending"
},
{
"numberOfDevices": 1,
"status": "Error"
}
]
V tomto příkladu tři zařízení nahlásila úspěšnou konfiguraci, dvě stále používají konfiguraci a jedno nahlásilo chybu.
Dotazy projekce umožňují vývojářům vracet pouze vlastnosti, které je zajímají. Pokud například chcete načíst čas poslední aktivity spolu s ID zařízení všech povolených zařízení, která jsou odpojená, použijte následující dotaz:
SELECT DeviceId, LastActivityTime FROM devices WHERE status = 'enabled' AND connectionState = 'Disconnected'
Výsledek tohoto dotazu by vypadal jako v následujícím příkladu:
[
{
"deviceId": "AZ3166Device",
"lastActivityTime": "2021-05-07T00:50:38.0543092Z"
}
]
Dotazy dvojčat modulů
Dotazování na dvojčata modulů se podobá dotazování na dvojčata zařízení, ale používá jinou kolekci nebo obor názvů. místo ze zařízení se dotazujete z devices.modules:
SELECT * FROM devices.modules
Nepovolujeme spojení mezi kolekcemi devices a devices.modules. Pokud chcete dotazovat dvojčata modulů napříč zařízeními, provedete to na základě značek. Následující dotaz vrátí všechna dvojčata modulů na všech zařízeních se stavem kontroly:
SELECT * FROM devices.modules WHERE properties.reported.status = 'scanning'
Následující dotaz vrátí všechna dvojčata modulu se stavem kontroly, ale pouze na zadané podmnožině zařízení:
SELECT * FROM devices.modules
WHERE properties.reported.status = 'scanning'
AND deviceId IN ['device1', 'device2']
Omezení dotazů dvojčat
Důležité
Výsledky dotazu jsou nakonec konzistentní operace a zpoždění až 30 minut by mělo být tolerováno. Ve většině případů vrací dotaz dvojčete výsledky v řádu několika sekund. IoT Hub se snaží zajistit nízkou latenci pro všechny operace. Kvůli podmínkám sítě a dalším nepředvídatelným faktorům však nemůže zaručit určitou latenci.
Alternativou k dotazům dvojčat je dotazování jednotlivých dvojčat zařízení podle ID pomocí rozhraní REST API get twin. Toto rozhraní API vždy vrací nejnovější hodnoty a má vyšší limity omezování. Rozhraní REST API můžete vydat přímo nebo můžete použít ekvivalentní funkce v některé ze sad SDK služby Azure IoT Hub.
Výrazy dotazu můžou mít maximální délku 8192 znaků.
V současné době jsou porovnání podporována pouze mezi primitivními typy (bez objektů), například ... WHERE properties.desired.config = properties.reported.config
je podporována pouze v případě, že tyto vlastnosti mají primitivní hodnoty.
V žádném scénáři doporučujeme nebrat závislost na lastActivityTime ve vlastnostech identity zařízení pro dotazy dvojčat. Toto pole nezaručuje přesné měřidlo stavu zařízení. Místo toho použijte události životního cyklu zařízení IoT ke správě stavu zařízení a aktivit. Další informace o používání událostí životního cyklu IoT Hub ve vašem řešení najdete v tématu React, kde můžete IoT Hub události pomocí služby Event Grid k aktivaci akcí.
Poznámka
Nepoužívejte žádné předpoklady týkající se maximální latence této operace. Další informace o tom, jak sestavit řešení s ohledem na latenci, najdete v tématu Řešení latence.
Další kroky
- Principy základů dotazovacího jazyka IoT Hub