Wprowadzenie do tożsamości modułu IoT Hub i bliźniaczej reprezentacji modułu (Node.js)
Tożsamości modułów i bliźniacze reprezentacje modułów są podobne do tożsamości urządzenia i bliźniaczej reprezentacji urządzenia usługi Azure IoT Hub, ale zapewniają większy stopień szczegółowości. Podczas gdy Azure IoT Hub tożsamości urządzenia i bliźniaczej reprezentacji urządzenia umożliwiają aplikacji zaplecza skonfigurowanie urządzenia i zapewnienie widoczności warunków urządzenia, tożsamość modułu i bliźniacze reprezentacja modułu zapewniają te możliwości dla poszczególnych składników urządzenia. Na urządzeniach z obsługą wielu składników, takich jak urządzenia z systemem operacyjnym lub urządzeniami układowymi, umożliwia odizolowaną konfigurację i warunki dla każdego składnika.
Uwaga
Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowych i standardowych/bezpłatnych IoT Hub, zobacz Wybieranie odpowiedniej warstwy IoT Hub dla rozwiązania.
Na końcu tego artykułu masz dwie aplikacje Node.js:
CreateIdentities: tworzy tożsamość urządzenia, tożsamość modułu i skojarzone klucze zabezpieczeń w celu połączenia klientów urządzenia i modułu.
UpdateModuleTwinReportedProperties: wysyła zaktualizowaną reprezentację modułu, zgłaszane właściwości do IoT Hub.
Uwaga
Aby uzyskać więcej informacji na temat narzędzi zestawu SDK dostępnych do kompilowania aplikacji zarówno urządzeń, jak i zaplecza, zobacz Zestawy SDK usługi Azure IoT.
Wymagania wstępne
Centrum IoT. Utwórz go za pomocą interfejsu wiersza polecenia lub Azure Portal.
Node.js w wersji 10.0.x lub nowszej. W artykule Przygotowanie środowiska deweloperskiego opisano sposób instalowania Node.js dla tego artykułu w systemie Windows lub Linux.
Uwierzytelnianie modułu
Do uwierzytelniania tożsamości modułów można użyć kluczy symetrycznych lub certyfikatów X.509. W przypadku uwierzytelniania certyfikatu X.509 certyfikat modułu musi mieć jego nazwę pospolitą (CN) sformatowaną na przykład CN=<deviceid>/<moduleid>
. Na przykład:
openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"
Pobieranie parametrów połączenia centrum IoT Hub
W tym artykule utworzysz usługę zaplecza, która dodaje urządzenie w rejestrze tożsamości, a następnie dodaje moduł do tego urządzenia. Usługa wymaga uprawnień do zapisu rejestru . Domyślnie każde centrum IoT jest tworzone z zasadami dostępu współdzielonego o nazwie registryReadWrite , która przyznaje to uprawnienie.
Aby uzyskać parametry połączenia IoT Hub dla zasad registryReadWrite, wykonaj następujące kroki:
W Azure Portal wybierz pozycję Grupy zasobów. Wybierz grupę zasobów, w której znajduje się centrum, a następnie wybierz centrum z listy zasobów.
W okienku po lewej stronie centrum wybierz pozycję Zasady dostępu współdzielonego.
Z listy zasad wybierz zasady registryReadWrite .
Skopiuj podstawowe parametry połączenia i zapisz wartość.
Aby uzyskać więcej informacji na temat zasad i uprawnień dostępu współdzielonego IoT Hub, zobacz Kontrola dostępu i uprawnienia.
Tworzenie tożsamości urządzenia i tożsamości modułu w IoT Hub
W tej sekcji utworzysz aplikację Node.js, która tworzy tożsamość urządzenia i tożsamość modułu w rejestrze tożsamości w centrum IoT. Urządzenie lub moduł nie może nawiązać połączenia z centrum IoT, chyba że ma wpis w rejestrze tożsamości. Aby uzyskać więcej informacji, zobacz Omówienie rejestru tożsamości w centrum IoT. Uruchomienie tej aplikacji konsolowej powoduje wygenerowanie unikatowego identyfikatora i klucza zarówno dla urządzenia, jak i modułu. Identyfikator i klucz są uwzględniane wielkości liter. Urządzenie i moduł korzystają z tych wartości w celu identyfikowania się podczas wysyłania komunikatów urządzenie-chmura do usługi IoT Hub.
Utwórz katalog do przechowywania kodu.
Wewnątrz tego katalogu najpierw uruchom polecenie npm init -y , aby utworzyć pusty plik package.json z wartościami domyślnymi. Jest to plik projektu dla kodu.
Uruchom polecenie npm install -S azure-iothub@modules-preview , aby zainstalować zestaw SDK usługi w podkatalogu node_modules .
Uwaga
Nazwa podkatalogu node_modules używa modułu word, aby oznaczać "bibliotekę węzłów". Termin ten nie ma nic wspólnego z modułami IoT Hub.
Utwórz następujący plik .js w katalogu. Nazwij go add.js. Skopiuj i wklej parametry połączenia centrum i nazwę centrum.
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); }); }); });
Ta aplikacja tworzy tożsamość urządzenia o identyfikatorze myFirstDevice i tożsamości modułu o identyfikatorze myFirstModule w obszarze urządzenia myFirstDevice. (Jeśli ten identyfikator modułu już istnieje w rejestrze tożsamości, kod po prostu pobiera informacje o istniejącym module). Następnie aplikacja wyświetla klucz podstawowy dla tej tożsamości. Tego klucza używa się w symulowanej aplikacji modułu, aby nawiązać połączenie z centrum IoT.
Uruchom to polecenie przy użyciu add.js węzła. Zapewni to parametry połączenia dla tożsamości urządzenia i inną dla tożsamości modułu.
Uwaga
Rejestr tożsamości usługi IoT Hub przechowuje tożsamości urządzenia i modułu tylko po to, aby umożliwić bezpieczny dostęp do centrum IoT. W rejestrze tożsamości są przechowywane identyfikatory urządzeń i klucze służące jako poświadczenia zabezpieczeń. W rejestrze tożsamości są także przechowywane flagi włączenia/wyłączenia dla każdego urządzenia, za pomocą których można wyłączyć dostęp do danego urządzenia. Jeśli aplikacja wymaga przechowywania innych metadanych dla określonego urządzenia, powinna korzystać z magazynu określonego dla aplikacji. Nie istnieje flaga włączenia/wyłączenia tożsamości modułów. Aby uzyskać więcej informacji, zobacz Omówienie rejestru tożsamości w IoT Hub w przewodniku dewelopera IoT Hub.
Aktualizowanie bliźniaczej reprezentacji modułu przy użyciu zestawu SDK urządzenia Node.js
W tej sekcji utworzysz aplikację Node.js na urządzeniu symulowanym, który aktualizuje zgłaszane właściwości bliźniaczej reprezentacji modułu.
Pobierz parametry połączenia modułu. Zaloguj się w witrynie Azure Portal. Przejdź do IoT Hub i wybierz pozycję Urządzenia IoT. Znajdź plik myFirstDevice, otwórz go i zobaczysz, że moduł myFirstModule został pomyślnie utworzony. Skopiuj parametry połączenia modułu. Będą potrzebne w następnym kroku.
Podobnie jak w poprzedniej sekcji, utwórz katalog dla kodu urządzenia i użyj narzędzia NPM, aby zainicjować go i zainstalować zestaw SDK urządzenia (npm install -S azure-iot-device-amqp@modules-preview).
Uwaga
Polecenie npm install może działać wolno. Bądź cierpliwy; ściąga wiele kodu z repozytorium pakietów.
Uwaga
Jeśli zobaczysz błąd informujący o błędzie npm ERR! błąd rejestru podczas analizowania kodu json. Jest to bezpieczne do zignorowania. Jeśli zobaczysz błąd informujący o błędzie npm ERR! błąd rejestru podczas analizowania kodu json. Jest to bezpieczne do zignorowania.
Utwórz plik o nazwie twin.js. Skopiuj i wklej ciąg tożsamości modułu.
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'); }); }); });
Teraz uruchom polecenie przy użyciu węzła polecenia twin.js.
F:\temp\module_twin>node twin.js
Następnie zobaczysz:
client opened twin contents: { reported: { update: [Function: update], '$version': 1 }, desired: { '$version': 1 } } new desired properties received: {"$version":1} twin state reported
Następne kroki
Aby kontynuować wprowadzenie do usługi IoT Hub i zapoznać się z innymi scenariuszami IoT, zobacz:
Getting started with IoT Edge (Wprowadzenie do usługi IoT Edge)