

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

# Konfigurasikan tindakan AWS IoT SiteWise aturan
<a name="configure-rule-action"></a>

Tindakan AWS IoT SiteWise aturan mengirimkan data dari pesan MQTT yang memulai aturan ke properti aset di. AWS IoT SiteWise Anda dapat mengunggah beberapa entri data ke properti aset yang berbeda secara bersamaan, untuk mengirim pembaruan untuk semua sensor perangkat dalam satu pesan. Anda juga dapat mengunggah beberapa titik data sekaligus untuk setiap entri data.

**catatan**  
Saat Anda mengirim data AWS IoT SiteWise dengan tindakan aturan, data Anda harus memenuhi semua persyaratan `BatchPutAssetPropertyValue` operasi. Misalnya, data Anda tidak dapat memiliki stempel waktu lebih awal dari 7 hari dari waktu epoch Unix saat ini. Untuk informasi selengkapnya, lihat [Menyerap data dengan AWS IoT SiteWise API]().

Untuk setiap entri data dalam tindakan aturan, Anda mengidentifikasi properti aset dan menentukan stempel waktu, kualitas, dan nilai setiap titik data untuk properti aset tersebut. Tindakan aturan mengharapkan string untuk semua parameter.

Untuk mengidentifikasi properti aset dalam entri, tentukan salah satu dari berikut ini:
+ **ID Aset** (`assetId`) dan **ID Properti** (`propertyId`) dari properti aset yang Anda kirimi data. Anda dapat menemukan ID Aset dan ID Properti menggunakan file Konsol AWS IoT SiteWise. Jika Anda mengetahui ID Aset, Anda dapat menggunakan AWS CLI to call [DescribeAsset](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAsset.html)untuk menemukan ID Properti.
+ **Alias properti** (`propertyAlias`), yang merupakan alias aliran data (misalnya,`/company/windfarm/3/turbine/7/temperature`). Untuk menggunakan opsi ini, Anda harus terlebih dahulu menetapkan alias properti aset Anda. Untuk mempelajari cara menyetel alias properti, lihat[Mengelola aliran data untuk AWS IoT SiteWise](manage-data-streams.md).

Untuk stempel waktu di setiap entri, gunakan stempel waktu yang dilaporkan oleh peralatan Anda atau stempel waktu yang disediakan oleh. AWS IoT Core Stempel waktu memiliki dua parameter:
+ **Waktu dalam detik** (`timeInSeconds`) — Waktu epoch Unix, dalam detik, di mana sensor atau peralatan melaporkan data.
+ **Offset dalam nanos** (`offsetInNanos`) — (Opsional) Nanodetik offset dari waktu dalam detik.

**penting**  
Jika stempel waktu Anda adalah string, memiliki bagian desimal, atau tidak dalam hitungan detik, AWS IoT SiteWise tolak permintaan tersebut. Anda harus mengubah stempel waktu menjadi detik dan offset nanodetik. Gunakan fitur mesin AWS IoT aturan untuk mengonversi stempel waktu. Untuk informasi selengkapnya, lihat berikut ini:  
[Mendapatkan stempel waktu untuk perangkat yang tidak melaporkan waktu yang akurat](#rule-timestamp-function)
[Mengonversi stempel waktu yang dalam format string](#rule-time-to-epoch-function)

Anda dapat menggunakan templat substitusi untuk beberapa parameter dalam tindakan untuk melakukan perhitungan, memanggil fungsi, dan menarik nilai dari muatan pesan. Untuk informasi selengkapnya, lihat [Templat substitusi](https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html) di *Panduan AWS IoT Pengembang*.

**catatan**  <a name="substitution-template-limitations"></a>
Karena ekspresi dalam templat substitusi dievaluasi secara terpisah dari `SELECT` pernyataan, Anda tidak dapat menggunakan templat substitusi untuk mereferensikan alias yang dibuat menggunakan klausa. `AS` Anda hanya dapat mereferensikan informasi yang ada di muatan asli, selain fungsi dan operator yang didukung.

**Topics**
+ [Mendapatkan stempel waktu untuk perangkat yang tidak melaporkan waktu yang akurat](#rule-timestamp-function)
+ [Mengonversi stempel waktu yang dalam format string](#rule-time-to-epoch-function)
+ [Mengonversi string stempel waktu presisi nanodetik](#rule-convert-precise-timestamp-string)
+ [Contoh konfigurasi aturan](#rule-action-examples)
+ [Memecahkan masalah tindakan aturan](#troubleshoot-rule-action)

## Mendapatkan stempel waktu untuk perangkat yang tidak melaporkan waktu yang akurat
<a name="rule-timestamp-function"></a>

Jika sensor atau peralatan Anda tidak melaporkan data waktu yang akurat, dapatkan waktu epoch Unix saat ini dari mesin AWS IoT aturan dengan [stempel](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-timestamp) waktu (). Fungsi ini menghasilkan waktu dalam milidetik, jadi Anda harus mengonversi nilainya menjadi waktu dalam hitungan detik dan mengimbangi dalam nanodetik. Untuk melakukannya, gunakan konversi berikut:
+ Untuk **Time in seconds** (`timeInSeconds`), gunakan **${floor(timestamp() / 1E3)}** untuk mengubah waktu dari milidetik ke detik.
+ Untuk **Offset dalam nanos** (`offsetInNanos`), gunakan **${(timestamp() % 1E3) \* 1E6}** untuk menghitung offset nanodetik dari stempel waktu.

## Mengonversi stempel waktu yang dalam format string
<a name="rule-time-to-epoch-function"></a>

Jika sensor atau peralatan Anda melaporkan data waktu dalam format string (misalnya,`2020-03-03T14:57:14.699Z`), gunakan [time\_to\_epoch (](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-time-to-epoch)String, String). Fungsi ini memasukkan stempel waktu dan pola format sebagai parameter dan waktu keluaran dalam milidetik. Kemudian, Anda harus mengubah waktu ke waktu dalam hitungan detik dan mengimbangi dalam nanodetik. Untuk melakukannya, gunakan konversi berikut:
+ Untuk **Time in seconds** (`timeInSeconds`), gunakan **${floor(time\_to\_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)}** untuk mengonversi string timestamp menjadi milidetik, lalu ke detik.
+ Untuk **Offset dalam nanos** (`offsetInNanos`), gunakan **${(time\_to\_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) \* 1E6}** untuk menghitung offset nanodetik dari string stempel waktu.

**catatan**  
`time_to_epoch`Fungsi ini mendukung string stempel waktu presisi hingga milidetik. Untuk mengonversi string dengan presisi mikrodetik atau nanodetik, konfigurasikan AWS Lambda fungsi yang dipanggil aturan Anda untuk mengonversi stempel waktu menjadi nilai numerik. Untuk informasi selengkapnya, lihat [Mengonversi string stempel waktu presisi nanodetik](#rule-convert-precise-timestamp-string).

## Mengonversi string stempel waktu presisi nanodetik
<a name="rule-convert-precise-timestamp-string"></a>

Jika perangkat Anda mengirimkan informasi stempel waktu dalam format string dengan presisi nanodetik (misalnya,`2020-03-03T14:57:14.699728491Z`), gunakan prosedur berikut untuk mengonfigurasi tindakan aturan Anda. Anda dapat membuat AWS Lambda fungsi yang mengubah stempel waktu dari string menjadi **Time in seconds (`timeInSeconds`) dan **Offset in**** nanos (). `offsetInNanos` Kemudian, gunakan [aws\_lambda (FunctionARN, InputJson) dalam parameter tindakan aturan Anda untuk menjalankan fungsi Lambda itu dan menggunakan output](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda) dalam aturan Anda.

**catatan**  
Bagian ini berisi petunjuk lanjutan yang mengasumsikan bahwa Anda terbiasa dengan cara membuat sumber daya berikut:  
Fungsi Lambda. Untuk informasi selengkapnya, lihat [Membuat fungsi Lambda pertama Anda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) di Panduan *AWS Lambda Pengembang*.
AWS IoT aturan dengan tindakan AWS IoT SiteWise aturan. Untuk informasi selengkapnya, lihat [Menelan data untuk AWS IoT SiteWise menggunakan aturan AWS IoT Core](iot-rules.md).

**Untuk membuat tindakan AWS IoT SiteWise aturan yang mem-parsing string stempel waktu**

1. Buat fungsi Lambda dengan properti berikut:
   + **Nama fungsi** — Gunakan nama fungsi deskriptif (misalnya,**ConvertNanosecondTimestampFromString**).
   + **Runtime — Gunakan runtime** Python 3, seperti **Python** 3.11 (). `python3.11`
   + **Izin — Buat peran dengan izin** Lambda dasar (). **AWS LambdaBasicExecutionRole**
   + **Layers** - Tambahkan **AWS SDKPandaslayer -Python311** untuk fungsi Lambda yang akan digunakan. `numpy`
   + **Kode fungsi** — Gunakan kode fungsi berikut, yang mengkonsumsi argumen string bernama `timestamp` dan output `timeInSeconds` dan `offsetInNanos` nilai untuk stempel waktu itu.

     ```
     import json
     import math
     import numpy
     
     # Converts a timestamp string into timeInSeconds and offsetInNanos in Unix epoch time.
     # The input timestamp string can have up to nanosecond precision.
     def lambda_handler(event, context):
         timestamp_str = event['timestamp']
         # Parse the timestamp string as nanoseconds since Unix epoch.
         nanoseconds = numpy.datetime64(timestamp_str, 'ns').item()
         time_in_seconds = math.floor(nanoseconds / 1E9)
         # Slice to avoid precision issues.
         offset_in_nanos = int(str(nanoseconds)[-9:])
         return {
             'timeInSeconds': time_in_seconds,
             'offsetInNanos': offset_in_nanos
         }
     ```

     [Fungsi Lambda ini memasukkan string stempel waktu dalam format [ISO](https://en.wikipedia.org/wiki/ISO_8601) 8601 menggunakan datetime64 from.](https://numpy.org/doc/stable/reference/arrays.datetime.html) NumPy
**catatan**  
Jika string stempel waktu Anda tidak dalam format ISO 8601, Anda dapat menerapkan solusi yang mendefinisikan format stempel waktu. pandas Untuk informasi selengkapnya, lihat [pandas.to\_datetime](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html).

1. Saat Anda mengonfigurasi AWS IoT SiteWise tindakan untuk aturan Anda, gunakan templat substitusi berikut untuk **Time in seconds** (`timeInSeconds`) dan **Offset in nanos** (). `offsetInNanos` Template substitusi ini mengasumsikan bahwa payload pesan Anda berisi string stempel waktu. `timestamp` `aws_lambda`Fungsi ini menggunakan struktur JSON untuk parameter kedua, sehingga Anda dapat memodifikasi template substitusi di bawah ini jika diperlukan.
   + Untuk **Time in seconds** (`timeInSeconds`), gunakan template substitusi berikut.

     ```
     ${aws_lambda('arn:aws:lambda:{{region}}:{{account-id}}:function:{{ConvertNanosecondTimestampFromString}}', {'timestamp': timestamp}).timeInSeconds}
     ```
   + Untuk **Offset di nanos** (`offsetInNanos`), gunakan template substitusi berikut.

     ```
     ${aws_lambda('arn:aws:lambda:{{region}}:{{account-id}}:function:{{ConvertNanosecondTimestampFromString}}', {'timestamp': timestamp}).offsetInNanos}
     ```

   Untuk setiap parameter, ganti {{region}} dan {{account-id}} dengan Wilayah dan ID AWS akun Anda. Jika Anda menggunakan nama yang berbeda untuk fungsi Lambda Anda, ubah juga.

1. Berikan AWS IoT izin untuk menjalankan fungsi Anda dengan izin. `lambda:InvokeFunction` Untuk informasi selengkapnya, lihat [aws\_lambda (FunctionARN](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda), InputJson).

1. Uji aturan Anda (misalnya, gunakan klien pengujian AWS IoT MQTT) dan verifikasi bahwa AWS IoT SiteWise menerima data yang Anda kirim.

   Jika aturan Anda tidak berfungsi seperti yang diharapkan, lihat[Memecahkan masalah tindakan aturan AWS IoT SiteWise](troubleshoot-rule.md).

**catatan**  
Solusi ini memanggil fungsi Lambda dua kali untuk setiap string stempel waktu. Anda dapat membuat aturan lain untuk mengurangi jumlah pemanggilan fungsi Lambda jika aturan Anda menangani beberapa titik data yang memiliki stempel waktu yang sama di setiap muatan.  
Untuk melakukannya, buat aturan dengan tindakan penerbitan ulang yang memanggil Lambda dan menerbitkan payload asli dengan string stempel waktu yang dikonversi ke dan. `timeInSeconds` `offsetInNanos` Kemudian, buat aturan dengan tindakan AWS IoT SiteWise aturan untuk mengkonsumsi payload yang dikonversi. Dengan pendekatan ini, Anda mengurangi berapa kali aturan memanggil Lambda tetapi meningkatkan jumlah tindakan aturan AWS IoT yang dijalankan. Pertimbangkan harga setiap layanan jika Anda menerapkan solusi ini untuk kasus penggunaan Anda.

## Contoh konfigurasi aturan
<a name="rule-action-examples"></a>

Bagian ini berisi contoh konfigurasi aturan untuk membuat aturan dengan AWS IoT SiteWise tindakan.

**Example Contoh tindakan aturan yang menggunakan alias properti sebagai topik pesan**  
Contoh berikut membuat aturan dengan AWS IoT SiteWise tindakan yang menggunakan topik (melalui [topik ())](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-topic) sebagai alias properti untuk mengidentifikasi properti aset. Gunakan contoh ini untuk menentukan satu aturan untuk menelan data tipe ganda ke semua turbin angin di semua ladang angin. Contoh ini mengharuskan Anda mendefinisikan alias properti pada semua properti aset turbin. Anda perlu mendefinisikan aturan kedua yang mirip dengan menelan data tipe bilangan bulat.  

```
aws iot create-topic-rule \
  --rule-name SiteWiseWindFarmRule \
  --topic-rule-payload file://sitewise-rule-payload.json
```
Contoh payload di `sitewise-rule-payload.json` berisi konten berikut.  

```
{
  "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+' WHERE type = 'double'",
  "description": "Sends data to the wind turbine asset property with the same alias as the topic",
  "ruleDisabled": false,
  "awsIotSqlVersion": "2016-03-23",
  "actions": [
    {
      "iotSiteWise": {
        "putAssetPropertyValueEntries": [
          {
            "propertyAlias": "${topic()}",
            "propertyValues": [
              {
                "timestamp": {
                  "timeInSeconds": "${timeInSeconds}"
                },
                "value": {
                  "doubleValue": "${value}"
                }
              }
            ]
          }
        ],
        "roleArn": "arn:aws:iam::{{account-id}}:role/{{MySiteWiseActionRole}}"
      }
    }
  ]
}
```
Dengan tindakan aturan ini, kirim pesan berikut ke alias properti turbin angin (misalnya,`/company/windfarm/3/turbine/7/temperature`) sebagai topik untuk menelan data.  

```
{
  "type": "double",
  "value": "38.3",
  "timeInSeconds": "1581368533"
}
```

**Example Contoh aturan tindakan yang menggunakan timestamp () untuk menentukan waktu**  
Contoh berikut membuat aturan dengan AWS IoT SiteWise tindakan yang mengidentifikasi properti aset dengan IDs dan menggunakan [timestamp ()](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-function-timestamp) untuk menentukan waktu saat ini.  

```
aws iot create-topic-rule \
  --rule-name SiteWiseAssetPropertyRule \
  --topic-rule-payload file://sitewise-rule-payload.json
```
Contoh payload di `sitewise-rule-payload.json` berisi konten berikut.  

```
{
  "sql": "SELECT * FROM 'my/asset/property/topic'",
  "description": "Sends device data to an asset property",
  "ruleDisabled": false,
  "awsIotSqlVersion": "2016-03-23",
  "actions": [
    {
      "iotSiteWise": {
        "putAssetPropertyValueEntries": [
          {
            "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE",
            "propertyId": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE",
            "propertyValues": [
              {
                "timestamp": {
                  "timeInSeconds": "${floor(timestamp() / 1E3)}",
                  "offsetInNanos": "${(timestamp() % 1E3) * 1E6}"
                },
                "value": {
                  "doubleValue": "${value}"
                }
              }
            ]
          }
        ],
        "roleArn": "arn:aws:iam::{{account-id}}:role/{{MySiteWiseActionRole}}"
      }
    }
  ]
}
```
Dengan tindakan aturan ini, kirim pesan berikut `my/asset/property/topic` ke data untuk menelan.  

```
{
  "type": "double",
  "value": "38.3"
}
```

## Memecahkan masalah tindakan aturan
<a name="troubleshoot-rule-action"></a>

Untuk memecahkan masalah tindakan AWS IoT SiteWise aturan Anda AWS IoT Core, konfigurasikan CloudWatch Log atau konfigurasikan tindakan kesalahan penerbitan ulang untuk aturan Anda. Untuk informasi selengkapnya, lihat [Memecahkan masalah tindakan aturan AWS IoT SiteWise](troubleshoot-rule.md).