使用 MQTT 與亞馬遜定 Location Service 進行跟踪 - Amazon Location Service

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

使用 MQTT 與亞馬遜定 Location Service 進行跟踪

MQTT是一種廣為採用的輕量型傳訊通訊協定,專用於受限裝置。AWS IoT Core支援使用 MQTT 通訊協定以及經 MQTT 通訊協定進行的裝置連線 WebSocket 安全 (WSS) 通訊協定。

AWS IoT Core將裝置連線至AWS並使您能夠在它們之間發送和接收消息。所以此AWS IoT Corerules Engine 存儲有關設備消息主題的查詢,並使您能夠定義將消息發送給其他人的操作AWS服務,例如亞馬遜定 Location Service。將其位置視為座標的裝置,可以透過規則引擎將其位置轉送到 Amazon 位置。如需此樣式的詳細資訊,請參閱參考架構

先決條件

在您能夠開始追蹤前,您必須建立追蹤器資源。若要建立追蹤器資源,您可以使用 Amazon 位置主控台AWS CLI,或亞馬遜位置 API。

下列範例使用 Amazon 定 Location Service 主控台建立追蹤器資源:

  1. 在開啟 Amazon 定 Location Service 主控台https://console.aws.amazon.com/location/

  2. 在左側導覽窗格中,選擇追蹤器

  3. 選擇建立追蹤器

  4. 填妥下列方塊:

    • 名稱— 輸入唯一的名稱,最多可使用 100 個字元。有效的輸入包括英數字元、連字號與底線。例如:MyTracker

    • 描述— 輸入選用描述。例如:儲存追蹤器AWS IoT Core裝置位置

    • 位置篩選— 選取您希望用於位置更新的篩選。例如:以準確度為基礎的篩選

  5. 選擇建立追蹤器

建立 Lambda 函數

建立之間的連接AWS IoT Core和亞馬遜定 Location Service,你需要AWS Lambda處理由轉寄的訊息AWS IoT Core。此功能將擷取任何位置資料、將其格式化以供 Amazon 定 Location Service 使用,並透過 Amazon 位置追蹤器 API 提交。您可以透過AWS Lambda主控台,也可以使用AWS Command Line Interface(AWS CLI) 或AWS LambdaAPI。

若要使用主控台建立將位置更新發佈到 Amazon 位置的 Lambda 函數:

  1. https://console.aws.amazon.com/lambda/ 開啟 AWS Lambda 主控台。

  2. 從左側導覽,選擇函數

  3. 選擇建立函數,並確定Author from scratch (從頭開始撰寫)被選取。

  4. 填妥下列方塊:

    • 函數名稱— 輸入函數的唯一名稱。有效的輸入包括英數字元、連字號與底線,不含空格。例如:MyLambda

    • 執行時間— 選擇Python 3.8

  5. 選擇 Create function (建立函數)。

  6. 選擇程式碼索引標籤以開啟編輯器。

  7. 覆寫中的預留位置程式碼lambda_function.py使用下列項目,取代指派給的值TRACKER_NAME使用您建立的追蹤器先決條件

    from datetime import datetime import json import os import boto3 # Update this to match the name of your Tracker resource TRACKER_NAME = "MyTracker" """ This Lambda function receives a payload from AWS IoT Core and publishes device updates to Amazon Location Service via the BatchUpdateDevicePosition API. Parameter 'event' is the payload delivered from AWS IoT Core. In this sample, we assume that the payload has a single top-level key 'payload' and a nested key 'location' with keys 'lat' and 'long'. We also assume that the name of the device is nested in the payload as 'deviceid'. Finally, the timestamp of the payload is present as 'timestamp'. For example: >>> event { 'payload': { 'deviceid': 'thing123', 'timestamp': 1604940328, 'location': { 'lat': 49.2819, 'long': -123.1187 }, 'accuracy': {'Horizontal': 20.5 }, 'positionProperties': {'field1':'value1','field2':'value2'} } } If your data doesn't match this schema, you can either use the AWS IoT Core rules engine to format the data before delivering it to this Lambda function, or you can modify the code below to match it. """ def lambda_handler(event, context): update = { "DeviceId": event["payload"]["deviceid"], "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"), "Position": [ event["payload"]["location"]["long"], event["payload"]["location"]["lat"] ] } if "accuracy" in event["payload"]: update["Accuracy"] = event["payload"]['accuracy'] if "positionProperties" in event["payload"]: update["PositionProperties"] = event["payload"]['positionProperties'] client = boto3.client("location") response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update]) return { "statusCode": 200, "body": json.dumps(response) }
  8. 選擇部署以儲存更新的函數。

  9. 選擇 Configuration (組態) 索引標籤。

  10. 在 中許可區段中,選擇超連結的角色名稱,以將 Amazon 定 Location Service 許可授與您的 Lambda 函數。

  11. 從你的角色摘要頁面中,選擇新增許可,然後從下拉式清單中選取建立內嵌政策

  12. 選擇JSON索引標籤,然後使用下列文件覆寫原則。這可讓您的 Lambda 函數更新由所有區域的所有追蹤器資源所管理的裝置位置。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "WriteDevicePosition", "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:*:*:tracker/*" } ] }
  13. 選擇 Review policy (檢閱政策)。

  14. 輸入政策名稱。例如:AmazonLocationTrackerWriteOnly

  15. 選擇 Create policy (建立政策)。

