Configuración de la integración
Para configurar la integración de los servicios de ChirpStack con ThingsBoard, es necesario realizar los siguientes pasos:
-
Configurar un decodificador para el perfil de dispositivo.
-
Configurar la integración de la aplicación con ThingsBoard.
-
Crear un dispositivo en ThingsBoard para alojar la información procedente de ChirpStack.
-
Asociar dispositivo de ChirpStack con dispositivo de ThingsBoard.
Configuración de decodificador
Para que se pueda enviar los datos de la aplicación hacia ThingsBoard es necesario que el perfil del dispositivo tenga un decodificador que realice la interpretación del payload procedente del dispositivo y lo convierta en un objeto que pueda ser enviado hacia ThingsBoard.
Para añadir un códec al perfil de dispositivo, se realizan los siguientes pasos:
-
Hacer clic en
Device profiles
en la barra lateral. -
Hacer clic en el dispositivo al cual se desea añadir el decodificador.
Figure 2. Configuración de decodificador en perfil de dispositivo (parte 2) -
Seleccionar la pestaña
Codec
. -
En el menú desplegable seleccionar
Custom Javascrip codec functions
, el cual permite ingresar un decodificador y codificador personalizados. -
Ingresar el decodificador. En este caso, para el demo que se está empleando, se emplea el siguiente decodificador:
Decodificador para demofunction apply_data_type(bytes, data_type) { output = 0; if (data_type === "unsigned") { for (var i = bytes.length-1; i >=0; i--) { output = (to_uint(output << 8)) | bytes[i]; } return output; } if (data_type === "signed") { for (var j = bytes.length-1; j >=0; j--) { output = (output << 8) | bytes[j]; } // Convert to signed, based on value size if (output > Math.pow(2, 8*bytes.length-1)) output -= Math.pow(2, 8*bytes.length); return output; } //https://www.thethingsnetwork.org/forum/t/decode-float-sent-by-lopy-as-node/8757/2 if (data_type === "float") { 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 output = sign * m * Math.pow(2, e - 150); return output; } // Incorrect data type return null; } //https://stackoverflow.com/a/4081228 function to_uint(x) { return x >>> 0; } // Decode decodes an array of bytes into an object. // - fPort contains the LoRaWAN fPort number // - bytes is an array of bytes, e.g. [225, 230, 255, 0] // - variables contains the device variables e.g. {"calibration": "3.5"} (both the key / value are of type string) // The function must return an object, e.g. {"temperature": 22.5} function Decode(fPort, bytes, variables) { var myvalues = {}; myvalues["id"] = apply_data_type(bytes.slice(0,1),"signed"); myvalues["counter"] = apply_data_type(bytes.slice(1,3),"signed"); myvalues["bat"] = apply_data_type(bytes.slice(3,5),"signed"); myvalues["temp"] = apply_data_type(bytes.slice(5,7),"signed"); myvalues["hum"] = apply_data_type(bytes.slice(7,9),"signed"); myvalues["gnss"] = {}; myvalues["gnss"]["latitude"] = apply_data_type(bytes.slice(9,13),"float"); myvalues["gnss"]["longitude"] = apply_data_type(bytes.slice(13,17),"float"); myvalues["gnss"]["altitude"] = apply_data_type(bytes.slice(17,19),"signed"); return {length:bytes.length,data:myvalues}; }
-
Hacer clic en
Update device profile
para actualizar la información del perfil de dispositivo.
Para verificar que el decodificador está funcionando correctamente, se puede
visitar los datos del dispositivo, ingresando a l menú Applications
de la
barra lateral, luego seleccionando la aplicación y el dispositivo
correspondiente y finalmente en la pestaña Device Data
, verificar que en la
información recibida exista un elemento denominado objectJSON
. Allí es donde
se debe verificar los datos recibidos los cuales deben haberse decodificado
correctamente.
Configuración de integración en ChirpStack
Una vez que se ha configurado el decodificador se puede configurar la integración con la plataforma ThingsBoard desde la aplicación en ChirpStack. Para ello se debe indicar a ChirpStack en su lista de integraciones, que utilice la integración con ThingsBoard y especificar la dirección de la aplicación.
Esto se consigue realizando los siguientes pasos:
-
Hacer clic en
Applications
en la barra lateral. -
Ingresar a la aplicación donde se encuentra el dispositivo haciendo clic sobre su nombre.
Figure 5. Configuración de integración (parte 2) -
Hacer clic en la pestaña
Integrations
. -
Desplazarse a la parte inferior de la lista y seleccionar ThingsBoard haciendo clic en
Add
.Figure 6. Configuración de integración (parte 3) -
Ingresar la dirección del servidor de ThingsBoard, en este caso, como se está empleando la misma red de docker para el contenedor donde se encuentra el servidor de aplicación de ChirpStack y el de ThingsBoard, entonces se puede emplear el nombre de servicio, en este caso:
http://mytb:9090
-
Finalmente, se hace clic en
Update Integration
.
Añadir dispositivo en ThingsBoard
Para establecer una asociación del dispositivo en ChirpStack con uno en ThingsBoard, es necesario primero crear el dispositivo en ThingsBoard. Para ello se siguen los siguientes pasos:
-
Una vez iniciado sesión como Propietario o tenant se hace clic en el menú
Dispositivos
en la barra lateral izquierda. -
Se hace clic en el signo de + para agregar un dispositivo. En el menú se selecciona
Agregar nuevo dispositivo
.Figure 8. Creación de dispositivo en ThingsBoard (parte 2) -
Ingresar el nombre del dispositivo. En este caso se puede ingresar el mismo nombre que en ChirpStack, aunque no es obligatorio.
-
Hacer clic en el botón
Next: Credentials
, para añadir las credenciales del dispositivo.Figure 9. Creación de dispositivo en ThingsBoard (parte 3) -
En la sección de credenciales, seleccionar la casilla
Add credential
. -
Seleccionar
Access Token
como tipo de credencial. Por defecto, aparece seleccionado. -
Ingresar un token o autogenerarlo.
-
Hacer clic en
Agregar
para terminar de agregar el dispositivo.
Se puede verificar que el dispositivo está creado al momento de salir de la ventana de configuración y este debe aparecer al comienzo de la lista de dispositivos.
En caso de olvidar las credenciales de acceso o necesitar cambiarlas, se puede hacer clic en el ícono con forma de escudo en la parte derecha de la entrada del dispositivo y con ello debe mostrarse en una ventana sus credenciales actuales.
Configurar dispositivo en ChirpStack
Una vez configurado el dispositivo en ThingsBoard se puede asociar con ChirpStack. Para ello se siguen los siguientes pasos:
-
Hacer clic en
Applications
para ingresar al dispositivo que se desea configurar. -
Se selecciona el nombre de la aplicación donde se encuentra el dispositivo.
Figure 13. Configurar token en ChirpStack (parte 2) -
Se selecciona el dispositivo que se desea asociar al dispositivo en ThingsBoard.
Figure 14. Configurar token en ChirpStack (parte 3) -
Seleccionar la pestaña
Configuration
. -
Dentro del dispositivo seleccionar la pestaña
Variables
. -
Ingresar como nombre de variable
ThingsBoardAccessToken
. Esta variable debe tener este nombre para ser reconocido por la integración con ThingsBoard. -
Ingresar el access token configurado en ThingsBoard como valor de la variable.
-
Hacer clic en
Update device
para cada actualizar la información del dispositivo.
Para verificar que la integración se ha realizado correctamente, se pueden efectuar los siguientes pasos:
-
Hacer clic en
Dispositivos
. -
Hacer clic en el dispositivo asociado a ChirpStack.
-
En la ventana que aparece seleccionar la pestaña
Atributos
. Allí se puede apreciar los metadatos enviados por ChirpStack.Figure 16. Verificación de la integración en ThingsBoard (parte 2) -
Seleccionar la pestaña
Telemetría
. Allí se puede apreciar los datos enviados por el dispositivo y que ha sido decodificado por ChirpStack.