Wisely CarbonSense
Device Profile for Tesenso IoT Cloud
Decoder/Payload Converter for Tesenso IoT Cloud
https://github.com/Tesenso-GmbH/Device-Decoder/blob/main/Avelon_Wisely_CarbonSense.js
// V1.0, 02.09.2021, DS
if(msg.data)
{
var decoded = decodeFromHex(msg.data);
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
};
}
//Functions
function decodeFromHex(data) {
// Decode an uplink message from a buffer
// (array) of bytes to an object of fields.
var decoded = {};
var bytes = parseHexString(data);
var a = bytes[1] << 8;
var b = bytes[2];
decoded.barometricPressure = (a|b)*10.0;
var c = bytes[3] << 8;
var d = bytes[4];
decoded.temperature = (c|d)/10.0;
decoded.humidity = bytes[5]/2.0;
return decoded;
}
function getTimestamp(ddmmyy, hhmmss) {
day = parseInt(ddmmyy / 10000, 10);
month = parseInt(ddmmyy / 100 - day * 100, 10);
year = parseInt(ddmmyy - month * 100 - day * 10000 +
2000, 10);
hour = parseInt(hhmmss / 10000, 10);
minute = parseInt(hhmmss / 100 - hour * 100, 10);
second = parseInt(hhmmss - minute * 100 - hour * 10000,
10);
date = new Date(year, month - 1, day, hour, minute,
second)
return date.valueOf();
}
function parseHexString(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16));
}
return bytes;
}
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';
}
}
function parseHexStringToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
}
function parseHexStringToNibbles(hex) {
for (var nibbles = [], c = 0; c < hex.length; c += 1)
nibbles.push(parseInt(hex.substr(c, 1), 16));
return nibbles;
}
function convertToBinary(x) {
var bin = 0;
var rem, i = 1,
step = 1;
while (x != 0) {
rem = x % 2;
x = parseInt(x / 2);
bin = bin + rem * i;
i = i * 10;
}
return bin;
}
function decodeToJson(payload) {
// covert payload to string.
var str = decodeToString(payload);
// parse string to JSON
var data = JSON.parse(str);
return data;
}
function convertToBinaryString(x) {
var bin = "";
var rem, i = 1,
step = 1;
while (x != 0) {
rem = x % 2;
x = parseInt(x / 2);
bin = rem + bin;
i = i * 10;
}
if (bin == "")
{
return "0";
}
else
{
return bin;
}
}
Device Labels
in manual
dataKey
dataType
dataFormat
Luftdruck
barometricPressure
telemetry
integer
Temperatur
temperature
telemetry
integer
Feuchtigkeit
humidity
telemetry
integer
Co2
co2
telemetry
integer
Uplink documentation
sample Uplink message (input to the decoder)
{
"cmd": "gw",
"seqno": 635000,
"EUI": "7C604AFFFE0006B6",
"ts": 1661261569714,
"fcnt": 4347,
"port": 5,
"freq": 867900000,
"toa": 107,
"dr": "SF7 BW125 4/5",
"ack": false,
"gws": [{
"rssi": -62,
"snr": 9.8,
"ts": 1661261569768,
"time": "2022-08-23T14:22:25.991659Z",
"gweui": "000800FFFF4AA78E",
"ant": 0,
"lat": 47.4165437,
"lon": 8.5425527
}, {
"rssi": -95,
"snr": 5.5,
"ts": 1661261569733,
"time": "2022-08-23T15:23:09.538303Z",
"gweui": "000800FFFF4A4CBA",
"ant": 0,
"lat": 47.4071896,
"lon": 8.403396199999975
}, {
"rssi": -117,
"snr": -5,
"ts": 1661261569714,
"time": "2022-08-23T13:32:49.650905Z",
"gweui": "9C65F9FFFF43367E",
"ant": 0,
"lat": 0,
"lon": 0
}],
"bat": 254,
"data": "fe25de00eb59021825de00eb58021125de00ea57020125dd00ea57020125dc00ec57021925dc00ed57022700",
"_id": "6304d701d5633f05dd4bcada"
}
sample decoded uplink
{
"msg": {
"barometricPressure": 96940,
"temperature": 23.5,
"humidity": 44.5,
"co2": 536,
"absoluteHumidity": 8.378970567096994,
"ts": 1660999112051,
"rssi": -61,
"dr": "SF7 BW125 4/5",
"bat": 95.2755905511811,
"hex": "fe25de00eb59021825de00eb58021125de00ea57020125dd00ea57020125dc00ec57021925dc00ed57022700"
},
"metadata": {
"deviceType": "default",
"deviceName": "Test Device",
"ts": "1661264573420"
},
"msgType": "POST_TELEMETRY_REQUEST"
}
Downlink documentation
Downlink Port: 10
Zähler für zyklische Übertragung
Das Gerät überträgt seine Daten nach Zähler für zyklische Übertragung × Sensor-Abtastzeit ab der letzten Übertragung.
Downlink-Meldung
ID
FUNC
CTC
Feld
Beschreibung
Wert
ID
Bezeichner
0xFF
FUNC
Funktionscode
0xF0
CTC
Zähler für zyklische Übertragung
0x01 - 0xFF
Standardeinstellung
Der Standardwert des Zählers für zyklische Übertragung ist 0x3C (= 60).
change sendintervall to every 10min:
FFF00A
Docs: https://avelon.cloud/docs/de/appendix/wisely-payload.html#wisely-carbonsense
Last updated