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:
- Entre em azureiotsuite.com usando suas credenciais de conta do Azure e clique + para criar uma solução.
- Clique em Selecionar no bloco Monitoramento remoto.
- Digite um Nome de solução para a solução pré-configurada de monitoramento remoto.
- Selecione a Região e a Assinatura que você deseja usar para provisionar a solução.
- 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
- Clique no bloco da sua solução com o status Provisionamento .
- Observe os estados de Provisionamento à medida que os serviços do Azure são implantados em sua assinatura do Azure.
- Após o provisionamento ser concluído, o status será alterado para Pronto.
- 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
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.
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.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.
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
Abra o arquivo remote_monitoring.js e procure a seguinte definição de variável:
var connectionString = "[IoT Hub device connection string]";
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 ... =="
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:
Se você selecionar dispositivo simulado Node.js executado na seção anterior, verá a telemetria de temperatura, umidade e temperatura externa:
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:
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
No Visual Studio, abra o arquivo RemoteMonitoring.sln da sua cópia local do repositório azure-iot-remote-monitoring.
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; }
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; }
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"; } } ```
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.
Abra um prompt de comando elevado e navegue até a raiz da sua cópia local do repositório azure-iot-remote-monitoring.
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.
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.
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
```
Clique em Salvar para alterar a consulta de regra atualizada.
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.
- 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.
Defina o Limite como 56. Em seguida, clique em Salvar e exibir regras.
Retorne ao painel para visualizar o histórico de alarme.
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: