Configuración de la integración

Para configurar la integración de los servicios de ChirpStack con ThingsBoard, es necesario realizar los siguientes pasos:

  1. Configurar un decodificador para el perfil de dispositivo.

  2. Configurar la integración de la aplicación con ThingsBoard.

  3. Crear un dispositivo en ThingsBoard para alojar la información procedente de ChirpStack.

  4. 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:

Configuración de códec
Figure 1. Configuración de decodificador en perfil de dispositivo (parte 1)
  1. Hacer clic en Device profiles en la barra lateral.

  2. Hacer clic en el dispositivo al cual se desea añadir el decodificador.

    Configuración de códec
    Figure 2. Configuración de decodificador en perfil de dispositivo (parte 2)
  3. Seleccionar la pestaña Codec.

  4. En el menú desplegable seleccionar Custom Javascrip codec functions, el cual permite ingresar un decodificador y codificador personalizados.

  5. Ingresar el decodificador. En este caso, para el demo que se está empleando, se emplea el siguiente decodificador:

    Decodificador para demo
    function 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};
    }
  6. 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.

Verificación de decodificación
Figure 3. Verificación de decodificación

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:

Configuración integración
Figure 4. Configuración de integración (parte 1)
  1. Hacer clic en Applications en la barra lateral.

  2. Ingresar a la aplicación donde se encuentra el dispositivo haciendo clic sobre su nombre.

    Configuración integración
    Figure 5. Configuración de integración (parte 2)
  3. Hacer clic en la pestaña Integrations.

  4. Desplazarse a la parte inferior de la lista y seleccionar ThingsBoard haciendo clic en Add.

    Configuración integración
    Figure 6. Configuración de integración (parte 3)
  5. 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
  6. 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:

Creación dispositivo ThingsBoard
Figure 7. Creación de dispositivo en ThingsBoard (parte 1)
  1. Una vez iniciado sesión como Propietario o tenant se hace clic en el menú Dispositivos en la barra lateral izquierda.

  2. Se hace clic en el signo de + para agregar un dispositivo. En el menú se selecciona Agregar nuevo dispositivo.

    Creación dispositivo ThingsBoard
    Figure 8. Creación de dispositivo en ThingsBoard (parte 2)
  3. Ingresar el nombre del dispositivo. En este caso se puede ingresar el mismo nombre que en ChirpStack, aunque no es obligatorio.

  4. Hacer clic en el botón Next: Credentials, para añadir las credenciales del dispositivo.

    Creación dispositivo ThingsBoard
    Figure 9. Creación de dispositivo en ThingsBoard (parte 3)
  5. En la sección de credenciales, seleccionar la casilla Add credential.

  6. Seleccionar Access Token como tipo de credencial. Por defecto, aparece seleccionado.

  7. Ingresar un token o autogenerarlo.

  8. 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.

Creación dispositivo ThingsBoard
Figure 10. Verificación de dispositivo creado

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.

Creación dispositivo ThingsBoard
Figure 11. Verificación de credenciales

Configurar dispositivo en ChirpStack

Una vez configurado el dispositivo en ThingsBoard se puede asociar con ChirpStack. Para ello se siguen los siguientes pasos:

Configurar token
Figure 12. Configurar token en ChirpStack (parte 1)
  1. Hacer clic en Applications para ingresar al dispositivo que se desea configurar.

  2. Se selecciona el nombre de la aplicación donde se encuentra el dispositivo.

    Configurar token
    Figure 13. Configurar token en ChirpStack (parte 2)
  3. Se selecciona el dispositivo que se desea asociar al dispositivo en ThingsBoard.

    Configurar token
    Figure 14. Configurar token en ChirpStack (parte 3)
  4. Seleccionar la pestaña Configuration.

  5. Dentro del dispositivo seleccionar la pestaña Variables.

  6. Ingresar como nombre de variable ThingsBoardAccessToken. Esta variable debe tener este nombre para ser reconocido por la integración con ThingsBoard.

  7. Ingresar el access token configurado en ThingsBoard como valor de la variable.

  8. 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:

Verificación de integración
Figure 15. Verificación de la integración en ThingsBoard (parte 1)
  1. Hacer clic en Dispositivos.

  2. Hacer clic en el dispositivo asociado a ChirpStack.

  3. En la ventana que aparece seleccionar la pestaña Atributos. Allí se puede apreciar los metadatos enviados por ChirpStack.

    Verificación de integración
    Figure 16. Verificación de la integración en ThingsBoard (parte 2)
  4. Seleccionar la pestaña Telemetría. Allí se puede apreciar los datos enviados por el dispositivo y que ha sido decodificado por ChirpStack.