El Plugin Monnit ALTA es una función sin servidor diseñada para recibir mensajes de datos push de la API Webhook de Monnit y cargarlos adecuadamente en Ubidots. Todos los pasos necesarios para configurar los dispositivos y variables en Ubidots serán realizados por la lógica del plugin, por lo que no tienes que preocuparte por esas cosas rudimentarias y manuales. Incluso puedes agregar nuevos sensores a tu red en cualquier momento después de que se haya creado el plugin y los nuevos dispositivos se configurarán automáticamente en Ubidots al recibir el primer mensaje.
Si todo lo anterior suena bien para ti, sigue leyendo y sigue las instrucciones que encontrarás a continuación para hacer que tu red de dispositivos Monnit ALTA funcione sin problemas con Ubidots.
Requisitos
Una cuenta de Ubidots activa.
Una cuenta de iMonnit activa.
Una red funcional de dispositivos ALTA de Monnit.
1. Configurar el plugin Monnit ALTA
Inicia sesión en tu cuenta de Ubidots, haz clic en la pestaña Dispositivos, luego en Plugins, y haz clic en el icono + para crear un nuevo plugin de datos y busca el Plugin Monnit ALTA.
Sigue el asistente de configuración del plugin y selecciona tu token de Ubidots cuando se te pida.
Después de terminar el asistente, verás el nuevo plugin listado en la Lista de Plugins. Haz clic en el plugin recién creado y navega a la sección Decoder en el menú de la izquierda y copia, del campo HTTPs Endpoint URL, la URL que estarás usando desde el Webhook de iMonnit.
2. Configurar el Webhook de Monnit
Inicia sesión en tu cuenta de iMonnit y navega a la página de API desde el panel izquierdo, ve a la pestaña de crear webhook en la barra de navegación y selecciona Webhook de la lista Seleccionar Tipo de Push.
Ingresa la URL del endpoint del plugin de la sección anterior en el campo Base URL, haz clic en el botón de guardar y ya está, solo espera a que el primer mensaje sea procesado por el plugin para ver tus dispositivos en Ubidots.
3. Personalización
Editar tipos de dispositivos
El Plugin Monnit ALTA creará un tipo de dispositivo predefinido para gateways y cada uno de los IDs de Aplicación que tienes en tu red. Esto te permite personalizar a la vez todos los dispositivos de un tipo dado, es decir, puedes cambiar las variables predeterminadas, sus unidades, colores, etc.
Puedes encontrar esos tipos de dispositivos iniciando sesión en tu cuenta de Ubidots, haciendo clic en la pestaña Dispositivos y luego en Tipos, esto listará todos los tipos de dispositivos creados. Los creados por este plugin serán como: monnit-gateway, monnit-sensor-<application ID>.
Se recomienda leer este artículo sobre tipos de dispositivos, te dará algunas ideas sobre lo que se puede personalizar y cómo hacerlo.
Profundizando
El plugin creará dispositivos en tu cuenta de Ubidots con etiquetas siguiendo el siguiente esquema:
Gateways:
gateway-<gatewayID>
Sensores:
sensor-<sensorID>
Dado el mensaje de ejemplo
{ "gatewayMessage": { "gatewayID": "10000", "gatewayName": "ExampleGateway", "accountID": "xxxx", "networkID": "xxxx", "messageType": "0", "power": "0", "batteryLevel": "101", "date": "2016-06-18 7:39:01", "count": "3", "signalStrength": "29", "pendingChange": "False" }, "sensorMessages": [ { "sensorID": "10001", "sensorName": "Temp1", "applicationID": "2", "networkID": "xxxx", "dataMessageGUID": "78642056-CBD8-43B0-9A4B-247E58D3B6CB", "state": "0", "messageDate": "2016-06-18 7:37:48", "rawData": "23.7", "dataType": "TemperatureData", "dataValue": "23.7", "plotValues": "74.66", "plotLabels": "Fahrenheit", "batteryLevel": "100", "signalStrength": "100", "pendingChange": "False", "voltage": "3.24" } ]}
, por defecto, se crearán variables para los valores de signalStrength y batteryLevel así como para cada par plotLabel/plotValue recibido en el mensaje. Si por alguna razón necesitas que alguno de los otros valores se cargue en Ubidots, como por ejemplo voltage, puedes ir a la configuración de decodificación del plugin (ver Sección 1) y editar el código de la Decoding Function para agregar el valor respectivo a los datos que se enviarán:
def process_gateway_msg(msg): values = { "values": [{ "signal": float(msg["signalStrength"]), "battery": float(msg["batteryLevel"]), # No olvides la coma "voltage": float(msg["voltage"]) # Agregar valor de voltaje }] } return valuesdef process_sensor_msg(msg): values = { "values": [{ **{ item[0]: float(item[1]) for item in zip( msg["plotLabels"].split("|"), msg["plotValues"].split("|") ) }, **{ "signal": float(msg["signalStrength"]), "battery": float(msg["batteryLevel"]), # No olvides la coma "voltage": float(msg["voltage"]) # Agregar valor de voltaje } }] } return values