Amazon Iot物联网终端之十三 Iot物联网终端在AWS的设置
时间:10-02
整理:3721RD
点击:
1. AWS服务介绍 AWS服务是亚马逊公司在线购物平台后面的巨大的现金奶牛,提供了巨大的想象空间和实际的服务,目前在中国的业务还没有全面推广,中国区的服务器也刚在10月上线,仅面对企业用户开放账号注册,所以,目前的测试均需要使用海外账号服务,速度不是很稳定。
因为AWS开发不是本评测的内容,因此不过多展开,具体想成为成熟的开发者,需要的培训还是很多的,而且亚马逊也提供了收费不低的分级认证,可见这个还是有一定的含金量,也是具有相当的难度的。
2. 为了简化AWS的设置过程,本评测采用了一个现成的测试模板[ amzn.to/1cVzMZN ],直接简化了设置内容。
登录后如下,
选择IOT2015,作为模板
模板创建完后如下,
其中的AWS服务的逻辑关系如下图,
3、整个设置居于核心的是AWS lambda服务,提供了一个在云端运行的函数,对智能硬件终端传输的数据进行分析,并连接AWS的其他服务,如数据库服务,存储服务,短消息发送等。下面列出,事件处理的核心Node.js程序iotapi.handler,供参照和理解。
// Lambda function acting as API endpoint for Evothings IoT Example
console.log('Loading function');
var AWS = require('aws-sdk');
var DOC = require('dynamodb-doc');
var cw = new AWS.CloudWatch();
var doc = new DOC.DynamoDB();
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
switch(event.operation) {
case 'update':
update(event.sensorid, event.value, context);
break;
case 'query':
query(event.sensorid, context);
break;
}
};
var update = function(sensorid, value, context) {
var itemParams = {
TableName: 'SensorData',
Item: {
SensorId: sensorid,
Timestamp: new Date().toISOString(),
Value: value
}};
doc.putItem(itemParams, function(err, data) {
if (err) {
console.log('DDB call failed: ' + err, err.stack);
context.error(err);
} else {
//if all is well - also log the metric to CloudWatch
logMetric(sensorid, value, function(err, data) {
if (err) {
console.log('CW call failed: ' + err, err.stack);
context.error(err);
} else {
context.succeed();
}
});
}
});
}
var logMetric = function(sensorid, value, callback) {
var params = {
MetricData: [{
MetricName: 'SensorData',
Dimensions: [{ Name: 'SensorId', Value: sensorid }],
Timestamp: new Date(),
Value: value
}],
Namespace: 'Sensors'
};
cw.putMetricData(params, callback);
}
var query = function(sensorid, context) {
var params = {
TableName: 'SensorData',
Limit: 20, //return the 20...
ScanIndexForward: false, //... most recent items
KeyConditions: [doc.Condition('SensorId', 'EQ', sensorid)]
};
doc.query(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
context.fail(err);
}
else {
console.log(data); // successful response
context.succeed(data);
}
});
}