WS51x
Product Datasheet
Device Profile for Tesenso IoT Cloud
Decoder/Payload Converter for Tesenso IoT Cloud
https://github.com/Tesenso-GmbH/Device-Decoder/blob/main/Milesight_WS513EU.js
// Check if msg exists and has the required properties
if (msg && msg.data && msg.port === 85) {
var decoded = {};
var bytes = parseHexString(msg.data);
for (var i = 0; i < bytes.length; ) {
var channel_id = bytes[i++];
var channel_type = bytes[i++];
// VOLTAGE
if (channel_id === 0x03 && channel_type === 0x74) {
decoded.voltage = readUInt16LE(bytes.slice(i, i + 2)) / 10;
i += 2;
}
// ACTIVE POWER
else if (channel_id === 0x04 && channel_type === 0x80) {
decoded.power = readUInt32LE(bytes.slice(i, i + 4)) / 1000; // Adjusted unit
i += 4;
}
// POWER FACTOR
else if (channel_id === 0x05 && channel_type === 0x81) {
decoded.factor = bytes[i];
i += 1;
}
// POWER CONSUMPTION
else if (channel_id === 0x06 && channel_type == 0x83) {
decoded.electricityMeterEnergy = readUInt32LE(bytes.slice(i, i + 4)) / 1000; // Adjusted unit
i += 4;
}
// CURRENT
else if (channel_id === 0x07 && channel_type == 0xc9) {
decoded.current = readUInt16LE(bytes.slice(i, i + 2)) / 1000; // Adjusted unit
i += 2;
}
// STATE
else if (channel_id === 0x08 && channel_type == 0x70) {
decoded.state = bytes[i] === 1 ? true : false;
i += 1;
} else {
break;
}
}
return {
msg: {
current: decoded.current,
factor: decoded.factor,
power: decoded.power,
electricityMeterEnergy: decoded.electricityMeterEnergy,
voltage: decoded.voltage,
state: decoded.state,
ts: msg.ts,
data: msg.data,
rssi: msg.rssi
},
metadata: {
deviceType: 'Milesight WS513EU',
deviceName: '24E124762D217868',
ts: msg.ts.toString(),
},
msgType: 'POST_TELEMETRY_REQUEST',
};
}
// Return null if required properties are not present
return null;
// Function to parse hex string into an array of integers
function parseHexString(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16));
}
return bytes;
}
// Function to read 16-bit unsigned little-endian integer from bytes
function readUInt16LE(bytes) {
var value = (bytes[1] << 8) + bytes[0];
return value & 0xffff;
}
// Function to read 32-bit unsigned little-endian integer from bytes
function readUInt32LE(bytes) {
var value = (bytes[3] << 24) + (bytes[2] << 16) + (bytes[1] << 8) + bytes[0];
return (value & 0xffffffff) >>> 0;
}
Device Labels
in manual
dataKey
dataType
dataFormat
Total Current
current
telemetry
float
data
telemetry
string
Power consumption
electricityMeterEnergy
telemetry
float
Power Factor
factor
telemetry
float
Active Power
power
telemetry
float
rssi
telemetry
float
state
telemetry
float
Voltage
voltage
telemetry
float
Uplink documentation
See user guide
Downlink documentation
See user guide
Last updated