Začínáme s identitou modulu IoT Hub a dvojčetem modulu (Node.js)

Identity modulů a dvojčata modulů se podobají identitě zařízení a dvojčeti zařízení služby Azure IoT Hub, ale poskytují větší úroveň členitosti. Zatímco Azure IoT Hub identita zařízení a dvojče zařízení umožňují back-endové aplikaci konfigurovat zařízení a poskytují přehled o podmínkách zařízení, identita modulu a dvojče modulu poskytují tyto funkce pro jednotlivé komponenty zařízení. Na zařízeních s podporou více komponent, jako jsou zařízení s operačním systémem nebo zařízení s firmwarem, umožňuje izolovanou konfiguraci a podmínky pro každou komponentu.

Poznámka

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.

Na konci tohoto článku máte dvě Node.js aplikace:

  • CreateIdentities: Vytvoří identitu zařízení, identitu modulu a přidružené klíče zabezpečení pro připojení zařízení a klientů modulu.

  • UpdateModuleTwinReportedProperties: odesílá aktualizované dvojče modulu a ohlášené vlastnosti do IoT Hub.

Poznámka

Další informace o nástrojích sady SDK, které jsou k dispozici pro vytváření aplikací pro zařízení i back-end, najdete v tématu Sady SDK Pro Azure IoT.

Požadavky

Ověřování modulů

K ověřování identit modulů můžete použít symetrické klíče nebo certifikáty X.509. Pro ověřování certifikátů X.509 musí mít certifikát modulu svůj běžný název (CN) naformátovaný jako CN=<deviceid>/<moduleid>. Příklad:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Získání připojovacího řetězce služby IoT Hub

V tomto článku vytvoříte back-endovou službu, která přidá zařízení do registru identit a pak do tohoto zařízení přidá modul. Vaše služba vyžaduje oprávnění k zápisu do registru . Ve výchozím nastavení se každé centrum IoT vytvoří se zásadou sdíleného přístupu s názvem registryReadWrite , která toto oprávnění uděluje.

Pokud chcete získat připojovací řetězec IoT Hub pro zásadu registryReadWrite, postupujte takto:

  1. V 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 seznamu zásad vyberte zásadu registruReadWrite .

  4. Zkopírujte primární připojovací řetězec a hodnotu uložte.

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

Další informace o IoT Hub zásady a oprávnění sdíleného přístupu najdete v tématu Řízení přístupu a oprávnění.

Vytvoření identity zařízení a identity modulu v IoT Hub

V této části vytvoříte aplikaci Node.js, která vytvoří identitu zařízení a identitu modulu v registru identit ve službě IoT Hub. Zařízení nebo modul se nemůže připojit ke službě IoT Hub, pokud nemá záznam v registru identit. Další informace najdete v tématu Vysvětlení registru identit ve službě IoT Hub. Když spustíte tuto konzolovou aplikaci, vygeneruje jedinečné ID a klíč zařízení i modulu. V ID a klíči se rozlišují velká a malá písmena. Vaše zařízení a modul použijí tyto hodnoty k vlastní identifikaci při odesílání zpráv typu zařízení-cloud do služby IoT Hub.

  1. Vytvořte adresář pro uložení kódu.

  2. Uvnitř tohoto adresáře nejprve spusťte npm init -y a vytvořte prázdný package.json s výchozími nastaveními. Toto je soubor projektu pro váš kód.

  3. Spuštěním příkazu npm install -S azure-iothub@modules-preview nainstalujte sadu SDK služby do podadresáře node_modules.

    Poznámka

    Název podadresáře node_modules používá slovo modul k označení "knihovna uzlů". Tento termín nemá nic společného s moduly IoT Hub.

  4. V adresáři vytvořte následující .js soubor. Volat add.js. Zkopírujte a vložte připojovací řetězec centra a název centra.

    var Registry = require('azure-iothub').Registry;
    var uuid = require('uuid');
    // Copy/paste your connection string and hub name here
    var serviceConnectionString = '<hub connection string from portal>';
    var hubName = '<hub name>.azure-devices.net';
    // Create an instance of the IoTHub registry
    var registry = Registry.fromConnectionString(serviceConnectionString);
    // Insert your device ID and moduleId here.
    var deviceId = 'myFirstDevice';
    var moduleId = 'myFirstModule';
    // Create your device as a SAS authentication device
    var primaryKey = new Buffer(uuid.v4()).toString('base64');
    var secondaryKey = new Buffer(uuid.v4()).toString('base64');
    var deviceDescription = {
      deviceId: deviceId,
      status: 'enabled',
      authentication: {
        type: 'sas',
        symmetricKey: {
          primaryKey: primaryKey,
          secondaryKey: secondaryKey
        }
      }
    };
    
    // First, create a device identity
    registry.create(deviceDescription, function(err) {
      if (err) {
        console.log('Error creating device identity: ' + err);
        process.exit(1);
      }
      console.log('device connection string = "HostName=' + hubName + ';DeviceId=' + deviceId + ';SharedAccessKey=' + primaryKey + '"');
    
      // Then add a module to that device
      registry.addModule({ deviceId: deviceId, moduleId: moduleId }, function(err) {
        if (err) {
          console.log('Error creating module identity: ' + err);
          process.exit(1);
        }
    
        // Finally, retrieve the module details from the hub so we can construct the connection string
        registry.getModule(deviceId, moduleId, function(err, foundModule) {
          if (err) {
            console.log('Error getting module back from hub: ' + err);
            process.exit(1);
          }
          console.log('module connection string = "HostName=' + hubName + ';DeviceId=' + foundModule.deviceId + ';ModuleId='+foundModule.moduleId+';SharedAccessKey=' + foundModule.authentication.symmetricKey.primaryKey + '"');
          process.exit(0);
        });
      });
    });
    
    

