探测器模型分析和诊断信息 - AWS IoT Events

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

探测器模型分析和诊断信息

探测器模型分析收集以下诊断信息:

  • 级别 - 分析结果的严重性级别。根据严重性级别,分析结果分为三大类:

    • 信息 (INFO) - 信息结果告诉您探测器模型中的一个重要字段。这类结果通常不需要立即采取行动。

    • 警告 (WARNING) - 警告结果会提请特别注意可能会导致探测器模型出现问题的字段。我们建议您在生产环境中使用探测器模型之前,先查看警告并采取必要的行动。否则,探测器模型可能无法按预期工作。

    • 错误 (ERROR - 错误结果会通知您探测器模型中发现的问题。当您尝试发布探测器模型时, AWS IoT Events 会自动执行这组分析。在发布探测器模型之前,必须修复所有错误。

  • 位置 - 包含可用于在探测器模型中定位可供分析结果引用的字段的信息。位置通常包括状态名称、过渡事件名称、事件名称和表达式(例如 in state TemperatureCheck in onEnter in event Init in action setVariable)。

  • 类型 - 分析结果的类型。分析类型分为以下几类:

    • supported-actions— AWS IoT Events 可以在检测到指定事件或过渡事件时调用操作。您可以定义内置操作以使用计时器或设置变量,或者将数据发送到其他 AWS 服务。在 AWS 提供服务的 AWS 区域,您必须指定适用于其他 AWS 服务的操作。

    • service-limits— 服务配额,也称为限制,是您的 AWS 账户中服务资源或操作的最大或最小数量。除非另有说明,否则,每个限额是区域特定的。根据您的业务需求,您可以更新探测器模型以避免遇到限制或申请增加配额。您可以请求增加某些配额,但其他一些配额无法增加。有关更多信息,请参阅 配额

  • structure — 探测器模型必须具有所有必需的组件,例如状态,并遵循 AWS IoT Events 支持的结构。探测器模型必须至少具有一种状态和一个能评估输入数据以检测重要事件的条件。当检测到事件时,探测器模型会过渡到下一个状态并可以调用操作。这些事件称为过渡事件。过渡事件必须引导下一个要进入的状态。

  • expression-syntax— AWS IoT Events 提供了多种在创建和更新探测器模型时指定值的方法。您可以在表达式中使用文字、运算符、函数、引用和替代模板。您可以使用表达式来指定文字值,也 AWS IoT Events 可以在指定特定值之前对表达式求值。您的表达式必须遵循所需的语法。有关更多信息,请参阅 用于筛选、转换和处理事件数据的表达式

    中的检测器模型表达式 AWS IoT Events 可以引用特定的数据或资源。

    • data-type— AWS IoT Events 支持整数、小数值、字符串和布尔数据类型。如果 AWS IoT Events 可以在表达式求值期间自动将一种数据类型的数据转换为另一种数据类型,则这些数据类型是兼容的。

      注意
      • 整数和小数值是唯一受 AWS IoT Events支持的兼容数据类型。

      • AWS IoT Events 无法计算算术表达式,因为 AWS IoT Events 无法将整数转换为字符串。

    • referenced-data — 必须先定义探测器模型中引用的数据,然后才能使用这些数据。例如,如果要向 DynamoDB 表发送数据,则必须先定义一个引用表名的变量,然后才能在表达式 ($variable.TableName) 中使用该变量。

    • referenced-resource — 探测器模型使用的资源必须可用。您必须先定义资源,然后才能使用它们。例如,您要创建探测器模型以监控温室的温度。必须先定义一个输入 ($input.TemperatureInput),将传入的温度数据路由到探测器模型,然后才能使用 $input.TemperatureInput.sensorData.temperature 来引用温度。

请参阅以下部分,对错误进行故障排除,并通过对探测器模型的分析找到可能的解决方案。

探测器模型错误消息故障排除

上述类型错误提供有关探测器模型的诊断信息,并与您可能检索到的消息相对应。使用这些消息和建议的解决方案来排除探测器模型的错误。

Location

包含 Location 相关信息的分析结果对应以下错误消息:

  • 消息 - 包含有关分析结果的其他信息。这可以是信息、警告或错误消息。

    如果您指定的操作 AWS IoT Events 当前不支持,则可能会收到此错误消息。有关受支持的操作列表,请参阅支持的接收数据和触发操作的操作

supported-actions

包含 supported‐actions 相关信息的分析结果对应以下错误消息:

  • 消息:动作定义中存在无效的操作类型:action-definition.

    如果您指定的操作 AWS IoT Events 当前不支持,则可能会收到此错误消息。有关受支持的操作列表,请参阅支持的接收数据和触发操作的操作

  • 消息: DetectorModel 定义有一个 aws 服务 行动,但是 aws 服务 该地区不支持服务 region-name.

    如果您指定的操作受支持,但该操作在您当前的地区不可用 AWS IoT Events,则您可能会收到此错误消息。当您尝试向该地区不可用的 AWS 服务发送数据时,可能会发生这种情况。您还必须为两者 AWS IoT Events 以及您正在使用的 AWS 服务选择相同的区域。

service-limits

包含 service‐limits 相关信息的分析结果对应以下错误消息:

  • 消息:有效载荷中允许的内容表达式超出了限制 content-expression-size 事件中的字节 event-name 处于状态 state-name.

    如果操作负载的内容表达式大于 1024 字节,则可能会收到此错误消息。负载的内容表达式大小最多可为 1024 字节。

  • 消息:探测器模型定义中允许的状态数超过限制 states-per-detector-model.

    如果您的探测器模型的状态超过 20 个,则可能会收到此错误消息。探测器模型最多可拥有 20 个状态。

  • 消息:计时器的持续时间 timer-name 至少应该是 minimum-timer-duration 长达几秒钟。

    如果计时器的持续时间少于 60 秒,则可能会收到此错误消息。我们建议计时器的持续时间应在 60 到 31622400 秒之间。如果您指定计时器持续时间的表达式,则持续时间表达式的计算结果向下舍入为最接近的整数。

  • 消息:每个事件允许的操作数量超过限制 actions-per-event 在探测器模型定义中

    如果事件的操作超过 10 个,您可能会收到此错误消息。对于探测器模型中的每个事件,最多可有 10 个操作。

  • 消息:每个状态允许的过渡事件数量超过限制 transition-events-per-state 在探测器模型定义中。

    如果一个状态有超过 20 个过渡事件,则可能会收到此错误消息。探测器模型中的每个状态最多可拥有 20 个过渡事件。

  • 消息:每个州允许的事件数量超过限制 events-per-state 在探测器模型定义中

    如果一个状态有超过 20 个事件,您可能会收到此错误消息。探测器模型中的每个状态最多可拥有 20 个事件。

  • 消息:可以与单个输入关联的最大探测器模型数量可能已超过限制。输入 input-name 用于 detector-models-per-input 探测器模型路线。

    如果您尝试将输入路由到超过 10 个探测器模型,则可能会收到此警告消息。您最多可以将 10 个不同的探测器模型与单个探测器模型相关联。

structure

包含 structure 相关信息的分析结果对应以下错误消息:

  • 消息:动作可能只定义了一种类型,但找到了一个带有 number-of-types 类型。请分成单独的操作。

    如果您通过使用操作来创建或更新探测器模型,在单个字段中指定了两个或多个API操作,则可能会收到此错误消息。您可以定义一组 Action 对象。确保将每个操作定义为一个单独的对象。

  • 消息: TransitionEventtransition-event-name 过渡到不存在的状态 state-name.

    如果找 AWS IoT Events 不到过渡事件引用的下一个状态,则可能会收到此错误消息。确保定义了下一个状态并输入了正确的状态名称。

  • 消息: DetectorModelDefinition 有一个共享的状态名称:已找到状态 state-name 替换为 number-of-states 重复。

    如果您对一个或多个状态使用相同的名称,则可能会收到此错误消息。确保为探测器模型中的每个状态指定唯一的名称。状态名称必须具有 1-128 个字符。有效字符:a-z、A-Z、0-9、_(下划线)和 -(连字符)。

  • 信息:定义的 initialStateName initial-state-name 并不对应于一个已确定的国家.

    如果初始状态名称不正确,您可能会收到此错误消息。在输入到达之前,探测器模型将保持初始(开始)状态。输入到达后,探测器模型会立即过渡到下一个状态。确保初始状态名称是已定义状态的名称,并且您输入了正确的名称。

  • 消息:探测器模型定义必须在一个条件中使用至少一个输入。

    如果您未在条件中指定输入,则可能会收到此错误。您必须在至少一个条件下使用至少一个输入。否则, AWS IoT Events 不评估传入的数据。

  • 消息:只有一秒钟, durationExpression 可以设置为 SetTimer。

    如果您为计时器同时使用 secondsdurationExpression,则可能会收到此错误消息。请确保使用 secondsdurationExpression 作为 SetTimerAction 的参数。有关更多信息,请参阅 “AWS IoT Events API参考SetTimerAction中的。

  • 消息:探测器模型中的操作无法访问。检查启动操作的条件。

    如果探测器模型中的某个操作无法访问,则该事件的条件评估为 false。检查包含操作的事件的条件,确保其计算结果为 true。当事件的条件计算为 true 时,操作应变得可访问。

  • 消息:正在读取输入属性,但这可能是由计时器过期引起的。

    当出现以下任一情况时,可以读取输入属性的值:

    • 已收到新的输入值。

    • 当探测器中的计时器已过期。

    为确保仅在收到输入的新值时才对输入属性进行评估,请在条件中包括对 triggerType(“Message”) 函数的调用,如下所示:

    探测器模型中正在评估的原始条件:

    if ($input.HeartBeat.status == “OFFLINE”)

    类似于以下内容:

    if ( triggerType("MESSAGE") && $input.HeartBeat.status == “OFFLINE”)

    其中,对 triggerType(“Message”) 函数的调用是在条件中提供的初始输入之前进行的。通过使用这种技术,triggerType("Message") 函数的计算结果将为 true 并满足接收新输入值的条件。有关 triggerType 函数用法的更多信息,请在AWS IoT Events 《开发人员指南》的 “表达式” 部分中搜索 triggerType

  • 消息:您的探测器模型中的状态无法访问。检查会导致过渡到所需状态的条件。

    如果探测器模型中的某个状态不可达,则导致传入过渡到该状态的条件评估为 false。检查探测器模型中传入的过渡到该不可达状态的条件是否评估为 true,这样所需的状态就可变为可访问。

  • 消息:计时器即将到期可能会导致发送意外数量的消息。

    为防止您的探测器模型因计时器已过期而进入发送意外数量的消息的无限状态,请考虑在探测器模型的条件下使用对 triggerType("Message") 函数的调用,如下所示:

    探测器模型中正在评估的原始条件:

    if (timeout("awake"))

    会转化为类似于以下内容的条件:

    if (triggerType("MESSAGE") && timeout("awake"))

    其中,对 triggerType(“Message”) 函数的调用是在条件中提供的初始输入之前进行的。

    此更改可防止在探测器中启动计时器操作,从而防止发送无限循环的消息。有关如何在探测器中使用计时器操作的更多信息,请参阅《AWS IoT Events 开发者指南》的 “使用内置操作” 页面

expression-syntax

包含 expression‐syntax 相关信息的分析结果对应以下错误消息:

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

    如果指定的负载类型为JSON,则 AWS IoT Events 首先检查服务是否可以将您的表达式计算为字符串。计算结果不得为布尔值或数字。如果验证不成功,您可能会收到此错误。

  • 消息:SetVariableAction.value 必须是表达式。无法解析值 'variable-value'

    您可以使用 SetVariableAction 来定义具有 namevalue 的变量。value 可以是字符串、数字或布尔值。您也可以为 value 指定表达式。有关更多信息 SetVariableAction,请参阅《AWS IoT Events API参考资料》中的。

  • 消息:我们无法解析你的属性表达式 (attribute-name) 用于 DynamoDB 操作。使用正确的语法输入表达式。

    必须对 DynamoDBAction. 替换模板中的所有参数使用表达式。有关更多信息,请参阅《AWS IoT Events API参考资料》ynamoDBAction中的 D

  • 消息:我们无法解析你对 D ynamoDBv 2 操作 tableName 的表达式。使用正确的语法输入表达式。

    DynamoDBv2Action 中的 tableName 必须是字符串。必须使用 tableName 的表达式。这些表达式接受文字、运算符、函数、引用和替代模板。有关更多信息,请参阅《AWS IoT Events API参考资料ynamoDBv》中的 D 2Action

  • 消息:我们无法将您的表达式评估为有效JSON。D ynamoDBv 2 操作仅支持JSON有效载荷类型。

    的有效载荷类型DynamoDBv2必须为JSON。确保它 AWS IoT Events 可以评估您的内容表达式以确定有效载荷是否有效JSON。有关更多信息,请参阅《AWS IoT Events API参考资料》中的 D ynamoDBv 2Action

  • 消息:我们无法解析你的内容表达式的有效载荷 action-type。 使用正确的语法输入内容表达式。

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

  • 消息:自定义负载必须为非空。

    如果您为操作选择了自定义负载,但没有在 AWS IoT Events 控制台中输入内容表达式,则可能会收到此错误消息。如果选择自定义负载,则必须在自定义负载下输入内容表达式。有关更多信息,请参阅AWS IoT Events API参考中的负载

  • 消息:无法解析持续时间表达式 'duration-expression'用于计时器'timer-name'.

    计时器持续时间表达式的计算结果必须是介于 60—31622400 之间的值。持续时间的计算结果向下舍入为最接近的整数。

  • 消息:无法解析表达式 'expression'for action-name

    如果指定操作的表达式语法不正确,则可能会收到此消息。请确保使用正确的语法输入表达式。有关更多信息,请参阅 筛选设备数据和定义操作的语法

  • 消息:你的 fieldName 因为IotSitewiseAction无法解析。必须在表达式中使用正确的语法。

    如果 AWS IoT Events 无法解析你的,你可能会收到这个错误 fieldName 对于IotSitewiseAction。确保 fieldName 使用 AWS IoT Events 可以解析的表达式。有关更多信息,请参阅 “AWS IoT Events API参考IotSiteWiseAction中的。

data-type

包含 data‐type 相关信息的分析结果对应以下错误消息:

  • 消息:持续时间表达式 duration-expression 用于计时器 timer-name 无效,它必须返回一个数字。

    如果 AWS IoT Events 无法将计时器的持续时间表达式计算为数字,则可能会收到此错误消息。确保您的 durationExpression 可转换为数字。不支持其他数据类型,例如布尔值。

  • 消息:表情 condition-expression 不是有效的条件表达式。

    如果 AWS IoT Events 无法将您的condition-expression值计算为布尔值,则可能会收到此错误消息。布尔值必须为 TRUEFALSE。确保您的条件表达式可以转换为布尔值。如果结果不是布尔值,则它等同于 FALSE 且不会调用操作或过渡到事件中指定的 nextState

  • 消息:数据类型不兼容 [inferred-types] 已找到 reference 在以下表达式中:expression

    解决方案:探测器模型中所有具有相同输入属性或变量的表达式都必须引用相同的数据类型。

    使用以下信息解决此问题:

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

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

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

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

      例如,以下 timeout("time-name") 函数需要带有双引号的字符串作为自变量。如果你使用参考文献 timer-name value,则必须使用双引号引用字符串。

      timeout("timer-name")
      注意

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

    有关更多信息,请参阅 表达式中输入和变量的参考

  • 消息:数据类型不兼容 [inferred-types] 与 reference。 这可能会导致运行时错误。

    如果同一个输入属性或变量的两个表达式引用了两种数据类型,则可能会收到此警告消息。确保同一输入属性或变量的表达式在探测器模型中引用相同的数据类型。

  • 消息:数据类型 [inferred‐types] 是你为运算符输入的 [operator] 与以下表达式不兼容:'expression'

    如果您的表达式组合了与指定运算符不兼容的数据类型,则可能会收到此错误消息。例如,在以下表达式中,运算符 + 与整数、小数值和字符串数据类型兼容,但不兼容布尔数据类型的操作数。

    true + false

    必须确保与运算符一起使用的数据类型兼容。

  • 消息:数据类型 [inferred‐types] 已找到 input‐attribute 不兼容,可能导致运行时错误。

    如果同一个输入属性的两个表达式引用了两种数据类型(要么是状态的 OnEnterLifecycle,要么是状态的 OnInputLifecycleOnExitLifecycle),则可能会收到此错误消息。确保OnEnterLifecycle(或 OnInputLifecycleOnExitLifecycle)中的表达式对探测器模型的每种状态都引用相同的数据类型。

  • 消息:有效载荷表达式 [expression] 无效。指定一个在运行时计算结果为字符串的表达式,因为有效载荷类型为 JSON format。

    如果您指定的负载类型为JSON,但 AWS IoT Events 无法将其表达式计算为字符串,则可能会收到此错误。确保计算结果是字符串,而不是布尔值或数字。

  • 消息:你的插值表达式 {interpolated-expression} 在运行时必须计算为整数或布尔值。否则,你的有效载荷表达式 {payload-expression} 在运行时无法解析为有效。JSON

    如果 AWS IoT Events 无法将插值表达式计算为整数或布尔值,则可能会收到此错误消息。请确保插值表达式可以转换为整数或布尔值,因为不支持其他数据类型,例如字符串。

  • 消息:IotSitewiseAction字段中的表达式类型 expression 被定义为类型 defined‐type 并推断为类型 inferred‐type。 定义的类型和推断的类型必须相同。

    如果 IotSitewiseAction 中的 propertyValue 表达式的数据类型定义与 AWS IoT Events推断的数据类型不同,则可能会收到此错误消息。确保在探测器模型中对该表达式的所有实例使用相同的数据类型。

  • 消息:数据类型 [inferred-types] 用于以下表达式IntegersetTimer操作不计算为:expression

    如果持续时间表达式的推断数据类型不是整数或小数值,则可能会收到此错误消息。确保 durationExpression 可转换为数字。不支持其他数据类型,如布尔值和字符串。

  • 消息:数据类型 [inferred-types] 与比较运算符 [] 的操作数一起使用operator] 在以下表达式中不兼容:expression

    操作数的推断数据类型 operator 在条件表达式中 (expression) 的探测器型号不匹配。操作数必须与探测器模型的所有其他部分中的匹配数据类型一起使用。

    提示

    您可以使用 convert 来更改探测器模型中表达式的数据类型。有关更多信息,请参阅 要在表达式中使用的函数

