定义一个Amazon IoT Events警报 (CLI) - Amazon IoT SiteWise
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

定义一个Amazon IoT Events警报 (CLI)

你可以使用Amazon Command Line Interface(Amazon CLI) 来定义Amazon IoT Events监控资产属性的警报。您可以在新的或现有的资产模型上定义警报。在资产模型上定义警报后,可以在中创建警报Amazon IoT Events并将其连接到资产模型。在此过程中,您可以执行以下操作:

步骤 1:在资产模型上定义警报

向新的或现有的资产模型添加警报定义和关联属性。

在资产模型上定义警报 (CLI)
  1. 创建名为 asset-model-payload.json 的文件。按照其他部分中的步骤将资产模型的详细信息添加到文件中,但不要提交创建或更新资产模型的请求。在本节中,您将警报定义添加到资产模型详细信息中asset-model-payload.json文件。

    注意

    您的资产模型必须定义至少一个资产属性,包括要通过警报监控的资产属性。

  2. 添加警报复合模型 (assetModelCompositeModels) 到资产模型。一个Amazon IoT Events警报复合模型指定了IOT_EVENTS键入并指定警报源属性。在中创建警报模型后添加警报源属性Amazon IoT Events。

    重要

    警报复合模型的名称必须与警报复合模型的名称相同Amazon IoT Events您稍后创建的警报模型。警报型号名称只能包含字母数字字符。指定一个唯一的字母数字名称,以便您可以为警报模型使用相同的名称。

    { ... "assetModelCompositeModels": [ { "name": "BoilerTemperatureHighAlarm", "type": "AWS/ALARM", "properties": [ { "name": "AWS/ALARM_TYPE", "dataType": "STRING", "type": { "attribute": { "defaultValue": "IOT_EVENTS" } } }, { "name": "AWS/ALARM_STATE", "dataType": "STRUCT", "dataTypeSpec": "AWS/ALARM_STATE", "type": { "measurement": {} } } ] } ] }
  3. 向资产模型添加警报阈值属性。指定用于此阈值的默认值。您可以根据此模型在每项资产上改写此默认值。

    注意

    警报阈值属性必须是INTEGER或者一个DOUBLE

    { ... "assetModelProperties": [ ... { "name": "Temperature Max Threshold", "dataType": "DOUBLE", "type": { "attribute": { "defaultValue": "105.0" } } } ] }
  4. 创建资产模型或更新现有资产模型。请执行下列操作之一:

    • 要创建资产模型,请运行以下命令。

      aws iotsitewise create-asset-model --cli-input-json file://asset-model-payload.json
    • 要更新现有资产模型,请运行以下命令。替换asset-model-id带有资产模型的 ID。

      aws iotsitewise update-asset-model \ --asset-model-id asset-model-id \ --cli-input-json file://asset-model-payload.json

    运行命令后,请注意assetModelId在回应中。

以下资产模型代表报告温度数据的锅炉。该资产模型定义了一种警报,用于检测锅炉何时过热。

{ "assetModelName": "Boiler Model", "assetModelDescription": "Represents a boiler.", "assetModelProperties": [ { "name": "Temperature", "dataType": "DOUBLE", "unit": "C", "type": { "measurement": {} } }, { "name": "Temperature Max Threshold", "dataType": "DOUBLE", "type": { "attribute": { "defaultValue": "105.0" } } }, { "name": "identityStoreId", "dataType": "STRING", "type": { "attribute": { "defaultValue": "d-123EXAMPLE" } } }, { "name": "userId", "dataType": "STRING", "type": { "attribute": { "defaultValue": "123EXAMPLE-a1b2c3d4-5678-90ab-cdef-33333EXAMPLE" } } }, { "name": "senderId", "dataType": "STRING", "type": { "attribute": { "defaultValue": "MyFactory" } } }, { "name": "fromAddress", "dataType": "STRING", "type": { "attribute": { "defaultValue": "my.factory@example.com" } } }, { "name": "emailSubject", "dataType": "STRING", "type": { "attribute": { "defaultValue": "[ALERT] High boiler temperature" } } }, { "name": "additionalMessage", "dataType": "STRING", "type": { "attribute": { "defaultValue": "Turn off the power before you check the alarm." } } } ], "assetModelHierarchies": [ ], "assetModelCompositeModels": [ { "name": "BoilerTemperatureHighAlarm", "type": "AWS/ALARM", "properties": [ { "name": "AWS/ALARM_TYPE", "dataType": "STRING", "type": { "attribute": { "defaultValue": "IOT_EVENTS" } } }, { "name": "AWS/ALARM_STATE", "dataType": "STRUCT", "dataTypeSpec": "AWS/ALARM_STATE", "type": { "measurement": {} } } ] } ] }

步骤 2:定义Amazon IoT Events警报模型

在中创建警报模型Amazon IoT Events。在Amazon IoT Events,你用表达式在警报模型中指定值。您可以使用表达式来指定来自的值Amazon IoT SiteWise进行评估并用作警报的输入。什么时候Amazon IoT SiteWise将资产属性值发送到警报模型,Amazon IoT Events评估表达式以获得属性的值或资产的 ID。您可以在警报模型中使用以下表达式:

  • 资产财产价值

    要获取资产属性的值,请使用以下表达式。替换assetModelId用资产模型的 ID 替换房产编号附上房产的ID。

    $sitewise.assetModel.`assetModelId`.`propertyId`.propertyValue.value
  • 资产 ID

    要获取资产的 ID,请使用以下表达式。替换assetModelId用资产模型的 ID 替换房产编号附上房产的ID。

    $sitewise.assetModel.`assetModelId`.`propertyId`.assetId
注意

创建警报模型时,可以定义文字,而不是计算结果为Amazon IoT SiteWise价值观。这可以减少您在资产模型上定义的属性数量。但是,如果您将值定义为文字,则无法根据资产模型在资产上自定义该值。你的Amazon IoT SiteWise Monitor用户也无法自定义警报,因为他们只能在资产上配置警报设置。

要创建Amazon IoT Events警报模型 (CLI)
  1. 当您在中创建警报模型时Amazon IoT Events,则必须指定警报使用的每个属性的 ID,其中包括以下内容:

    • 复合资产模型中的警报状态属性

    • 警报监控的属性

    • 阈值属性

    • (可选)IAM 身份中心身份存储 ID 属性

    • (可选)IAM 身份中心用户 ID 属性

    • (可选)短信发件人 ID 属性

    • (可选)电子邮件地址属性

    • (可选)电子邮件主题属性

    • (可选)附加消息属性

    运行以下命令以检索资产模型上这些属性的 ID。替换asset-model-id使用上一步中资产模型的 ID。

    aws iotsitewise describe-asset-model --asset-model-id asset-model-id

    此操作将返回包含资产模型详细信息的响应。记下警报使用的每个属性的 ID。在创建时使用这些 IDAmazon IoT Events下一步是警报模型。

  2. 在中创建警报模型Amazon IoT Events。执行以下操作:

    1. 创建名为 alarm-model-payload.json 的文件。

    2. 将以下 JSON 对象复制到文件中。

    3. 输入一个名字 (alarmModelName),描述 (alarmModelDescription) 和严重程度 (severity) 用于您的警报。对于严重程度,请指定一个反映贵公司严重性级别的整数。

      重要

      警报模型必须与您之前在资产模型上定义的警报复合模型同名。

      警报型号名称只能包含字母数字字符。

      { "alarmModelName": "BoilerTemperatureHighAlarm", "alarmModelDescription": "Detects when the boiler temperature is high.", "severity": 3 }
    4. 添加比较规则 (alarmRule)到警报器。此规则定义了要监控的属性 (inputProperty),要比较的阈值 (threshold),以及要使用的比较运算符 (comparisonOperator)。

      • 替换assetModelId带有资产模型的 ID。

      • 替换alarmPropertyId包含警报监视的属性的 ID。

      • 替换thresholdAttributeId使用阈值属性属性的 ID。

      • 替换更大使用运算符将属性值与阈值进行比较。从以下选项中进行选择:

        • LESS

        • LESS_OR_EQUAL

        • EQUAL

        • NOT_EQUAL

        • GREATER_OR_EQUAL

        • GREATER

      { "alarmModelName": "BoilerTemperatureHighAlarm", "alarmModelDescription": "Detects when the boiler temperature is high.", "severity": 3, "alarmRule": { "simpleRule": { "inputProperty": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.propertyValue.value", "comparisonOperator": "GREATER", "threshold": "$sitewise.assetModel.`assetModelId`.`thresholdAttributeId`.propertyValue.value" } } }
    5. 添加动作 (alarmEventActions) 将警报状态发送到Amazon IoT SiteWise当警报状态改变时。

      注意

      对于高级配置,您可以定义警报状态更改时要执行的其他操作。例如,你可以打电话给Amazon Lambda函数或发布到 MQTT 主题。有关更多信息,请参见与其他人合作Amazon服务在里面Amazon IoT Events开发者指南

      • 替换assetModelId带有资产模型的 ID。

      • 替换alarmPropertyId包含警报监视的属性的 ID。

      • 替换alarmStateProperty同上使用警报复合模型中警报状态属性的 ID。

      { "alarmModelName": "BoilerTemperatureHighAlarm", "alarmModelDescription": "Detects when the boiler temperature is high.", "severity": 3, "alarmRule": { "simpleRule": { "inputProperty": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.propertyValue.value", "comparisonOperator": "GREATER", "threshold": "$sitewise.assetModel.`assetModelId`.`thresholdAttributeId`.propertyValue.value" } }, "alarmEventActions": { "alarmActions": [ { "iotSiteWise": { "assetId": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.assetId", "propertyId": "'alarmStatePropertyId'" } } ] } }
    6. (可选)添加警报功能(alarmCapabilities) 到有效载荷中alarm-model-payload.json。在此对象中,您可以根据资产模型指定确认流程是否已启用以及资产的默认启用状态。有关确认流程的更多信息,请参阅警报状态

      { "alarmModelName": "BoilerTemperatureHighAlarm", "alarmModelDescription": "Detects when the boiler temperature is high.", "severity": 3, "alarmRule": { "simpleRule": { "inputProperty": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.propertyValue.value", "comparisonOperator": "GREATER", "threshold": "$sitewise.assetModel.`assetModelId`.`thresholdAttributeId`.propertyValue.value" } }, "alarmEventActions": { "alarmActions": [ { "iotSiteWise": { "assetId": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.assetId", "propertyId": "'alarmStatePropertyId'" } } ] }, "alarmNotification": { "notificationActions": [ { "action": { "lambdaAction": { "functionArn": "alarmNotificationFunctionArn" } }, "smsConfigurations": [ { "recipients": [ { "ssoIdentity": { "identityStoreId": "$sitewise.assetModel.`assetModelId`.`identityStoreIdAttributeId`.propertyValue.value", "userId": "$sitewise.assetModel.`assetModelId`.`userIdAttributeId`.propertyValue.value" } } ], "senderId": "$sitewise.assetModel.`assetModelId`.`senderIdAttributeId`.propertyValue.value", "additionalMessage": "$sitewise.assetModel.`assetModelId`.`additionalMessageAttributeId`.propertyValue.value" } ], "emailConfigurations": [ { "from": "$sitewise.assetModel.`assetModelId`.`fromAddressAttributeId`.propertyValue.value", "recipients": { "to": [ { "ssoIdentity": { "identityStoreId": "$sitewise.assetModel.`assetModelId`.`identityStoreIdAttributeId`.propertyValue.value", "userId": "$sitewise.assetModel.`assetModelId`.`userIdAttributeId`.propertyValue.value" } } ] }, "content": { "subject": "$sitewise.assetModel.`assetModelId`.`emailSubjectAttributeId`.propertyValue.value", "additionalMessage": "$sitewise.assetModel.`assetModelId`.`additionalMessageAttributeId`.propertyValue.value" } } ] } ] }, "alarmCapabilities": { "initializationConfiguration": { "disabledOnInitialization": false }, "acknowledgeFlow": { "enabled": true } } }
    7. 添加 IAM 服务角色 (roleArn)那个Amazon IoT Events可以假设将数据发送到Amazon IoT SiteWise。此角色需要iotsitewise:BatchPutAssetPropertyValue许可和允许的信任关系iotevents.amazonaws.com担任这个角色。有关更多信息,请参见警报服务角色在里面Amazon IoT Events开发者指南

      • 替换roleArn使用那个角色的 ARNAmazon IoT Events可以假设执行这些操作。

      { "alarmModelName": "BoilerTemperatureHighAlarm", "alarmModelDescription": "Detects when the boiler temperature is high.", "severity": 3, "alarmRule": { "simpleRule": { "inputProperty": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.propertyValue.value", "comparisonOperator": "GREATER", "threshold": "$sitewise.assetModel.`assetModelId`.`thresholdAttributeId`.propertyValue.value" } }, "alarmEventActions": { "alarmActions": [ { "iotSiteWise": { "assetId": "$sitewise.assetModel.`assetModelId`.`alarmPropertyId`.assetId", "propertyId": "'alarmStatePropertyId'" } } ] }, "alarmNotification": { "notificationActions": [ { "action": { "lambdaAction": { "functionArn": "alarmNotificationFunctionArn" } }, "smsConfigurations": [ { "recipients": [ { "ssoIdentity": { "identityStoreId": "$sitewise.assetModel.`assetModelId`.`identityStoreIdAttributeId`.propertyValue.value", "userId": "$sitewise.assetModel.`assetModelId`.`userIdAttributeId`.propertyValue.value" } } ], "senderId": "$sitewise.assetModel.`assetModelId`.`senderIdAttributeId`.propertyValue.value", "additionalMessage": "$sitewise.assetModel.`assetModelId`.`additionalMessageAttributeId`.propertyValue.value" } ], "emailConfigurations": [ { "from": "$sitewise.assetModel.`assetModelId`.`fromAddressAttributeId`.propertyValue.value", "recipients": { "to": [ { "ssoIdentity": { "identityStoreId": "$sitewise.assetModel.`assetModelId`.`identityStoreIdAttributeId`.propertyValue.value", "userId": "$sitewise.assetModel.`assetModelId`.`userIdAttributeId`.propertyValue.value" } } ] }, "content": { "subject": "$sitewise.assetModel.`assetModelId`.`emailSubjectAttributeId`.propertyValue.value", "additionalMessage": "$sitewise.assetModel.`assetModelId`.`additionalMessageAttributeId`.propertyValue.value" } } ] } ] }, "alarmCapabilities": { "initializationConfiguration": { "disabledOnInitialization": false }, "acknowledgeFlow": { "enabled": false } }, "roleArn": "arn:aws:iam::123456789012:role/MyIoTEventsAlarmRole" }
    8. 运行以下命令来创建Amazon IoT Events来自有效载荷的警报模型alarm-model-payload.json

      aws iotevents create-alarm-model --cli-input-json file://alarm-model-payload.json
    9. 该操作返回的响应包括警报模型的 ARN,alarmModelArn。在下一步中,复制此 ARN 以在资产模型的警报定义中设置。

步骤 3:启用两者之间的数据流Amazon IoT SiteWise和Amazon IoT Events

在中创建所需资源后Amazon IoT SiteWise和Amazon IoT Events,您可以启用资源之间的数据流以启用警报。在本节中,您将更新资产模型中的警报定义,以使用您在上一步中创建的警报模型。

在两者之间启用数据流Amazon IoT SiteWise和Amazon IoT Events(CLI)
  • 在资产模型中将警报模型设置为警报来源。执行以下操作:

    1. 运行以下命令以检索现有资产模型定义。替换asset-model-id带有资产模型的 ID。

      aws iotsitewise describe-asset-model --asset-model-id asset-model-id

      此操作将返回包含资产模型详细信息的响应。

    2. 创建一个名为 update-asset-model-payload.json 的文件,并将上一命令的响应复制到该文件中。

    3. 从中删除以下键值对update-asset-model-payload.json文件:

      • assetModelId

      • assetModelArn

      • assetModelCreationDate

      • assetModelLastUpdateDate

      • assetModelStatus

    4. 添加警报源属性 (AWS/ALARM_SOURCE) 到您之前定义的警报复合模型。替换alarmModelArn使用警报模型的 ARN,用于设置警报源属性的值。

      { ... "assetModelCompositeModels": [ ... { "name": "BoilerTemperatureHighAlarm", "type": "AWS/ALARM", "properties": [ { "id": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "name": "AWS/ALARM_TYPE", "dataType": "STRING", "type": { "attribute": { "defaultValue": "IOT_EVENTS" } } }, { "id": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE", "name": "AWS/ALARM_STATE", "dataType": "STRUCT", "dataTypeSpec": "AWS/ALARM_STATE", "type": { "measurement": {} } }, { "name": "AWS/ALARM_SOURCE", "dataType": "STRING", "type": { "attribute": { "defaultValue": "alarmModelArn" } } } ] } ] }
    5. 运行以下命令,使用存储在中的定义更新资产模型update-asset-model-payload.json文件。替换asset-model-id带有资产模型的 ID。

      aws iotsitewise update-asset-model \ --asset-model-id asset-model-id \ --cli-input-json file://update-asset-model-payload.json

您的资产模型现在定义了一个可以检测到的警报Amazon IoT Events。警报根据此资产模型监控所有资产中的目标属性。您可以为每项资产配置警报,为每项资产自定义属性,例如阈值或 IAM Identity Center 收件人。有关更多信息,请参阅在资产上配置警报