

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Lacak penggunaan AWS IoT dan MQTT dengan Amazon Location Service
<a name="tracking-using-mqtt"></a>

[MQTT](http://mqtt.org/) adalah protokol pesan ringan dan diadopsi secara luas yang dirancang untuk perangkat terbatas. AWS IoT Core mendukung koneksi perangkat yang menggunakan protokol MQTT dan protokol MQTT over WebSocket Secure (WSS). 

[AWS IoT Core](https://aws.amazon.com/iot-core/)menghubungkan perangkat ke AWS dan memungkinkan Anda untuk mengirim dan menerima pesan di antara mereka. Mesin AWS IoT Core aturan menyimpan kueri tentang topik pesan perangkat Anda dan memungkinkan Anda menentukan tindakan untuk mengirim pesan ke AWS layanan lain, seperti Amazon Location Service. Perangkat yang mengetahui lokasinya sebagai koordinat dapat meneruskan lokasinya ke Lokasi Amazon melalui mesin aturan.

**catatan**  
Perangkat mungkin mengetahui posisinya sendiri, misalnya melalui GPS bawaan. AWS IoT juga memiliki dukungan untuk pelacakan lokasi perangkat pihak ketiga. Untuk informasi selengkapnya, lihat [Lokasi Perangkat AWS IoT Inti](https://docs.aws.amazon.com/iot/latest/developerguide/device-location.html) di *Panduan Pengembang AWS IoT Inti*.

Panduan berikut menjelaskan pelacakan menggunakan AWS IoT Core aturan. Anda juga dapat mengirim informasi perangkat ke AWS Lambda fungsi Anda sendiri, jika Anda perlu memprosesnya sebelum mengirim ke Lokasi Amazon. Untuk detail selengkapnya tentang penggunaan Lambda untuk memproses lokasi perangkat, lihat. [Gunakan AWS Lambda dengan MQTT](tracking-using-mqtt-with-lambda.md)

**Topics**
+ [Prasyarat](#mqtt-prerequisite)
+ [Buat AWS IoT Core aturan](#mqtt-create-iot-rule)
+ [Uji AWS IoT Core aturan Anda di konsol](#mqtt-test-iot-rule)
+ [Gunakan AWS Lambda dengan MQTT](tracking-using-mqtt-with-lambda.md)

## Prasyarat
<a name="mqtt-prerequisite"></a>

Sebelum Anda dapat mulai melacak, Anda harus menyelesaikan prasyarat berikut:
+ [Buat sumber daya pelacak](start-create-tracker.md) yang akan Anda kirimi data lokasi perangkat.
+ [Buat peran IAM](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html) untuk memberikan AWS IoT Core akses ke pelacak Anda.

  Saat mengikuti langkah-langkah tersebut, gunakan kebijakan berikut untuk memberikan akses ke pelacak Anda:

  ```
  {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "WriteDevicePosition",
        "Effect": "Allow",
        "Action": "geo:BatchUpdateDevicePosition",
        "Resource": "arn:aws:geo:*:*:tracker/*"
      }
    ]
  }
  ```

## Buat AWS IoT Core aturan
<a name="mqtt-create-iot-rule"></a>

Selanjutnya, buat AWS IoT Core aturan untuk meneruskan telemetri posisi perangkat Anda ke Amazon Location Service. Untuk informasi selengkapnya tentang membuat aturan, lihat topik berikut di *Panduan AWS IoT Core Pengembang*:
+ [Membuat AWS IoT aturan](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-rule.html) untuk informasi tentang membuat aturan baru.
+ [Tindakan lokasi](https://docs.aws.amazon.com/iot/latest/developerguide/location-rule-action.html) untuk informasi khusus untuk membuat aturan untuk penerbitan ke Lokasi Amazon 

## Uji AWS IoT Core aturan Anda di konsol
<a name="mqtt-test-iot-rule"></a>

Jika saat ini tidak ada perangkat yang menerbitkan telemetri yang menyertakan lokasi, Anda dapat menguji aturan menggunakan konsol. AWS IoT Core Konsol memiliki klien pengujian tempat Anda dapat mempublikasikan pesan sampel untuk memverifikasi hasil solusi.

1. Masuk ke AWS IoT Core konsol di [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Di navigasi kiri, perluas **Uji**, dan pilih klien uji **MQTT**.

1. Di bawah **Publikasikan ke topik****, setel nama Topik** ke *iot/topic* (atau nama topik yang Anda atur dalam AWS IoT Core aturan, jika berbeda), dan berikan yang berikut ini untuk **muatan Pesan**. Ganti stempel waktu *1604940328* dengan stempel waktu yang valid dalam 30 hari terakhir (stempel waktu yang lebih lama dari 30 hari diabaikan oleh pelacak Amazon Location Service).

   ```
   {
     "payload": {
       "deviceid": "thing123",
       "timestamp": 1604940328,
       "location": { "lat": 49.2819, "long": -123.1187 },
       "accuracy": { "Horizontal": 20.5 },
       "positionProperties": { "field1": "value1", "field2": "value2" }
     }
   }
   ```

1. Pilih **Publikasikan** ke topik untuk mengirim pesan pengujian.

1. Untuk memvalidasi bahwa pesan diterima oleh Amazon Location Service, gunakan AWS CLI perintah berikut. Jika Anda memodifikasinya selama pengaturan, ganti nama pelacak dengan yang Anda gunakan.

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

# Gunakan AWS Lambda dengan MQTT
<a name="tracking-using-mqtt-with-lambda"></a>

Meskipun penggunaan AWS Lambda tidak lagi diperlukan saat mengirim data lokasi perangkat ke Lokasi Amazon untuk dilacak, Anda mungkin masih ingin menggunakan Lambda dalam beberapa kasus. Misalnya, jika Anda ingin memproses sendiri data lokasi perangkat Anda, sebelum mengirimkannya ke Lokasi Amazon. Topik berikut menjelaskan cara menggunakan Lambda untuk memproses pesan sebelum mengirimnya ke pelacak Anda. Untuk informasi lebih lanjut tentang pola ini, lihat [arsitektur referensi](https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/amazon-location-service-ra.pdf).

**Topics**
+ [Prasyarat](#mqtt-prerequisite-with-lambda)
+ [Buat fungsi Lambda](#mqtt-with-lambda-create-lambda)
+ [Buat AWS IoT Core aturan](#mqtt-create-iot-rule-with-lambda)
+ [Uji AWS IoT Core aturan Anda di konsol](#mqtt-test-iot-rule-with-lambda)

## Prasyarat
<a name="mqtt-prerequisite-with-lambda"></a>

Sebelum Anda dapat mulai melacak, Anda harus [membuat sumber daya pelacak](start-tracking.md). Untuk membuat sumber daya pelacak, Anda dapat menggunakan konsol Lokasi Amazon, lokasi AWS CLI, atau Amazon Location APIs. 

Contoh berikut menggunakan konsol Amazon Location Service untuk membuat resource tracker:

1. Buka konsol Amazon Location Service di [https://console.aws.amazon.com/location/](https://console.aws.amazon.com/location/home).

1. Di panel navigasi kiri, pilih **Pelacak**. 

1.  Pilih **Buat pelacak**. 

1. Isi kotak-kotak berikut:
   + **Nama** — Masukkan nama unik yang memiliki maksimal 100 karakter. Entri yang valid termasuk karakter alfanumerik, tanda hubung, dan garis bawah. Misalnya, *MyTracker*.
   + **Deskripsi** - Masukkan deskripsi opsional. Misalnya, *Tracker for storing AWS IoT Core device positions*.
   + **Pemfilteran posisi** - Pilih pemfilteran yang ingin Anda gunakan untuk pembaruan posisi. Misalnya, pemfilteran **berbasis akurasi**.

1. Pilih **Buat pelacak**. 

## Buat fungsi Lambda
<a name="mqtt-with-lambda-create-lambda"></a>

Untuk membuat koneksi antara AWS IoT Core dan Amazon Location Service, Anda memerlukan AWS Lambda fungsi untuk memproses pesan yang diteruskan oleh. AWS IoT Core Fungsi ini akan mengekstrak data posisi apa pun, memformatnya untuk Amazon Location Service, dan mengirimkannya melalui Amazon Location Tracker API. Anda dapat membuat fungsi ini melalui AWS Lambda konsol, atau Anda dapat menggunakan AWS Command Line Interface (AWS CLI) atau AWS Lambda APIs. 

Untuk membuat fungsi Lambda yang menerbitkan pembaruan posisi ke Lokasi Amazon menggunakan konsol:

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/home).

1. Dari navigasi kiri, pilih **Fungsi**. 

1.  Pilih **Create Function**, dan pastikan bahwa **Author dari awal** dipilih. 

1. Isi kotak-kotak berikut:
   + **Nama fungsi** - Masukkan nama unik untuk fungsi Anda. Entri yang valid termasuk karakter alfanumerik, tanda hubung, dan garis bawah tanpa spasi. Misalnya, *MyLambda*.
   + **Runtime** — Pilih*Python 3.8*.

1. Pilih **Buat fungsi**. 

1. Pilih tab **Kode** untuk membuka editor.

1. [Timpa kode placeholder `lambda_function.py` dengan yang berikut ini, ganti nilai yang ditetapkan `TRACKER_NAME` dengan nama pelacak yang Anda buat sebagai prasyarat.](#mqtt-prerequisite-with-lambda)

   ```
   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)
     }
   ```

1. Pilih **Deploy** untuk menyimpan fungsi yang diperbarui.

1. Pilih tab **Konfigurasi**.

1. Di bagian **Izin, pilih nama Peran** hyperlink untuk memberikan izin Amazon Location Service ke fungsi Lambda Anda.

1. Dari halaman **Ringkasan** peran Anda, pilih **Tambahkan izin**, lalu dari daftar tarik-turun, pilih **Buat** kebijakan sebaris.

1. Pilih tab **JSON**, dan timpa kebijakan dengan dokumen berikut. Ini memungkinkan fungsi Lambda Anda memperbarui posisi perangkat yang dikelola oleh semua sumber daya pelacak di semua Wilayah.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "WriteDevicePosition",
         "Effect": "Allow",
         "Action": "geo:BatchUpdateDevicePosition",
         "Resource": "arn:aws:geo:*:*:tracker/*"
       }
     ]
   }
   ```

1. Pilih **Tinjau kebijakan**.

1. Masukkan nama kebijakan. Misalnya, *AmazonLocationTrackerWriteOnly*.

1. Pilih **Buat kebijakan**.

Anda dapat memodifikasi kode fungsi ini, jika perlu, untuk beradaptasi dengan skema pesan perangkat Anda sendiri.

## Buat AWS IoT Core aturan
<a name="mqtt-create-iot-rule-with-lambda"></a>

Selanjutnya, buat AWS IoT Core aturan untuk meneruskan telemetri posisi perangkat Anda ke AWS Lambda fungsi untuk transformasi dan publikasi ke Amazon Location Service. Aturan contoh yang diberikan mengasumsikan bahwa setiap transformasi muatan perangkat yang diperlukan ditangani oleh fungsi Lambda Anda. Anda dapat membuat aturan ini melalui AWS IoT Core konsol, AWS Command Line Interface (AWS CLI), atau AWS IoT Core APIs.

**catatan**  
Meskipun AWS IoT konsol menangani izin yang diperlukan AWS IoT Core untuk mengizinkan menjalankan fungsi Lambda, jika Anda membuat aturan dari AWS CLI atau SDK, Anda [harus mengonfigurasi kebijakan untuk memberikan](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html#lambda-rule-action-requirements) izin. AWS IoT

**Untuk membuat AWS IoT Core menggunakan konsol**

1. Masuk ke AWS IoT Core konsol di [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Di navigasi kiri, perluas **Act**, dan pilih **Rules**.

1. Pilih **Buat aturan** untuk memulai panduan aturan baru.

1. Masukkan nama dan deskripsi untuk aturan Anda.

1. Untuk **pernyataan kueri Aturan**, perbarui `FROM` atribut untuk merujuk ke topik di mana setidaknya satu perangkat menerbitkan telemetri yang menyertakan lokasi. Jika Anda menguji solusinya, tidak diperlukan modifikasi.

   ```
   SELECT * FROM 'iot/topic'
   ```

1. Di bawah **Setel satu atau beberapa tindakan**, pilih **Tambah tindakan**.

1. Pilih **Kirim pesan ke fungsi lambda**.

1. Pilih **Konfigurasi tindakan**.

1. Temukan dan pilih fungsi Lambda Anda dari daftar.

1. Pilih **Tambahkan tindakan**.

1. Pilih **Buat aturan**.

## Uji AWS IoT Core aturan Anda di konsol
<a name="mqtt-test-iot-rule-with-lambda"></a>

Jika saat ini tidak ada perangkat yang menerbitkan telemetri yang menyertakan lokasi, Anda dapat menguji aturan dan solusi ini menggunakan konsol. AWS IoT Core Konsol memiliki klien pengujian tempat Anda dapat mempublikasikan pesan sampel untuk memverifikasi hasil solusi.

1. Masuk ke AWS IoT Core konsol di [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home).

1. Di navigasi kiri, perluas **Uji**, dan pilih klien uji **MQTT**.

1. Di bawah **Publikasikan ke topik****, setel nama Topik** ke *iot/topic* (atau nama topik yang Anda atur dalam AWS IoT Core aturan, jika berbeda), dan berikan yang berikut ini untuk **muatan Pesan**. Ganti stempel waktu *1604940328* dengan stempel waktu yang valid dalam 30 hari terakhir (stempel waktu yang lebih dari 30 hari diabaikan).

   ```
   {
     "payload": {
       "deviceid": "thing123",
       "timestamp": 1604940328,
       "location": { "lat": 49.2819, "long": -123.1187 },
       "accuracy": { "Horizontal": 20.5 },
       "positionProperties": { "field1": "value1", "field2": "value2" }
     }
   }
   ```

1. Pilih **Publikasikan** ke topik untuk mengirim pesan pengujian.

1. Untuk memvalidasi bahwa pesan diterima oleh Amazon Location Service, gunakan AWS CLI perintah berikut. Jika Anda memodifikasinya selama penyiapan, ganti nama pelacak dan id perangkat dengan yang Anda gunakan.

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