Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
function update_trackers(params, context, done) {
// Available params are:
// params.thingID
// params.vendorThingID
// params.uri
// params.userID
// params.groupID
// params.values
// params.expected
console.log("Running update_trackers extension...");
var admin = context.getAppAdminContext();
var baseUrl = "https://dweet.io:443";
var createAction = "/dweet/for/";
admin.loadThingWithThingID(params.objectScope.thingID, {
success: function(thing) {
console.log("Thing loaded!");
//console.log(thing);
// Refresh sensor log entry
var sensorEntry = admin.objectWithURI(params.uri);
sensorEntry.refresh({
success: function(theObject) {
console.log("Sensor log entry refreshed!");
//console.log(theObject);
var latitude = null; //latitude, signed / degrees / float
var longitude = null; //longitude, signed / degrees / float
var speed = null; //gps speed / m/s / float
var altitude = null; //altitude, signed / meters / float
var accuracy = null; //accuracy / meters / float
var long_accel = null; //Longitudinal acceleration signed / g / float
var lat_accel = null; //Lateral acceleration, signed / g / float
var vert_accel = null; //Vertical acceleration, signed / g / float
var impact = null; //Impact, signed / g / float
var temperature = null; //Temperature, signed / C / float
var humidity = null; //Humidity / % / float
var light = null; //Ambient light / lux / float
var pressure = null; //Air pressure / hPa / float
var battery = null; //Current battery level / % / float
var charging = null; //Is connected to charger / boolean / boolean (0, 1)
var heading = null; //Heading 0– 360 degrees / degrees / float
var yaw = null; //Yaw, signed / degrees / float
var pitch = null; //Pitch, signed / degrees / float
var roll = null; //Roll, signed / degrees / float
var senses = theObject.get("senses");
for(var i=0; i<senses.length; i++) {
var item = senses[i];
if(item.sId == "0x00010100") {
latitude = item.val; // [-90,90]
} else
if(item.sId == "0x00010200") {
longitude = item.val; // [-180,180]
} else
if(item.sId == "0x00010300") {
altitude = item.val; // [-10000,10000]
} else
if(item.sId == "0x00010400") {
accuracy = item.val; // [0,1000]
} else
if(item.sId == "0x00020100") {
speed = item.val; // [0,1000]
} else
if(item.sId == "0x00030200") {
battery = item.val; // [0,100]
} else
if(item.sId == "0x00030400") {
charging = item.val; // [0,1]
} else
if(item.sId == "0x00040100") {
heading = item.val; // [0,360]
} else
if(item.sId == "0x00040200") {
yaw = item.val; // [-180,180]
} else
if(item.sId == "0x00040300") {
pitch = item.val; // [-90,90]
} else
if(item.sId == "0x00040400") {
roll = item.val; // [-180,180]
} else
if(item.sId == "0x00050100") {
long_accel = item.val; // [-4,4]
} else
if(item.sId == "0x00050200") {
lat_accel = item.val; // [-4,4]
} else
if(item.sId == "0x00050300") {
vert_accel = item.val; // [-4,4]
} else
if(item.sId == "0x00050400") {
impact = item.val; // [0,5.656]
} else
if(item.sId == "0x00060100") {
temperature = item.val; // [-40,85]
} else
if(item.sId == "0x00060200") {
humidity = item.val; // [0,100]
} else
if(item.sId == "0x00060300") {
light = item.val; // [0,187269]
} else
if(item.sId == "0x00060400") {
pressure = item.val; // [260,1260]
}
}
// Load application scope bucket for trackers
var appBucket = admin.bucketWithName("trackers");
// Create the conditions for the query
var clause = KiiClause.equals("thingID", thing.getThingID());
// Build the query with the clauses and some other parameters
var query = KiiQuery.queryWithClause(clause);
query.setLimit(1);
// Define the callbacks
var queryCallbacks = {
success: function(queryPerformed, resultSet, nextQuery) {
var globalTracker;
if(resultSet.length == 0) {
globalTracker = appBucket.createObject();
globalTracker.set("thingID", thing.getThingID());
globalTracker.set("vendorThingID", thing.getVendorThingID());
}
else
globalTracker = resultSet[0];
// Copy tracker properties
if(latitude != null) globalTracker.set("latitude", latitude); //latitude, signed / degrees / float
if(longitude != null) globalTracker.set("longitude", longitude); //longitude, signed / degrees / float
if(speed != null) globalTracker.set("speed", speed); //gps speed / m/s / float
if(altitude != null) globalTracker.set("altitude", altitude); //altitude, signed / meters / float
if(accuracy != null) globalTracker.set("accuracy", accuracy); //accuracy / meters / float
if(long_accel != null) globalTracker.set("long_accel", long_accel); //Longitudinal acceleration signed / g / float
if(lat_accel != null) globalTracker.set("lat_accel", lat_accel); //Lateral acceleration, signed / g / float
if(vert_accel != null) globalTracker.set("vert_accel", vert_accel); //Vertical acceleration, signed / g / float
if(impact != null) globalTracker.set("impact", impact); //Impact, signed / g / float
if(temperature != null) globalTracker.set("temperature", temperature); //Temperature, signed / C / float
if(humidity != null) globalTracker.set("humidity", humidity); //Humidity / % / float
if(light != null) globalTracker.set("light", light); //Ambient light / lux / float
if(pressure != null) globalTracker.set("pressure", pressure); //Air pressure / hPa / float
if(battery != null) globalTracker.set("battery", battery); //Current battery level / % / float
if(charging != null) globalTracker.set("charging", charging); //Is connected to charger / boolean / boolean (0, 1)
if(heading != null) globalTracker.set("heading", heading); //Heading 0– 360 degrees / degrees / float
if(yaw != null) globalTracker.set("yaw", yaw); //Yaw, signed / degrees / float
if(pitch != null) globalTracker.set("pitch", pitch); //Pitch, signed / degrees / float
if(roll != null) globalTracker.set("roll", roll); //Roll, signed / degrees / float
console.log("All properties of global tracker set. Saving to cloud...");
// Save global tracker
globalTracker.save({
success: function(theObject) {
console.log("Global tracker saved!");
//console.log(theObject);
var thingVendorId = theObject.get("vendorThingID");
if(thingVendorId == null)
console.log("Error: could not retrieve thing vendor id for visualization");
else {
targetUrl = baseUrl + createAction + thingVendorId;
var string = null;
$.each(theObject, function(key, val){
if(key == "_customInfo")
string = JSON.stringify(val);
});
if (string == null)
console.log("Error: can't retrieve thing custom data for visualization");
else {
console.log("Posting to " + targetUrl + " the JSON string " + string);
// Send visualization data
$.ajax({
url: targetUrl,
type: "POST",
data: string,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(body) {
console.log("OK posting: " + JSON.stringify(body));
},
error: function(msg) {
console.log("Error posting:" + JSON.stringify(msg));
}
});
}
}
done("SUCCESS!");
},
failure: function(theObject, errorString) {
console.log("Error saving global tracker: " + errorString);
done("Error saving global tracker: " + errorString);
}
});
},
failure: function(queryPerformed, anErrorString) {
console.log("Error fetching global tracker: " + anErrorString);
done("Error fetching global tracker: " + anErrorString);
}
}
// Execute the query
appBucket.executeQuery(query, queryCallbacks);
},
failure: function(error) {
console.log("Error refreshing sensor log entry: " + error);
done("Error refreshing sensor log entry: " + error);
}
});
},
failure: function(error) {
console.log("Can't load Thing from sensor object: " + error);
done("Can't load Thing from sensor object: " + error);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.