Creación de una regla personalizada en la solución preconfigurada de supervisión remota

Introducción

En las soluciones preconfiguradas, puede configurar reglas que se desencadenan cuando un valor de telemetría de un dispositivo alcanza un umbral específico. Uso de telemetría dinámica con la solución de supervisión remota preconfigurada describe cómo se pueden agregar a la solución valores de telemetría personalizados, como ExternalTemperature. En este artículo se muestra cómo crear una regla personalizada para los tipos de telemetría dinámica en la solución.

En este tutorial se usa un simple dispositivo simulado de Node.js para generar telemetría dinámica y enviarla al back-end de la solución preconfigurada. Luego agrega reglas personalizadas en la solución RemoteMonitoring de Visual Studio e implementa este back-end personalizado a su suscripción de Azure.

Para completar este tutorial, necesita:

  • Una suscripción de Azure activa. En caso de no tener ninguna, puede crear una cuenta de evaluación gratuita en tan solo unos minutos. Para obtener más información, consulte Evaluación gratuita de Azure.
  • Node.js versión 0.12.x o posterior para crear un dispositivo simulado.
  • Microsoft Visual Studio 2015 o Visual Studio 2017 para modificar el back-end de la solución preconfigurada con las reglas nuevas.

Aprovisionamiento de la solución

Si no ha aprovisionado aún la solución preconfigurada de supervisión remota en su cuenta:

  1. Inicie sesión en azureiotsuite.com con las credenciales de su cuenta de Azure y haga clic en + para crear una solución.
  2. Haga clic en Seleccionar en el icono Supervisión remota.
  3. Escriba un valor en Nombre de la solución para la solución preconfigurada de supervisión remota.
  4. Seleccione la región y la suscripción que desea usar para aprovisionar la solución.
  5. Haga clic en Crear solución para comenzar el proceso de aprovisionamiento. Este proceso normalmente tarda varios minutos en ejecutarse.

Espere a que se complete el proceso de aprovisionamiento

  1. Haga clic en el icono de la solución con el estado Aprovisionando.
  2. Observe los estados de aprovisionamiento , ya que los servicios de Azure se implementan en su suscripción de Azure.
  3. Una vez que se complete el aprovisionamiento, el estado cambia a Listo.
  4. Haga clic en el icono y verá los detalles de la solución en el panel derecho.

Nota

Si surgen problemas al implementar la solución preconfigurada, consulte Permisos en el sitio azureiotsuite.com y Preguntas más frecuentes. Si los problemas persisten, cree un vale de servicio en el portal.

¿Hay detalles que esperaría ver que no aparezcan para su solución? Puede sugerirnos nuevas características en User Voice(La voz del usuario).

Anote el nombre de la solución que eligió para su implementación. Necesitará el nombre de esta solución más adelante en el tutorial.

Configuración del dispositivo simulado de Node.js

  1. En el panel de supervisión remota, haga clic en + Agregar un dispositivo y agregue un dispositivo personalizado. Tome nota del nombre de host de IoT Hub, del identificador de dispositivo y de la clave de dispositivo. Los necesitará más adelante en este tutorial al preparar la aplicación cliente del dispositivo remote_monitoring.js.

  2. Asegúrese de que tiene instalada la versión 0.12.x o posterior de Node.js en el equipo de desarrollo. Ejecute node --version en un símbolo del sistema o en un shell para comprobar la versión. Para obtener información sobre el uso de un administrador de paquetes para instalar Node.js en Linux, consulte Installing Node.js via package manager (Instalación de Node.js con un administrador de paquetes).

  3. Con Node.js instalado, clone la versión más reciente del repositorio azure-iot-sdk-node en el equipo de desarrollo. Para ver la versión más reciente de las bibliotecas y los ejemplos siempre debe usar siempre la rama principal .

  4. Desde su copia local del repositorio azure-iot-sdk-node, copie los siguientes dos archivos de la carpeta node/device/samples a una carpeta vacía de su equipo de desarrollo:

    • packages.json
    • remote_monitoring.js
  5. Abra el archivo remote-monitoring.js y busque la siguiente definición de variable:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Reemplace [IoT Hub device connection string] con la cadena de conexión al dispositivo. Use los valores para el nombre de host de IoT Hub, el identificador de dispositivo y la clave de dispositivo que anotó en el paso 1. Una cadena de conexión de dispositivo tiene el siguiente formato:

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

    Si su nombre de host de IoT Hub es contoso y el identificador del dispositivo es mydevice, su cadena de conexión tendrá este aspecto:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Guarde el archivo. Para instalar los paquetes necesarios, ejecute los siguientes comandos en un shell o símbolo del sistema de la carpeta que los contenga y ejecute la aplicación de ejemplo:

    npm install
    node remote_monitoring.js
    

Observación de la telemetría dinámica en acción

El panel muestra los datos de telemetría relativos a la temperatura y humedad de los dispositivos simulados existentes:

The default dashboard

Si selecciona el dispositivo simulado de Node.js que se ejecutó en la sección anterior, verá los datos de telemetría relativos a la temperatura, la humedad y la temperatura externa:

Add external temperature to the dashboard

La solución de supervisión remota detecta automáticamente el tipo de datos adicionales de telemetría relativos a la temperatura exterior y los agrega al gráfico del panel.

Puede detener la aplicación de consola de Node.js una vez que compruebe que envía la telemetría ExternalTemperature a la solución preconfigurada. Mantenga abierta la ventana de la consola porque volverá a ejecutar esta aplicación de consola de Node.js una vez que agregue la regla personalizada a la solución.

Ubicaciones de almacenamiento de las reglas

La información sobre las reglas se mantiene en dos ubicaciones:

  • Tabla DeviceRulesNormalizedTable. Esta tabla almacena una referencia normalizada de las reglas definidas por el portal de soluciones. Cuando el portal de soluciones muestra las reglas del dispositivo, consulta las definiciones de las reglas en esta tabla.
  • Blob DeviceRules. Este blob almacena todas las reglas definidas para todos los dispositivos registrados y se define con una entrada de referencia a los trabajos de Azure Stream Analytics.   Cuando analiza una regla existente o define una nueva en el portal de soluciones, tanto la tabla como el blob se actualizan para reflejar los cambios. La definición de regla que aparece en el portal proviene del almacén de tablas y la definición de regla a la que hacen referencia los trabajos de Stream Analytics proviene del blob.

Actualización de la solución RemoteMonitoring de Visual Studio

Los pasos siguientes indican cómo modificar la solución RemoteMonitoring de Visual Studio para incluir una regla nueva que usa la telemetría ExternalTemperature enviada desde el dispositivo simulado:

  1. Si todavía no lo ha hecho, clone el repositorio azure-iot-remote-monitoring en una ubicación adecuada de la máquina local mediante el siguiente comando Git:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. En Visual Studio, abra el archivo RemoteMonitoring.sln desde la copia local del repositorio azure-iot-remote-monitoring.

  3. Abra el archivo Infrastructure\Models\DeviceRuleBlobEntity.cs y agregue una propiedad ExternalTemperature de la siguiente manera:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. En el mismo archivo, agregue una propiedad ExternalTemperatureRuleOutput como se indica a continuación:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Abra el archivo Infrastructure\Models\DeviceRuleDataFields.cs y agregue la siguiente propiedad ExternalTemperature después de la propiedad Humidity existente:

    public static string ExternalTemperature
    {
    

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

  1. En el mismo archivo, actualice el método _availableDataFields para incluir ExternalTemperature de la manera siguiente:

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

7. Abra el archivo Infrastructure\Repository\DeviceRulesRepository.cs y modifique el método BuildBlobEntityListFromTableRows de la siguiente manera:

```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 y vuelva a implementar la solución.

Ahora puede implementar la solución actualizada en su suscripción de Azure.

  1. Abra un símbolo del sistema con privilegios elevados y vaya a la raíz de la copia local del repositorio azure-iot-remote-monitoring.

  2. Para implementar la solución actualizada, ejecute el comando siguiente para sustituir {nombre de implementación} por el nombre de implementación de la solución preconfigurada que anotó anteriormente:

    build.cmd cloud release {deployment name}
    

Actualización del trabajo de Stream Analytics

Cuando se complete la implementación, podrá actualizar el trabajo de Stream Analytics para usar las nuevas definiciones de regla.

  1. En Azure Portal, vaya al grupo de recursos que contiene los recursos de la solución preconfigurada. Este grupo de recursos tiene el mismo nombre que especificó para la solución durante la implementación.

  2. Navegue al trabajo {nombre de implementación}-Rules de Stream Analytics.

3. Haga clic en Detener para detener la ejecución del trabajo de Stream Analytics. (Debe esperar a que el trabajo de transmisión se detenga antes de editar la consulta).

4. Haga clic en Consulta. Edite la consulta para incluir la instrucción SELECT para ExternalTemperature. En el ejemplo siguiente se muestra la consulta completa con la nueva instrucción 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. Haga clic en Guardar para cambiar la consulta de regla actualizada.

  2. Haga clic en Iniciar que la ejecución del trabajo de Stream Analytics se inicie nuevamente.

Incorporación de la regla nueva en el panel

Ahora puede agregar la regla ExternalTemperature a un dispositivo en el panel de la solución.

  1. Vaya al portal de soluciones.

2. Vaya al panel Dispositivos .

3. Busque el dispositivo personalizado que creó que envía telemetría externalTemperature y en el panel Detalles del dispositivo , haga clic en Agregar regla.

4. Seleccione ExternalTemperature en el campo de datos.

  1. Establezca Umbral en 56. Luego, haga clic en Guardar y ver reglas.

  2. Vuelva al panel para ver el historial de alarmas.

  3. En la ventana de la consola que dejó abierto, inicie la aplicación de consola de Node.js para comenzar a enviar los datos de telemetría ExternalTemperature.

8. Observe que la tabla Historial de alarmas muestra nuevas alarmas cuando se desencadena la nueva regla.  

Información adicional

Cambiar el operador > es más complejo y va más allá de los pasos descritos en este tutorial. A pesar de que puede cambiar el trabajo de Stream Analytics para usar el operador que prefiera, reflejar ese operador en el portal de soluciones es una tarea más compleja.

Pasos siguientes

Ahora que sabe cómo crear reglas personalizadas, puede obtener más información sobre las soluciones preconfiguradas: