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í:

Snímek obrazovky s diagramem konceptu 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.

  • Registrované zařízení. Zaregistrujte si ho na webu Azure Portal.

  • 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, jak tento problém obejít, najdete v tématu Připojení pro 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:

  1. 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ů.

  2. V levém podokně centra vyberte zásady sdíleného přístupu.

  3. V horní nabídce nad seznamem zásad vyberte Přidat zásady přístupu ke sdíleným zásadám.

  4. 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 Připojení Registru ke čtení a službě a pak vyberte Přidat.

    Snímek obrazovky, který ukazuje, jak přidat nové zásady sdíleného přístupu

  5. Ze seznamu zásad vyberte novou zásadu.

  6. Vyberte ikonu kopírování pro primární připojovací řetězec a uložte hodnotu.

    Snímek obrazovky, který ukazuje, jak načíst připojovací řetězec

Další informace ozásadách

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ě.

  1. 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
    
  2. 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
    
  3. Pomocí textového editoru vytvořte nový soubor Sestava Připojení ivity.js ve složce připojení sestavy.

  4. Do souboru Sestava Připojení ivity.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í.

  5. Spuštění aplikace zařízení

        node ReportConnectivity.js
    

    Měla by se zobrazit zpráva twin state reported.

  6. 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.

    Zobrazení myDeviceId 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ě.

  1. 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
    
  2. 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
    
  3. Pomocí textového editoru vytvořte nový soubor AddTagsAndQuery.js ve složce addtagsandqueryapp .

  4. 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 .

  5. 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ů.

  6. 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íť.

    Zobrazení jednoho zařízení ve výsledcích dotazu

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: