F98W6

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.
F98W6 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:
interface UplinkInput {
fPort: number // LoRaWAN FPort
bytes: number[] // Raw payload as array of unsigned bytes (0-255)
recvTime?: string // Optional ISO timestamp (if your LNS provides it)
}
interface HexUplinkInput {
fPort: number // LoRaWAN FPort
bytes: string // Raw payload as hex-encoded string (case-insensitive, even length)
recvTime?: string // Optional ISO timestamp (if your LNS provides it)
}Return type (shared by all decode helpers):
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:
// Is used in the returned data
type ChannelName = 'strain' | 'device temperature' | 'battery voltage'Channels that support adjusting the measurement range:
type AdjustableChannelName = 'strain'Channel Configuration:
| Channel Name | Default Min | Default Max | Unit | Configurable |
|---|---|---|---|---|
strain | -312.5 | 312.5 | µε | Yes |
device temperature | -45 | 110 | °C | No |
battery voltage | 0 | 5 | V | No |
decodeUplink(input)
function decodeUplink(input: UplinkInput): ResultdecodeHexUplink(hexInput)
function decodeHexUplink(hexInput: HexUplinkInput): Resultbytes must have even length; case-insensitive.
adjustMeasuringRange(channel, range)
// Will throw on invalid channel name or if the channel disallows range updates
function adjustMeasuringRange(
channelName: AdjustableChannelName,
range: {
start: number
end: number
}
): voidApplies to future decodes only.
adjustRoundingDecimals(decimals)
// Smartly adjust number of decimals for rounded values
// Impacts all numeric values in all outputs
// Default is 4
function adjustRoundingDecimals(decimals: number): voidApplies to future decodes only.
Verifying Measurement Ranges
Strain 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 strain range.
Device temperature and battery voltage: These channels have fixed ranges that cannot be adjusted (-45 to 110°C and 0-5V respectively).
TULIP2 Identification Frames
Identification messages (message type 6/0x06) confirm the configured ranges:
Example TULIP2 identification frame:
{
"data": {
"messageType": 6,
"configurationId": 1,
"productIdName": "F98W6",
"channels": [
{
"channelId": 0,
"channelName": "strain",
"measurementRangeStart": -312.5,
"measurementRangeEnd": 312.5
},
{
"channelId": 1,
"channelName": "device temperature"
},
{
"channelId": 2,
"channelName": "battery voltage"
}
]
}
}Quick Start
- Check your device's actual strain range from device specifications or identification frames (see above)
- Add configuration code below at the bottom of your parser file
- Add wrapper function if your network server is non-compliant:
function decode(input) { return decodeUplink(input) }
Configuration code (add at bottom of parser file):
// Replace values with your device's actual strain range from specifications or identification frames
adjustMeasuringRange('strain', { start: -312.5, end: 312.5 })NPM Module Inclusion
| Device | Included | Factory function |
|---|---|---|
| F98W6 | ❌ | ❌ |
