Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El puente de dispositivos de IoT Central es una solución de código abierto que conecta otras nubes de IoT, como Sigfox, Particle Device Cloud y The Things Network a la aplicación de IoT Central. El puente de dispositivos funciona reenviando datos de dispositivos conectados a otras nubes de IoT a través de la aplicación de IoT Central. El puente de dispositivos solo reenvía los datos a IoT Central, no envía comandos ni actualizaciones de propiedades de IoT Central de vuelta a los dispositivos.
El puente de dispositivos permite combinar la potencia de IoT Central con dispositivos como:
- Dispositivos de seguimiento de activos conectados a la red de área de bajo consumo de Sigfox.
- Dispositivos de supervisión de la calidad del aire en la nube de dispositivos de partículas.
- Dispositivos de supervisión de humedad del suelo en The Things Network.
Puede usar características de aplicación de IoT Central, como reglas y análisis en los datos, crear flujos de trabajo en Power Automate y Azure Logic Apps, o exportar los datos.
La solución device bridge aprovisiona varios recursos de Azure en su suscripción de Azure que funcionan conjuntamente para transformar y reenviar mensajes de dispositivo a IoT Central.
Prerrequisitos
Para completar los pasos descritos en esta guía paso a paso, necesita:
Una suscripción de Azure activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una aplicación de IoT Central creada a partir de la plantilla de aplicación personalizada . Para más información, consulte Creación de una aplicación de IoT Central y ¿Cómo obtengo información sobre mi aplicación?.
Información general
El puente de dispositivos de IoT Central es una solución de código abierto en GitHub. Usa una plantilla personalizada de Azure Resource Manager para implementar varios recursos en la suscripción de Azure, incluida una aplicación de funciones en Azure Functions.
La aplicación de funciones es la pieza fundamental del puente de dispositivos. Recibe solicitudes HTTP POST de otras plataformas de IoT a través de un webhook simple. El repositorio de Puente de dispositivos de Azure IoT Central incluye ejemplos que muestran cómo conectar nubes de Sigfox, Particle y The Things Network. Puede ampliar esta solución para conectarse a la nube de IoT personalizada si la plataforma puede enviar solicitudes HTTP POST a la aplicación de funciones.
La aplicación de funciones transforma los datos en un formato aceptado por IoT Central y lo reenvía mediante el servicio de aprovisionamiento de dispositivos y las API de cliente de dispositivo:
Si la aplicación de IoT Central reconoce el identificador de dispositivo en el mensaje reenviado, la telemetría del dispositivo aparece en IoT Central. Si la aplicación de IoT Central no reconoce el identificador de dispositivo, la aplicación de funciones intenta registrar un nuevo dispositivo con el identificador de dispositivo. El nuevo dispositivo aparece como un dispositivo sin asignar en la página Dispositivos de la aplicación de IoT Central. En la página Dispositivos , puede asignar el nuevo dispositivo a una plantilla de dispositivo y, a continuación, ver la telemetría.
Desplegar el puente de dispositivos
Para implementar el puente de dispositivos en tu suscripción:
En la aplicación de IoT Central, vaya a la página Permisos de grupos de conexión de dispositivos>.
Tome nota del ID Scope. Este valor se usa al implementar el puente de dispositivos.
En la misma página, abra el grupo de inscripción SAS-IoT-Devices . En la página de grupo SAS-IoT-Devices , copie la clave principal. Este valor se usa al implementar el puente de dispositivos.
Use el siguiente botón Implementar en Azure para abrir la plantilla personalizada de Resource Manager que implementa la aplicación de funciones en la suscripción. Use el ámbito de identificador y la clave principal del paso anterior:
Una vez completada la implementación, debe instalar los paquetes de npm que requiere la función:
En Azure Portal, abra la aplicación de funciones que se implementó en la suscripción. A continuación, vaya a Consola de herramientas> de desarrollo. En la consola, ejecute los siguientes comandos para instalar los paquetes:
cd IoTCIntegration npm installEstos comandos pueden tardar varios minutos en ejecutarse. Puede omitir de forma segura los mensajes de advertencia.
Una vez finalizada la instalación del paquete, seleccione Reiniciar en la página Información general de la aplicación de funciones:
La función ya está lista para usarse. Los sistemas externos pueden usar solicitudes HTTP POST para enviar datos de dispositivo a través del puente de dispositivos a la aplicación de IoT Central. Para obtener la dirección URL de la función, vaya a Functions > IoTCIntegration > Code + Test > Get function URL ::
Los cuerpos de mensajes enviados al puente de dispositivos deben tener el formato siguiente:
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
Cada clave del measurements objeto debe coincidir con el nombre de un tipo de telemetría en la plantilla de dispositivo de la aplicación de IoT Central. Esta solución no admite la especificación del identificador de interfaz en el cuerpo del mensaje. Por lo tanto, si dos interfaces diferentes tienen un tipo de telemetría con el mismo nombre, la medida aparece en ambos flujos de telemetría en la aplicación de IoT Central.
Puede incluir un timestamp campo en el cuerpo para especificar la fecha y hora UTC del mensaje. Este campo debe estar en formato ISO 8601. Por ejemplo: 2020-06-08T20:16:54.602Z. Si no incluye una marca de tiempo, se usa la fecha y hora actuales.
Puede incluir un campo modelId en el cuerpo. Use este campo para asignar el dispositivo a una plantilla de dispositivo durante el aprovisionamiento.
deviceId debe estar formado por caracteres alfanuméricos y en minúscula, y puede contener guiones.
Si no incluye el modelId campo, o si IoT Central no reconoce el identificador del modelo, un mensaje con un deviceId no reconocido crea un nuevo dispositivo sin asignar en IoT Central. Un operador puede migrar manualmente el dispositivo a la plantilla de dispositivo correcta. Para más información, consulte Administración de dispositivos en la aplicación > de Azure IoT Central Migración de dispositivos a una plantilla.
Nota:
Hasta que el dispositivo se asigna a una plantilla, todas las llamadas HTTP a la función devuelven un estado de error 403.
Para activar el registro de la aplicación de funciones con Application Insights, vaya a Supervisión > Registros en la aplicación de funciones en Azure Portal. Seleccione Activar Application Insights.
Recursos aprovisionados
La plantilla de Resource Manager aprovisiona los siguientes recursos en la suscripción de Azure:
- Aplicación de función
- Plan de App Service
- Cuenta de almacenamiento
- Almacén de claves
El almacén de claves almacena la clave de grupo SAS para la aplicación de IoT Central.
La aplicación de funciones se ejecuta en un plan de consumo. Aunque esta opción no ofrece recursos de proceso dedicados, permite que el puente de dispositivos controle cientos de mensajes de dispositivo por minuto, adecuado para flotas más pequeñas de dispositivos o dispositivos que envían mensajes con menos frecuencia. Si la aplicación depende del streaming de un gran número de mensajes de dispositivo, reemplace el plan de consumo por un plan de App Service dedicado. Este plan ofrece recursos de proceso dedicados, que proporcionan tiempos de respuesta de servidor más rápidos. Con un plan de App Service estándar, el rendimiento máximo observado de la función de Azure en este repositorio era de aproximadamente 1500 mensajes de dispositivo por minuto. Para más información, consulte Opciones de hospedaje de Azure Functions.
Para usar un plan de App Service dedicado en lugar de un plan de consumo, edite la plantilla personalizada antes de la implementación. Seleccione Editar plantilla.
Reemplace el segmento siguiente:
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2015-04-01",
"name": "[variables('planName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[variables('planName')]",
"computeMode": "Dynamic",
"sku": "Dynamic"
}
},
Con:
{
"type": "Microsoft.Web/serverfarms",
"sku": {
"name": "S1",
"tier": "Standard",
"size": "S1",
"family": "S",
"capacity": 1
},
"kind": "app",
"name": "[variables('planName')]",
"apiVersion": "2016-09-01",
"location": "[resourceGroup().location]",
"tags": {
"iotCentral": "device-bridge",
"iotCentralDeviceBridge": "app-service-plan"
},
"properties": {
"name": "[variables('planName')]"
}
},
A continuación, edite la plantilla para incluir "alwaysOn": true en la configuración del recurso functionapp bajo "properties": {"SiteConfig": {...}}. La configuración alwaysOn garantiza que la aplicación de funciones esté siempre en ejecución.
Examples
En los ejemplos siguientes se describe cómo configurar el puente de dispositivos para varias nubes de IoT:
Ejemplo 1: Conexión de dispositivos de partículas a través del puente de dispositivos
Para conectar un dispositivo Particle a través del puente de dispositivos a IoT Central, vaya a la consola de Particle y cree una nueva integración de webhook. Establezca el formato de solicitud en JSON. En Configuración avanzada, use el siguiente formato de cuerpo personalizado:
{
"device": {
"deviceId": "{{{PARTICLE_DEVICE_ID}}}"
},
"measurements": {
"{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
}
}
Pegue la URL de función de la aplicación de funciones; podrá ver que los dispositivos Particle aparecen como dispositivos no asignados en IoT Central. Para más información, consulte la entrada de blog Aquí se muestra cómo integrar los proyectos con tecnología de partículas con Azure IoT Central .
Ejemplo 2: Conexión de dispositivos Sigfox a través del puente de dispositivos
Es posible que algunas plataformas no le permitan especificar el formato de los mensajes de dispositivo enviados a través de un webhook. Para estos sistemas, debe convertir la carga del mensaje al formato de cuerpo esperado antes de que el puente de dispositivos la procese. Puede realizar la conversión en la misma función que ejecuta el puente de dispositivo.
En esta sección se muestra cómo convertir la carga de una integración de webhook de Sigfox al formato de cuerpo esperado por el puente de dispositivos. La nube de Sigfox transmite datos del dispositivo en un formato de cadena hexadecimal. Para mayor comodidad, el puente de dispositivos incluye una función de conversión para este formato, que acepta un subconjunto de los posibles tipos de campo en una carga del dispositivo Sigfox:int y uint de 8, 16, 32 o 64 bits; float de 32 bits o 64 bits; little-endian y big-endian. Para procesar mensajes desde una integración de webhook de Sigfox, realice los siguientes cambios en el archivo IoTCIntegration/index.js de la aplicación de funciones.
Para convertir la carga del mensaje, agregue el código siguiente antes de la llamada a handleMessage en la línea 21, reemplazando payloadDefinition con su definición de carga de Sigfox.
const payloadDefinition = 'gforce::uint:8 lat::uint:8 lon::uint:16'; // Replace this with your payload definition
req.body = {
device: {
deviceId: req.body.device
},
measurements: require('./converters/sigfox')(payloadDefinition, req.body.data)
};
Los dispositivos Sigfox esperan un 204 código de respuesta. Agregue el código siguiente después de la llamada a handleMessage en la línea 21:
context.res = {
status: 204
};
Ejemplo 3: Conexión de dispositivos desde The Things Network a través del puente de dispositivos
Para conectar los dispositivos de red de las cosas a IoT Central:
- Agregue una nueva integración HTTP a la aplicación en The Things Network: Aplicación > Integraciones > añadir integración > Integración HTTP.
- Asegúrese de que su aplicación incluya una función de decodificador que convierta automáticamente la carga de los mensajes del dispositivo a JSON antes de enviarla a la función: > Application Payload Functions > decodificador.
En el ejemplo siguiente se muestra una función de descodificador de JavaScript que puede usar para descodificar tipos numéricos comunes de datos binarios:
function Decoder(bytes, port) {
function bytesToFloat(bytes, decimalPlaces) {
var bits = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
var sign = (bits >>> 31 === 0) ? 1.0 : -1.0;
var e = bits >>> 23 & 0xff;
var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
var f = Math.round((sign * m * Math.pow(2, e - 150)) * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
return f;
}
function bytesToInt32(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
var sign = 1;
if (signed && bits >>> 31 === 1) {
sign = -1;
bits = bits & 0x7FFFFFFF;
}
return bits * sign;
}
function bytesToShort(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8);
var sign = 1;
if (signed && bits >>> 15 === 1) {
sign = -1;
bits = bits & 0x7FFF;
}
return bits * sign;
}
return {
temperature: bytesToFloat(bytes.slice(0, 4), 2),
presscounter: bytesToInt32(bytes.slice(4, 8), true),
blueLux: bytesToShort(bytes.slice(8, 10), false)
};
}
Después de definir la integración, agregue el código siguiente antes de la llamada a handleMessage en la línea 21 del archivo IoTCIntegration/index.js de la aplicación de funciones. Este código traduce el cuerpo de la integración HTTP al formato esperado.
req.body = {
device: {
deviceId: req.body.end_device_ids.device_id.toLowerCase()
},
measurements: req.body.uplink_message.decoded_payload
};
Nota:
El fragmento de código anterior usa el identificador de dispositivo fácil de usar. El mensaje de The Things Network también incluye un identificador técnico al que puede acceder mediante req.body.dev_eui.toLowerCase(). Para obtener más información, consulte The Things Network - Data Formats(La red de las cosas: formatos de datos).
Limitaciones
El puente de dispositivo solo reenvía los mensajes a IoT Central y no devuelve mensajes a los dispositivos. Esta limitación es la razón por la que las propiedades y los comandos no funcionan para los dispositivos que se conectan a IoT Central a través de este puente de dispositivos. Dado que no se admiten las operaciones de dispositivos gemelos, no es posible actualizar las propiedades del dispositivo a través del puente de dispositivos. Para usar estas características, un dispositivo debe conectarse directamente a IoT Central mediante uno de los SDK de dispositivo IoT de Azure.