SeeedJessieyilin zhuang
Published

LoRaWAN Tracker 101:Visulizue Data on Ubidots via TTN

Unlock seamless IoT integration: Connect SenseCAP T1000 Tracker to Ubidots via The Things Network. Build, track, visualize!

BeginnerFull instructions provided1 hour311
LoRaWAN Tracker 101:Visulizue Data on Ubidots via TTN

Things used in this project

Story

Read more

Code

SenseCAP T1000 Tracker Decoder for Ubidots

JavaScript
After creating the plugin in Ubidots, go to the Decoder section, delete all the code and replace it with the following code.
const HOTSPOT_INFO = false;

function handleErrorIfExists(data){
    const error = 'error' in data;
    if (error) {
        const errorMsg = { "error": { "value": data.errorCode, "context" : { "reason": data.error } } };
        return errorMsg;
    }
    return false;
}

function addLat(lat, ubidotsPayload){
    ubidotsPayload.position.context.lat = lat;
}

function addLng(lng, ubidotsPayload){
    ubidotsPayload.position.context.lng = lng;
}

const coordinateActions = {
    "Longitude": addLng,
    "Latitude": addLat,
}

const assignPayloadKeys = (data, ubidotsPayload) => {
    const { type, measurementValue } = data;

    if (type === "Longitude" || type === "Latitude") {
        if (!ubidotsPayload.position) {
            ubidotsPayload.position = { "value": 1, "context": { "lat": undefined, "lng": undefined } };
        }
        coordinateActions[type](measurementValue, ubidotsPayload);
    }
    else if (data.type === "Timestamp") {
        ubidotsPayload.timestamp = data.measurementValue;
    }
    else {
        ubidotsPayload[type] = measurementValue;
    }
};

function buildUbidotsPayload(data){
    const ubidotsPayload = {};
    data.forEach(innerData => {
        innerData.forEach(innerInnerData => {
            assignPayloadKeys(innerInnerData, ubidotsPayload);
        });
    });
    return ubidotsPayload;
}

async function formatPayload(args){

    const data = args.uplink_message.decoded_payload.messages;
    let ubidotsPayload = {};

    const error = handleErrorIfExists(data[0][0]);
    if (error) return error;

    if (HOTSPOT_INFO) {
        const { hotspots, port, fcnt } = args;
        const { snr, rssi } = hotspots[0];
        Object.assign(ubidotsPayload, { SNR: snr, RSSI: rssi, port, 'Frame Counter': fcnt });
    }
    ubidotsPayload = buildUbidotsPayload(data);
    console.log(ubidotsPayload);
    return ubidotsPayload;
};

module.exports = { formatPayload };

Credits

Seeed
102 projects • 175 followers
Seeed R&D Team
Contact
Jessie
9 projects • 2 followers
Contact
yilin zhuang
9 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.