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:
- Uma conta de Azure.
- Uma instância do Digital Twins em execução.
- As amostras Digital Twins C# descarregadas e extraídas na sua máquina de trabalho.
- .NET Core SDK versão 2.1.403 ou mais tarde na sua máquina de desenvolvimento para construir e executar a amostra. Corra
dotnet --version
para verificar se a versão certa está instalada. - Visual Studio Code, para explorar o código de exemplo.
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.
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
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.
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.
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
.A partir da saída na janela de comando, copie o valor de
ConnectionString
, por baixo daDevices
secção, para a sua área de transferência. Necessitará deste valor para simular a ligação do dispositivo na secção seguinte.
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.
Numa janela de comando separada, vá à amostra Azure Digital Twins e, em seguida, à pasta de conectividade do dispositivo .
Execute este comando para confirmar que as dependências do projeto estão corretas:
dotnet restore
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" }]
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.
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.
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.
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:
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.
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)