Page cover image

AM102L

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_AM102L.js
// Check if msg exists and has the required properties
if (msg && msg.data !== undefined && msg.port === 85) {
    var data = msg.data;

    // Extracting bytes from the data
    var bytes = [];
    for (var i = 0; i < data.length; i += 2) {
        bytes.push(parseInt(data.substr(i, 2), 16));
    }

    var decoded = {};

    // Iterate over the bytes to decode each channel
    for (var i = 0; i < bytes.length; ) {
        var channelId = bytes[i++];
        var channelType = bytes[i++];

        // BATTERY
        if (channelId === 0x01 && channelType === 0x75) {
            decoded.battery = bytes[i++];
        }
        // TEMPERATURE
        else if (channelId === 0x03 && channelType === 0x67) {
            decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10; // Convert to Celsius
            i += 2;
        }
        // HUMIDITY
        else if (channelId === 0x04 && channelType === 0x68) {
            decoded.humidity = bytes[i++] / 2; // Convert to %
        }
        // Add other channel types as needed
        else {
            // If unknown channel type, move to the next channel
            i++;
        }
    }

    return {
        msg: {
            battery: decoded.battery !== undefined ? decoded.battery : null,
            temperature: decoded.temperature !== undefined ? decoded.temperature : null,
            humidity: decoded.humidity !== undefined ? decoded.humidity : null,
            ts: msg.ts,
            data: msg.data,
            rssi: msg.rssi
        },
        metadata: {},
        msgType: 'POST_TELEMETRY_REQUEST'
    };
}

// Return null if required properties are not present
return null;

// Function to read 16-bit signed little-endian integer from bytes
function readInt16LE(bytes) {
    var value = bytes[1] << 8 | bytes[0];
    return (value & 0x8000) ? value | 0xFFFF0000 : value;
}

Device Labels

in manual
dataKey
dataType
dataFormat

Battery Level

battery

telemetry

float

data

telemetry

string

frequency

telemetry

float

Humidity

humidity

telemetry

float

port

telemetry

float

rssi

telemetry

float

setStateOn

telemetry

boolian

snr

telemetry

float

targetTemperature

telemetry

float

Temperature

temperature

telemetry

float

time

telemetry

string

  • See user guide

  • See user guide

Last updated