本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS IoT Events 探测器型号限制和限制
创建探测器模型时,需要考虑以下事项。
- 如何使用
actions
字段 -
actions
字段是一个对象列表。您可以有多个对象,但每个对象仅有一次操作。例
"actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } { "setVariable": { "variableName": "temperatureIsTooHigh", "value": "$variable.temperatureIsTooHigh - 1" } } ]
- 如何使用
condition
字段 -
condition
是transitionEvents
的必填项,在其他情况下为可选。如果
condition
字段不存在,则等同于"condition": true
。条件表达式的计算结果应为布尔值。如果结果非布尔值,则它等同于
false
,且不会发起actions
或转换为事件中指定的nextState
。 - 变量值的可用性
-
默认情况下,如果在事件中设置了变量值,则其新值不可用或无法用于评估同组其他事件的条件。新值不可用,也无法用于相同
onInput
、onEnter
或onExit
字段的事件条件。在探测器模型定义中设置
evaluationMethod
参数以更改此行为。当evaluationMethod
设置为SERIAL
时,将更新变量,并按照事件的定义顺序评估事件条件。否则,当evaluationMethod
设置为BATCH
或默认为它时,状态变量会更新,并且只有在评估了所有事件条件之后才会执行状态内事件。在
"Dangerous"
状态的onInput
字段中,如果满足条件(当前输入的压力小于或等于 70 时),则"Pressure Okay"
事件中的"$variable.pressureThresholdBreached"
减一。{ "eventName": "Pressure Okay", "condition": "$input.PressureInput.sensorData.pressure <= 70", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } ] }
当
"Normal"
达到 0 时(也就是说,当探测器连续接收到三个小于等于 70 的压力读数时),探测器应该恢复到"$variable.pressureThresholdBreached"
状态。"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"
。"Overpressurized"
事件中的变量值重置为 3,但是切记此新值现在不适用于任何condition
。默认情况下,每次控件输入
onInput
字段时,condition
只能获取变量在开始处理输入时的值,然后才会通过onInput
中指定的任何操作更改。onEnter
和onExit
也是如此。当我们进入或退出该状态时,对变量所做的任何更改都不适用于相同onEnter
或onExit
字段中指定的其他条件。 - 更新探测器模型时延迟
-
如果您更新、删除和重新创建探测器模型(参见 UpdateDetectorModel),则在删除所有生成的探测器(实例)并使用新模型重新创建探测器之前,会有一些延迟。新探测器模型生效且新输入到达后,将重新创建它们。在此期间,输入可能会继续由先前版本的探测器模型生成的探测器处理。在此期间,您可能会继续收到由先前探测器模型定义的警报。
- 输入键中的空格
-
输入键中允许使用空格,但是无论是在输入属性的定义中,还是在表达式中引用键值时,都必须用反引号括住对键的引用。例如,假定如下消息有效负载:
{ "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`