Partilhar via


Tutorial: Providenciar o seu edifício e monitorizar as condições de trabalho com a pré-visualização das Gémeas Digitais Azure

Importante

Foi lançada uma nova versão do serviço Azure Digital Twins. À luz das capacidades expandidas do novo serviço, o serviço original Azure Digital Twins (descrito neste conjunto de documentação) foi retirado.

Para ver a documentação do novo serviço, visite a Documentação ativa da Azure Digital Twins.

Este tutorial demonstra como usar a pré-visualização de gémeos digitais Azure para monitorizar os seus espaços para as condições de temperatura e nível de conforto desejados. Depois de configurar o seu edifício de amostras, pode providenciar o seu edifício e executar funções personalizadas nos dados do seu sensor utilizando os passos deste tutorial.

Neste tutorial, ficará a saber como:

  • Defina condições para monitorizar.
  • Criar uma função definida pelo utilizador (UDF).
  • Simular dados de sensores.
  • Obtenha resultados de uma função definida pelo utilizador.

Pré-requisitos

Este tutorial pressupõe que terminou a sua configuração Azure Digital Twins. Antes de avançar, confirme que tem:

Dica

Use um nome único de instância digital gémeos se estiver a providenciar um novo exemplo.

Definir as condições a monitorizar

Pode definir um conjunto de condições específicas para monitorizar nos dados do dispositivo ou do sensor, chamados matchers. Em seguida, pode definir funções chamadas funções definidas pelo utilizador. As funções definidas pelo utilizador executam a lógica personalizada em dados que vêm dos seus espaços e dispositivos, quando as condições especificadas pelos matchers ocorrem. Para obter mais informações, leia o processamento de dados e as funções definidas pelo utilizador.

No exemplo de projeto occupancy-quickstart, abra o ficheiro src\actions\provisionSample.yaml no Visual Studio Code. Repare na secção que começa com o tipo matchers. Cada entrada sob este tipo cria um fósforo com o Nome especificado. O matcher monitorizará um sensor de dados tipoTypeValue. Note como se relaciona com o espaço chamado Focus Room A1, que tem um nó de dispositivos que contém alguns sensores. Para obter um matcher que rastreie um destes sensores, certifique-se de que os seus dadosTypeValue correspondem aos dados do sensorType.

Adicione o seguinte matcher abaixo dos fósforos existentes. Certifique-se de que as teclas estão alinhadas e que os espaços não são substituídos por separadores. Estas linhas também estão presentes no ficheiro Supridor.yaml como linhas comentadas. Pode descomprê-los removendo o # personagem na frente de cada linha.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Este matcher irá rastrear o SAMPLE_SENSOR_TEMPERATURE sensor que adicionou no primeiro tutorial.

Criar uma função definida pelo utilizador

Pode utilizar funções definidas pelo utilizador para personalizar o processamento dos dados do seu sensor. São código JavaScript personalizado que podem ser executados dentro da sua instância Azure Digital Twins, quando ocorrem condições específicas descritas pelos matchers. Pode criar matchers e funções definidas pelo utilizador par cada sensor que queira monitorizar. Para obter mais informações, leia o processamento de dados e as funções definidas pelo utilizador.

Na provisão de amostraSample.yaml , procure uma secção que comece com as funções de utilizador do tipo. Esta secção prevê uma função definida pelo utilizador com um nome dado. Este UDF atua na lista de fósforos sob nomes de matcher. Repare que pode fornecer o seu próprio ficheiro JavaScript para a UDF como o script.

Veja também a secção com o nome roleassignments. Atribui a função de Administrador Espacial à função definida pelo utilizador. Esta função permite-lhe aceder aos eventos que vêm de qualquer um dos espaços a provisionados.

  1. Configure a UDF para incluir o matcher “temperatura” ao adicionar ou remover o comentário na linha seguinte do nó matcherNames do ficheiro provisionSample.yaml:

            - Matcher Temperature
    
  2. Abra o ficheiro src\actions\userDefinedFunctions\availability.js no editor. Este é o ficheiro referenciado no elemento script de provisionSample.yaml. A função definida pelo utilizador neste ficheiro procura condições quando não é detetado nenhum movimento na sala e os níveis de dióxido de carbono são inferiores a 1.000 ppm.

    Modifique o ficheiro JavaScript para monitorizar a temperatura e outras condições. Adicione as seguintes linhas de código para procurar condições quando nenhum movimento é detetado na sala, os níveis de dióxido de carbono são inferiores a 1.000 ppm, e a temperatura é inferior a 78 graus Fahrenheit.

    Nota

    Esta secção modifica o ficheiro src\actions\userDefinedFunctions\availability.js para que possa aprender em detalhe uma forma de escrever uma função definida pelo utilizador. No entanto, pode optar por utilizar diretamente o ficheiro src\actions\userDefinedFunctions\availabilityForTutorial.js na sua configuração. que tem todas as alterações necessárias para este tutorial. Se utilizar este ficheiro, certifique-se de que utiliza o nome de ficheiro correto para a chave do script em src\actions\provisionSample.yaml.

    a. Na parte superior do ficheiro, adicione as linhas seguintes para temperatura, abaixo do comentário // Add your sensor type here:

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

    b. Adicione as seguintes linhas após a declaração que define var motionSensor, abaixo do comentário // Add your sensor variable here:

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

    c. Adicione a seguinte linha após a declaração que define var carbonDioxideValue, abaixo do comentário // Add your sensor latest value here:

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

    d. Remova as linhas de código seguintes, abaixo do comentário // 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;
       }
    

    Substitua-as pelas linhas seguintes:

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

    e. Remova as linhas de código seguintes, abaixo do comentário // 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";
    

    Substitua-as pelas linhas seguintes:

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

    f. Remova o bloco de código if-else seguinte, a seguir ao comentário // 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));
        }
    

    Substitua-o pelo bloco if-else seguinte:

        // 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);
        }
    

    A UDF modificada procurará uma condição em que uma sala fica disponível e cujos níveis de dióxido de carbono e a temperatura estejam dentro de um limite tolerável. Quando essa condição for satisfeita, gerará uma notificação com a declaração parentSpace.Notify(JSON.stringify(alert));. Definirá o valor do espaço monitorizado independentemente de a condição ser ou não satisfeita, com a mensagem correspondente.

    exemplo, Guarde o ficheiro.

  3. Abra uma janela de comando e vá para a pasta de ocupação-quickstart\src. Executar o seguinte comando para providenciar o seu gráfico de inteligência espacial e função definida pelo utilizador:

    dotnet run ProvisionSample
    

    Importante

    Para evitar o acesso não autorizado à sua API de Gestão de Gémeos Digitais, a aplicação de arranque rápido de ocupação requer que você assine com as suas credenciais de conta Azure. Guarda as suas credenciais por um breve período, por isso pode não precisar de assinar sempre que o executar. A primeira vez que este programa é executado, e quando as suas credenciais guardadas expiram depois disso, a aplicação direciona-o para uma página de entrada e dá um código específico de sessão para introduzir nessa página. Siga os pedidos para iniciar sessão com a conta do Azure.

  4. Após a autenticação da sua conta, a aplicação começa a criar um gráfico espacial de amostra configurado em provisionSample.yaml. Espere até que o provisionamento termine. Vai levar alguns minutos. Depois disso, observe as mensagens na janela de comando e note como o seu gráfico espacial é criado. Note como a aplicação cria um hub IoT no nó raiz ou no Venue.

  5. A partir da saída na janela de comando, copie o valor de ConnectionString, por baixo da Devices secção, para a sua área de transferência. Necessitará deste valor para simular a ligação do dispositivo na secção seguinte.

    Amostra de provisão

Dica

