Integración de Ubidots (via Helium)
Este artículo ilustra el proceso de conexión del SenseCAP T1000 Tracker a Ubidots mediante Helium LNS.
Escrito por Juan David Tangarife - Del equipo de Ubidots
Requisitos
- Una cuenta activa en Ubidots
- Un SenseCAP T1000 Tracker
- Una cuenta activa en la consola de Helium con algo de DC
- Un teléfono con soporte para Google Play Store o AppStore, así como Bluetooth
Instalar la app SenseCAP Mate y configurar el tracker
Escanea el siguiente código QR para ir a la página oficial de descarga de la app SenseCAP Mate de Seeed Studio.
Una vez instalada, habilita el Bluetooth en tu teléfono y abre la app. Si no tienes una cuenta, deberás registrarte para usar la aplicación.
Luego, mantén presionado el botón del tracker por al menos 3 segundos hasta que el LED comience a parpadear. Después, desde la lista de dispositivos, selecciona Tracker T1000.
Toca tu dispositivo:
Ve a la pestaña Settings y luego a la pestaña LoRa. Ahí selecciona como platform Helium y el Frequency plan según tus necesidades. Asegúrate de copiar el Device EUI, APP EUI y APP Key, ya que los necesitarás más adelante. Al finalizar, pulsa Send para guardar la configuración.
Registrar el tracker en Helium LNS
Inicia sesión en tu consola de Helium, luego dirígete a la sección Devices y haz clic en Add device.
Completa los campos requeridos como el nombre del dispositivo, las credenciales LoRaWAN, etc. Luego haz clic en Save Device.
Crear la función decodificadora en Helium
El siguiente paso es configurar la función que decodifica los bytes en formato legible. Ve a la pestaña Function en el panel lateral y haz clic en Add New Function. Asigna un nombre:
Seeed Studio proporciona un decodificador específico en el siguiente repositorio. Copia ese código en el campo de texto y guarda los cambios.
Crear la integración con Ubidots
Ve a la sección Integrations, haz clic en Add integration y busca la integración de Ubidots:
Haz clic en +Add integration:
Ingresa tu token de Ubidots en el campo correspondiente y haz clic en Continue. Espera el mensaje de confirmación. Luego nombra tu integración y haz clic en Add Integration.
Después de este paso, se creará un nuevo plugin de Helium en tu cuenta de Ubidots.
Crear el flujo para conectar la integración a Ubidots
Dirígete a la sección Flows y, desde el menú desplegable en la esquina superior izquierda, arrastra el dispositivo, la función decodificadora y la integración al área en blanco. Luego une los nodos como se muestra en el siguiente GIF:
En este ejemplo, tanto el dispositivo como la función se llaman "sensecap-lorawan-tracker", y la integración "send data to ubidots".
Dado que el objeto JSON retornado por el decodificador de Seeed Studio no es compatible con el esquema de Ubidots, se requiere una transformación después de extraer los datos de interés.
Ve a la sección decoder del plugin Helium, elimina todo el código y reemplázalo con el siguiente:
# Establecer en True para habilitar información de hotspot
HOTSPOT_INFO_ENABLE = False
def format_payload(args):
messages = args.get("decoded", {}).get("payload", {}).get("data", {}).get("messages", [])
ubidots_payload = {}
error = assert_error(messages[0][0])
if error is not None:
return error
if HOTSPOT_INFO_ENABLE:
hotspot_info = args.get('hotspots', None)
ubidots_payload['SNR'] = hotspot_info[0].get('snr') if hotspot_info is not None else None
ubidots_payload['RSSI'] = hotspot_info[0].get('rssi') if hotspot_info is not None else None
ubidots_payload["port"] = args.get("port", None)
ubidots_payload['Frame Counter'] = args.get('fcnt', None)
for msg in messages:
for sensor in msg:
message_type = sensor.get("type", None)
value = sensor.get("measurementValue")
if message_type == "Latitude" or message_type == "Longitude":
position = ubidots_payload.setdefault("position", {})
position.update({message_type.lower(): value})
continue
elif message_type == "Timestamp":
ubidots_payload["timestamp"] = value
continue
ubidots_payload[message_type] = value
print(ubidots_payload)
return ubidots_payload
def assert_error(data : dict):
if "error" in data:
return {"ERROR" : { "value" : data["errorCode"], "context" : { "status" : data["error"]}}}
return None
Si todo fue conectado correctamente, deberías ver una nueva interfaz con tu dispositivo creado en Ubidots: