[转载]国外物联网平台初探(一):亚马逊AWS IoT
原文链接:http://www.cnblogs.com/ibrahim/p/amazon-aws-iot.html
平台定位
- AWS IoT是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。
- AWS IoT可支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至 AWS 终端节点和其他设备。应用程序可以随时跟踪所有设备并与其通信,即使这些设备未处于连接状态也不例外。
- 使用AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch、AWS CloudTrail 和内置 Kibana 集成的 Amazon Elasticsearch Service 等AWS服务来构建IoT应用程序,以便收集、处理和分析互连设备生成的数据并对其执行操作,且无需管理任何基础设施。
架构
与AWS IoT平台集成的AWS服务
- Amazon DynamoDB—托管NoSQL数据库
- Amazon Kinesis—大规模流式数据实时处理
- AWS Lambda—EC2云虚拟机运行代码响应事件
- Amazon Simple Storage Service(S3)—可扩展云存储
- Amazon Simple Notification—推送通知服务
- Amazon Simple Queue Service—消息队列服务
设备SDK
- AWS IoT 设备 SDK 使用 MQTT、HTTP 或 WebSockets 协议将硬件设备连接到 AWS IoT,硬件设备无缝安全地与 AWS IoT 提供的设备网关和设备影子协作。
- 设备 SDK 支持 C、JavaScript 、Arduino、Java和Python。
- 设备 SDK 包含开源库、带有示例的开发人员指南和移植指南,用户根据硬件平台构建 IoT 产品或解决方案。
设备网关
- AWS IoT 设备网关支持设备安全高效地与 AWS IoT 进行通信。设备网关可以使用发布/订阅模式交换消息,从而支持一对一和一对多的通信。凭借此一对多的通信模式,AWS IoT 将支持互连设备向多名给定主题的订阅者广播数据。
- 设备网关支持 MQTT、WebSocket 和 HTTP 1.1 协议,也支持私有协议。
- 设备网关可自动扩展,以支持 10 亿多台设备,而无需预配置基础设施。
认证和授权
- AWS IoT 在所有连接点处提供相互身份验证和加密。AWS IoT 支持 AWS 身份验证方法(称为"SigV4")以及基于身份验证的 X.509 证书。使用 HTTP 的连接可以使用任一方法,使用 MQTT 的连接可以使用基于证书的身份验证,使用 WebSockets 的连接可以使用 SigV4。
- 使用 AWS IoT 生成的证书以及由首选证书颁发机构 (CA) 签署的证书,将所选的角色和/或策略映射到每个证书,以便授予设备或应用程序访问权限,或撤消访问权限。
- 通过控制台或使用 API 创建、部署并管理设备的证书和策略。这些设备证书可以预配置、激活和与使用 AWS IAM 配置的相关策略关联。
- AWS IoT 还支持用户移动应用使用 Amazon Cognito 进行连接,Amazon Cognito 将负责执行必要的操作来为应用用户创建唯一标识符并获取临时的、权限受限的 AWS 凭证。
注册表
- 注册表将创建设备标识并跟踪元数据,如设备的属性和功能。
- 注册表向格式一致的每台设备分配唯一的标识,而不管设备的类型和连接方式为何。此外,它还支持描述设备功能的元数据,例如传感器是否报告温度,以及数据是华氏度还是摄氏度。
- 注册表存储有关设备的元数据,无需支付额外费用;并且需要每隔 7 天至少访问或更新注册表条目一次,注册表中的元数据就不会过期。
以JSON格式存储的设备注册表信息
设备影子(Shadow)
- 设备影子保留每台设备的最后报告状态和期望的未来状态,即便设备处于离线状态。
- 通过 API 或使用规则引擎,获取设备的最后报告状态或设置期望的未来状态。
- 应用程序可以设置设备的期望未来状态,而无需说明设备的当前状态。AWS IoT 将比较期望未来状态和最后报告状态之间的差异,并命令设备"弥补差异"。
- 设备 SDK 能够轻松地同步其状态及其影子,并响应通过影子设置的期望的未来状态。
- 设备影子免费存储设备状态多达一年。如果至少每年更新一次状态,则设备影子将永久保留状态;否则状态将过期。
设备影子(Shadow)流程
设备影子(Shadow)格式
设备影子(Shadow)服务
设备影子服务使用MQTT话题,便于应用和设备之间的通信,下面是相关的MQTT QoS 1话题:
$aws/things/{thingName}/shadow/update
$aws/things/{thingName}/shadow/get
$aws/things/{thingName}/shadow/delete
$aws/things/{thingName}/shadow/update/accepted
$aws/things/{thingName}/shadow/update/rejected
$aws/things/{thingName}/shadow/update/delta
$aws/things/{thingName}/shadow/get/accepted
$aws/things/{thingName}/shadow/get/rejected
$aws/things/{thingName}/shadow/delete/accepted
$aws/things/{thingName}/shadow/delete/rejected
设备SDK(C-SDK、JS-SDK)将影子功能内置在设备中,能够使设备与影子服务之间自动同步状态。
规则引擎
- 规则引擎验证发布到 AWS IoT 的入站消息,并根据定义的业务规则转换这些消息并将它们传输到另一台设备或云服务。规则可以应用至一台或多台设备中的数据,并且它可以并行执行一个或多 个操作。
- 规则引擎还可以将消息路由到 AWS 终端节点,包括 AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch 和内置 Kibana 集成的 Amazon Elasticsearch Service。外部终端节点可以使用 AWS Lambda、Amazon Kinesis 和 Amazon Simple Notification Service (SNS) 进行连接。
- 使用类似 SQL 的语句编写规则。例如:如果温度读数超出特定阈值,则它可以触发规则以便将数据传输到 AWS Lambda;如果此温度超出其他 5 台设备的平均值 15%,则应采取措施。
- 规则引擎将提供数十个可用于转换数据的可用功能,并且可以通过 AWS Lambda 创建无限个功能。例如,如果正在处理各种不同的数值,则可以取传入数字的平均值。规则还会触发在 AWS Lambda 中执行 Java、Node.js 或 Python 代码,从而提供最高灵活度以及处理设备数据的能力。
规则引擎集成其它云服务
规则引擎验证发布至AWS IoT的消息请求,基于业务规则转换消息请求并发布至其它服务,例如:
- 富集化或过滤从设备收集的数据
- 将设备数据写入一个亚马逊DynamoDBm数据库
- 保存文件至亚马逊S3
- 发送一个推送通知到所有亚马逊SNS用户
- 向亚马逊SQS队列发布数据
- 调用Lambda函数抽取数据
- 使用亚马逊Kinesis处理大量的设备消息数据
- 发送数据至亚马逊Elasticsearch服务
- 捕获一条CloudWatch测量数据
- 更新一条CloudWatch告警
- 把一条MQTT消息数据发送至亚马逊机器学习服务,基于亚马逊机器学习模型进行预测
规则引擎&实时流式数据处理
N:1 入站的传感器流式数据(数据降噪)
规则引擎过滤、转换、汇总传感器数据后,发送至亚马逊Kinesis处理实时流式数据
Kinesis流式数据共享至其它业务系统
将流式数据的实时处理结果导入至数据库、应用或其它亚马逊服务
规则引擎&推送通知服务
推送通知
支持苹果APNS推送通知服务、谷歌GCM云消息服务、亚马逊ADM设备消息服务,微软WNS推送服务
亚马逊SNS推送通知服务->HTTP协议终端(短信、邮件)
通过亚马逊SNS推送通知服务,调用第三方HTTP协议终端,支持订阅和重试
规则引擎示例 – 使用机器学习预测函数
{ "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23-beta", "actions": [{ "republish": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "topic": "my-mqtt-topic" } }] } |
上面是使用亚马逊机器学习预测函数machinelearning_predict 的规则示例,其含义是:
如果机器学习预测函数处理MQTT消息后的结果是分类1,那么重新将此消息发布至一个话题。
设备管理
- 支持全球或部分地区的固件升级
- 规则引擎在DynamoDBm数据库跟踪升级状态和进度
- 注册表存储设备的固件版本
S3管理固件分发版本
在S3中组织和保障和固件二进制文件
消息代理使用话题模式通知设备分组
通知设备分组固件更新信息,包括S3中的固件二进制文件URL地址
AWS IoT平台接口
-
AWS Command Line Interface (AWS CLI)
- 在Windows、Mac和Linux执行AWS IoT命令
-
AWS SDKs
- 使用特定语言API开发IoT应用
-
AWS IoT API
- 使用HTTP或者HTTPS请求开发IoT应用
-
AWS IoT Thing SDK for C
- 在资源受限的设备上开发IoT应用,如MCU
AWS IoT监控工具
自动化监控工具
- Amazon CloudWatch Alarms
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- AWS CloudTrail Log Monitoring
手工监控工具
-
AWS IoT 仪表盘
- 证书
- 策略
- 规则
- 设备
-
CloudWatch首页
- 当前告警和状态
- 告警和资源图表
- 服务健康度
- CloudWatch
- 自定义仪表盘
- 自定义图表进行排障和监控趋势
- 搜索所有AWS资源指标
- 创建和修改告警参数
AWS IoT 初学者工具包
- AWS IoT 初学者工具包旨在帮助进行原型开发和安全地连接 AWS IoT。
- 工具包内含开发微控制器开发板、传感器和执行器、AWS IoT 设备 SDK 以及入门指南。
AWS IoT 初学者工具包 - 支持的平台
AWS IoT生态
开发示例 - AWS IoT 按钮
创建设备
设备属性
创建证书
激活证书
创建策略
绑定证书与策略
绑定证书与设备
配置设备
使用MQTT客户端订阅设备消息
使用MQTT客户端查看设备消息
创建短信推送话题并订阅此话题
创建规则
创建规则的行为
测试订阅是否成功
平台定位
- AWS IoT是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。
- AWS IoT可支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至 AWS 终端节点和其他设备。应用程序可以随时跟踪所有设备并与其通信,即使这些设备未处于连接状态也不例外。
- 使用AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch、AWS CloudTrail 和内置 Kibana 集成的 Amazon Elasticsearch Service 等AWS服务来构建IoT应用程序,以便收集、处理和分析互连设备生成的数据并对其执行操作,且无需管理任何基础设施。
架构
与AWS IoT平台集成的AWS服务
- Amazon DynamoDB—托管NoSQL数据库
- Amazon Kinesis—大规模流式数据实时处理
- AWS Lambda—EC2云虚拟机运行代码响应事件
- Amazon Simple Storage Service(S3)—可扩展云存储
- Amazon Simple Notification—推送通知服务
- Amazon Simple Queue Service—消息队列服务
设备SDK
- AWS IoT 设备 SDK 使用 MQTT、HTTP 或 WebSockets 协议将硬件设备连接到 AWS IoT,硬件设备无缝安全地与 AWS IoT 提供的设备网关和设备影子协作。
- 设备 SDK 支持 C、JavaScript 、Arduino、Java和Python。
- 设备 SDK 包含开源库、带有示例的开发人员指南和移植指南,用户根据硬件平台构建 IoT 产品或解决方案。
设备网关
- AWS IoT 设备网关支持设备安全高效地与 AWS IoT 进行通信。设备网关可以使用发布/订阅模式交换消息,从而支持一对一和一对多的通信。凭借此一对多的通信模式,AWS IoT 将支持互连设备向多名给定主题的订阅者广播数据。
- 设备网关支持 MQTT、WebSocket 和 HTTP 1.1 协议,也支持私有协议。
- 设备网关可自动扩展,以支持 10 亿多台设备,而无需预配置基础设施。
认证和授权
- AWS IoT 在所有连接点处提供相互身份验证和加密。AWS IoT 支持 AWS 身份验证方法(称为"SigV4")以及基于身份验证的 X.509 证书。使用 HTTP 的连接可以使用任一方法,使用 MQTT 的连接可以使用基于证书的身份验证,使用 WebSockets 的连接可以使用 SigV4。
- 使用 AWS IoT 生成的证书以及由首选证书颁发机构 (CA) 签署的证书,将所选的角色和/或策略映射到每个证书,以便授予设备或应用程序访问权限,或撤消访问权限。
- 通过控制台或使用 API 创建、部署并管理设备的证书和策略。这些设备证书可以预配置、激活和与使用 AWS IAM 配置的相关策略关联。
- AWS IoT 还支持用户移动应用使用 Amazon Cognito 进行连接,Amazon Cognito 将负责执行必要的操作来为应用用户创建唯一标识符并获取临时的、权限受限的 AWS 凭证。
注册表
- 注册表将创建设备标识并跟踪元数据,如设备的属性和功能。
- 注册表向格式一致的每台设备分配唯一的标识,而不管设备的类型和连接方式为何。此外,它还支持描述设备功能的元数据,例如传感器是否报告温度,以及数据是华氏度还是摄氏度。
- 注册表存储有关设备的元数据,无需支付额外费用;并且需要每隔 7 天至少访问或更新注册表条目一次,注册表中的元数据就不会过期。
以JSON格式存储的设备注册表信息
设备影子(Shadow)
- 设备影子保留每台设备的最后报告状态和期望的未来状态,即便设备处于离线状态。
- 通过 API 或使用规则引擎,获取设备的最后报告状态或设置期望的未来状态。
- 应用程序可以设置设备的期望未来状态,而无需说明设备的当前状态。AWS IoT 将比较期望未来状态和最后报告状态之间的差异,并命令设备"弥补差异"。
- 设备 SDK 能够轻松地同步其状态及其影子,并响应通过影子设置的期望的未来状态。
- 设备影子免费存储设备状态多达一年。如果至少每年更新一次状态,则设备影子将永久保留状态;否则状态将过期。
设备影子(Shadow)流程
设备影子(Shadow)格式
设备影子(Shadow)服务
设备影子服务使用MQTT话题,便于应用和设备之间的通信,下面是相关的MQTT QoS 1话题:
$aws/things/{thingName}/shadow/update
$aws/things/{thingName}/shadow/get
$aws/things/{thingName}/shadow/delete
$aws/things/{thingName}/shadow/update/accepted
$aws/things/{thingName}/shadow/update/rejected
$aws/things/{thingName}/shadow/update/delta
$aws/things/{thingName}/shadow/get/accepted
$aws/things/{thingName}/shadow/get/rejected
$aws/things/{thingName}/shadow/delete/accepted
$aws/things/{thingName}/shadow/delete/rejected
设备SDK(C-SDK、JS-SDK)将影子功能内置在设备中,能够使设备与影子服务之间自动同步状态。
规则引擎
- 规则引擎验证发布到 AWS IoT 的入站消息,并根据定义的业务规则转换这些消息并将它们传输到另一台设备或云服务。规则可以应用至一台或多台设备中的数据,并且它可以并行执行一个或多 个操作。
- 规则引擎还可以将消息路由到 AWS 终端节点,包括 AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning、Amazon DynamoDB、Amazon CloudWatch 和内置 Kibana 集成的 Amazon Elasticsearch Service。外部终端节点可以使用 AWS Lambda、Amazon Kinesis 和 Amazon Simple Notification Service (SNS) 进行连接。
- 使用类似 SQL 的语句编写规则。例如:如果温度读数超出特定阈值,则它可以触发规则以便将数据传输到 AWS Lambda;如果此温度超出其他 5 台设备的平均值 15%,则应采取措施。
- 规则引擎将提供数十个可用于转换数据的可用功能,并且可以通过 AWS Lambda 创建无限个功能。例如,如果正在处理各种不同的数值,则可以取传入数字的平均值。规则还会触发在 AWS Lambda 中执行 Java、Node.js 或 Python 代码,从而提供最高灵活度以及处理设备数据的能力。
规则引擎集成其它云服务
规则引擎验证发布至AWS IoT的消息请求,基于业务规则转换消息请求并发布至其它服务,例如:
- 富集化或过滤从设备收集的数据
- 将设备数据写入一个亚马逊DynamoDBm数据库
- 保存文件至亚马逊S3
- 发送一个推送通知到所有亚马逊SNS用户
- 向亚马逊SQS队列发布数据
- 调用Lambda函数抽取数据
- 使用亚马逊Kinesis处理大量的设备消息数据
- 发送数据至亚马逊Elasticsearch服务
- 捕获一条CloudWatch测量数据
- 更新一条CloudWatch告警
- 把一条MQTT消息数据发送至亚马逊机器学习服务,基于亚马逊机器学习模型进行预测
规则引擎&实时流式数据处理
N:1 入站的传感器流式数据(数据降噪)
规则引擎过滤、转换、汇总传感器数据后,发送至亚马逊Kinesis处理实时流式数据
Kinesis流式数据共享至其它业务系统
将流式数据的实时处理结果导入至数据库、应用或其它亚马逊服务
规则引擎&推送通知服务
推送通知
支持苹果APNS推送通知服务、谷歌GCM云消息服务、亚马逊ADM设备消息服务,微软WNS推送服务
亚马逊SNS推送通知服务->HTTP协议终端(短信、邮件)
通过亚马逊SNS推送通知服务,调用第三方HTTP协议终端,支持订阅和重试
规则引擎示例 – 使用机器学习预测函数
{ "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23-beta", "actions": [{ "republish": { "roleArn": "arn:aws:iam::123456789012:role/my-iot-role", "topic": "my-mqtt-topic" } }] } |
上面是使用亚马逊机器学习预测函数machinelearning_predict 的规则示例,其含义是:
如果机器学习预测函数处理MQTT消息后的结果是分类1,那么重新将此消息发布至一个话题。
设备管理
- 支持全球或部分地区的固件升级
- 规则引擎在DynamoDBm数据库跟踪升级状态和进度
- 注册表存储设备的固件版本
S3管理固件分发版本
在S3中组织和保障和固件二进制文件
消息代理使用话题模式通知设备分组
通知设备分组固件更新信息,包括S3中的固件二进制文件URL地址
AWS IoT平台接口
-
AWS Command Line Interface (AWS CLI)
- 在Windows、Mac和Linux执行AWS IoT命令
-
AWS SDKs
- 使用特定语言API开发IoT应用
-
AWS IoT API
- 使用HTTP或者HTTPS请求开发IoT应用
-
AWS IoT Thing SDK for C
- 在资源受限的设备上开发IoT应用,如MCU
AWS IoT监控工具
自动化监控工具
- Amazon CloudWatch Alarms
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- AWS CloudTrail Log Monitoring
手工监控工具
-
AWS IoT 仪表盘
- 证书
- 策略
- 规则
- 设备
-
CloudWatch首页
- 当前告警和状态
- 告警和资源图表
- 服务健康度
- CloudWatch
- 自定义仪表盘
- 自定义图表进行排障和监控趋势
- 搜索所有AWS资源指标
- 创建和修改告警参数
AWS IoT 初学者工具包
- AWS IoT 初学者工具包旨在帮助进行原型开发和安全地连接 AWS IoT。
- 工具包内含开发微控制器开发板、传感器和执行器、AWS IoT 设备 SDK 以及入门指南。
AWS IoT 初学者工具包 - 支持的平台
AWS IoT生态
开发示例 - AWS IoT 按钮
创建设备
设备属性
创建证书
激活证书
创建策略
绑定证书与策略
绑定证书与设备
配置设备
使用MQTT客户端订阅设备消息
使用MQTT客户端查看设备消息
创建短信推送话题并订阅此话题
创建规则
创建规则的行为
测试订阅是否成功