Se receber uma mensagem de erro semelhante a "A operação de E/S foi abortada por causa de uma saída de linha ou de um pedido de aplicação" no meio do provisionamento, tente executar novamente o comando. Isto pode acontecer se o cliente HTTP tiver um tempo de saída de um problema de rede.

Simular dados do sensor

Nesta secção, utilizará o projeto denominado conectividade do dispositivo na amostra. Vai simular dados de sensores para detetar movimento, temperatura e dióxido de carbono. O projeto gera valores aleatórios para os sensores e envia-os para o hub IoT mediante a utilização da cadeia de ligação do dispositivo.

  1. Numa janela de comando separada, vá à amostra Azure Digital Twins e, em seguida, à pasta de conectividade do dispositivo .

  2. Execute este comando para confirmar que as dependências do projeto estão corretas:

    dotnet restore
    
  3. Abra o ficheiro appsettings.json no seu editor e edite os seguintes valores:

    a. DeviceConnectionString: atribua o valor de ConnectionString na janela de saída da secção anterior. Copie esta cadeia completamente, dentro das cotações, para que o simulador possa ligar-se corretamente com o hub IoT.

    b. HardwareId dentro da matriz de Sensores : Como está a simular eventos de sensores aprovisionados para a sua instância Azure Digital Twins, o ID de hardware e os nomes dos sensores neste ficheiro devem coincidir com o sensors nó do ficheiro ProvisionSample.yaml .

    Adicione uma nova entrada para o sensor de temperatura. O nó sensores em appsettings.json deve parecer o seguinte:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. Execute este comando para começar a simulação dos eventos do dispositivo para temperatura, movimento e dióxido de carbono:

    dotnet run
    

    Nota

    Como a amostra de simulação não comunica diretamente com a sua instância Digital Twins, não requer que autente autenticar.

Obtenha resultados da função definida pelo utilizador

A função definida pelo utilizador é executada sempre que a sua instância recebe dados de dispositivos e de sensores. Esta secção consulta a sua instância Azure Digital Twins para obter os resultados da função definida pelo utilizador. Você será notificado em tempo real, quando um quarto estiver disponível, que o ar é fresco e a temperatura está certa.

  1. Abra a janela de comando que usou para forrá a amostra, ou uma nova janela de comando, e vá novamente à pasta de arranque rápido de ocupação da amostra.

  2. Execute o comando seguinte e inicie sessão quando lhe for pedido:

    dotnet run GetAvailableAndFreshSpaces
    

A janela de saída mostra como a função definida pelo utilizador funciona e interceta eventos a partir da simulação do dispositivo.

Saída para o UDF

Se a condição monitorizada for satisfeita, a função definida pelo utilizador define o valor do espaço com a mensagem relevante, como vimos anteriormente. A GetAvailableAndFreshSpaces função imprime a mensagem na consola.

Limpar os recursos

Se quiser parar de explorar as Gémeas Digitais Azure neste momento, sinta-se livre para eliminar os recursos criados neste tutorial:

  1. A partir do menu esquerdo no portal do Azure, selecione Todos os recursos, selecione o seu grupo de recursos Digital Twins e selecione Delete.

    Dica

    Se sentiu problemas em eliminar a sua instância Digital Twins, foi lançada uma atualização de serviço com a correção. Por favor, ressalta o seu caso.

  2. Se necessário, elimine as aplicações de amostra na sua máquina de trabalho.

Passos seguintes

Agora que forneceste os teus espaços e criou uma estrutura para desencadear notificações personalizadas, podes ir a qualquer um dos seguintes tutoriais:

Tutorial: Receive notifications from your Azure Digital Twins spaces using Logic Apps (Tutorial: Utilizar o Logic Apps para receber notificações dos seus espaços do Azure Digital Twins)

Tutorial: Visualize and analyze events from your Azure Digital Twins spaces using Time Series Insights (Tutorial: Visualizar e analisar eventos dos seus espaços do Azure Digital Twins com o Time Series Insights)