AWS IoT Events 问题排查 - AWS IoT Events
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS IoT Events 问题排查

请参阅以下部分,以排除错误并找到和解决 AWS IoT Events.

当我尝试创建检测器模型时,我出现错误。

解决方案: 创建检测器模型时,请确保考虑以下限制。

  • 每项只允许执行一项操作 action 字段。

  • conditiontransitionEvents。可选择用于 OnEnter, OnInput,和 OnExit 活动。

  • 如果 condition 字段为空,条件表达式的计算结果等于 true.

  • 条件表达式的评估结果应为布尔值。如果结果不是布尔值,则等同于 false 并且不会触发 actions 或过渡到 nextState 在事件中指定。

有关更多信息,请参阅检测器型号限制

几分钟前我删除或更新探测器型号后,我通过MQTT消息或SNS警报从旧探测器型号获得状态更新。

解决方案: 如果您更新、删除或重新创建检测器模型(请参阅 更新检测器模型),在删除所有生成的检测器(实例)并使用新模型重新创建检测器之前会有延迟。在新检测器模型生效且新输入到达后重新创建它们。在此期间,输入可能继续由由先前版本的检测器模型产生的检测器处理。在此期间,您可能会继续接收先前检测器型号定义的警报。至少等待七分钟,然后再重新检查更新或报告错误。

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

解决方案: 验证条件表达式的评估结果是否为布尔值。如果结果不是布尔值,则等同于 false 并且不会触发 action 或过渡到 nextState 在事件中指定。有关更多信息,请参阅 条件表达式语法.

当变量达到指定值时,检测器不会触发操作或过渡事件。

解决方案: 如果更新 setVariableonInput, onEnter,或 onExit,评估任何时不使用新值 condition 在当前处理循环期间。而是使用原始值,直到当前周期完成。您可以通过设置 evaluationMethod 检测器模型定义中的参数。何时 evaluationMethod 设定为 SERIAL,变量将更新,并根据事件定义的顺序评估事件条件。何时 evaluationMethod 设定为 BATCH (默认),变量更新,仅在评估所有事件条件后执行事件。

当我尝试使用发送消息到输入时,检测器进入错误状态 BatchPutMessage.

解决方案: 如果您使用 BatchPut消息 向输入发送多个消息,则无法保证处理消息或输入的顺序。要保证订购,请一次发送一个消息,每次等待 BatchPutMessage 以确认成功。

我得到 ('Connection aborted.', error(54, 'Connection reset by peer')) 尝试调用API时出错。

解决方案: 验证OpenSSL是否使用TLS1.1或更高版本建立连接。这应该是大多数Linux发行版或Windows版本7及更高版本下的默认值。macOS用户可能需要升级OpenSSL。

当我尝试致电时,我收到无效请求例外 CreateDetectorModelUpdateDetectorModel API。

解决方案: 勾选以下内容,帮助解决问题。有关更多信息,请参阅 创建检测器模型更新检测器模型.

  • 确保您没有同时使用 secondsdurationExpression 作为 SetTimerAction 同步。

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

Amazon CloudWatch Logs 包含错误消息,当我使用 action.setTimer.

你可以设置 Amazon CloudWatch Logs 监控 AWS IoT Events 检测器模型实例。以下是生成的常见错误 AWS IoT Events,当您设置计时器时。

  • 错误: 无法计算名为<timer-name>的计时器的持续时间表达式为数字。

    解决方案: 确保您的字符串表达式 durationExpression 可转换为数字。不允许其他数据类型,例如布尔。

  • 错误: 名为<timer-name>的计时器的持续时间表达式的评估结果大于31622440。为确保准确性,请确保您的持续时间表达式是指介于60-31622400之间的一个值。

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

  • 错误: 名为<timer-name>的计时器的持续时间表达式计算结果小于60。为确保准确性,请确保您的持续时间表达式是指介于60-31622400之间的一个值。

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

  • 错误: 无法计算<timer-name>计时器的持续时间表达式。检查变量名称、输入名称和数据路径,以确保参考现有变量和输入。

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

  • 错误: 无法设置名为<timer-name>的计时器。请检查您的持续时间表达式,然后重试。

    解决方案: 查看 SetTimer操作 操作,以确保您指定了正确的参数,然后再次设置计时器。

有关更多信息,请参阅 启用 Amazon CloudWatch 在开发 AWS IoT Events 检测器型号.

Amazon CloudWatch Logs 包含错误和警告消息,当我使用有效负载时。

你可以设置 Amazon CloudWatch Logs 监控 AWS IoT Events 检测器模型实例。以下是生成的常见错误和警告 AWS IoT Events,当您配置操作有效负载时。

  • 错误: 我们无法评估您针对该行动的表达式。确保变量名称、输入名称和数据路径参考了现有变量和输入值。请注意,负载的最大允许大小为1KB。

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

  • 错误: 我们无法为<action-type>的负载解析您的内容表达式。输入语法正确的内容表达式。

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

  • 错误: 您的负载表达式{expression}无效。定义的有效负载类型为JSON,因此您必须指定 AWS IoT Events 将评估为字符串。

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

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

    解决方案: 确保 AWS IoT Events 如果将负载类型定义为 JSON。 AWS IoT Events 即使 AWS IoT Events 无法将内容表达式评估为有效的JSON。

有关更多信息,请参阅 启用 Amazon CloudWatch 在开发 AWS IoT Events 检测器型号.

错误: 找到<的不兼容数据类型[<inferred-types>]reference>在以下表达式中: </<expression>的

解决方案: 您可能收到此错误,原因如下:

  • 所评估参考的结果与您的表达式中的其他操作数不兼容。

  • 不支持传递给函数的自变量的类型。

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

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

    例如,在以下表达式中,整数 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 值,则引用的计算结果必须为 StringDecimalBoolean

有关更多信息,请参阅References