微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Amazon Iot物联网终端之十三 Iot物联网终端在AWS的设置

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);
        }
    });
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top