

终止支持通知：2026 年 5 月 20 日， AWS 将终止对的支持。 AWS IoT Events 2026 年 5 月 20 日之后，您将无法再访问 AWS IoT Events 控制台或 AWS IoT Events 资源。有关更多信息，请参阅[AWS IoT Events 终止支持](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 常见 AWS IoT Events 问题和解决方案
<a name="iotevents-error-messages"></a>

请参阅以下部分，对错误进行故障排除，并找到解决问题的可能解决方案 AWS IoT Events。

**Topics**
+ [探测器模型创建错误](#create-detector-model)
+ [从已删除的探测器模型获取更新](#update-detector-model)
+ [操作触发失败（满足条件时）](#no-action)
+ [操作触发失败（违反阈值时）](#trigger-action)
+ [状态用途不正确](#wrong-state)
+ [连接消息](#connection-aborted-error)
+ [InvalidRequestException 消息](#invalid-request)
+ [Amazon CloudWatch 日志`action.setTimer`错误](#cw-logs-timer)
+ [Amazon CloudWatch 有效负载错误](#cw-logs-payload)
+ [数据类型不兼容](#troubleshoot-expressions-incompatible-data-types)
+ [向发送消息失败 AWS IoT Events](#failed-to-send-to-iot-events)

## 探测器模型创建错误
<a name="create-detector-model"></a>

我在尝试创建探测器模型时出错。

### 解决方案
<a name="w2aac42c11b7b5b1b1"></a>

 创建探测器模型时，您必须考虑以下限制。
+ 每个 `action` 字段中只允许执行一个操作。
+ 对于`transitionEvents`，`condition` 是必填项。对于`OnEnter`、`OnInput` 和 `OnExit` 事件，它是选填项。
+ 如果`condition`字段为空，则条件表达式的计算结果等同于 `true`。
+ 条件表达式的计算结果应为布尔值。如果结果不是布尔值，则它等同于 `false` 且不会触发 `actions` 或转换为事件中指定的`nextState`。

有关更多信息，请参阅 [AWS IoT Events 探测器型号限制和限制](iotevents-restrictions-detector-model.md)。

## 从已删除的探测器模型获取更新
<a name="update-detector-model"></a>

我几分钟前更新或删除了一个探测器模型，但我仍能通过 MQTT 消息或 SNS 提醒从旧探测器模型获取状态更新。

### 解决方案
<a name="w2aac42c11b9b5b1b1"></a>

如果您更新、删除或重新创建探测器模型（参见 [UpdateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_UpdateDetectorModel.html)），则在删除所有探测器实例并使用新模型之前，会有一段延迟。在此期间，输入可能会继续由先前版本的探测器模型实例处理。您可能会继续收到由先前探测器型号定义的提醒。请至少等待 7 分钟，然后再重新检查更新或者报告错误。

## 操作触发失败（满足条件时）
<a name="no-action"></a>

当满足条件时，探测器无法触发操作或过渡至新状态。

### 解决方案
<a name="w2aac42c11c11b5b1b1"></a>

验证探测器的条件表达式的计算结果是否为布尔值。如果结果不是布尔值，则它等同于 `false` 且不会触发 `action` 或转换为事件中指定的`nextState`。有关更多信息，请参阅[条件表达式语法](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-conditional-expressions.html)。

## 操作触发失败（违反阈值时）
<a name="trigger-action"></a>

当条件表达式中的变量达到指定值时，探测器不会触发操作或事件转换。

### 解决方案
<a name="w2aac42c11c13b5b1b1"></a>

如果您为`onInput`、`onEnter`、或`onExit`更新`setVariable`，则在当前处理周期内评估任何`condition`时都不会使用新值。相反，原始值会在当前周期完成前一直使用。您可通过按探测器模型定义设置`evaluationMethod`参数，以更改此行为。如果将`evaluationMethod`设置为`SERIAL`，则按事件的定义顺序更新变量并评估事件条件。如果将`evaluationMethod`设置为`BATCH`（默认），则仅在评估所有事件条件后才会更新变量并执行事件。

## 状态用途不正确
<a name="wrong-state"></a>

当我尝试通过`BatchPutMessage`向输入发送消息时，探测器进入错误的状态。

### 解决方案
<a name="w2aac42c11c15b5b1b1"></a>

 如果您使用[BatchPutMessage](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchPutMessage.html)向输入发送多条消息，则无法保证消息或输入的处理顺序。为保证顺序，请一次发送一条消息，然后每次等待`BatchPutMessage`以确认成功。

## 连接消息
<a name="connection-aborted-error"></a>

当我尝试调用 API 时收到了`('Connection aborted.', error(54, 'Connection reset by peer'))`错误。

### 解决方案
<a name="w2aac42c11c17b5b1b1"></a>

验证 OpenSSL 是否使用 TLS 1.1 或更高版本建立连接。这应当是大多数 Linux 发行版或 Windows 7 及更高版本下的默认设置。macOS 用户可能需要升级 OpenSSL。

## InvalidRequestException 消息
<a name="invalid-request"></a>

当我尝试打电话 InvalidRequestException 时我明白了`CreateDetectorModel`，`UpdateDetectorModel` APIs.

### 解决方案
<a name="w2aac42c11c19b5b1b1"></a>

查看以下内容，以帮助解决问题。有关更多信息，请参阅[CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html)和[UpdateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_UpdateDetectorModel.html)。
+ 确保不要同时使用`seconds`和`durationExpression`作为`SetTimerAction`的参数。
+ 请确保您的`durationExpression`字符串表达式有效。字符串表达式可以包含数字、变量 (`$variable.<variable-name>`) 或输入值 (`$input.<input-name>.<path-to-datum>`)。

## Amazon CloudWatch 日志`action.setTimer`错误
<a name="cw-logs-timer"></a>

您可以设置 Amazon CloudWatch Logs 来监控 AWS IoT Events 探测器模型实例。以下是您在使用时生成的 AWS IoT Events常见错误`action.setTimer`。
+ **错误：**无法将名为`{{<timer-name>}}`的计时器的持续时间表达式求值为数字。

### 解决方案
<a name="w2aac42c11c21b5b1b3b1b1"></a>

   确保您的`durationExpression`字符串表达式可以转换为数字。不允许使用其他数据类型，如布尔值。
+ **错误：**名为`{{<timer-name>}}`的计时器的持续时间表达式的计算结果大于 31622440。为确保准确性，请确保您的持续时间表达式指介于 60 和 31622400 之间的值。

### 解决方案
<a name="w2aac42c11c21b5b3b3b1b1"></a>

   确保您的计时器持续时间小于或等于 31622400 秒。持续时间的计算结果向下舍入为最接近的整数。
+ **错误：**名为`{{<timer-name>}}`的计时器的持续时间表达式的计算结果小于 60。为确保准确性，请确保您的持续时间表达式指介于 60 和 31622400 之间的值。

### 解决方案
<a name="w2aac42c11c21b5b5b3b1b1"></a>

   确保计时器的持续时间大于或等于 60 秒。持续时间的计算结果向下舍入为最接近的整数。
+ **错误：**名为`{{<timer-name>}}`的计时器的持续时间表达式的结果无法计算。检查变量名称、输入名称和数据路径，以确保引用了现有变量和输入值。

### 解决方案
<a name="w2aac42c11c21b5b7b3b1b1"></a>

   确保您的字符串表达式引用了现有的变量和输入值。字符串表达式可以包含数字、变量 (`$variable.{{variable-name}}`) 和输入值 (`$input.{{input-name}}.{{path-to-datum}}`)。
+ **错误：**无法设置名为`<timer-name>`的计时器。请检查您的持续时间表达式，然后重试。

### 解决方案
<a name="w2aac42c11c21b5b9b3b1b1"></a>

   请查看[SetTimerAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetTimerAction.html)操作以确保您指定了正确的参数，然后再次设置计时器。

有关更多信息，请参阅[开发 AWS IoT Events 探测器模型时启用 Amazon CloudWatch 日志记录](https://docs.aws.amazon.com/iotevents/latest/developerguide/best-practices.html#best-practices-cw-logs)。

## Amazon CloudWatch 有效负载错误
<a name="cw-logs-payload"></a>

您可以设置 Amazon CloudWatch Logs 来监控 AWS IoT Events 探测器模型实例。以下是您在配置操作负载时生成的 AWS IoT Events常见错误和警告。
+ **错误：**我们无法求解您的操作表达式。确保变量名称、输入名称和数据路径引用了现有变量和输入值。此外，请验证有效负载的大小是否小于 1 KB，即有效负载的最大允许大小。

### 解决方案
<a name="w2aac42c11c23b5b1b3b1b1"></a>

   确保输入正确的变量名称、输入名称和数据路径。如果操作有效负载大于 1 KB，您也可能会收到此错误消息。
+ **错误：**我们无法解析`{{<action-type>}}`有效负载的内容表达式。输入语法正确的内容表达式。

### 解决方案
<a name="w2aac42c11c23b5b3b3b1b1"></a>

   内容表达式可以包含字符串 (`'{{string}}'`)、变量 (`$variable.{{variable-name}}`)、输入值 (`$input.{{input-name}}.{{path-to-datum}}`)、字符串串联，以及包含 `${}`的字符串。
+ **错误：**您的负载表达式 {{{expression}}} 无效。定义的负载类型为 JSON，因此您必须指定 AWS IoT Events 一个计算结果为字符串的表达式。

### 解决方案
<a name="w2aac42c11c23b5b5b5b1b1"></a>

   如果指定的负载类型为 JSON，则 AWS IoT Events 首先检查服务是否可以将您的表达式计算为字符串。计算结果不得为布尔值或数字。如果验证失败，您可能会收到此错误消息。
+ **警告：**此操作已执行，但我们无法将操作负载的内容表达式求值为有效的 JSON。定义的有效负载类型为 JSON。

### 解决方案
<a name="w2aac42c11c23b5b7b3b1b1"></a>

   如果您将有效负载类型定义为，请确保 AWS IoT Events 可以将操作负载的内容表达式评估为有效的 JSON `JSON`。 AWS IoT Events 即使 AWS IoT Events 无法将内容表达式评估为有效的 JSON，也会运行操作。

有关更多信息，请参阅[开发 AWS IoT Events 探测器模型时启用 Amazon CloudWatch 日志记录](https://docs.aws.amazon.com/iotevents/latest/developerguide/best-practices.html#best-practices-cw-logs)。

## 数据类型不兼容
<a name="troubleshoot-expressions-incompatible-data-types"></a>

消息：在以下表达式中找到了不兼容的`<inferred-types>`数据类型 [`<reference>`]：`<expression>`

### 解决方案
<a name="w2aac42c11c25b5b1b1"></a>

 收到此错误的原因可能是以下任一原因：
+ 您引用的计算结果与表达式中的其他操作数不兼容。
+ 不支持传递至函数的自变量的类型。

当您在表达式中使用引用时，请检查以下内容：<a name="expression-reference-type-compatibility"></a>
+ 当您将引用值作为一个或多个运算符的操作数时，确保您引用的所有数据类型均兼容。

  例如，在以下表达式中，整数 `2` 是 `==` 和 `&&` 运算符的操作数。为确保操作数兼容，`$variable.testVariable + 1` 和 `$variable.testVariable`必须引用整数或小数。

  此外，整数 `1` 是运算符`+`的操作数。因此，`$variable.testVariable` 必须引用整数或小数。

  ```
  ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  ```
+ 当您使用引用作为传递给函数的自变量时，请确保该函数支持您引用的数据类型。

  例如，以下 `timeout("{{time-name}}")` 函数需要带有双引号的字符串作为自变量。如果使用引用作为{{timer-name}}值，则必须使用双引号引用字符串。

  ```
  timeout("{{timer-name}}")
  ```
**注意**  
对于`convert({{type}}, {{expression}})`函数，如果您使用引用作为{{type}}值，则引用的计算结果必须是`String``Decimal`、或`Boolean`。

有关更多信息，请参阅 [AWS IoT Events 表达式中输入和变量的参考](iotevents-expressions.md#expression-reference)。

## 向发送消息失败 AWS IoT Events
<a name="failed-to-send-to-iot-events"></a>

消息：无法向物联网事件发送消息

### 解决方案
<a name="w2aac42c11c27b5b1b1"></a>

出现此错误的原因如下：
+ 输入消息有效负载不包含 `Input attribute Key`。
+ `Input attribute Key`与输入定义中指定的 JSON 路径不同。
+ 输入消息与 AWS IoT Events 输入中定义的架构不匹配。

**注意**  
其他服务的数据摄取也会出现失败。

**Example**  
例如 AWS IoT Core，在中， AWS IoT 规则将失败，并显示以下消息 `Verify the Input Attribute key.`

要解决这个问题，请确保输入有效载荷消息架构符合 AWS IoT Events 输入定义并且`Input attribute Key`位置匹配。有关更多信息，请参阅[在中为模型创建输入 AWS IoT Events](create-input-overview.md)以了解如何定义 AWS IoT Events 输入。