iPearl Wasserzähler
iPearl Water Meter
Product Datasheet
Device Profile for Tesenso IoT Cloud
Decoder/Payload Converter for Tesenso IoT Cloud
https://github.com/Tesenso-GmbH/Device-Decoder/blob/main/Tesenso_M-Bus_Sensus_Wasser.js
//Code entry
if (msg.data) {
var decoded = decodeFromHex(msg.data.toString().substr(6, msg.data.length));
decoded.ts = msg.ts;
decoded.rssi = msg.rssi;
decoded.snr = msg.snr;
decoded.toa = msg.toa;
decoded.frequency = msg.frequency;
decoded.dr = msg.dr;
decoded.bat = decodeBattery(msg.bat);
decoded.hex = msg.data;
return {
msg: decoded,
metadata: metadata,
msgType: msgType
};
} else {
return {
msg: msg,
metadata: metadata,
msgType: msgType
};
}
function decodeFromHex(data) {
// Decode uplink message
var decoded = {};
//scale to manage the different scales with none, one or more decimals on the meter.
var scale = metadata.ss_scale;
var headerStart1 = data.substr(0,2);
var headerLength1 = data.substr(2,2);
var headerLength2 = data.substr(4,2);
var headerStart2 = data.substr(6,2);
var control = data.substr(8,2);
var address = data.substr(10,2);
var controlInformation = data.substr(12,2);
var identificationNumber = data.substr(14,8);
var manufacturer = data.substr(22,4);
var generationOfMeter = data.substr(26,2);
var medium = data.substr(28,2);
var accessNumber = data.substr(30,2);
var status = data.substr(32,2);
var signature = data.substr(34,4);
// Measurements
var DIF1 = data.substr(38,2);
var VIF1 = data.substr(40,2);
var measurementHex1 = data.substr(48,2) + data.substr(46,2) + data.substr(44,2) + data.substr(42,2);
if (medium == "07" && DIF1 == "04") {
var volume = parseInt(measurementHex1, 16);
var sensus_scale = 1;
switch (VIF1) {
case "13":
sensus_scale = 0.001;
break;
case "14":
sensus_scale = 0.01;
break;
case "15":
sensus_scale = 0.1;
break;
default:
break;
}
decoded.waterMeter = volume * sensus_scale;
}
return decoded;
}
//Helper functions
function decodeBattery(byte) {
if (byte == 0) {
return 'External power source';
} else if (byte > 0 && byte < 255) {
return byte / 254 * 100;
} else {
return 'Unknown battery state';
}
}
Tesenso IoT Cloud Converter Template
Device Labels
in manual
dataKey
dataType
dataFormat
Durchfluss
waterMeter
telemetry
Uplink documentation
sample Uplink message (long message) (input to the decoder)
{
"cmd": "rx",
"seqno": 43316,
"EUI": "10CE45FFFE00AAAF",
"ts": 1661409865191,
"fcnt": 12163,
"port": 12,
"freq": 868100000,
"rssi": -51,
"snr": 9.5,
"toa": 61,
"dr": "SF7 BW125 4/5",
"ack": false,
"bat": 0,
"offline": false,
"data": "3a04006832326808017245384921ae4c68073a300000041380373000023b67004413116f2e00426cc12804933c000000000f3202e0000000006916"
}
sample decoded uplink
{
"msg": {
"waterMeter": 3159.936,
"ts": 1661279572780,
"rssi": -53,
"snr": 10.2,
"toa": 61,
"frequency": 868100000,
"dr": "SF7 BW125 4/5",
"bat": "External power source",
"hex": "3a04006832326808017245384921ae4c68073a300000041380373000023b67004413116f2e00426cc12804933c000000000f3202e0000000006916"
},
"metadata": {
"deviceType": "Sensus Wasserzähler",
"ss_multi_data": "6832326808017245384921ae4c68073a300000041380373000023b67004413116f2e00426cc12804933c000000000f",
"deviceName": "10CE45FFFE00AAAF",
"ts": "1661279572794"
},
"msgType": "POST_TELEMETRY_REQUEST"
}
Downlink documentation
Last updated