探测器模型限制 - Amazon IoT Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

探测器模型限制

创建探测器模型时需要考虑以下事项。

如何使用actionsfield

这些区域有:actions字段是对象的列表。您可以有多个对象,但每个对象只允许一个操作。

"actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } { "setVariable": { "variableName": "temperatureIsTooHigh", "value": "$variable.temperatureIsTooHigh - 1" } } ]
如何使用conditionfield

这些区域有:condition是必需的transitionEvents,并且在其他情况下是可选的。

如果condition字段不存在,它等同于"condition": true

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

变量值的可用性

默认情况下,如果在事件中设置了变量的值,则其新值不可用或用于评估同一组中其他事件中的条件。新值不可用或在同一个onInputonEnter或者onExit字段。

设置evaluationMethod参数来更改此行为。何时evaluationMethod设置为SERIAL,会按事件定义的顺序更新变量并计算事件条件。否则,只有在评估所有事件条件后才会更新变量并执行事件(当evaluationMethod设置或默认设置为BATCH)。

前面的示例说明evaluationMethod设置为或默认设置为BATCH。在"Dangerous"状态,在onInput字段,"$variable.pressureThresholdBreached""Pressure Okay"事件(当当前输入的压力小于或等于 70 时)。

{ "eventName": "Pressure Okay", "condition": "$input.PressureInput.sensorData.pressure <= 70", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } ] }

检测器应转换回"Normal"状态时"$variable.pressureThresholdBreached"达到 0(即当探测器收到三个小于或等于 70 的连续压力读数时)。这些区域有:"BackToNormal"中的事件transitionEvents必须测试"$variable.pressureThresholdBreached"小于或等于 1(不是 0),并再次验证"$input.PressureInput.sensorData.pressure"小于或等于 70。

"transitionEvents": [ { "eventName": "BackToNormal", "condition": "$input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 1", "nextState": "Normal" } ]

否则,如果条件仅测试变量的值,则两个正常读数后跟一个超压读数将满足该条件并转换回"Normal"状态。条件正在查看"$variable.pressureThresholdBreached"是在上一次处理输入时给出的。变量的值将重置为 3"Overpressurized"事件,但请记住,此新值尚不适用于任何condition

默认情况下,每次控件输入onInput字段,任何condition只能看到变量的值,就像我们开始处理输入时那样,在它被onInput。同样也是如此onEnteronExit。当我们进入或退出状态时对变量所做的任何更改都不适用于同一个onEnter或者onExit字段。

更新检测器模型时的延迟

如果更新、删除和重新创建检测器模型(请参阅更新检测器模型),则在删除所有产生的检测器(实例)之前会有一些延迟,并使用新模型重新创建检测器。在新检测器模型生效和新输入到达后,它们将重新创建。在此期间,以前版本的探测器模型产生的探测器可能会继续处理输入。在此期间,您可能会继续接收由以前的检测器型号定义的警报。

输入键中的空格

输入键中允许使用空格,但对键的引用必须用反引号括起来,无论是在输入属性的定义中还是在表达式中引用键的值时。例如,给定一个消息负载如下所示:

{ "motor id": "A32", "sensorData" { "motor pressure": 56, "motor temperature": 39 } }

使用以下命令定义输入。

{ "inputName": "PressureInput", "inputDescription": "Pressure readings from a motor", "inputDefinition": { "attributes": [ { "jsonPath": "sensorData.`motor pressure`" }, { "jsonPath": "`motor id`" } ] } }

在条件表达式中,您还必须使用反引号引用任何此类键的值。

$input.PressureInput.sensorData.`motor pressure`