Tato aplikace vytvoří identitu zařízení s ID myFirstDevice a identitu modulu s ID myFirstModule v části zařízení myFirstDevice. (Pokud toto ID modulu již v registru identit existuje, kód jednoduše načte informace o existujícím modulu.) Aplikace pak zobrazí primární klíč pro danou identitu. Tento klíč v aplikaci simulovaného modulu slouží k připojení k centru IoT.

Spusťte tento příkaz pomocí add.js uzlu. Poskytne vám připojovací řetězec pro identitu vašeho zařízení a další pro identitu modulu.

Poznámka

V registru identit služby IoT Hub se uchovávají identity zařízení a modulů pouze za účelem bezpečného přístupu k centru IoT. Registr identit ukládá ID zařízení a klíče pro použití jako bezpečnostních pověření. Registr identit také ukládá povolené a zakázané příznaky pro jednotlivá zařízení, pomocí kterých můžete zakázat přístup pro dané zařízení. Pokud aplikace potřebuje pro zařízení ukládat další metadata, měla by používat úložiště pro konkrétní aplikaci. Pro identity modulů neexistuje žádný příznak povoleno/zakázáno. Další informace najdete v tématu Vysvětlení registru identit v IoT Hub v příručce pro vývojáře IoT Hub.

Aktualizace dvojčete modulu pomocí sady SDK pro Node.js zařízení

V této části vytvoříte na simulovaném zařízení aplikaci Node.js, která aktualizuje ohlášené vlastnosti dvojčete modulu.

  1. Získejte připojovací řetězec modulu. Přihlaste se k webu Azure Portal. Přejděte do IoT Hub a vyberte Zařízení IoT. Najděte myFirstDevice, otevřete ho a uvidíte, že se myFirstModule úspěšně vytvořil. Zkopírujte připojovací řetězec modulu. Budete ho potřebovat v dalším kroku.

    Podrobnosti o modulu na webu Azure Portal

  2. Podobně jako v předchozí části vytvořte adresář pro kód zařízení a pomocí NPM ho inicializujete a nainstalujte sadu SDK zařízení (npm install -S azure-iot-device-amqp@modules-preview).

    Poznámka

    Příkaz npm install může být pomalý. Buďte trpěliví; stahuje z úložiště balíčků spoustu kódu.

    Poznámka

    Pokud se zobrazí chyba npm ERR! chyba registru při analýze json, tuto chybu je bezpečné ignorovat. Pokud se zobrazí chyba npm ERR! chyba registru při analýze json, tuto chybu je bezpečné ignorovat.

  3. Vytvořte soubor s názvem twin.js. Zkopírujte a vložte řetězec identity modulu.

    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-amqp').Amqp;
    // Copy/paste your module connection string here.
    var connectionString = '<insert module connection string here>';
    // Create a client using the Amqp protocol.
    var client = Client.fromConnectionString(connectionString, Protocol);
    client.on('error', function (err) {
      console.error(err.message);
    });
    // connect to the hub
    client.open(function(err) {
      if (err) {
        console.error('error connecting to hub: ' + err);
        process.exit(1);
      }
      console.log('client opened');
    // Create device Twin
      client.getTwin(function(err, twin) {
        if (err) {
          console.error('error getting twin: ' + err);
          process.exit(1);
        }
        // Output the current properties
        console.log('twin contents:');
        console.log(twin.properties);
        // Add a handler for desired property changes
        twin.on('properties.desired', function(delta) {
            console.log('new desired properties received:');
            console.log(JSON.stringify(delta));
        });
        // create a patch to send to the hub
        var patch = {
          updateTime: new Date().toString(),
          firmwareVersion:'1.2.1',
          weather:{
            temperature: 72,
            humidity: 17
          }
        };
        // send the patch
        twin.properties.reported.update(patch, function(err) {
          if (err) throw err;
          console.log('twin state reported');
        });
      });
    });
    
  4. Teď to spusťte pomocí uzlu příkazu twin.js.

    F:\temp\module_twin>node twin.js
    

    Pak uvidíte:

    client opened
    twin contents:
    { reported: { update: [Function: update], '$version': 1 },
      desired: { '$version': 1 } }
    new desired properties received:
    {"$version":1}
    twin state reported
    

Další kroky

Chcete-li pokračovat v seznamování se službou IoT Hub a prozkoumat další scénáře IoT, podívejte se na tato témata: