Sensor
function decodeBytesMeasurement(bytes) { var data = {}; data.tempOffBoard = new Int16Array([bytes[0] << 8 | bytes[1]])[0] / 100; data.waterPotOffBoard = ((bytes[2] << 8) | bytes[3]) / -100; data.batteryCharge = (bytes[4]); var year = Math.floor((bytes[5] << 8 | bytes[6]) / 100) + 2000; var month = parseInt((bytes[5] << 8 | bytes[6]).toString().substring(2, 4))-1; if ((bytes[5] << 8 | bytes[6]) < 12) { month = "1"; } var day = Math.floor((bytes[7] << 8 | bytes[8]) / 100); var hour = (bytes[7] << 8 | bytes[8] ) - day * 100; var minute = Math.floor((bytes[9] << 8 | bytes[10]) / 100); var second = (bytes[9] << 8 | bytes[10]) - minute * 100; var ts = Math.floor(new Date(Date.UTC(year, month, day, hour, minute, second)).getTime()); data.lat = ((bytes[11] << 24 | bytes[12] << 16 | bytes[13] << 8 | bytes[14]) / 100000); data.long = ((bytes[15] << 24 | bytes[16] << 16 | bytes[17] << 8 | bytes[18]) / 100000); data.firmware = parseFloat(bytes[19] + '.' + bytes[20]); if (bytes.length >= 26) { data.tempOnBoard = new Int16Array([bytes[21] << 8 | bytes[22]])[0] / 100; data.airPressOnBoard = (bytes[23] << 8 | bytes[24]) data.humidityOnBoard = bytes[25]; } else { data.tempOnBoard = 0.0; data.airPressOnBoard = 0.0; data.humidityOnBoard = 0.0; } if (bytes.length >= 30) { data.resistance = (bytes[26] << 24 | bytes[27] << 16 | bytes[28] << 8 | bytes[29]); } else { data.resistance = 0.0; } return { "ts": ts, "values": data }; } function decodeUplink(input) { switch (input.fPort) { case 152: var decoded = decodeBytesMeasurement(input.bytes); return { // Decoded data data: { time_stamp: decoded.ts, soil_temperature: decoded.values.tempOffBoard, soil_moisture: decoded.values.waterPotOffBoard, soil_resistance: decoded.values.resistance, ambient_temperature: decoded.values.tempOnBoard, ambient_humidity: decoded.values.humidityOnBoard, ambient_pressure: decoded.values.airPressOnBoard, latitude: decoded.values.lat, longitude: decoded.values.long, battery: decoded.values.batteryCharge }, }; default: return { errors: ['unknown FPort'], }; } }
This codec is sourced from The Things Network. All rights belong to The Things Network.
This codec is licensed under the GNU General Public License v3 (GPL v3). Modifications, if any, are clearly marked. You are free to use, modify, and distribute the codec under the terms of GPL v3.