AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

序列号流

序列号流 连接器读取和写入 AWS IoT Greengrass 核心设备上的串行端口。

此连接器支持两种操作模式:

  • 按需读取。接收关于 MQTT 主题的读取和写入请求,并发布读取操作的响应或写入操作的状态。

  • 轮询读取。定期从串行端口读取。该模式还支持“按需读取”请求。

注意

读取请求的限制为最多 63994 字节的读取长度。写入请求的限制为最多 128000 字节的数据长度。

此连接器具有以下版本。

版本

ARN

2

arn:aws-cn:greengrass:区域::/connectors/SerialStream/versions/2

1

arn:aws:greengrass:区域::/connectors/SerialStream/versions/1

有关版本更改的信息,请参阅更改日志

要求

此连接器具有以下要求:

  • AWS IoT Greengrass 核心软件 v1.7 or later。

  • Python 版本 2.7 已安装在核心设备上并且已添加到 PATH 环境变量。

  • Greengrass 组中一个指向目标串行端口的 本地设备资源

    注意

    建议先设置串行端口并确认可执行读取和写入操作,然后再部署此连接器。

连接器参数

该连接器提供以下参数:

BaudRate

串行连接的波特率。

在控制台中显示名称:波特率

必需:true

类型:string

有效值:110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200, 230400

有效模式:^110$|^300$|^600$|^1200$|^2400$|^4800$|^9600$|^14400$|^19200$|^28800$|^38400$|^56000$|^57600$|^115200$|^230400$

Timeout

读取操作的超时(以秒为单位)。

在控制台中显示名称:超时

必需:true

类型:string

有效值:1 - 59

有效模式:^([1-9]|[1-5][0-9])$

SerialPort

设备上的物理串行端口的绝对路径。这是为本地设备资源指定的源路径。

在控制台中显示名称:串行端口

必需:true

类型:string

有效模式:[/a-zA-Z0-9_-]+

SerialPort-ResourceId

表示物理串行端口的本地设备资源的 ID。

注意

连接器被授予对该资源的读写访问权限。

在控制台中显示名称:串行端口资源

必需:true

类型:string

有效模式:[a-zA-Z0-9_-]+

PollingRead

设置读取模式:“轮询读取”或“按需读取”。

  • 对于“轮询读取”模式,请指定 true。在该模式下,PollingIntervalPollingReadTypePollingReadLength 属性是必需属性。

  • 对于“按需读取”模式,请指定 false。在该模式下,将在读取请求中指定类型和长度值。

在控制台中显示名称:阅读更多

必需:true

类型:string

有效值:true, false

有效模式:^([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

PollingReadLength

要在每个轮询读取操作中读取的数据长度(字节)。仅当使用“轮询读取”模式时才适用。

在控制台中显示名称:轮询读取长度

必需:false。当 PollingReadtrue 时,该属性是必需属性。

类型:string

有效模式:^(|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-2][0-9]{3}|63[0-8][0-9]{2}|639[0-8][0-9]|6399[0-4])$

PollingReadInterval

轮询读取的时间间隔(以秒为单位)。仅当使用“轮询读取”模式时才适用。

在控制台中显示名称:轮询读取时间间隔

必需:false。当 PollingReadtrue 时,该属性是必需属性。

类型:string

有效值:1 - 999

有效模式:^(|[1-9]|[1-9][0-9]|[1-9][0-9][0-9])$

PollingReadType

轮询线程读取的数据类型。仅当使用“轮询读取”模式时才适用。

在控制台中显示名称:轮询读取类型

必需:false。当 PollingReadtrue 时,该属性是必需属性。

类型:string

有效值:ascii, hex

有效模式:^(|[Aa][Ss][Cc][Ii][Ii]|[Hh][Ee][Xx])$

RtsCts

指示是否启用 RTS/CTS 流控制。默认值为 false。有关更多信息,请参阅 RTS、CTS 和 RTR

在控制台中显示名称:RTS/CTS 流控制

必需:false

类型:string

有效值:true, false

有效模式:^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

XonXoff

指示是否启用软件流控制。默认值为 false。有关更多信息,请参阅软件流控制

在控制台中显示名称:软件流控制

必需:false

类型:string

有效值:true, false

有效模式:^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$

Parity

串行端口的奇偶校验。默认值为 N。有关更多信息,请参阅奇偶校验

在控制台中显示名称:串行端口奇偶校验

必需:false

类型:string

有效值:N, E, O, S, M

有效模式:^(|[NEOSMneosm])$

创建连接器示例 (CLI)

以下 CLI 命令创建一个 ConnectorDefinition,其初始版本包含 序列号流连接器。它将连接器配置为“轮询读取”模式。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MySerialStreamConnector", "ConnectorArn": "arn:aws-cn:greengrass:区域::/connectors/SerialStream/versions/2", "Parameters": { "BaudRate" : "9600", "Timeout" : "25", "SerialPort" : "/dev/serial1", "SerialPort-ResourceId" : "my-serial-port-resource", "PollingRead" : "true", "PollingReadLength" : "30", "PollingReadInterval" : "30", "PollingReadType" : "hex" } } ] }'

在 AWS IoT Greengrass 控制台 中,您可以从该组的 Connectors (连接器)页面添加一个连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)

输入数据

此连接器接受关于两个 MQTT 主题的串行端口读取或写入请求。输入消息必须采用 JSON 格式。

  • 读取请求位于serial/+/read/# 主题上。

  • 写入请求位于 serial/+/write/# 主题上。

要发布到这些主题,请将 + 通配符替换为核心事物名称,将 # 通配符替换为串行端口的路径。例如:

serial/core-thing-name/read/dev/serial-port
主题筛选条件:serial/+/read/#

使用此主题向串行引脚发送按需读取请求。读取请求的限制为最多 63994 字节的读取长度。

消息属性
readLength

要从串行端口读取的数据长度。

必需:true

类型:string

有效模式:^[1-9][0-9]*$

type

要读取的数据的类型。

必需:true

类型:string

有效值:ascii, hex

有效模式:(?i)^(ascii|hex)$

id

请求的任意 ID。此属性用于将输入请求映射到输出响应。

必需:false

类型:string

有效模式:.+

示例输入
{ "readLength": "30", "type": "ascii", "id": "abc123" }
主题筛选条件:serial/+/write/#

使用此主题向串行引脚发送写入请求。写入请求的限制为最多 128000 字节的数据长度。

消息属性
data

要写入到该串行端口的字符串。

必需:true

类型:string

有效模式:^[1-9][0-9]*$

type

要读取的数据的类型。

必需:true

类型:string

有效值:ascii, hex

有效模式:^(ascii|hex|ASCII|HEX)$

id

请求的任意 ID。此属性用于将输入请求映射到输出响应。

必需:false

类型:string

有效模式:.+

示例输入:ASCII 请求
{ "data": "random serial data", "type": "ascii", "id": "abc123" }
示例输入:十六进制请求
{ "data": "base64 encoded data", "type": "hex", "id": "abc123" }

输出数据

连接器发布关于两个主题的输出数据:

  • 来自连接器的关于 serial/+/status/# 主题的状态信息。

  • 来自读取请求的响应(关于 serial/+/read_response/# 主题)。

当发布到此主题时,连接器会将 + 通配符替换为核心事物名称,并将 # 通配符替换为串行端口的路径。例如:

serial/core-thing-name/status/dev/serial-port
主题筛选条件:serial/+/status/#

使用此主题侦听读取和写入请求的状态。如果请求包含 id 属性,则该属性将在响应中返回。

示例输出:成功
{ "response": { "status": "success" }, "id": "abc123" }
示例输出:失败

失败响应包含一个 error_message 属性,用于描述在执行读取或写入操作时遇到的错误或超时。

{ "response": { "status": "fail", "error_message": "Could not write to port" }, "id": "abc123" }
主题筛选条件:serial/+/read_response/#

使用此主题接收来自读取操作的响应数据。如果类型为 hex,则响应数据经过 Base64 编码。

输出示例
{ "data": "output of serial read operation" "id": "abc123" }

示例用法

以下是 Lambda 功能将输入消息发送到连接器的示例。

注意

该 Python 功能使用 AWS IoT Greengrass Core 开发工具包 来发布 MQTT 消息。您可以使用以下 pip 命令在核心设备上安装 SDK 的 Python 版本:

pip install greengrasssdk
import greengrasssdk import json TOPIC_REQUEST = 'serial/CORE_THING_NAME/write/dev/serial1' # Creating a greengrass core sdk client iot_client = greengrasssdk.client('iot-data') def create_serial_stream_request(): request = { "data": "TEST", "type": "ascii", "id": "abc123" } return request def publish_basic_request(): iot_client.publish(payload=json.dumps(create_serial_stream_request()), topic=TOPIC_REQUEST) publish_basic_request() def function_handler(event, context): return

许可证

序列号流 连接器包含以下第三方软件/许可:

此连接器按照 Greengrass 核心软件许可协议发布。

Changelog

下表描述了连接器每个版本中所做的更改。

版本

更改

2

用于 AWS 区域支持的已更新连接器 ARN。

1

首次发布。

Greengrass 组一次只能包含一个版本的连接器。

另请参阅