Last active
December 10, 2017 10:51
-
-
Save tonkatsu7/26bf1416cacf9585f6add9ac3505c0b4 to your computer and use it in GitHub Desktop.
AWS IoT (MQTT gateway) to elastic passthrough for Thinxtra XKit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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