Skip to content

Instantly share code, notes, and snippets.

@tonkatsu7
Last active December 10, 2017 10:51
Show Gist options
  • Save tonkatsu7/26bf1416cacf9585f6add9ac3505c0b4 to your computer and use it in GitHub Desktop.
Save tonkatsu7/26bf1416cacf9585f6add9ac3505c0b4 to your computer and use it in GitHub Desktop.
AWS IoT (MQTT gateway) to elastic passthrough for Thinxtra XKit
console.log('Loading event');
var elasticsearch = require('elasticsearch');
exports.handler = function(event, context) {
console.log("Request received:\n", JSON.stringify(event));
console.log("Context received:\n", JSON.stringify(context));
var tableName = event.device;
var time = event.time;
var Temperature = event.data.Temperature;
var Pressure = event.data.Pressure;
var Photo = event.data.Photo;
var x_Accelerator = event.data.x_Accelerator;
var y_Accelerator = event.data.y_Accelerator;
var z_Accelerator = event.data.z_Accelerator;
var Accelerator = event.data.Accelerator;
function returnTimeUTC(value){
return new Date((value)*1000);
}
function returnTimeSYD(value){
return new Date((value)*1000 + 36000000);
}
//replace 39600000 with the Unix time offset according to your timezone. Here it is set to Sydney time offset.
function getFirstSunday(year,month,hours) {
var d = new Date(),
firstSunday = new Date();
d.setFullYear(year);
d.setMonth(month);
d.setDate(1);
while (d.getDay() != 0)
{
d.setDate(d.getDate() + 1);
}
firstSunday.setFullYear(d.getFullYear());
firstSunday.setMonth(d.getMonth());
firstSunday.setDate(d.getDate());
firstSunday.setHours(hours,0,0,0);
return firstSunday;
}
var date = new Date();
var firstSundayOfApril = getFirstSunday(date.getFullYear(), 3, 3);
var firstSundayOfOctober = getFirstSunday(date.getFullYear(), 7, 2);
var timeOffsetSydney = 0;
if (date >= firstSundayOfApril && date <= firstSundayOfOctober)
{
timeOffsetSydney = 36000000;
}
else
{
timeOffsetSydney = 39600000;
}
timedecode = '' + returnTimeSYD(time).toLocaleString();
Temperature = Temperature/100;
Pressure = Pressure*3;
Photo = Photo/1000;
x_Accelerator = x_Accelerator/250;
y_Accelerator = y_Accelerator/250;
z_Accelerator = z_Accelerator/250;
Accelerator = Math.sqrt(x_Accelerator * x_Accelerator + y_Accelerator * y_Accelerator + z_Accelerator * z_Accelerator);
//Send directly to Elastic
var client = new elasticsearch.Client({
host: 'https://elastic:[email protected]:9243/'
})
client.create({
index: 'sigfox-2',
type: 'xkit',
id: event.seqNumber,
body: {
"device": event.device,
"time": returnTimeUTC(event.time),
"timedecode": timedecode,
"latitude": event.latitude,
"longitude": event.longitude,
"snr": event.snr,
"avgSnr": event.avgSnr,
"station": event.station,
"Temperature": Temperature,
"Pressure": Pressure,
"Photo": Photo,
"x_Accelerator": x_Accelerator,
"y_Accelerator": y_Accelerator,
"z_Accelerator": z_Accelerator,
"Accelerator": Accelerator
}
},
function (err, data) {
if (err) {
context.fail('ERROR: Elastic failed: ' + err);
} else {
console.log('Elastic Success: ' + JSON.stringify(data, null, ' '));
context.succeed('SUCCESS');
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment