Zelf studie: uw bouw-en bewakings voorwaarden inrichten met Azure Digital Apparaatdubbels previewTutorial: Provision your building and monitor working conditions with Azure Digital Twins Preview

In deze zelf studie wordt gedemonstreerd hoe u met Azure Digital Apparaatdubbels Preview uw Spaces bewaakt voor gewenste temperatuur omstandigheden en comfort niveau.This tutorial demonstrates how to use Azure Digital Twins Preview to monitor your spaces for desired temperature conditions and comfort level. Nadat u uw voorbeeldgebouw hebt geconfigureerd, kunt u het gebouw inrichten en aangepaste functies uitvoeren voor uw sensorgegevens met behulp van de stappen in deze zelfstudie.After you configure your sample building, you can provision your building and run custom functions on your sensor data by using the steps in this tutorial.

In deze zelfstudie leert u het volgende:In this tutorial, you learn how to:

  • Werkomstandigheden definiëren die bewaakt moeten worden.Define conditions to monitor.
  • Een door de gebruiker gedefinieerde functie (UDF) maken.Create a user-defined function (UDF).
  • Sensorgegevens simuleren.Simulate sensor data.
  • Resultaten ophalen van een door de gebruiker gedefinieerde functie.Get results of a user-defined function.

VereistenPrerequisites

In deze zelfstudie wordt ervan uitgegaan dat u de Azure Digital Twins-installatie hebt uitgevoerd.This tutorial assumes that you have finished your Azure Digital Twins setup. Zorg er, vóórdat u doorgaat, voor dat u beschikt over:Before proceeding, make sure that you have:

Tip

Gebruik een unieke Digital Apparaatdubbels-exemplaar naam als u een nieuw exemplaar inricht.Use a unique Digital Twins instance name if you're provisioning a new instance.

Werkomstandigheden definiëren die gecontroleerd moeten wordenDefine conditions to monitor

U kunt een reeks specifieke omstandigheden definiëren die in het apparaat of sensorgegevens moeten worden bewaakt. Deze worden matchers genoemd.You can define a set of specific conditions to monitor in the device or sensor data, called matchers. Vervolgens kunt u functies definiëren die door de gebruiker gedefinieerde functies worden genoemd.You can then define functions called user-defined functions. Door de gebruiker gedefinieerde functies voeren aangepaste logica uit op gegevens die afkomstig zijn van uw ruimten en apparaten, wanneer de omstandigheden zich voordoen die overeenkomen met wat er als matchers is opgegeven.User-defined functions execute custom logic on data that comes from your spaces and devices, when the conditions specified by the matchers occur. Lees Gegevensverwerking en door gebruikers gedefinieerde functies voor meer informatie.For more information, read Data processing and user-defined functions.

Open vanuit het voorbeeldproject occupancy-quickstart het bestand src\actions\provisionSample.yaml in Visual Studio Code.From the occupancy-quickstart sample project, open the file src\actions\provisionSample.yaml in Visual Studio Code. Let op de sectie die begint met het type matchers.Note the section that begins with the type matchers. Elk item onder dit type maakt een matcher met de opgegeven Naam.Each entry under this type creates a matcher with the specified Name. De matcher bewaakt een sensor van het type dataTypeValue.The matcher will monitor a sensor of type dataTypeValue. Kijk hoe deze zich verhoudt tot de ruimte met de naam Focus Room A1, die een knooppunt devices heeft waarin zich een aantal sensoren bevinden.Notice how it relates to the space named Focus Room A1, which has a devices node that contains a few sensors. Als u een matcher wilt inrichten om een van deze sensoren te volgen, moet u ervoor zorgen dat de bijbehorende dataTypeValue overeenkomt met het dataType van de sensor.To provision a matcher that will track one of these sensors, make sure that its dataTypeValue matches the sensor's dataType.

Voeg de volgende matcher toe onder de bestaande matchers.Add the following matcher below the existing matchers. Zorg ervoor dat de sleutels zijn uitgelijnd en ruimtes niet zijn vervangen door tabs.Make sure the keys are aligned and spaces are not replaced by tabs. Deze regels zijn ook aanwezig in het bestand provisionSample.yaml in de vorm van commentaarregels.These lines are also present in the provisionSample.yaml file as commented-out lines. U kunt er coderegels van maken door het teken # aan het begin van elke regel te verwijderen.You can uncomment them by removing the # character in front of each line.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Met deze overeenkomst wordt de SAMPLE_SENSOR_TEMPERATURE sensor gevolgd die u in de eerste zelf studiehebt toegevoegd.This matcher will track the SAMPLE_SENSOR_TEMPERATURE sensor that you added in the first tutorial.

