Zelfstudie: Uw gebouw inrichten en werkomstandigheden bewaken met Azure Digital Twins Preview

Belangrijk

Er is een nieuwe versie van de Azure Digital Twins-service uitgebracht. In het licht van de uitgebreide mogelijkheden van de nieuwe service is de oorspronkelijke Azure Digital Twins-service (beschreven in deze documentatieset) buiten gebruik gesteld.

Als u de documentatie voor de nieuwe service wilt bekijken, gaat u naar de actieve Documentatie voor Azure Digital Twins.

In deze zelfstudie ziet u hoe u Azure Digital Twins Preview gebruikt om uw ruimten te bewaken voor de gewenste temperatuuromstandigheden en het comfortniveau. 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.

In deze zelfstudie leert u het volgende:

  • Werkomstandigheden definiëren die bewaakt moeten worden.
  • Een door de gebruiker gedefinieerde functie (UDF) maken.
  • Sensorgegevens simuleren.
  • Resultaten ophalen van een door de gebruiker gedefinieerde functie.

Vereisten

In deze zelfstudie wordt ervan uitgegaan dat u de Azure Digital Twins-installatie hebt uitgevoerd. Zorg er, vóórdat u doorgaat, voor dat u beschikt over:

Tip

Gebruik een unieke naam van het Digital Twins-exemplaar als u een nieuw exemplaar inricht.

Werkomstandigheden definiëren die gecontroleerd moeten worden

U kunt een reeks specifieke omstandigheden definiëren die in het apparaat of sensorgegevens moeten worden bewaakt. Deze worden matchers genoemd. Vervolgens kunt u functies definiëren die door de gebruiker gedefinieerde functies worden genoemd. 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. Lees Gegevensverwerking en door gebruikers gedefinieerde functies voor meer informatie.

Open vanuit het voorbeeldproject occupancy-quickstart het bestand src\actions\provisionSample.yaml in Visual Studio Code. Let op de sectie die begint met het type matchers. Elk item onder dit type maakt een matcher met de opgegeven Naam. De matcher bewaakt een sensor van het 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. 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.

Voeg de volgende matcher toe onder de bestaande matchers. Zorg ervoor dat de sleutels zijn uitgelijnd en ruimtes niet zijn vervangen door tabs. Deze regels zijn ook aanwezig in het bestand provisionSample.yaml in de vorm van commentaarregels. U kunt er coderegels van maken door het teken # aan het begin van elke regel te verwijderen.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Met deze matcher wordt de SAMPLE_SENSOR_TEMPERATURE sensor bijgehouden die u in de eerste zelfstudie hebt toegevoegd.

Een door de gebruiker gedefinieerde functie maken

Met behulp van door gebruikers gedefinieerde functies kunt u aanpassen hoe uw sensorgegevens worden verwerkt. 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. U kunt matchers en door gebruikers gedefinieerde functies maken voor elke sensor die u wilt controleren. Lees Gegevensverwerking en door gebruikers gedefinieerde functies voor meer informatie.

Zoek in het bestand provisionSample.yaml naar een sectie die begint met het type userdefinedfunctions. In deze sectie wordt een door de gebruiker gedefinieerde functie met een bepaalde Naam ingericht. Deze UDF werkt met de lijst met matchers onder matcherNames. Kijk ook hoe u een eigen JavaScript-kunt gebruiken als script voor de door de gebruiker gedefinieerde functie.

Let ook op de sectie met de naam roleassignments. Hiermee wordt de rol van Space Administrator toegewezen aan de door de gebruiker gedefinieerde functie. Met deze rol wordt toegang verkregen tot de gebeurtenissen die afkomstig zijn van een van de ingerichte ruimtes.

  1. Configureer de UDF om de temperatuurmatcher op te nemen door de volgende regel toe te voegen of op te heffen in het matcherNames knooppunt van het bestand provisionSample.yaml :

            - Matcher Temperature
    
  2. Open het bestand src\actions\userDefinedFunctions\availability.js in uw editor. Dit is het bestand waarnaar wordt verwezen in het scriptelement van 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.

    Wijzig het JavaScript-bestand zodat op temperatuur en andere omstandigheden kan worden gecontroleerd. 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.

    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. U kunt er echter ook voor kiezen om het bestand src\actions\userDefinedFunctions\availabilityForTutorial.js rechtstreeks in uw installatie te gebruiken. Dit bestand bevat alle wijzigingen die u voor deze zelfstudie nodig hebt. 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.

    a. Boven in het bestand moet u onder de opmerking // Add your sensor type here de volgende regels voor de temperatuur toevoegen:

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

    b. Voeg onder de opmerking // Add your sensor variable here de volgende regels toe na de instructie waarmee var motionSensor wordt gedefinieerd:

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

    c. Voeg onder de opmerking // Add your sensor latest value here de volgende regel toe na de instructie waarmee var carbonDioxideValue wordt gedefinieerd:

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

    d. Verwijder de volgende regels code onder de opmerking // 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:

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

    e. Verwijder de volgende regels code onder de opmerking // 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:

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

    f. Verwijder het volgende if-else-codeblok na de opmerking // 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:

        // 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. Er wordt een melding met de instructie parentSpace.Notify(JSON.stringify(alert)); gegenereerd als deze omstandigheid zich voordoet. Met het bijbehorende bericht wordt de waarde van de gecontroleerde ruimte ingesteld, ongeacht of de omstandigheid zich voordoet of niet.

    g. Sla het bestand op.

  3. Open een opdrachtvenster en ga naar de map 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:

    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. Uw referenties blijven een korte periode bewaard, zodat u zich niet steeds hoeft aan te melden als u deze wilt uitvoeren. 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. Volg de aanwijzingen om u aan te melden met uw Azure-account.

  4. Nadat uw account is geverifieerd, begint de toepassing met het maken van een ruimtelijke voorbeeldgrafiek zoals geconfigureerd in provisionSample.yaml. Wacht tot het inrichtingsproces is voltooid. Dit duurt enkele minuten. Vervolgens bekijkt u de berichten in het opdrachtvenster en u kunt zien hoe uw ruimtelijke grafiek wordt gemaakt. Observeer hoe een IoT-hub wordt gemaakt op het hoofdknooppunt of de Venue.

  5. Kopieer de waarde van de ConnectionString uit de uitvoer in het opdrachtvenster onder de sectie Devices naar het Klembord. U hebt deze waarde nodig om de apparaatverbinding in de volgende sectie te simuleren.

    Voorbeeld van inrichting

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. Dit kan gebeuren als er een time-out van de HTTP-client heeft plaatsgevonden vanwege een netwerkprobleem.

Sensorgegevens simuleren

In deze sectie gebruikt u het project met de naam device-connectivity in het voorbeeld. U gaat sensorgegevens voor het detecteren van beweging, temperatuur en kooldioxide simuleren. 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.

  1. Ga in een afzonderlijke opdrachtvenster naar het Azure Digital Twins-voorbeeld en ga van daaruit naar de map device-connectivity.

  2. Voer de volgende opdracht uit om te controleren of de afhankelijkheden voor het project juist zijn:

    dotnet restore
    
  3. Open het bestand appsettings.json in uw editor en bewerk de volgende waarden:

    a. DeviceConnectionString: wijs de waarde toe van ConnectionString in het uitvoervenster uit de vorige sectie. Kopieer de volledige tekenreeks (tussen de aanhalingstekens), zodat de simulator correct verbinding maakt met de IoT-hub.

    b. HardwareId in de matrix Sensoren : omdat u gebeurtenissen simuleert van sensoren die zijn ingericht voor uw Azure Digital Twins-exemplaar, moeten de hardware-id en de namen van de sensoren in dit bestand overeenkomen met het sensors knooppunt van het bestand provisionSample.yaml .

    Voeg een nieuwe vermelding voor de temperatuursensor toe. Het knooppunt Sensors in appsettings.json moet er als volgt uitzien:

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

    dotnet run
    

    Notitie

    Omdat het simulatievoorbeeld niet rechtstreeks met uw instantie van Digital Twins communiceert, hoeft u zich niet te verifiëren.

Resultaten ophalen van een door de gebruiker gedefinieerde functie

De door de gebruiker gedefinieerde functie wordt telkens uitgevoerd als uw instantie gegevens van het apparaat en de sensor ontvangt. 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. U ontvangt in bijna realtime een melding wanneer er een ruimte beschikbaar is, dat de lucht fris is en de temperatuur juist is.

  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.

  2. Voer de volgende opdracht uit en meld u aan wanneer u hierom wordt gevraagd:

    dotnet run GetAvailableAndFreshSpaces
    

In het uitvoervenster ziet u hoe de door de gebruiker gedefinieerde functie wordt uitgevoerd en gebeurtenissen van de apparaatsimulatie onderschept.

Uitvoer voor de 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. De functie GetAvailableAndFreshSpaces drukt het bericht op de console af.

Resources opschonen

Als u Azure Digital Twins niet verder wilt verkennen, kunt u de resources die in deze zelfstudie zijn gemaakt, gerust verwijderen:

  1. Klik in het linkermenu in de Azure-portal op Alle resources, selecteer de Digital Twins-resourcegroep en selecteer Verwijderen.

    Tip

    Als u problemen hebt bij het verwijderen van uw Digital Twins-exemplaar, is er een service-update met de oplossing hiervoor beschikbaar. Probeer opnieuw of u het exemplaar kunt verwijderen.

  2. Verwijder zo nodig de voorbeeldtoepassingen van uw werkcomputer.

Volgende stappen

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: