Compartilhar via


Criar uma regra personalizada na solução pré-configurada de monitoramento remota

Introdução

Nas soluções pré-configuradas, você pode configurar regras que serão disparadas quando um valor de telemetria de um dispositivo atingir um limite específico. Usar telemetria dinâmica com a solução pré-configurada de monitoramento remoto descreve como você pode adicionar valores personalizados de telemetria, como ExternalTemperature, à sua solução. Este artigo mostra como criar uma regra personalizada para tipos de telemetria dinâmicos na sua solução.

Este tutorial usa um dispositivo simulado Node.js simples para gerar telemetria dinâmica a ser enviada ao back-end da solução pré-configurada. Você então adiciona regras personalizadas à solução RemoteMonitoring do Visual Studio e implanta esse back-end personalizado na sua assinatura do Azure.

Para concluir este tutorial, você precisará:

  • Uma assinatura ativa do Azure. Se você não tiver uma conta, poderá criar uma conta de avaliação gratuita em apenas alguns minutos. Para obter detalhes, consulte Avaliação gratuita do Azure.
  • Node.js versão 0.12.x ou posterior para criar um dispositivo simulado.
  • Visual Studio 2015 ou Visual Studio 2017 para modificar o back-end da solução pré-configurada com suas novas regras.

Provisionar a solução

Se você já não tiver provisionado a solução pré-configurada de monitoramento remoto em sua conta:

  1. Entre em azureiotsuite.com usando suas credenciais de conta do Azure e clique + para criar uma solução.
  2. Clique em Selecionar no bloco Monitoramento remoto.
  3. Digite um Nome de solução para a solução pré-configurada de monitoramento remoto.
  4. Selecione a Região e a Assinatura que você deseja usar para provisionar a solução.
  5. Clique em Criar Solução para iniciar o processo de provisionamento. Este processo normalmente leva vários minutos para ser executado.

Aguarde o processo de provisionamento ser concluído

  1. Clique no bloco da sua solução com o status Provisionamento .
  2. Observe os estados de Provisionamento à medida que os serviços do Azure são implantados em sua assinatura do Azure.
  3. Após o provisionamento ser concluído, o status será alterado para Pronto.
  4. Clique no bloco para ver os detalhes da solução no painel à direita.

Observação

Se estiver tendo problemas para implantar a solução pré-configurada, dê uma olhada em Permissões no site azureiotsuite.com e nas Perguntas frequentes. Se os problemas persistirem, crie um tíquete de serviço no portal.

Há detalhes que você esperaria ver e que não estão listados para sua solução? Envie sugestões de recursos no User Voice.

Faça uma anotação com o nome da solução que você escolheu para sua implantação. Você precisará do nome dessa solução mais tarde neste tutorial.

Configurar o dispositivo Node.js simulado

  1. No painel de monitoramento remoto, clique em + Adicionar um dispositivo e adicione um dispositivo personalizado. Anote o nome de host do Hub IoT, id do dispositivo e chave do dispositivo. Você precisará deles mais tarde neste tutorial ao preparar o aplicativo cliente de dispositivo remote_monitoring.js.

  2. Certifique-se de que o Node.js versão 0.12.x ou posterior esteja instalado no computador de desenvolvimento. Execute node --version em um prompt de comando ou em um shell para verificar a versão. Para obter informações sobre como usar um gerenciador de pacotes para instalar o Node.js no Linux, confira Instalação do Node.js por meio do gerenciador de pacotes.

  3. Após a instalação do Node.js, clone a versão mais recente do repositório azure-iot-sdks em seu computador de desenvolvimento. Sempre use a ramificação mestre para a versão mais recente das bibliotecas e exemplos.

  4. Em sua cópia local do repositório azure-iot-sdks, copie os dois arquivos a seguir da pasta node/device/samples em uma pasta vazia em seu computador de desenvolvimento:

    • packages.json
    • remote_monitoring.js
  5. Abra o arquivo remote_monitoring.js e procure a seguinte definição de variável:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Substitua a [cadeia de conexão de dispositivo do Hub IoT] pela cadeia de conexão do seu dispositivo. Use os valores de seu nome de host do Hub IoT, ID do dispositivo e chave de dispositivo que você anotou na etapa 1. Uma cadeia de conexão do dispositivo tem o seguinte formato:

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    Se o nome de host do Hub IoT for contoso e a ID de dispositivo for mydevice, a cadeia de conexão se parecerá com este snippet:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Salve o arquivo. Execute os seguintes comandos em um shell ou prompt de comando na pasta que contém os arquivos para instalar os pacotes necessários e, em seguida, execute o aplicativo de exemplo:

    npm install
    node remote_monitoring.js
    

Observe a telemetria dinâmica em ação

O painel mostra a telemetria de temperatura e umidade dos dispositivos existentes simulados:

The default dashboard

Se você selecionar dispositivo simulado Node.js executado na seção anterior, verá a telemetria de temperatura, umidade e temperatura externa:

Add external temperature to the dashboard

A solução de monitoramento remoto detecta automaticamente o tipo de telemetria adicional de temperatura externa e o adiciona ao gráfico no painel.

Você pode interromper o aplicativo de console do Node.js quando tiver confirmado que ele está enviando a telemetria de ExternalTemperature para a solução pré-configurada. Mantenha a janela do console aberta, porque você executará o aplicativo de console do Node.js novamente depois de adicionar a regra personalizada à solução.

Locais de armazenamento de regras

As informações sobre as regras são mantidas em dois locais:

  • Tabela DeviceRulesNormalizedTable – essa tabela armazena uma referência normalizada para as regras definidas pelo portal de solução. Quando o portal de solução exibe as regras do dispositivo, ele consulta esta tabela para obter as definições de regras.
  • Blob de DeviceRules – esse blob armazena todas as regras definidas para todos os dispositivos registrados e é definido como uma entrada de referência para os trabalhos do Stream Analytics do Azure.   Quando você atualiza uma regra existente ou define uma nova regra no portal de solução, a tabela e o blob são atualizados para refletirem as alterações. A definição de regra exibida no portal vem do armazenamento da tabela e a definição da regra referenciada pelos trabalhos do Stream Analytics vem do blob.

Atualizar a solução RemoteMonitoring do Visual Studio

As etapas a seguir mostram como modificar a solução RemoteMonitoring do Visual Studio para incluir uma nova regra que usa a telemetria de ExternalTemperature enviada do dispositivo simulado:

  1. Caso ainda não o tenha feito, faça um clone do repositório azure-iot-remote-monitoring em um local adequado na sua máquina local usando o seguinte comando Git:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. No Visual Studio, abra o arquivo RemoteMonitoring.sln da sua cópia local do repositório azure-iot-remote-monitoring.

  3. Abra o arquivo Infrastructure\Models\DeviceRuleBlobEntity.cs e adicione uma propriedade ExternalTemperature da seguinte maneira:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. No mesmo arquivo, adicione uma propriedade ExternalTemperatureRuleOutput da seguinte maneira:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Abra o arquivo Infrastructure\Models\DeviceRuleDataFields.cs e adicione a seguinte propriedade ExternalTemperature após a propriedade Humidity existente:

    public static string ExternalTemperature
    {
    

    get { return "ExternalTemperature"; } } ```

  1. No mesmo arquivo, atualize o método _availableDataFields para incluir ExternalTemperature da seguinte maneira:

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    

7. Abra o arquivo Infrastructure\Repository\DeviceRulesRepository.cs e modifique o método BuildBlobEntityListFromTableRows da seguinte maneira:

```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
    entity.Humidity = rule.Threshold;
    entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
  entity.ExternalTemperature = rule.Threshold;
  entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```

Recompile e reimplante a solução.

Agora, você pode implantar a solução atualizada para sua assinatura do Azure.

  1. Abra um prompt de comando elevado e navegue até a raiz da sua cópia local do repositório azure-iot-remote-monitoring.

  2. Para implantar a solução atualizada, execute o seguinte comando, substituindo {nome da implantação} pelo nome da implantação de solução pré-configurada que você anotou anteriormente:

    build.cmd cloud release {deployment name}
    

Atualizar o trabalho do Stream Analytics

Quando a implantação for concluída, você poderá atualizar o trabalho do Stream Analytics para usar novas definições de regras.

  1. No Portal do Azure, navegue até o grupo de recursos que contém os recursos de solução pré-configurada. Esse grupo de recursos tem o mesmo nome que você especificou para a solução durante a implantação.

  2. Navegue até o trabalho do Stream Analytics {nome da implantação}-Rules.

3. Clique em Parar para impedir a execução do trabalho do Stream Analytics. (Você deve aguardar a interrupção do trabalho para editar a consulta).

4. Clique em Consulta. Edite a consulta para incluir a instrução SELECT para ExternalTemperature. O exemplo a seguir mostra a consulta completa com a nova instrução SELECT:

```
WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'ExternalTemperature' as ReadingType,
     Stream.ExternalTemperature as Reading,
     Ref.ExternalTemperature as Threshold,
     Ref.ExternalTemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
 
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
 
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
  1. Clique em Salvar para alterar a consulta de regra atualizada.

  2. Clique em Iniciar para iniciar a execução do trabalho do Stream Analytics novamente.

Adicionar sua nova regra no painel de controle

Agora, você pode adicionar a regra ExternalTemperature a um dispositivo no painel de solução.

  1. Navegue até o portal de solução.

2. Navegue até o painel Dispositivos .

3. Localize o dispositivo personalizado criado que envia telemetria ExternalTemperature e, no painel Detalhes do Dispositivo , clique em Adicionar Regra.

4. Selecione ExternalTemperature no Campo de Dados.

  1. Defina o Limite como 56. Em seguida, clique em Salvar e exibir regras.

  2. Retorne ao painel para visualizar o histórico de alarme.

  3. Na janela do console que você deixou aberta, inicie o aplicativo de console do Node.js para começar a enviar os dados de telemetria de ExternalTemperature.

8. Observe que a tabela Histórico de Alarmes mostra novos alarmes quando a nova regra é disparada.  

Informações adicionais

Alterar o operador > é mais complexo e vai além das etapas descritas neste tutorial. Embora você possa alterar o trabalho do Stream Analytics para usar qualquer operador que você queira, refletir esse operador no portal de solução é uma tarefa mais complexa.

Próximas etapas

Agora que você já viu como criar regras personalizadas, você pode saber mais sobre as soluções pré-configuradas: