使用資產屬性通知 - AWS IoT SiteWise

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用資產屬性通知

您可以啟用屬性通知以將資產數據更新發佈到AWS IoT Core,然後對您的數據運行查詢。使用資產屬性通知,AWS IoT SiteWise提供AWS CloudFormation模板,可用於導出AWS IoT SiteWise資料傳送至 Amazon S3。

啟用資產屬性通知

根據預設,AWS IoT SiteWise 不會發佈屬性值更新。您可以使用 AWS IoT SiteWise 主控台或 API 來啟用每個資產屬性的通知。

啟用資產屬性通知 (主控台)

您可以使用 AWS IoT SiteWise 主控台來啟用資產屬性的通知。

啟用或停用資產屬性的通知 (主控台)

  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在導覽窗格中,選擇 Assets (資產)

  3. 選擇要啟用屬性通知的資產。

    提示

    您可以選擇箭頭圖示來展開資產階層,以尋找您的資產。

    
        AWS IoT SiteWise 「資產」頁面螢幕擷取畫面,並已反白顯示資產階層。
  4. 選擇 Edit (編輯)。

  5. 針對資產屬性的 Notification status (通知狀態),選擇 ENABLED (已啟用)

    
                AWS IoT SiteWise 「編輯資產」頁面的螢幕擷取畫面,並已反白「通知狀態」。

    您也可以選擇 DISABLED (已停用) 以停用資產屬性的通知。

  6. 選擇 Save (儲存)

啟用資產屬性通知 (CLI)

您可以使用 AWS Command Line Interface (AWS CLI) 來啟用或停用資產屬性的通知。

您必須知道資產的 assetId 和財產的 propertyId,才能完成此程序。如果您創建了一個資源,但不知道其assetId,請使用ListAssets操作,針對特定模型檢視您的所有資產。然後,使用DescribeAsset操作以檢視您資產的屬性,包括屬性 ID。

使用UpdateAsset屬性操作來啟用或停用資產屬性的通知。指定下列參數:

  • assetId— 資產 ID。

  • propertyId— 資產屬性的 ID。

  • propertyNotificationState— 屬性值通知狀態:ENABLED或者DISABLED

  • propertyAlias— 屬性的別名。當您更新通知狀態時,指定屬性的現有別名。如果您省略此參數,則會移除屬性的現有別名。

啟用或停用資產屬性的通知 (CLI)

  1. 執行下列命令來擷取資產屬性的別名。將 asset-id 取代為資產的 ID,並將 property-id 取代為屬性的 ID。

    aws iotsitewise describe-asset-property \ --asset-id asset-id \ --property-id property-id

    此操作會以下列格式傳回包含資產屬性詳細資料的回應。屬性別名位於 JSON 物件的 assetProperty.alias 中。

    { "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE", "assetName": "Wind Turbine 7", "assetModelId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "assetProperty": { "id": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE", "name": "Wind Speed", "alias": "/company/windfarm/3/turbine/7/windspeed", "notification": { "topic": "$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE", "state": "DISABLED" }, "dataType": "DOUBLE", "unit": "m/s", "type": { "measurement": {} } } }
  2. 執行下列命令來啟用資產屬性的通知。將 property-alias 取代為先前命令回應中的屬性別名,或省略 --property-alias 以更新屬性但不帶別名。

    aws iotsitewise update-asset-property \ --asset-id asset-id \ --property-id property-id \ --property-notification-state ENABLED \ --property-alias property-alias

    您也可以傳遞 --property-notification-state DISABLED 以停用資產屬性的通知。

查詢資產屬性通知訊息

AWS IoT SiteWise將資產屬性資料更新發佈至AWS IoT核心採用下列格式。

{ "type": "PropertyValueUpdate", "payload": { "assetId": "String", "propertyId": "String", "values": [ { "timestamp": { "timeInSeconds": Number, "offsetInNanos": Number }, "quality": "String", "value": { "booleanValue": Boolean, "doubleValue": Number, "integerValue": Number, "stringValue": "String" } } ] } }

每個結構values列表是timestamp-quality-value(TQV) 結構.

  • 所以此timestamp包含目前 Unix Eepoch 時間,以秒為單位,帶有納秒偏移。

  • 所以此quality包含下列其中一個字符串,指示資料點的品質:

    • GOOD— 資料不會被任何問題影響。

    • BAD— 資料會被例如感應器失敗的問題影響。

    • UNCERTAIN— 資料會被例如感應器不準確的問題影響。

  • 所以此value包含下列其中一個欄位,這取決於屬性類型。

    • booleanValue

    • doubleValue

    • integerValue

    • stringValue

若要解析 values 陣列中的值,您需要使用規則 SQL 陳述式中複雜的巢狀物件查詢。如需詳細資訊,請參閱「」巢狀物件查詢中的AWS IoT開發人員指南,或者查看將屬性值更新發佈至 Amazon DynamoDB教程,瞭解解析資產屬性通知消息的具體示例。

範例 擷取值陣列的查詢範例

下列陳述式示範如何在有該屬性的所有資產上針對特定雙類型屬性查詢更新屬性值的陣列。

SELECT (SELECT VALUE (value.doubleValue) FROM payload.values) AS windspeed FROM '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' WHERE type = 'PropertyValueUpdate'

先前的規則查詢陳述式會以下列格式輸出資料。

{ "windspeed": [ 26.32020195042838, 26.282584572975477, 26.352566977372508, 26.283084346171442, 26.571883739599322, 26.60684140743005, 26.628738636715045, 26.273486932802125, 26.436379105473964, 26.600590095377303 ] }

範例 擷取單一值的查詢範例

下列陳述式示範如何在有該屬性的所有資產上針對特定雙類型屬性,從屬性值的陣列查詢第一個值。

SELECT get((SELECT VALUE (value.doubleValue) FROM payload.values), 0) AS windspeed FROM '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' WHERE type = 'PropertyValueUpdate'

先前的規則查詢陳述式會以下列格式輸出資料。

{ "windspeed": 26.32020195042838 }
重要

這個規則查詢陳述式會忽略每個批次中第一個項目之外的其他值更新。每個批次最多可以包含 10 個值。如果您需要包含其餘的值,您必須設定更複雜的解決方案,將資產屬性值輸出到其他服務。例如,您可以使用 AWS Lambda 動作設定規則,將陣列中的每個值重新發佈到另一個主題,然後設定另一個規則來查詢該主題,並將每個值發佈到所需要的規則動作。