Skip to main content
All CollectionsConnect your Devices
Connect Seeed Studio SenseCAP T1000-x LoRaWAN tracker to Ubidots[Helium LNS]
Connect Seeed Studio SenseCAP T1000-x LoRaWAN tracker to Ubidots[Helium LNS]

This article will illustrate the process of connecting the T1000-x tracker to Ubidots through Helium LNS

Sergio M avatar
Written by Sergio M
Updated over a week ago


  • An Ubidots active account

  • An active account in the Helium console with some DC

  • An cellphone supporting either Google Play Store or AppStore as well as Bluetooth.

1. Install SenseCAP Mate app and configure the tracker

Scan the following QR code. It will take you to Seeed Studio's SenseCAP Mate app official download page.

Once it is installed, enable the Bluetooth on your cellphone and launch the app. If you don't have an account already, you will have to register to use the app.

After that, press and hold the tracker's button for at least 3 seconds or until the LED starts flashing. Then, from the list of devices, select Tracker T1000

Tap on your device:

Go to the settings tab and then LoRa tab. There select as platform Helium and select the Frequency plan according to your requirements, also, make sure to copy the Device EUI, APP EUI and APP Key for you are going to need it in later steps. Once finished, tap the Send button to save the settings.

2. Register the tracker on Helium LNS

Log into your Helium console, then, go to “Devices” section and click on “Add device” button

Fill the required fields such as the device name, the LoRaWAN credentials, etc. Then click the Save Device button.

3. Create the decoder function on Helium

The next step is to setup the function that will decode the raw bytes into a human readable form. Head to Function tab on the panel at the left side. Then click the Add New Function button and give it a name:

Seeed Studio provides a decoder specifically for this device on the following repository. Paste that decoder on the text field and then save the changes.

4. Create the integration to Ubidots

Go to the Integrations section, then click on Add integration and search for the Ubidots integration:

Click on +Add integration

Enter your Ubidots token in the respective field, then click on the Continue button and wait for the confirmation pop-up message. After that, name your integration and click the Add Integration button:

After performing this step, a new Helium plugin will be created on your Ubidots account.

5. Create the flow to connect the integration to Ubidots

Head to the Flows section, then, from the drop-down menu at the top left corner, drag and drop the device, the decoder function and the integration into the blank area, then join the dots together as the GIF below shows:

In this example, both the device and the decoder function are called "sensecap-lorawan-tracker", and the integration is called "send data to ubidots".

6. Create an Ubidots compatible JSON and visualizing the data

Since the JSON object returned by Seeed Studio's decoder is not compatible with the Ubidots schema, a transformation is needed after extracting the data of interest.
Head to the decoder section of your Helium plugin, delete all the code there and replace it with the following one:

#Set to true in order to enable hotspot information

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

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})
elif message_type == "Timestamp":
ubidots_payload["timestamp"] = value
ubidots_payload[message_type] = value

return ubidots_payload

def assert_error(data : dict):
if "error" in data:
return {"ERROR" : { "value" : data["errorCode"], "context" : { "status" : data["error"]}}}
return None

If everything got wired up correctly, you should be seeing this on a newly created device on Ubidots

Did this answer your question?