Skip to content

NETRIS_F ​

NETRIS_F

Description of the device ​

Strain transducers have been designed for applications in which there is a need to measure the deformation due to external forces acting on existing components. The transducer is simply screwed to the component. After the adjustment, the unit has the features of a force transducer. The strain transducer is fastened with four screws to an area of the structure where the relevant strain occurs. Combined strain transducers can be connected directly to a junction box that contains an amplifier for system control.


For more information see product site.

NETRIS_F Parser Quick Start ​

Parser API ​

All functions are pure (no global mutation) except adjustMeasuringRange which updates internal range configuration for subsequent decodes.

Types: ​

Input types:

ts
interface UplinkInput {
  bytes: number[] // Raw payload as array of unsigned bytes (0-255)
  fPort: number // LoRaWAN FPort
  recvTime: Date
}

interface HexUplinkInput {
  bytes: string // Raw payload as hex-encoded string (case-insensitive, even length)
  fPort: number // LoRaWAN FPort
  recvTime: Date
}

Return type (shared by all decode helpers):

ts
type Result = {
  data: Record<string, any> // Parsed key/value pairs
  warnings?: string[] // Non-fatal anomalies
} | {
  errors: string[] // Fatal or structural issues only
}

To understand the data field, take a look at the examples and the schema definition.

Supported channels to identify different sensors by:

ts
type ChannelName = 'measurement' | 'device temperature'

Channels that support adjusting the measurement range:

ts
type AdjustableChannelName = 'measurement'

Important note: NETRIS_F TULIP2 delivers battery voltage as part of the decoded measurement output, but that does not make it a real formal parser channel.

  • Only measurement and device temperature are formal parser channels
  • In TULIP2, battery voltage is delivered as measurement telemetry in decoded uplink output
  • That battery voltage value is still not a real configurable or adjustable channel
  • Battery voltage is not a configurable channel and must not appear as a channel2 configuration target
  • adjustMeasuringRange('measurement', ...) only applies to the real configurable measurement channel

Channel Configuration:

Channel NameDefault MinDefault MaxUnitConfigurable
measurement-312.5312.5µεYes
device temperature-45110°CNo
ts
function decodeUplink(input: UplinkInput): Result
ts
function decodeHexUplink(hexInput: HexUplinkInput): Result

bytes must have even length; case-insensitive.

adjustMeasuringRange(channel, range) ​

ts
// Will throw on invalid channel name or if the channel disallows range updates
function adjustMeasuringRange(
  channelName: AdjustableChannelName,
  range: {
    start: number
    end: number
  }
): void

Applies to future decodes only.

adjustRoundingDecimals(decimals) ​

ts
// Smartly adjust number of decimals for rounded values
// Impacts all numeric values in all outputs
// Default is 4
function adjustRoundingDecimals(decimals: number): void

Applies to future decodes only.

Verifying Measurement Ranges ​

Strain/force/mass channel: The default range (-312.5 to 312.5) may not match your device. Check your device specifications or purchase documentation for the actual configured range and engineering unit.

Device temperature: This channel has a fixed range that cannot be adjusted (-45 to 110°C).

Battery voltage: In TULIP2, this is delivered in decoded measurement output, but it is still not part of the formal parser channel configuration.

TULIP3 Identification Frames ​

For devices using TULIP3 protocol, identification messages (message type 20/0x14, subtype 1/0x01) report the actual configured channel unit and range.

Example TULIP3 identification frame:

json
{
  "data": {
    "messageType": 20,
    "messageSubType": 1,
    "identification": {
      "sensor1": {
        "channel1": {
          "measurand": "Strain",
          "unit": "µeps",
          "minMeasureRange": -312.5,
          "maxMeasureRange": 312.5,
          "channelName": "measurement"
        }
      }
    }
  }
}

TULIP2 Identification Frames ​

Identification messages (message type 7/0x07) confirm the configured ranges:

Example TULIP2 identification frame:

json
{
  "data": {
    "messageType": 7,
    "configurationId": 65,
    "deviceInformation": {
      "productIdName": "NETRIS_F",
      "measurementType": "relative",
      "measurementRangeStart": -312.5,
      "measurementRangeEnd": 312.5,
      "measurementRangeStartDeviceTemperature": -45.0,
      "measurementRangeEndDeviceTemperature": 110.0,
      "measurementUnit": 185,
      "unitName": "µeps",
      "deviceTemperatureUnit": 32,
      "deviceTemperatureUnitName": "°C"
    }
  }
}

Quick Start ​

  1. Check your device's actual measurement range from device specifications or identification frames (see above)
  2. If your LNS (LoRaWAN Network Server) is compatible you need to wrap the code in a global function:
javascript
function decodeUplink(input) {
  // Replace the placeholder with the corresponding code from the artifact
  var __commonJSMin=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports)

  // Replace values with your device's actual measurement range from specifications or identification frames
  adjustMeasuringRange('measurement', { start: -312.5, end: 312.5 })

  return decodeUplink(input)
}

function encodeDonwlink(input) {
  // Replace the placeholder with the corresponding code from the artifact
  var __commonJSMin=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports)

  // Replace values with your device's actual measurement range from specifications or identification frames
  return encodeDonwlink(input)
}
  1. Add wrapper function if your network server is non-compliant: function decode(input) { return decodeUplink(input) }

NPM Module Inclusion ​

DeviceIncludedFactory function
NETRIS_F (prev. F98W6)✔️NetrisFParser