referenced-data

包含 referenced‐data 相关信息的分析结果对应以下错误消息:

  • 消息:检测到损坏计时器:计时器 timer-name 在表达式中使用,但从未设置过。

    如果您使用未设置的计时器,则可能会收到此错误消息。在表达式中使用计时器之前,必须先设置计时器。另外,请确保输入正确的计时器名称。

  • 消息:检测到损坏变量:变量 variable-name 在表达式中使用,但从未设置过。

    如果您使用未设置的变量,则可能会收到此错误消息。在表达式中使用变量之前,必须先对变量进行设置。另外,请确保输入了正确的变量名称。

  • 消息:检测到变量损坏:变量在设置为值之前在表达式中使用。

    必须先为每个变量赋一个值,然后才能在表达式中对变量进行求值。每次使用前都要设置变量的值,以便可以检索其值。另外,请确保输入了正确的变量名称。

referenced-resource

包含 referenced‐resource 相关信息的分析结果对应以下错误消息:

  • 消息:探测器模型定义包含对不存在的输入的引用。

    如果您使用表达式来引用不存在的输入,则可能会收到此错误消息。确保您的表达式引用现有的输入并输入正确的输入名称。如果没有输入,请创建一个输入。

  • 消息:探测器模型定义包含无效 InputName:input-name

    如果您的探测器模型包含无效的输入名称,则可能会收到此错误消息。确保输入了正确的输入名称。输入名称必须具有 1-128 个字符。有效字符:a-z、A-Z、0-9、_(下划线)和 -(连字符)。