您可以視需要修改此函數程式碼,以適應您自己的裝置訊息結構描述。

建立 AWS IoT Core 規則

接下來,建立AWS IoT Core將裝置的位置遙測轉寄至AWS Lambda用於轉換和發布到亞馬遜定 Location Service 的功能。提供的範例規則假設任何必要的裝置承載轉換都是由 Lambda 函數處理。您可以建立此規則AWS IoT Core主控台AWS Command Line Interface(AWS CLI),或AWS IoT CoreAPI。

注意

雖然AWS IoT控制台處理允許所需的權限AWS IoT Core以叫用 Lambda 函數 (如果您要從建立規則)AWS CLI或開發套件,您必須設定要授與權限的原則AWS IoT

建立AWS IoT Core使用主控台

  1. 前往登入AWS IoT Core主控台https://console.aws.amazon.com/iot/

  2. 在左側導覽中,展開法案,然後選擇規則

  3. 選擇建立規則以啟動新規則精靈。

  4. 輸入規則的名稱和說明。

  5. 對於規則查詢陳述式,更新FROM屬性,以參照至少有一個裝置正在發佈包含位置的遙測的主題。如果您正在測試解決方案,則不需要修改。

    SELECT * FROM 'iot/topic'
  6. UNWER設定一或多個動作,選擇新增動作

  7. 選擇向 lambda 函數發送消息

  8. 選擇 Configure action (設定動作)

  9. 從清單中尋找 Lambda 函數。

  10. 選擇 Add action (新增動作)

  11. 選擇 Create rule (建立規則)

測試您的AWS IoT Core主控台中的規則

如果目前沒有裝置發佈包含位置的遙測,您可以使用AWS IoT Coreconsole (位置)。控制台具有測試客戶端,您可以在其中發布示例消息以驗證解決方案的結果。

  1. 前往登入AWS IoT Core主控台https://console.aws.amazon.com/iot/

  2. 在左側導覽中,展開測試,然後選擇MQTT 測試用戶端

  3. UNWER發布到主題,設定主題名稱物聯網/主題(或您在其中設置的主題的名稱AWS IoT Core規則 (如果不同),並提供以下內容訊息承載。替換時間戳記1604940328具有過去 30 天內的有效時間戳記(超過 30 天的任何時間戳記都會被忽略)。

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. 選擇發布到主題發送測試消息。

  5. 若要驗證 Amazon 定 Location Service 是否收到訊息,請使用以下指令AWS CLI指令。如果您在設定期間對其進行了修改,請將追蹤器名稱和裝置 ID 取代為您使用的名稱和裝置 ID。

    aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123