Personalizar una solución preconfigurada

Las soluciones preconfiguradas proporcionadas conAzure IoT Suite muestran los servicios que funcionan juntos para proporcionar una solución completa. Desde este punto de partida, existen varios lugares donde puede ampliar y personalizar la solución para cada situación específica. Las secciones siguientes describen estos puntos de personalización comunes.

Ubicación del código fuente

El código fuente de su solución preconfigurada está disponible en Github en los repositorios siguientes:

El código fuente de las soluciones preconfiguradas se proporciona para demostrar los patrones y los procedimientos que se usan para implementar la funcionalidad de extremo a extremo de una solución de IoT mediante Azure IoT Suite. Puede encontrar más información sobre cómo crear e implementar las soluciones en los repositorios de GitHub.

Cambio de las reglas previamente configuradas

La solución de supervisión remota incluye tres trabajos de Azure Stream Analytics para controlar la información del dispositivo, la telemetría y la lógica de reglas de la solución.

Los tres trabajos de Stream Analytics y su sintaxis se describen detalladamente en el Tutorial de la solución preconfigurada de supervisión remota.

Puede editar directamente estos trabajos y modificar la lógica, o agregar lógica específica a su escenario. Para encontrar los trabajos de Stream Analytics, siga estos pasos:

  1. Vaya al Portal de Azure.

  2. Vaya al grupo de recursos con el mismo nombre que la solución de IoT.

  3. Seleccione el trabajo de Azure Stream Analytics que desea modificar.

  4. Detenga el trabajo seleccionando Detener en el conjunto de comandos.

  5. Edite las entradas, la consulta y las salidas.

    Una modificación sencilla consiste en cambiar la consulta del trabajo Reglas para usar "<" en lugar de ">". El portal de soluciones sigue apareciendo ">" al editar una regla, pero observe cómo se voltea el comportamiento debido al cambio en el trabajo subyacente.

  6. Inicio del trabajo

Nota

El panel de supervisión remota depende de datos específicos, así que la modificación de los trabajos puede provocar errores del panel.

Adición de reglas propias

Además de cambiar los trabajos de Azure Stream Analytics preconfigurados, puede usar Azure Portal para agregar nuevos trabajos o nuevas consultas a los trabajos existentes.

Personalización de dispositivos

Una de las actividades de extensión más comunes es trabajar con dispositivos específicos de su escenario. Existen varios métodos para trabajar con dispositivos. Entre estos se incluye la modificación de un dispositivo simulado para adaptarlo a su situación, o bien el uso del SDK de dispositivo de IoT para conectar el dispositivo físico a la solución.

Para obtener una guía paso a paso sobre cómo agregar dispositivos, consulte el artículo Dispositivos de conexión del conjunto de aplicaciones de IoT y el ejemplo del SDK de C de supervisión remota. Este ejemplo está diseñado para funcionar con la solución de supervisión remota preconfigurada.

Creación de dispositivo simulado propio

El código fuente de la solución de supervisión remota incluye un simulador. NET. Este simulador es el que se aprovisiona como parte de la solución y puede modificarlo para enviar distintos metadatos, telemetría y responder a distintos comandos y métodos.

El simulador preconfigurado en la solución preconfigurada de supervisión remota imita un dispositivo de refrigeración que emite la telemetría de temperatura y humedad. Puede modificar el simulador en el proyecto Simulator.WebJob cuando haya bifurcado el repositorio de GitHub.

Ubicaciones disponibles para dispositivos simulados

El conjunto predeterminado de ubicaciones es Seattle/Redmond, Washington (Estados Unidos de América). Puede cambiar estas ubicaciones en SampleDeviceFactory.cs.

Adición de un controlador de actualización de propiedad deseada al simulador

Puede establecer un valor para una propiedad deseada de un dispositivo en el portal de la solución. Es responsabilidad del dispositivo controlar la solicitud de cambio de la propiedad cuando el dispositivo recupera el valor de la propiedad deseada. Para agregar compatibilidad para un cambio del valor de propiedad mediante una propiedad deseada, debe agregar un controlador al simulador.

El simulador contiene controladores para las propiedades SetPointTemp y TelemetryInterval que puede actualizar mediante el establecimiento de los valores deseados en el portal de soluciones.

En el ejemplo siguiente se muestra el controlador para la propiedad deseada SetPointTemp de la clase CoolerDevice:

protected async Task OnSetPointTempUpdate(object value)
{
    var telemetry = _telemetryController as ITelemetryWithSetPointTemperature;
    telemetry.SetPointTemperature = Convert.ToDouble(value);

    await SetReportedPropertyAsync(SetPointTempPropertyName, telemetry.SetPointTemperature);
}

Este método permite actualizar la temperatura de telemetría y, a continuación, informa del cambio a IoT Hub estableciendo una propiedad notificada.

Puede agregar sus propios controladores a sus propias propiedades siguiendo el patrón del ejemplo anterior.

También debe enlazar la propiedad deseada al controlador tal y como se muestra en el siguiente ejemplo del constructor CoolerDevice:

_desiredPropertyUpdateHandlers.Add(SetPointTempPropertyName, OnSetPointTempUpdate);

Tenga en cuenta que SetPointTempPropertyName es una constante definida como "Config.SetPointTemp".

Adición de compatibilidad con un nuevo método al simulador

Puede personalizar el simulador para agregar compatibilidad con un nuevo método (método directo). Se necesitan dos pasos principales:

  • El simulador debe notificar a la instancia de IoT Hub de la solución preconfigurada los detalles del método.
  • El simulador debe incluir código para controlar la llamada al método cuando se invoca desde el panel Detalles del dispositivo en el Explorador de soluciones o a través de un trabajo.

