Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

µWiotys already supported numerous references of LoRaWAN devices on the market but in case your device is still not supported, you can create your own product in the catalog and its proper decoder.

Go to the Product Catalog menu and click on “Add Product Catalog“

image-20241218-132437.pngimage-20250114-105033.png

Click the “Select device-profile template” and choose CUSTOM-uWiotys profile.

image-20250114-104955.png

Then update the name and the description of your sensor:

image-20241218-133133.png

Finally you can use your codec in the codec tab

image-20241218-133301.png

Decoding data must me output in a json format. Data are stored in registers. For modbus, these registers are stored at the address defined at Custom registers

Advices for developing your codec:

Your codec must follow several rules so it can be compatible with uwiotys.

The sample code is here and provide a default implementation.

We advice to test your codec with a NodeJS application (https://onecompiler.com/nodejs).

// Decode uplink function.
//
// !!! IMPORTANT !!!
// MAKE SURE THE "Tags" OPTION OF YOUR PRODUCT IS SET TO:
//  key : "reference" ------ value : "CUSTOM"
// PLEASE LOOK AT UWIOTYS DOCUMENTATION FOR MORE INFORMATION
//
// Input is an object with the following fields:
// - bytes = Byte array containing the uplink payload, e.g. [255, 230, 255, 0]
// - fPort = Uplink fPort.
// - recvTime = Uplink message timestamp as Date object.
// - variables = Object containing the configured device variables.
//
// Output must be an object with the following fields so it can be compatible
// with uWiotys:
// Output values must be put in different registers. Possible values are:
// - reg_u16_0 to reg_u16_15 : default modbus register for unsigned values (2 bytes)
// - reg_i16_0 to reg_i16_15 : default modbus register for signed values (2 bytes)
// - reg_u32_0 to reg_u32_15 : modbus register for long unsigned values (4 bytes)
// - reg_i32_0 to reg_i32_15 : modbus register for long signed values (4 bytes)
// - reg_f32_0 to reg_f32_15 : modbus register for long float signed values (4 bytes)
//



// - In this simple exemple, the sensor send a frame with temperature and humidity values
// Temperature value is put in reg_u16_0 and humidity in reg_u16_1
function decodeUplink(input) {

  var byte = input.bytes;
  var temperature = ((byte[0] << 24) | (byte[1] << 16) | (byte[2] << 8) | (byte[3])).toString();
  var humidity = ((byte[4] << 8) | (byte[5])).toString();


  return {
    data: {
      reg_u32_0:temperature,
      reg_u16_1:humidity
      }
  };
}

// Encode downlink function.
//
// Input is an object with the following fields:
// - data = Object representing the payload that must be encoded.
// - variables = Object containing the configured device variables.
//
// Output must be an object with the following fields:
// - bytes = Byte array containing the downlink payload.
function encodeDownlink(input) {
  return {
    bytes: [225, 230, 255, 0]
  };
}


//NEXT LINES ARE USED TO TEST YOUR CODEC WITH AN EXTERNAL APPLICATION.
//DO NOT INCLUDE THESE LINES WHEN YOU WILL IMPORT THE CODEC ON UWIOTYS


// Convert a hex string to a byte array
function hexToBytes(hex) {
    let bytes = [];
    for (let c = 0; c < hex.length; c += 2)
        bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
}
/*
data="0000000A0022"
var data_in = {};
data_in.bytes = hexToBytes(data);
decoded = decodeUplink(data_in);

console.log(JSON.stringify(decoded, null, 4));
*/

Output:

{
    "data": {
        "reg_u32_0": "10",
        "reg_u16_1": "34"
    }
}

  • No labels