LoRaWAN Custom Decoder

The LoRaWAN Custom Device Decoder allows you to write your own decoder function to process incoming LoRaWAN uplink messages.

Overview

The LoRaWAN Custom Device Decoder allows you to write your own decoder function to process incoming LoRaWAN uplink messages.

This provides flexibility to handle custom payload formats that are not available as pre-built templates.

How It Works

Tips

JavaScript payload formatters allow you to write functions to encode or decode messages. These functions are executed using a JavaScript ECMAScript 5.1 runtime.

  • Avoid non-trivial logic or polyfills; they may not be supported.

  • Use arithmetic operations and bit shifts to convert binary data into readable fields.

  • Keep payload formatters simple and lightweight.

Function Schema

A decoder function processes raw uplink messages and returns a JSON object containing the decoded fields.

function decoder(input) {
  // Your decoding logic here
}

Function Parameters

The decoder function has a single parameter: input. Qubitro automatically provides this parameter, which contains three properties:

  • Metadata: A dynamic object containing metadata from the LNS provider (e.g., RSSI, SNR, timestamp). The structure varies depending on the provider.

  • fPort: The LoRaWAN fPort used for the uplink.

  • Bytes: A byte array representing the raw payload from the uplink message.

Example: Accessing Function Parameters

function decoder(input) {
    var bytes = input.bytes;  // Get the raw payload
    var fPort = input.fPort;  // Get the fPort value
    var metadata = input.metadata; // Get metadata from the LNS provider
    return {};
}

Return Values

For example, if the payload represents temperature, the function can extract and return it as follows:

function decoder(input) {
  const bytes = input.bytes;
  const fPort = input.fPort;
  const metadata = input.metadata;

  // Convert bytes to temperature value
  const temperature = ((bytes[0] << 8) + bytes[1]) / 100;

  return {
    "temperature": temperature,
    "metadata": metadata
  };
}

Creating a Custom Decoder Function

1

Select the Function Type

  1. Open the device details page in the Qubitro Portal.

  2. Click the Functions tab.

  3. Click Create function and select Decoder Function.

  4. Choose LoRaWAN Custom Device as the formatter type.

2

Write the Decoder Code

  1. Enter your custom decoder function in the editor.

  2. Modify the formatter code to match your device’s payload.

3

Save and Apply the Function

  1. Click Save and complete to apply the decoder function.

  2. The function will now process all incoming data for this device automatically.

FAQs

I created the function, but my device data is not decoded correctly. What should I do?

If your function is active but the data is not decoded correctly, check the following:

  • Ensure that the payload format matches your decoder logic.

  • Use the Test feature in the function editor to validate sample data.

  • Check the device logs to see if raw data is being received.

If you need assistance, our team can review your custom formatter code. Open a ticket from the Support Page.

I don’t see my device listed. Can Qubitro help me?

Absolutely! If your device does not appear after setting up the integration, open a support ticket, and our team will assist you in troubleshooting the issue.

Can I use a custom decoder with any LNS provider?

Yes! Qubitro’s LoRaWAN Custom Device Decoder works with any LNS provider, including Loriot, The Things Stack, and ChirpStack. As long as the device sends data, your decoder function will process it.

Can the Qubitro team help me write a custom decoder?

While Qubitro provides flexibility for writing custom decoders, our team can review your formatter code to ensure compatibility and suggest improvements. Feel free to reach out via the Support Page.

Last updated