La solución preconfigurada de supervisión remota usa propiedades notificadas para enviar los detalles sobre los métodos admitidos a IoT Hub. El back-end de soluciones mantiene una lista de todos los métodos admitidos por cada dispositivo junto con un historial de las invocaciones de cada método. Puede ver esta información acerca de los dispositivos e invocar métodos en el portal de la solución.

Para notificar a IoT Hub que un dispositivo es compatible con un método, el dispositivo debe agregar los detalles del método al nodo SupportedMethods en las propiedades notificadas:

"SupportedMethods": {
  "<method signature>": "<method description>",
  "<method signature>": "<method description>"
}

La firma del método tiene el formato siguiente: <method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type>. Por ejemplo, para especificar que el método InitiateFirmwareUpdate espera un parámetro de cadena denominado FwPackageURI, use la siguiente firma de método:

InitiateFirmwareUpate--FwPackageURI-string: "description of method"

Para obtener una lista de los tipos de parámetro admitidos, consulte la clase CommandTypes del proyecto Infrastructure.

Para eliminar un método, establezca la firma del método en null en las propiedades notificadas.

Nota

El back-end de soluciones solo actualiza información acerca de los métodos compatibles cuando recibe un mensaje de información del dispositivo desde este.

El siguiente ejemplo de código de la clase SampleDeviceFactory del proyecto Common muestra cómo agregar un método a la lista de SupportedMethods en las propiedades notificadas enviadas por el dispositivo:

device.Commands.Add(new Command(
    "InitiateFirmwareUpdate",
    DeliveryType.Method,
    "Updates device Firmware. Use parameter 'FwPackageUri' to specifiy the URI of the firmware file, e.g. https://iotrmassets.blob.core.windows.net/firmwares/FW20.bin",
    new[] { new Parameter("FwPackageUri", "string") }
));

Este fragmento de código permite agregar los detalles del método InitiateFirmwareUpdate, incluido el texto para mostrar en el portal de solución, y los detalles sobre los parámetros de método necesarios.

Al iniciarse, el simulador envía propiedades notificadas, incluida la lista de métodos admitidos, a IoT Hub.

Agregue un controlador al código del simulador de cada método que admite. Puede ver los controladores existentes en la clase CoolerDevice del proyecto Simulator.WebJob. En el ejemplo siguiente se muestra el controlador del método InitiateFirmwareUpdate:

public async Task<MethodResponse> OnInitiateFirmwareUpdate(MethodRequest methodRequest, object userContext)
{
    if (_deviceManagementTask != null && !_deviceManagementTask.IsCompleted)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "Device is busy"
        }, 409));
    }

    try
    {
        var operation = new FirmwareUpdate(methodRequest);
        _deviceManagementTask = operation.Run(Transport).ContinueWith(async task =>
        {
            // after firmware completed, we reset telemetry
            var telemetry = _telemetryController as ITelemetryWithTemperatureMeanValue;
            if (telemetry != null)
            {
                telemetry.TemperatureMeanValue = 34.5;
            }

            await UpdateReportedTemperatureMeanValue();
        });

        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "FirmwareUpdate accepted",
            Uri = operation.Uri
        }));
    }
    catch (Exception ex)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = ex.Message
        }, 400));
    }
}

Los nombres de controlador de método deben empezar por On seguido del nombre del método. El parámetro methodRequest contiene todos los parámetros pasados con la invocación del método desde el back-end de soluciones. El valor devuelto debe ser del tipo Task<RespuestaDelMétodo>. El método de la utilidad BuildMethodResponse le ayudará a crear el valor devuelto.

Dentro del controlador de método, puede:

  • Iniciar una tarea asincrónica.
  • Recuperar las propiedades deseadas desde el dispositivo gemelo de IoT Hub.
  • Actualizar una única propiedad notificada mediante el método SetReportedPropertyAsync de la clase CoolerDevice.
  • Actualizar varias propiedades notificadas mediante la creación de una instancia de TwinCollection y la llamada al método Transport.UpdateReportedPropertiesAsync.

El ejemplo de actualización de firmware anterior realiza los pasos siguientes:

  • Comprueba que el dispositivo puede aceptar la solicitud de actualización de firmware.
  • Inicia la operación de actualización de firmware de forma asincrónica y restablece la telemetría cuando se completa la operación.
  • Devuelve inmediatamente el mensaje "FirmwareUpdate aceptado" para indicar que el dispositivo aceptó la solicitud.

Creación y uso de dispositivos propios (físicos)

Los SDK de IoT de Azure proporcionan bibliotecas que permiten conectar distintos tipos de dispositivos (lenguajes y sistemas operativos) a soluciones IoT.

Modificación de los límites de panel

Número de dispositivos que se muestran en la lista desplegable del panel

El valor predeterminado es 200. Puede cambiar este número en DashboardController.cs.

Número de chinchetas que se muestran en el control de Bing Maps

El valor predeterminado es 200. Puede cambiar este número en TelemetryApiController.cs.

Periodo del gráfico de telemetría

El valor predeterminado es 10 minutos. Puede cambiar este valor en TelmetryApiController.cs.

Comentarios

¿Tiene una personalización que le gustaría que se tratara en este documento? Agregue las sugerencias de características a User Voice o comente este artículo.

Pasos siguientes

Para obtener más información sobre las opciones para personalizar las soluciones preconfiguradas, consulte estos artículos: