全部文档
概述 硬件支持 快速开发指南 内核 驱动 通用组件 专业组件 常见问题

AWS-IoT

AWS-IoT组件是OneOS操作系统提供的亚马逊云接入组件,完成对亚马逊发布的适用于嵌入式设备的AWS IoT Device SDK C v4.0.0的移植与开发,支持AWS IoT Core 的各项服务,让开发者更加聚焦自身业务。

目录



简介

AWS IoT 提供可用于实施 IoT 解决方案的云服务和设备支持。AWS 提供了许多云服务来支持基于 IoT 的应用程序。为了帮助开发者快速了解AWS IoT,这里提供了基本概念图表和定义来介绍 AWS IoT 功能。

功能

MQTT通信

只支持MQTT协议接入,并且必须采用TLS安全传输方式。其 Device Shadow、Jobs、Device Provisioning、Device Defender等服务都是通过MQTT协议实现的。

AWS IOT提供了一个支持MQTT协议具有特定功能的server作为设备网关,并具有以下特性:

mqtt_1

MQTT通信流程:

mqtt_2

(1) 通信两端均接入同一个IoT网络 (2) 订阅者订阅某主题消息 (3) 发布者发布该主题消息 (4) 订阅者收到消息

需要注意的是,事物需要制定策略来决定终端能否连接、订阅、发布等。

Device Shadow

设备的影子是用于存储和检索设备的当前状态信息的 JSON 文档(存储在AWS IoT cloud内)。 Device Shadow 服务可以为您连接到 AWS IoT 的每台设备保留一个影子。您可以使用该影子通过 MQTT 或 HTTP 获取和设置设备的状态,不论该设备是否连接到 Internet。

Device Shadow控制模型

device_shadow_1

Device Shadow工作原理

device_shadow_2

Device Shadow关键属性

Device Shadow在 AWS IoT中是按格式固定以SON格式存储,这里对名词定义进行说明:

名词 定义
state desired: 事物的预期状态。应用程序可以向本文档部分写入数据来更新事物的状态,且无需直接连接到该事物。
reported: 事物的报告状态。事物可以向本文档部分写入数据,以报告其新状态。应用程序可以读取本文档部分,以确定事物的状态。
Delta: 增量状态是一种虚拟类型的状态,包含 desired 状态和 reported 状态之间的差异。
timestamp 指明 AWS IoT 传输消息的时间。通过在消息中使用时间戳并对 desired 或 reported 部分中的不同属性使用时间戳,事物可以确定已更新项目的存在时间,即使它不具有内部时钟特性。
version 文档版本。文档每次更新时,此版本号都会递增。用于确保正在更新的文档为最新版本。

Jobs

AWS IoT作业可用于定义一组远程操作,这些操作被发送到一个或多个连接到 AWS IoT 的设备并在这些设备上执行。 例如,您可以定义一个作业,该作业指示一组设备下载并安装应用程序或固件更新、重启、轮换证书或执行远程故障排除操作。

Defender

AWS IoT Device Defender 是一项安全服务,您可以借助此服务审核设备的配置、监控互联设备以检测异常行为,并降低安全风险。有了此服务,您可以在整个 AWS IoT 设备队列中实施一致的安全策略,并能够在设备遭到破坏时快速响应。

IoT 队列可能由大量具有不同功能、长期存在且地理位置分散的设备组成。这些特性导致队列设置复杂且容易出错。由于设备的计算能力、内存和存储功能通常有限,因而限制了在设备本身上对加密和其他形式的安全功能的使用。此外,设备经常使用具有已知漏洞的软件。这些因素使得 IoT 为黑客提供了一个有吸引力的目标,并使得很难持续保护您的设备车队。

AWS IoT Device Defender 提供了识别安全问题和最佳实践偏离情况的工具,从而解决了这些难题。 AWS IoT Device Defender 可以审核设备队列,以确保它们遵守安全最佳实践并检测设备上的异常行为。

Provisioning

AWS 提供了几种不同的方法来预置设备并在其上安装唯一的客户端证书。介绍每种方法以及如何为您的 IoT 解决方案选择最佳方法。

  • 您可以在 IoT 设备交付之前在设备上安装证书

    如果您可以在 IoT 设备上安全地安装唯一的客户端证书,然后才提供给最终用户使用,那么您需要使用即时预置 (JITP) 或即时注册 (JITR)。

    使用 JITP 和 JITR,用于对设备证书进行签名的证书颁发机构 (CA) 将注册到 AWS IoT,并在设备首次连接时由 AWS IoT 识别。设备使用其预配置模板的详细信息在 AWS IoT 中在其第一个连接上预配置。

    有关单个事物、JITP、JITR 以及具有唯一证书的设备批量预置的更多信息,请参阅预置具有设备证书的设备

  • 最终用户或安装程序可以使用应用程序在其 IoT 设备上安装证书

    如果您无法在将唯一客户端证书提供给最终用户之前在 IoT 设备上安全地安装这些证书,但最终用户或安装程序可以使用应用程序注册这些设备和安装唯一设备证书,您需要使用由可信用户预置过程。

    使用可信用户(如最终用户或具有已知账户的安装程序)可以简化设备制造过程。设备具有临时证书,设备只有 5 分钟才能连接到 AWS IoT,而不是具有唯一的客户端证书。在该 5 分钟时段内,可信用户获取具有较长生命周期的唯一客户端证书并将其安装在设备上。声明证书的有效期有限,可最大限度地降低遭盗用证书的风险。

    有关更多信息,请参阅由可信用户预置

  • 最终用户不能使用应用程序在其 IoT 设备上安装证书

    如果上述任一选项都不适用于您的 IoT 解决方案,则通过声明进行预配置过程是一个选项。通过此过程,您的 IoT 设备具有由队组中其他设备共享的声明证书。设备第一次连接声明证书时,AWS IoT 使用其预配置模板注册设备,并颁发设备的唯一客户端证书以便随后访问 AWS IoT

    此选项允许在设备连接到 AWS IoT 时自动预置设备,但可能会在出现遭盗用声明证书时带来更大的风险。如果声明证书遭盗用,您可以停用该证书。停用声明证书可防止将来注册具有该声明证书的所有设备。但是,停用声明证书不会阻止已经预配置的设备。

    有关更多信息,请参阅通过申请进行预配置

源码目录结构

MQTT源代码目录结构如下表所示:

目录 说明
certs 平台根证书
demos 示例
libraries 源码核心库
ports 与系统相关的接口适配
tests 单元测试
third_party 三方依赖库
doc 文档

架构设计

AWS IoT Core架构

设备SDK、IoT设备网关、AWS服务的关系如下图所示。

IoT_Core.png

使用说明

图形化配置

使用AWS IoT需要通过Menuconfig的图形化工具进行配置选择,配置的路径如下所示:

(Top) → Components→ Cloud→ AWS
[*] Enable AWS-IoT: Amazon cloud iot sdk
        Select sdk version (v4.0.0)  --->
        The AWS global output log level. (Information)  --->
        Select test method (Enable demo)  --->
()      Config demo host name
(8883)  Config demo port
[*]     Enable demo root ca certificate
[*]     Enable demo client certificate
[*]     Enable demo client key
()      Config demo user name
()      Config demo password
()      Config demo identifier (thing name)

进行AWS IoT选项配置需要首先在Menuconfig中选中Enable AWS-IoT: Amazon cloud iot sdk,然后再进行其它的配置选择。

  • Select sdk version:选择SDK版本。
  • The AWS global output log level.:选择log输出等级。
  • Select test method:选择演示方式,demo或单元测试。
  • Config demo host name:配置设备接入服务器的URL。
  • Config demo port:配置服务器端口号。
  • Enable demo root ca certificate:使能服务器根证书。
  • Enable demo client certificate:使能客户端证书。
  • Enable demo client key:使能客户端私钥。
  • Config demo user name:配置终端用户名,可以为空。
  • Config demo password:配置终端密码,可以为空。
  • Config demo identifier (thing name):配置终端身份信息。

注意事项

1. AWS IoT功能注意点

AWS IoT平台提供的功能采用证书策略的方式来管理,设备证书对应的证书策略决定设备是否具有接入、发布、Job等权限,开发者需要为设备制定策略后再考虑接入。

AWS IoT API

MQTT通信

MQTT API 说明
IotMqtt_Init 初始化MQTT库
IotMqtt_Cleanup MQTT库资源释放
IotMqtt_ReceiveCallback MQTT库消息接收回调
IotMqtt_Connect 建立MQTT连接,包含网络和客户端连接
IotMqtt_Disconnect 断开MQTT连接,包括网络和客户端,并释放资源
IotMqtt_SubscribeAsync MQTT主题订阅,异步实现
IotMqtt_SubscribeSync MQTT主题订阅,同步实现
IotMqtt_UnsubscribeAsync MQTT取消主题订阅,异步实现
IotMqtt_UnsubscribeSync MQTT取消主题订阅,同步实现
IotMqtt_PublishAsync MQTT发布,异步实现
IotMqtt_PublishSync MQTT发布,同步实现
IotMqtt_Wait MQTT等待一个操作的完成
IotMqtt_strerror MQTT解析error
IotMqtt_OperationType MQTT解析操作类型
IotMqtt_IsSubscribed 判断MQTT客户端是否有主题订阅
IotMqtt_Subscribe 同IotMqtt_SubscribeAsync
IotMqtt_TimedSubscribe 同IotMqtt_SubscribeSync
IotMqtt_Unsubscribe 同IotMqtt_UnsubscribeAsync
IotMqtt_TimedUnsubscribe 同IotMqtt_SubscribeSync
IotMqtt_Publish 同IotMqtt_PublishAsync
IotMqtt_TimedPublish 同IotMqtt_PublishSync

Device Shadow

Shadow API 说明
AwsIotShadow_Init 初始化Shadow库
AwsIotShadow_Cleanup Shadow库资源释放
AwsIotShadow_DeleteAsync 删除事物Shadow,异步实现
AwsIotShadow_DeleteSync 删除事物Shadow,同步实现
AwsIotShadow_GetAsync 获取事物Shadow,异步实现
AwsIotShadow_GetSync 获取事物Shadow,同步实现
AwsIotShadow_UpdateAsync 更新事物Shadow,异步实现
AwsIotShadow_UpdateSync 更新事物Shadow,同步实现
AwsIotShadow_Wait Shadow等待一个操作的完成
AwsIotShadow_SetDeltaCallback 注册Shadow差异回调函数
AwsIotShadow_SetUpdatedCallback 注册Shadow更新回调函数
AwsIotShadow_RemovePersistentSubscriptions Shadow删除持久订阅的主题
AwsIotShadow_strerror Shadow解析error
AwsIotShadow_Delete 同AwsIotShadow_DeleteAsync
AwsIotShadow_TimedDelete 同AwsIotShadow_DeleteSync
AwsIotShadow_Get 同AwsIotShadow_GetAsync
AwsIotShadow_TimedGet 同AwsIotShadow_GetSync
AwsIotShadow_Update 同AwsIotShadow_UpdateAsync
AwsIotShadow_TimedUpdate 同AwsIotShadow_UpdateSync

Jobs

Jobs API 说明
AwsIotJobs_Init 初始化Jobs库
AwsIotJobs_Cleanup Jobs库资源释放
AwsIotJobs_GetPendingAsync 获取等待中的Jobs的列表,异步实现
AwsIotJobs_GetPendingSync 获取等待中的Jobs的列表,同步实现
AwsIotJobs_StartNextAsync 执行下一个等待中的Job,异步实现
AwsIotJobs_StartNextSync 执行下一个等待中的Job,同步实现
AwsIotJobs_DescribeAsync 获取Job的详细信息,异步实现
AwsIotJobs_DescribeSync 获取Job的详细信息,同步实现
AwsIotJobs_UpdateAsync 更新Job的执行状态,异步实现
AwsIotJobs_UpdateSync 更新Job的执行状态,同步实现
AwsIotJobs_Wait Job等待一个操作的完成
AwsIotJobs_SetNotifyPendingCallback 注册等待Jobs列表变化通知函数
AwsIotJobs_SetNotifyNextCallback 注册下一个等待Job变化通知函数
AwsIotJobs_RemovePersistentSubscriptions Jobs删除持久订阅的主题
AwsIotJobs_strerror Jobs解析error
AwsIotJobs_StateName Jobs解析状态

Defender

Defender API 说明
AwsIotDefender_SetMetrics 设置需要Defender的指标
AwsIotDefender_Start 启动代理服务器的Defender
AwsIotDefender_Stop 停止代理服务器的Defender
AwsIotDefender_SetPeriod 设置Defender的周期
AwsIotDefender_GetPeriod 获取Defender的周期
AwsIotDefender_strerror Defender解析error
AwsIotDefender_EventType 解析Defender类型

Provisioning

Provisioning API 说明
AwsIotProvisioning_Init 初始化Provisioning库
AwsIotProvisioning_CreateKeysAndCertificate 请求新的设备证书和私钥
AwsIotProvisioning_CreateCertificateFromCsr 从证书签名请求 (CSR) 创建证书
AwsIotProvisioning_RegisterThing 注册新的事物(设备)
AwsIotProvisioning_Cleanup 反初始化Provisioning库
AwsIotProvisioning_strerror Provisioning解析error

更多资料请前往亚马逊云官方

| 🔝回到顶部 |📖目录 |

results matching ""

    No results matching ""