Een door de gebruiker gedefinieerde functie makenCreate a user-defined function

Met behulp van door gebruikers gedefinieerde functies kunt u aanpassen hoe uw sensorgegevens worden verwerkt.You can use user-defined functions to customize the processing of your sensor data. Ze bestaan uit aangepaste JavaScript-code die in uw Azure Digital Twins-instantie wordt uitgevoerd als er zich omstandigheden voordoen die door de matchers worden beschreven.They're custom JavaScript code that can run within your Azure Digital Twins instance, when specific conditions as described by the matchers occur. U kunt matchers en door gebruikers gedefinieerde functies maken voor elke sensor die u wilt controleren.You can create matchers and user-defined functions for each sensor that you want to monitor. Lees Gegevensverwerking en door gebruikers gedefinieerde functies voor meer informatie.For more information, read Data processing and user-defined functions.

Zoek in het voor beeld provisionSample. yaml -bestand naar een sectie die begint met het type userdefinedfunctions.In the sample provisionSample.yaml file, look for a section that begins with the type userdefinedfunctions. In deze sectie wordt een door de gebruiker gedefinieerde functie met een bepaalde Naam ingericht.This section provisions a user-defined function with a given Name. Deze UDF werkt met de lijst met matchers onder matcherNames.This UDF acts on the list of matchers under matcherNames. Kijk ook hoe u een eigen JavaScript-kunt gebruiken als script voor de door de gebruiker gedefinieerde functie.Notice how you can provide your own JavaScript file for the UDF as the script.

Let ook op de sectie met de naam roleassignments.Also note the section named roleassignments. Hiermee wordt de rol van Space Administrator toegewezen aan de door de gebruiker gedefinieerde functie.It assigns the Space Administrator role to the user-defined function. Met deze rol wordt toegang verkregen tot de gebeurtenissen die afkomstig zijn van een van de ingerichte ruimtes.This role allows it to access the events that come from any of the provisioned spaces.

  1. Configureer de UDF voor het toevoegen van de temperatuur overeenkomst door de volgende regel toe te voegen of op matcherNames te heffen in het knoop punt van het bestand provisionSample. yaml :Configure the UDF to include the temperature matcher by adding or uncommenting the following line in the matcherNames node of the provisionSample.yaml file:

            - Matcher Temperature
    
  2. Open het bestand src\actions\userDefinedFunctions\availability.js in uw editor.Open the file src\actions\userDefinedFunctions\availability.js in your editor. Dit is het bestand waarnaar wordt verwezen in het element script van provisionSample. yaml.This is the file referenced in the script element of provisionSample.yaml. Met de door de gebruiker gedefinieerde functie in dit bestand wordt gezocht naar omstandigheden waarbij geen beweging in de ruimte wordt gedetecteerd en waarbij het koolstofdioxideniveau zich onder 1000 ppm bevindt.The user-defined function in this file looks for conditions when no motion is detected in the room and carbon dioxide levels are below 1,000 ppm.

    Wijzig het JavaScript-bestand zodat op temperatuur en andere omstandigheden kan worden gecontroleerd.Modify the JavaScript file to monitor temperature and other conditions. Voeg de volgende regels code toe om te zoeken naar omstandigheden waarbij geen beweging wordt gedetecteerd in de kamer, het koolstofdioxideniveau lager is dan 1000 ppm en de temperatuur lager is dan 78 graden Fahrenheit.Add the following lines of code to look for conditions when no motion is detected in the room, carbon dioxide levels are below 1,000 ppm, and temperature is below 78 degrees Fahrenheit.

    Notitie

    In deze sectie wordt het bestand src\actions\userDefinedFunctions\availability.js gewijzigd, zodat u tot in detail kunt zien hoe u een door de gebruiker gedefinieerde functie kunt schrijven.This section modifies the file src\actions\userDefinedFunctions\availability.js so you can learn in detail one way to write a user-defined function. U kunt er echter ook voor kiezen om het bestand src\actions\userDefinedFunctions\availabilityForTutorial.js rechtstreeks in uw installatie te gebruiken.However, you can choose to directly use the file src\actions\userDefinedFunctions\availabilityForTutorial.js in your setup. Dit bestand bevat alle wijzigingen die u voor deze zelfstudie nodig hebt.This file has all the changes required for this tutorial. Als u dit bestand gebruikt, moet u er wel voor zorgen dat u de juiste bestandsnaam gebruikt voor de script-sleutel in src\actions\provisionSample.yaml.If you use this file instead, make sure to use the correct file name for the script key in src\actions\provisionSample.yaml.

    a.a. Boven in het bestand moet u onder de opmerking // Add your sensor type here de volgende regels voor de temperatuur toevoegen:At the top of the file, add the following lines for temperature below the comment // Add your sensor type here:

        var temperatureType = "Temperature";
        var temperatureThreshold = 78;
    

    b.b. Voeg onder de opmerking // Add your sensor variable here de volgende regels toe na de instructie waarmee var motionSensor wordt gedefinieerd:Add the following lines after the statement that defines var motionSensor, below the comment // Add your sensor variable here:

       var temperatureSensor = otherSensors.find(function(element) {
           return element.DataType === temperatureType;
       });
    

    c.c. Voeg onder de opmerking // Add your sensor latest value here de volgende regel toe na de instructie waarmee var carbonDioxideValue wordt gedefinieerd:Add the following line after the statement that defines var carbonDioxideValue, below the comment // Add your sensor latest value here:

        var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
    

    d.d. Verwijder de volgende regels code onder de opmerking // Modify this line to monitor your sensor value:Remove the following lines of code from below the comment // Modify this line to monitor your sensor value:

       if(carbonDioxideValue === null || motionValue === null) {
           sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning");
           return;
       }
    

    Vervang deze door de volgende regels:Replace them with the following lines:

        if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){
            sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning");
            return;
        }
    

    e.e. Verwijder de volgende regels code onder de opmerking // Modify these lines as per your sensor:Remove the following lines of code from below the comment // Modify these lines as per your sensor:

        var availableFresh = "Room is available and air is fresh";
        var noAvailableOrFresh = "Room is not available or air quality is poor";
    

    Vervang deze door de volgende regels:Replace them with the following lines:

        var alert = "Room with fresh air and comfortable temperature is available.";
        var noAlert = "Either room is occupied, or working conditions are not right.";
    

    f.f. Verwijder het volgende if-else-codeblok na de opmerking // Modify this code block for your sensor:Remove the following if-else code block after the comment // Modify this code block for your sensor:

        // If carbonDioxide less than threshold and no presence in the room => log, notify and set parent space computed value
        if(carbonDioxideValue < carbonDioxideThreshold && !presence) {
            log(`${availableFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, availableFresh);
        }
        else {
            log(`${noAvailableOrFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAvailableOrFresh);
    
            // Set up custom notification for poor air quality
            parentSpace.Notify(JSON.stringify(noAvailableOrFresh));
        }
    

    En vervang dit door het volgende if-else-codeblok:And replace it with the following if-else block:

        // If sensor values are within range and room is available
        if(carbonDioxideValue < carbonDioxideThreshold && temperatureValue < temperatureThreshold && !presence) {
            log(`${alert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, alert);
    
            // Set up notification for this alert
            parentSpace.Notify(JSON.stringify(alert));
        }
        else {
            log(`${noAlert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAlert);
        }
    

    Met de gewijzigde door de gebruiker gedefinieerde functie wordt gezocht naar omstandigheden waarbij een kamer beschikbaar wordt en het koolstofdioxideniveau en de temperatuur ervan binnen de toegestane limieten vallen.The modified UDF will look for a condition where a room becomes available and has the carbon dioxide and temperature within tolerable limits. Er wordt een melding met de instructie parentSpace.Notify(JSON.stringify(alert)); gegenereerd als deze omstandigheid zich voordoet.It will generate a notification with the statement parentSpace.Notify(JSON.stringify(alert)); when this condition is met. Met het bijbehorende bericht wordt de waarde van de gecontroleerde ruimte ingesteld, ongeacht of de omstandigheid zich voordoet of niet.It will set the value of the monitored space regardless of whether the condition is met, with the corresponding message.

    g.g. Sla het bestand op.Save the file.

  3. Open een opdrachtvenster en ga naar de map occupancy-quickstart\src.Open a command window, and go to the folder occupancy-quickstart\src. Voer de volgende opdracht uit om de grafiek met gegevens over de ruimte en de door de gebruiker gedefinieerde functie in te richten:Run the following command to provision your spatial intelligence graph and user-defined function:

    dotnet run ProvisionSample
    

    Belangrijk

    Om te voorkomen dat onbevoegden toegang hebben tot uw beheer-API van Digital Twins, wordt u door de toepassing occupancy-quickstart gedwongen u aan te melden met uw Azure-accountreferenties.To prevent unauthorized access to your Digital Twins Management API, the occupancy-quickstart application requires you to sign in with your Azure account credentials. Uw referenties blijven een korte periode bewaard, zodat u zich niet steeds hoeft aan te melden als u deze wilt uitvoeren.It saves your credentials for a brief period, so you might not need to sign in every time you run it. De eerste keer dat dit programma wordt uitgevoerd, en wanneer uw opgeslagen referenties daarna verlopen, wordt u omgeleid naar een aanmeldingspagina en ontvangt u een sessiespecifieke code die u op die pagina moet invoeren.The first time this program runs, and when your saved credentials expire after that, the application directs you to a sign-in page and gives a session-specific code to enter on that page. Volg de aanwijzingen om u aan te melden met uw Azure-account.Follow the prompts to sign in with your Azure account.

  4. Nadat uw account is geverifieerd, begint de toepassing met het maken van een ruimtelijke voorbeeld grafiek zoals geconfigureerd in provisionSample. yaml.After your account is authenticated, the application starts creating a sample spatial graph as configured in provisionSample.yaml. Wacht tot het inrichtingsproces is voltooid.Wait until the provisioning finishes. Dit duurt enkele minuten.It will take a few minutes. Vervolgens bekijkt u de berichten in het opdrachtvenster en u kunt zien hoe uw ruimtelijke grafiek wordt gemaakt.After that, observe the messages in the command window and notice how your spatial graph is created. Observeer hoe een IoT-hub wordt gemaakt op het hoofdknooppunt of de Venue.Notice how the application creates an IoT hub at the root node or the Venue.

  5. Kopieer de waarde van de ConnectionString uit de uitvoer in het opdrachtvenster onder de sectie Devices naar het Klembord.From the output in the command window, copy the value of ConnectionString, under the Devices section, to your clipboard. U hebt deze waarde nodig om de apparaatverbinding in de volgende sectie te simuleren.You'll need this value to simulate the device connection in the next section.

    Voorbeeld van inrichtingProvision sample

Tip

Als er tijdens het inrichtingsproces een foutbericht wordt weergegeven dat lijkt op 'De I/O-bewerking is afgebroken vanwege een afgesloten thread of een toepassingsaanvraag', moet u de opdracht opnieuw uitvoeren.If you get an error message similar to "The I/O operation has been aborted because of either a thread exit or an application request" in the middle of the provisioning, try running the command again. Dit kan gebeuren als er een time-out van de HTTP-client heeft plaatsgevonden vanwege een netwerkprobleem.This might happen if the HTTP client timed out from a network issue.

Sensorgegevens simulerenSimulate sensor data

In deze sectie gebruikt u het project met de naam device-connectivity in het voorbeeld.In this section, you'll use the project named device-connectivity in the sample. U gaat sensorgegevens voor het detecteren van beweging, temperatuur en kooldioxide simuleren.You'll simulate sensor data for detecting motion, temperature, and carbon dioxide. Door dit project worden willekeurige waarden voor de sensors gegenereerd en worden deze naar de IoT-hub verzonden met behulp van de verbindingsreeks van het apparaat.This project generates random values for the sensors, and sends them to the IoT hub by using the device connection string.

  1. Ga in een afzonderlijke opdrachtvenster naar het Azure Digital Twins-voorbeeld en ga van daaruit naar de map device-connectivity.In a separate command window, go to the Azure Digital Twins sample and then to the device-connectivity folder.

  2. Voer de volgende opdracht uit om te controleren of de afhankelijkheden voor het project juist zijn:Run this command to make sure the dependencies for the project are correct:

    dotnet restore
    
  3. Open het bestand appSettings. json in de editor en bewerk de volgende waarden:Open the appsettings.json file in your editor, and edit the following values:

    a.a. DeviceConnectionString: wijs de waarde toe van ConnectionString in het uitvoervenster uit de vorige sectie.DeviceConnectionString: Assign the value of ConnectionString in the output window from the previous section. Kopieer de volledige tekenreeks (tussen de aanhalingstekens), zodat de simulator correct verbinding maakt met de IoT-hub.Copy this string completely, within the quotes, so the simulator can connect properly with the IoT hub.

    b.b. HardwareId binnen de Sens oren -matrix: omdat u gebeurtenissen simuleert van Sens oren die zijn ingericht voor uw Azure Digital apparaatdubbels-exemplaar, moeten de hardware-id en de namen van de Sens sensors oren in dit bestand overeenkomen met het knoop punt van het bestand provisionSample. yaml .HardwareId within the Sensors array: Because you're simulating events from sensors provisioned to your Azure Digital Twins instance, the hardware ID and the names of the sensors in this file should match the sensors node of the provisionSample.yaml file.

    Voeg een nieuwe vermelding voor de temperatuursensor toe.Add a new entry for the temperature sensor. Het knoop punt Sens oren in appSettings. json moet er als volgt uitzien:The Sensors node in appsettings.json should look like the following:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. Voer de volgende opdracht uit om te beginnen met het simuleren van apparaatgebeurtenissen voor temperatuur, beweging en kooldioxide:Run this command to start simulating device events for temperature, motion, and carbon dioxide:

    dotnet run
    

    Notitie

    Omdat het simulatievoorbeeld niet rechtstreeks met uw instantie van Digital Twins communiceert, hoeft u zich niet te verifiëren.Because the simulation sample does not directly communicate with your Digital Twins instance, it does not require you to authenticate.

Resultaten ophalen van een door de gebruiker gedefinieerde functieGet results of the user-defined function

De door de gebruiker gedefinieerde functie wordt telkens uitgevoerd als uw instantie gegevens van het apparaat en de sensor ontvangt.The user-defined function runs every time your instance receives device and sensor data. In deze sectie voert de Azure Digital Twins-instantie een query uit om de resultaten van de door de gebruiker gedefinieerde functie op te halen.This section queries your Azure Digital Twins instance to get the results of the user-defined function. U ontvangt een melding in bijna real time, wanneer er een ruimte beschikbaar is, dat de lucht schoon is en de Tempe ratuur goed is.You'll be notified in near real time, when a room is available, that the air is fresh and temperature is right.

  1. Open het opdrachtvenster dat u heb gebruikt voor het inrichten van het voorbeeld, of open een nieuw opdrachtvenster, en ga weer naar de map occupancy-quickstart\src van het voorbeeld.Open the command window that you used to provision the sample, or a new command window, and go to the occupancy-quickstart\src folder of the sample again.

  2. Voer de volgende opdracht uit en meld u aan wanneer u hierom wordt gevraagd:Run the following command and sign in when prompted:

    dotnet run GetAvailableAndFreshSpaces
    

In het uitvoervenster ziet u hoe de door de gebruiker gedefinieerde functie wordt uitgevoerd en gebeurtenissen van de apparaatsimulatie onderschept.The output window shows how the user-defined function runs and intercepts events from the device simulation.

Uitvoer voor de UDFOutput for the UDF

Als er aan de gecontroleerd voorwaarde wordt voldaan, stelt de door de gebruiker gedefinieerde functie de waarde van de ruimte in met het betreffende bericht, zoals we eerder hebben gezien.If the monitored condition is met, the user-defined function sets the value of the space with the relevant message, as we saw earlier. De functie GetAvailableAndFreshSpaces drukt het bericht op de console af.The GetAvailableAndFreshSpaces function prints out the message on the console.

Resources opschonenClean up resources

Als u Azure Digital Twins niet verder wilt verkennen, kunt u de resources die in deze zelfstudie zijn gemaakt, gerust verwijderen:If you want to stop exploring Azure Digital Twins at this point, feel free to delete resources created in this tutorial:

  1. Klik in het linkermenu in de Azure-portal op Alle resources, selecteer de Digital Twins-resourcegroep en selecteer Verwijderen.From the left menu in the Azure portal, select All resources, select your Digital Twins resource group, and select Delete.

    Tip

    Als u problemen hebt bij het verwijderen van uw Digital Twins-exemplaar, is er een service-update met de oplossing hiervoor beschikbaar.If you experienced trouble deleting your Digital Twins instance, a service update has been rolled out with the fix. Probeer opnieuw of u het exemplaar kunt verwijderen.Please retry deleting your instance.

  2. Verwijder zo nodig de voorbeeldtoepassingen van uw werkcomputer.If necessary, delete the sample applications on your work machine.

Volgende stappenNext steps

Nu de ruimten zijn ingericht en u een framework voor het activeren van aangepaste meldingen hebt gemaakt, kunt u doorgaan met een van de volgende zelfstudies:Now that you have provisioned your spaces and created a framework to trigger custom notifications, you can go to either of the following tutorials: