Ubidots y Seeed Studio se han asociado para crear una integración preconstruida para Sensores SenseCAP LoRaWAN, permitiendo a los usuarios enviar fácilmente datos desde The Things Stack a Ubidots utilizando Plugins.
Este Plugin está optimizado para decodificar automáticamente el esquema JSON de Uplink de The Things Stack v3, analizando elementos como los metadatos de las puertas de enlace para que no tengas que hacerlo tú!
Requisitos
1. Agregar un nodo de sensor SenseCAP al servidor TTS
Antes de conectar el sensor SenseCAP con el servidor de red, asegúrate de seguir el proceso de instalación basado en la siguiente documentación:
Lee el código QR del sensor para obtener el DevEUI y el DeviceCode del nodo:
La AppEUI y AppKey del dispositivo sensor SenseCAP han sido grabadas en el dispositivo por Seed Studio. Para recuperarlas, solo necesitas hacer una solicitud HTTP API a la siguiente URL.
https://sensecap.seeed.cc/makerapi/device/view_device_info?nodeEui=PUT-SENSOREUI-HERE&deviceCode=PUT-SENSOR-KEY-HERE
Asegúrate de ingresar el nodeEui y deviceCode de tu propio sensor, recibirás una respuesta similar a la siguiente, que contiene el AppKey que será necesario para agregar el sensor al servidor TTS.
{ "code": "0", "data": { "nodeEui": "2CF7F1212100001B", "deviceCode": "7D497F49D0D05185", "lorawanInformation": { "dev_eui": "2CF7F1212100001B", "app_eui": "8000000000000008", "app_key": "3BF3D4C5744A057E0A1A61F4800EB09B" } }}
Provisionamiento del dispositivo en TTS
Paso 1: En tu cuenta de TTI, ve a la aplicación a la que te gustaría conectar este Nodo
Paso 2: Navega a la sección "Dispositivos finales" en el panel izquierdo
Paso 3: Haz clic en el botón "Agregar dispositivo final"
Paso 4: Completa el formulario de la siguiente manera
Paso 6: Configuración básica:
ID del dispositivo final: ingresa un ID alfanumérico. No se permiten espacios.
AppEUI: 00 00 00 00 00 00 00 00
DevEUI: Sensor Device EUI obtenido en el paso 1
AppKey: Sensor AppKey obtenido en el paso 1
ID del dispositivo final: ingresado a voluntad
Paso 7: Configuración de la capa de red:
Paso 8: Haz clic en el botón crear dispositivo:
2. Creando un Plugin SenseCAP
El Plugin SenseCAP es una función sin servidor que expone una URL de Endpoint HTTP privada optimizada para decodificar la carga JSON de uplink de The Things Stack. Cada vez que se recibe una solicitud HTTP POST en dicha URL, se ejecutará una función de decodificación predefinida.
Para crear tu URL de Endpoint HTTP privada:
Paso 1: En tu cuenta de Ubidots, ve a la pestaña "Dispositivos", haz clic en "Plugins", luego haz clic en el icono "+" para crear un nuevo Plugin. Busca el Plugin TTS y haz clic en él:
Paso 2: Las instrucciones del Plugin aparecerán. Haz clic en el icono "Siguiente", luego revisa los parámetros de entrada:
Token de Ubidots: Selecciona el token de Ubidots que te gustaría usar para este Plugin. Recomendamos crear un nuevo token dedicado solo a este Plugin, en caso de que necesites aumentar su límite de tasa en el futuro.
Paso 3: Termina el proceso y un nuevo plugin aparecerá en la lista de Plugins:
Paso 4: Haz clic en el Plugin SenseCAP recién creado, haz clic en la pestaña "Decoder", y copia la "URL de Endpoint HTTPs". La estructura de la URL es:
https://dataplugin.ubidots.com/api/web-hook/<PLUGIN-ID>
Paso 5: Finalmente, ve a tu cuenta de The Things Stack, haz clic en la Aplicación deseada y luego en "Integraciones" => "Webhooks", luego haz clic en "Agregar webhook" => "Webhook personalizado". Elige un nombre para tu webhook y completa estos campos:
URL base:
https://dataplugin.ubidots.com
Encabezados adicionales: Agrega un encabezado "X-Auth-Token" con un token de Ubidots válido
Mensaje de uplink: Marca esta casilla y ingresa la porción restante de tu URL de endpoint HTTPs del Plugin. Por ejemplo:
/api/web-hook/ki_XL7PPywA3mc5092DCfDC34UQ=
Finalmente, el WebHook debería verse algo así:
3. Editando el tipo de dispositivo del Plugin
Después de crear un Plugin SenseCAP y hacer clic en él, verás una pestaña "Decoder", que contiene una "Función de Decodificación" que puedes editar a tu gusto, para decodificar tus tramas de datos. Por defecto, verás un decodificador de muestra pre-cargado que hace lo siguiente:
Crear variables de RSSI y SNR para cada puerta de enlace que reciba una señal de tu dispositivo.
Crear un contador de tramas y una variable de Puerto.
Si se encuentra, el JSON decoded.payload se enviará tal cual a Ubidots.
Ubidots creará automáticamente un dispositivo cada vez que se reciba una carga de un nuevo dispositivo. Esto te ahorra la necesidad de crear manualmente cientos o miles de dispositivos, o copiar y pegar DevEUI de una plataforma a otra.
Se creará un tipo de dispositivo de Ubidots y se vinculará a este plugin. Esto te permite hacer cambios por lotes a todos los dispositivos que reciben datos a través de este plugin.
El tipo de dispositivo se creará en función del tipo de sensor que hayas creado.
4. Solución de problemas
La mejor manera de probar el plugin es haciendo una solicitud HTTP a la URL del Plugin. Simplemente toma la carga JSON de muestra a continuación y envíala en una solicitud HTTP POST utilizando un cliente HTTP de tu elección (Insomnia o similar). Asegúrate de agregar el encabezado "Content-Type:application/JSON":
Carga JSON de muestra TTS:
{ "@type": "type.googleapis.com/ttn.lorawan.v3.ApplicationUp", "end_device_ids": { "device_id": "z4t-wsnnode01", "application_ids": { "application_id": "ttn-v3-playground" }, "dev_eui": "2CF7F1212100001B", "join_eui": "8000000000000008", "dev_addr": "260CDBE0" }, "correlation_ids": [ "as:up:01F6JFFV0TV120FSXQV2MFY0F2", "gs:conn:01F679083AJCRPD5BXSQ2QNTZW", "gs:up:host:01F679087TR2RJ39Y7M5NT2PCV", "gs:uplink:01F6JFFTT06AA4G8XMNES2JEB8", "ns:uplink:01F6JFFTT1RH44SDJ6W5AVQSSZ", "rpc:/ttn.lorawan.v3.GsNs /HandleUplink:01F6JFFTT11HNAW417MEQ8R7TY", "rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01F6JFFV0TJJ0ET1529CCC0DQP" ], "received_at": "2021-05-25T19:19:41.851389803Z", "uplink_message": { "session_key_id": "AXlYmE6XNV/UxGT5MHQDZA==", "f_port": 2, "f_cnt": 374, "frm_payload": "AQMQKoQYAMlA", "rx_metadata": [ { "gateway_ids": { "gateway_id": "ubidots-hq-rak-7246", "eui": "B827EBFFFE2175FD" }, "timestamp": 3827086667, "rssi": -76, "channel_rssi": -76, "snr": 9, "uplink_token":"CiEKHwoTdWJpZG90cy1ocS1yYWstNzI0NhIIuCfr//4hdf0Qy+ryoA4aDAjNm7WFBhDK 1sutAiD42ZCBsW8=", "channel_index": 1 }, { "gateway_ids": { "gateway_id": "packetbroker" }, "packet_broker": { "message_id": "01F6JFFTXAYP6E8EJY7M176TDY", "forwarder_net_id": "000013", "forwarder_tenant_id": "ttn", "forwarder_cluster_id": "ttn-v2-us-west", "forwarder_gateway_eui": "D4ADBDFFFE9E24B0", "forwarder_gateway_id": "eui-d4adbdfffe9e24b0", "home_network_net_id": "000013", "home_network_tenant_id": "ttn", "home_network_cluster_id": "ttn-nam1", "hops": [ { "received_at": "2021-05-25T19:19:41.738013984Z", "sender_address": "51.143.19.11", "receiver_name": "router-dataplane-64c4b86866-x65r6", "receiver_agent": "pbdataplane/1.6.0-beta.3 go/1.16.4 linux/amd64" }, { "received_at": "2021-05-25T19:19:41.742594635Z", "sender_name": "router-dataplane-64c4b86866-x65r6", "sender_address": "forwarder_uplink", "receiver_name": "router-67c85c5489-7bnpw", "receiver_agent": "pbrouter/1.6.0-beta.3 go/1.16.4 linux/amd64" }, { "received_at": "2021-05-25T19:19:41.744069512Z", "sender_name": "router-67c85c5489-7bnpw", "sender_address": "deliver.000013_ttn_ttn-nam1.uplink", "receiver_name": "router-dataplane-64c4b86866-x65r6", "receiver_agent": "pbdataplane/1.6.0-beta.3 go/1.16.4linux/amd64" } ] }, "rssi": -98, "signal_rssi": -99, "channel_rssi": -98, "snr": 3, "frequency_offset": "-30322", "uplink_token":"eyJnIjoiWlhsS2FHSkhZMmxQYVVwQ1RWUkpORkl3VGs1VE1XTnBURU5LYkdKdFRXbFBh VXBDVFZSSk5GSXdUazVKYVhkcFlWaFphVTlwU2toa2VrNVVaRmRLUldSWFJuaGFNVGxvV G10R1NrbHBkMmxrUjBadVNXcHZhVlJVVW10UFYyUXlWVlYzTUZGcVZsSlNWRUp6Vlc1U1IyRkhSbFZrZVVvNUxuQnFVbU5wVUhoU1gyNUJRMmR6UmtaU1lWaHViR2N1VEZOU2FWcGxTV0ZzZGtWNVFqVm5OeTV5ZEhSaFNXUktVV0Y2YTJ4M01VVTVRbkZFYm04NFh6QTJlWGxEY2tSaVNVUk1hWGxvTVdSd1NqSTNYM2xzV1VoUlZHaGFkazFtWVVobmFqZHBSM1k1YnpsWlZtTkpNSFZ6Ukc0d1JrUkdlakJ5U2tKak0yZFZNR3RzWjJkcWFXaGtVV2hxU2pGMlVGTm1VR1JaUmxWdWNVdElkVlJGY0RCRGVEVnJlRUZmV214V2VHeFNRa2hOYVVaWlkyOW9OazA1VHpkdmVITTFkMEpJZUdKcGVFNVBaRlpyV1RreU5qVTRXbXR1TG5WcFQwcEpRakZET1ZwdFptaDNXblpMVkZVdFoyYz0iLCJhIjp7ImZuaWQiOiIwMDAwMTMiLCJmdGlkIjoidHRuIiwiZmNpZCI6InR0bi12Mi11cy13ZXN0In19" } ], "settings": { "data_rate": { "lora": { "bandwidth": 125000, "spreading_factor": 7 } }, "data_rate_index": 3, "coding_rate": "4/5", "frequency": "904100000", "timestamp": 3827086667 }, "received_at": "2021-05-25T19:19:41.633890100Z", "confirmed": true, "consumed_airtime": "0.056576s", "version_ids": { "brand_id": "sensecap", "model_id": "sensecap-light", "hardware_version": "2.0", "firmware_version": "3.4", "band_id": "US_902_928" } }}
Envía la carga anterior en una solicitud HTTP POST a la URL del Plugin:
Ten en cuenta que la primera vez que se ejecute el Plugin, puede tardar unos segundos en responder. Para verificar los registros del Plugin, ve al Plugin, haz clic en la sección "Registros" y deberías ver una lista de las últimas ejecuciones.
5. Comentarios y sugerencias
No dudes en publicar preguntas o sugerencias en nuestro portal comunitario, o envíanos un correo a support@ubidots.com.
Conoce más sobre otros plugins: