Začínáme s dvojčaty zařízení (Node.js)
Dvojčata zařízení jsou dokumenty JSON s uloženými informacemi o stavu zařízení, včetně metadat, konfigurací a podmínek. IoT Hub zachová dvojče zařízení pro každé zařízení, které se k němu připojí.
Poznámka:
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.
Dvojčata zařízení použijte k:
Uložte metadata zařízení z back-endu řešení.
Nahlašujte aktuální informace o stavu, jako jsou dostupné možnosti a podmínky, například použitá metoda připojení, z vaší aplikace zařízení.
Synchronizujte stav dlouhotrvajících pracovních postupů, jako jsou aktualizace firmwaru a konfigurace, mezi aplikací zařízení a back-endovou aplikací.
Zadejte dotaz na metadata, konfiguraci nebo stav zařízení.
Dvojčata zařízení jsou navržená pro synchronizaci a dotazování konfigurací a podmínek zařízení. Další informace o dvojčatech zařízení, včetně případů použití dvojčat zařízení, najdete v tématu Principy dvojčat zařízení.
IoT Hubs ukládají dvojčata zařízení, která obsahují následující prvky:
Značky. Metadata zařízení jsou přístupná jenom back-endem řešení.
Požadované vlastnosti. Objekty JSON upravitelné back-endem řešení a pozorovatelné aplikací zařízení.
Ohlášené vlastnosti Objekty JSON upravitelné aplikací zařízení a čitelné back-endem řešení.
Značky a vlastnosti nemohou obsahovat pole, ale mohou obsahovat vnořené objekty.
Následující obrázek znázorňuje organizaci dvojčete zařízení:
Back-end řešení navíc může dotazovat dvojčata zařízení na základě všech výše uvedených dat. Další informace o dvojčatech zařízení najdete v tématu Principy dvojčat zařízení. Další informace o dotazování najdete v dotazovacím jazyce služby IoT Hub.
V tomto článku se dozvíte, jak:
Pomocí aplikace simulovaného zařízení můžete hlásit svůj kanál připojení jako ohlášenou vlastnost dvojčete zařízení.
Dotazování zařízení z back-endové aplikace pomocí filtrů na značky a vlastnosti, které jste vytvořili dříve.
V tomto článku vytvoříte dvě Node.js konzolové aplikace:
AddTagsAndQuery.js: back-endová aplikace, která přidává značky a dotazy na dvojčata zařízení.
TwinSimulatedDevice.js: aplikace simulovaného zařízení, která se připojuje k centru IoT a hlásí její podmínku připojení.
Poznámka:
Další informace o dostupných nástrojích SDK pro sestavení zařízení i back-endových aplikací najdete v sadách SDK .
Požadavky
K dokončení tohoto článku potřebujete:
IoT Hub. Vytvořte ho pomocí rozhraní příkazového řádku nebo webu Azure Portal.
Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.
Node.js verze 10.0.x nebo novější.
Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).
Získání připojovací řetězec centra IoT
V tomto článku vytvoříte back-endovou službu, která přidá požadované vlastnosti do dvojčete zařízení, a pak se do registru identit dotazuje, aby zjistila všechna zařízení s ohlášenými vlastnostmi, které byly odpovídajícím způsobem aktualizovány. Vaše služba potřebuje oprávnění k připojení služby k úpravě požadovaných vlastností dvojčete zařízení a potřebuje oprávnění ke čtení registru pro dotazování registru identit. Neexistují žádné výchozí zásady sdíleného přístupu, které obsahují pouze tato dvě oprávnění, takže potřebujete vytvořit jednu.
Chcete-li vytvořit zásadu sdíleného přístupu, která uděluje oprávnění ke čtení služby a registru a získat připojovací řetězec pro tuto zásadu, postupujte takto:
Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.
V levém podokně centra vyberte zásady sdíleného přístupu.
V horní nabídce nad seznamem zásad vyberte Přidat zásady přístupu ke sdíleným zásadám.
V podokně Přidat zásady sdíleného přístupu vpravo zadejte popisný název zásady, například serviceAndRegistryRead. V části Oprávnění vyberte Možnost Čtení registru a Připojení ke službě a pak vyberte Přidat.
Ze seznamu zásad vyberte novou zásadu.
Vyberte ikonu kopírování pro primární připojovací řetězec a uložte hodnotu.
Vytvoření aplikace zařízení, která aktualizuje ohlášené vlastnosti
V této části vytvoříte konzolovou aplikaci Node.js, která se připojí k vašemu centru jako myDeviceId, a pak aktualizuje ohlášené vlastnosti dvojčete zařízení, abyste potvrdili, že je připojená pomocí mobilní sítě.
Vytvořte novou prázdnou složku s názvem připojení k sestavě. Ve složce připojení k sestavě vytvořte nový soubor package.json pomocí následujícího příkazu na příkazovém řádku. Parametr
--yes
přijímá všechny výchozí hodnoty.npm init --yes
Na příkazovém řádku ve složce připojení k sestavě spusťte následující příkaz, který nainstaluje balíčky azure-iot-device a azure-iot-device-mqtt :
npm install azure-iot-device azure-iot-device-mqtt --save
Pomocí textového editoru vytvořte nový soubor ReportConnectivity.js ve složce připojení sestavy.
Do souboru ReportConnectivity.js přidejte následující kód. Nahraďte
{device connection string}
připojovací řetězec zařízení, které jste viděli při registraci zařízení ve službě IoT Hub:'use strict'; var Client = require('azure-iot-device').Client; var Protocol = require('azure-iot-device-mqtt').Mqtt; var connectionString = '{device connection string}'; var client = Client.fromConnectionString(connectionString, Protocol); client.open(function(err) { if (err) { console.error('could not open IotHub client'); } else { console.log('client opened'); client.getTwin(function(err, twin) { if (err) { console.error('could not get twin'); } else { var patch = { connectivity: { type: 'cellular' } }; twin.properties.reported.update(patch, function(err) { if (err) { console.error('could not update twin'); } else { console.log('twin state reported'); process.exit(); } }); } }); } });
Objekt Klient zveřejňuje všechny metody, které potřebujete k interakci s dvojčaty zařízení ze zařízení. Předchozí kód po inicializaci objektu Client načte dvojče zařízení pro myDeviceId a aktualizuje jeho ohlášenou vlastnost informacemi o připojení.
Spuštění aplikace zařízení
node ReportConnectivity.js
Měla by se zobrazit zpráva
twin state reported
.Když teď zařízení nahlásilo informace o připojení, mělo by se zobrazit v obou dotazech. Vraťte se do složky addtagsandqueryapp a znovu spusťte dotazy:
node AddTagsAndQuery.js
Tentokrát by se vlastnost myDeviceId měla objevit v obou výsledcích dotazu.
Vytvoření aplikace služby, která aktualizuje požadované vlastnosti a dotazuje dvojčata
V této části vytvoříte konzolovou aplikaci Node.js, která přidá metadata polohy do dvojčete zařízení přidruženého k myDeviceId. Aplikace se dotazuje ioT Hubu na zařízení umístěná v USA a pak se dotazuje zařízení, která hlásí připojení mobilní sítě.
Vytvořte novou prázdnou složku s názvem addtagsandqueryapp. Ve složce addtagsandqueryapp vytvořte nový soubor package.json pomocí následujícího příkazu na příkazovém řádku. Parametr
--yes
přijímá všechny výchozí hodnoty.npm init --yes
Na příkazovém řádku ve složce addtagsandqueryapp nainstalujte balíček azure-iothub spuštěním následujícího příkazu:
npm install azure-iothub --save
Pomocí textového editoru vytvořte nový soubor AddTagsAndQuery.js ve složce addtagsandqueryapp .
Do souboru AddTagsAndQuery.js přidejte následující kód. Nahraďte
{iot hub connection string}
připojovací řetězec IoT Hub, který jste zkopírovali v připojovací řetězec Get the IoT Hub.'use strict'; var iothub = require('azure-iothub'); var connectionString = '{iot hub connection string}'; var registry = iothub.Registry.fromConnectionString(connectionString); registry.getTwin('myDeviceId', function(err, twin){ if (err) { console.error(err.constructor.name + ': ' + err.message); } else { var patch = { tags: { location: { region: 'US', plant: 'Redmond43' } } }; twin.update(patch, function(err) { if (err) { console.error('Could not update twin: ' + err.constructor.name + ': ' + err.message); } else { console.log(twin.deviceId + ' twin updated successfully'); queryTwins(); } }); } });
Objekt Registru zveřejňuje všechny metody potřebné k interakci s dvojčaty zařízení ze služby. Předchozí kód nejprve inicializuje objekt Registru , pak načte dvojče zařízení pro myDeviceId a nakonec aktualizuje jeho značky informacemi o požadovaném umístění.
Po aktualizaci značek volá funkci queryTwins .
Na konec AddTagsAndQuery.js přidejte následující kód, který implementuje funkci queryTwins :
var queryTwins = function() { var query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100); query.nextAsTwin(function(err, results) { if (err) { console.error('Failed to fetch the results: ' + err.message); } else { console.log("Devices in Redmond43: " + results.map(function(twin) {return twin.deviceId}).join(',')); } }); query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100); query.nextAsTwin(function(err, results) { if (err) { console.error('Failed to fetch the results: ' + err.message); } else { console.log("Devices in Redmond43 using cellular network: " + results.map(function(twin) {return twin.deviceId}).join(',')); } }); };
Předchozí kód provede dva dotazy: první vybere pouze dvojčata zařízení umístěná v závodu Redmond43 a druhý dotaz zpřesní tak, aby vybral pouze zařízení připojená přes mobilní síť.
Když kód vytvoří objekt dotazu , určuje maximální počet vrácených dokumentů v druhém parametru. Dotaz objekt obsahuje hasMoreResults boolean vlastnost, kterou můžete použít k vyvolání nextAsTwin metody vícekrát k načtení všech výsledků. Pro výsledky, které nejsou dvojčata zařízení, je k dispozici metoda s názvem další , například výsledky agregačních dotazů.
Spusťte aplikaci pomocí:
node AddTagsAndQuery.js
Ve výsledcích dotazu byste měli vidět jedno zařízení s žádostí o všechna zařízení umístěná v Redmond43 a žádný dotaz, který výsledky omezuje na zařízení, která používají mobilní síť.
V tomto článku:
- Přidání metadat zařízení jako značek z back-endové aplikace
- Nahlášené informace o připojení zařízení ve dvojčeti zařízení
- Dotazovali se na informace dvojčete zařízení pomocí dotazovacího jazyka ioT Hubu podobného SQL.
Další kroky
Informace o:
Odeslání telemetrie ze zařízení, viz Rychlý start: Odesílání telemetrie ze zařízení IoT technologie Plug and Play do Azure IoT Hubu
Konfigurace zařízení pomocí požadovaných vlastností dvojčete zařízení, viz Kurz: Konfigurace zařízení z back-endové služby
Interaktivní řízení zařízení, například zapnutí ventilátoru z aplikace řízené uživatelem, najdete v rychlém startu: Řízení zařízení připojeného k centru IoT
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro