公用Amazon IoT Events问题和解决方案 - Amazon IoT Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

公用Amazon IoT Events问题和解决方案

请参阅以下部分,以解决错误并找到可能的解决方案来解决Amazon IoT Events.

探测器模型创建错误

尝试创建探测器模型时收到了错误。

创建检测器模型时,必须考虑以下限制。

  • 每个操作只允许一个action字段中返回的子位置类型。

  • 这些区域有:condition是必填字段transitionEvents. 这是可选的OnEnterOnInput, 和OnExit事件.

  • 如果condition字段为空,则条件表达式的评估结果等效于true.

  • 条件表达式的计算结果应为布尔值。如果结果不是布尔值,则相当于false并且不会触发actions或转换到nextState在事件中指定。

有关更多信息,请参阅 探测器模型限制

从已删除的检测器型号进行的更新

几分钟前我更新或删除了检测器型号,但我仍然通过 MQTT 消息或 SNS 警报从旧检测器型号获取状态更新。

如果您更新、删除或重新创建检测器模型(请参阅更新检测器模型),则在删除所有检测器实例并使用新模型之前会出现延迟。在此期间,以前版本的探测器模型的实例可能会继续处理输入。您可能会继续接收由之前的探测器模型定义的警报。等待至少七分钟,然后再重新检查更新或报告错误。

操作触发器失败(满足条件时)

当满足条件时,检测器无法触发操作或转换到新状态。

验证检测器条件表达式的计算结果是否为布尔值。如果结果不是布尔值,则相当于false并且不会触发action或转换到nextState在事件中指定。有关更多信息,请参阅 。条件表达式语法.

操作触发器失败(超过阈值时)

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

如果您更新setVariable对于 来说为onInputonEnter,或者onExit,则在评估任何condition在当前处理周期中。而是使用原始值,直到当前周期完成为止。您可以通过将evaluationMethod参数中的检测器模型定义。何时evaluationMethod设置为SERIAL,将按事件定义的顺序更新并计算事件条件。何时evaluationMethod设置为BATCH(默认值),则只有在评估所有事件条件后才会更新变量并执行事件。

状态使用不正确

当我尝试通过使用BatchPutMessage.

如果您使用BatchPutMessage向输入发送多条消息,则不能保证消息或输入的处理顺序。为了保证订购,请一次发送一条消息,然后每次等待BatchPutMessage来确认成功。

连接消息

我得到了一个('Connection aborted.', error(54, 'Connection reset by peer'))错误,当我尝试调用或调用 API。

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

InvalidRequestException 息

InvalidRequestException 尝试调用CreateDetectorModelUpdateDetectorModelAPI。

检查以下内容以帮助解决问题。有关更多信息,请参阅 。CreateDetectorModel更新检测器模型.

  • 确保您不同时使用secondsdurationExpression作为SetTimerAction同时提交。

  • 确保您的字符串表达式durationExpression是有效的。字符串表达式可以包含数字、变量 ($variable.<variable-name>)或输入值($input.<input-name>.<path-to-datum>)。

Amazon CloudWatch Logsaction.setTimer错误

您可以设置 Amazon CloudWatch Logs 来监控Amazon IoT Events探测器模型实例。以下是由Amazon IoT Events,当您使用action.setTimer.

  • Error: 您的计时器的持续时间表达式<timer-name>不能评估设置为数字。

    确保您的字符串表达式durationExpression可以转换为数字。不允许使用其他数据类型(如布尔值)。

  • Error: 计时器的持续时间表达式的评估结果,名为<timer-name>的值大于 31622440。为确保准确性,请确保持续时间表达式引用介于 60-31622400 之间的值。

    确保计时器的持续时间小于或等于 31622400 秒。持续时间的计算结果向下舍入为最接近的整数。

  • Error: 计时器的持续时间表达式的评估结果,名为<timer-name>小于 60。为确保准确性,请确保持续时间表达式引用介于 60-31622400 之间的值。

    确保计时器的持续时间大于或等于 60 秒。持续时间的计算结果向下舍入为最接近的整数。

  • Error: 您的计时器的持续时间表达式<timer-name>无法进行评估。检查变量名称、输入名称和数据路径,以确保引用现有变量和输入。

    确保字符串表达式引用现有变量和输入。字符串表达式可以包含数字、变量 ($variable.variable-name)和输入值($input.input-name.path-to-datum)。

  • Error: 无法将名为的计时器设置为<timer-name>. 检查您的持续时间表达式并重试。

    请参阅设置计时器操作操作,以确保您指定了正确的参数,然后再次设置计时器。

有关更多信息,请参阅 。在开发时启用 Amazon CloudWatch 日志记录Amazon IoT Events探测器模型数.

Amazon CloudWatch 负载错误

您可以设置 Amazon CloudWatch Logs 来监控Amazon IoT Events探测器模型实例。以下是由Amazon IoT Events,当您配置操作负载时。

  • Error: 我们无法评估您的行动表达。确保变量名称、输入名称和数据路径引用现有变量和输入值。此外,验证有效载荷的大小是否小于 1 KB,即有效载荷允许的最大大小。

    请确保输入正确的变量名称、输入名称和数据路径。如果操作有效负载大于 1 KB,您也可能会收到此错误消息。

  • Error: 我们无法解析您的内容表达式以获取<action-type>. 输入具有正确语法的内容表达式。

    内容表达式可以包含字符串('string'), 变量 ($variable.variable-name), 输入值 ($input.input-name.path-to-datum)、字符串连接以及包含${}.

  • Error: 您的有效载荷表达式 {expression} 无效。定义的有效负载类型为 JSON,因此您必须指定一个Amazon IoT Events将计算结果为字符串。

    如果指定的有效载荷类型为 JSON,则Amazon IoT Events首先检查服务是否可以将您的表达式计算为字符串。评估结果不能是布尔值或数字。如果验证失败,您可能会收到此错误。

  • 警告: 操作已执行,但我们无法将操作负载的内容表达式评估为有效的 JSON。定义的有效载荷类型为 JSON。

    确保Amazon IoT Events可以将操作负载的内容表达式评估为有效的 JSON,如果您将有效负载类型定义为JSON.Amazon IoT Events运行该操作,即使Amazon IoT Events无法将内容表达式评估为有效的 JSON。

有关更多信息,请参阅 。在开发时启用 Amazon CloudWatch 日志记录Amazon IoT Events探测器模型数.

数据类型不兼容

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

由于以下原因之一,您可能会收到此错误:

  • 引用的评估结果与表达式中的其他操作数不兼容。

  • 不支持传递给函数的参数类型。

在表达式中使用引用时,请检查以下内容:

  • 当您将引用用作具有一个或多个运算符的操作数时,请确保您引用的所有数据类型都兼容。

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

    此外,整数1+运算符。因此,$variable.testVariable必须引用整数或小数。

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

    例如,以下内容timeout("time-name")函数需要一个带双引号的字符串作为参数。如果将引用用于计时器名称值,则必须引用带双引号的字符串。

    timeout("timer-name")
    注意

    对于convert(type, expression)函数,如果您使用type值,则引用的评估结果必须是StringDecimal,或者Boolean.

有关更多信息,请参阅References