

Pemberitahuan akhir dukungan: Pada 20 Mei 2026, AWS akan mengakhiri dukungan untuk AWS IoT Events. Setelah 20 Mei 2026, Anda tidak akan lagi dapat mengakses AWS IoT Events konsol atau AWS IoT Events sumber daya. Untuk informasi selengkapnya, lihat [AWS IoT Events akhir dukungan](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

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

# Ekspresi untuk memfilter, mengubah, dan memproses data peristiwa
<a name="iotevents-expressions"></a>

Ekspresi digunakan untuk mengevaluasi data yang masuk, melakukan perhitungan, dan menentukan kondisi di mana tindakan tertentu atau transisi status harus terjadi. AWS IoT Events menyediakan beberapa cara untuk menentukan nilai saat Anda membuat dan memperbarui model detektor. Anda dapat menggunakan ekspresi untuk menentukan nilai literal, atau AWS IoT Events dapat mengevaluasi ekspresi sebelum Anda menentukan nilai tertentu.

**Topics**
+ [Sintaks untuk memfilter data perangkat dan menentukan tindakan di AWS IoT Events](#expression-syntax)
+ [Contoh ekspresi dan penggunaan untuk AWS IoT Events](expression-usage.md)

## Sintaks untuk memfilter data perangkat dan menentukan tindakan di AWS IoT Events
<a name="expression-syntax"></a>

Ekspresi menawarkan sintaks untuk memfilter data perangkat dan menentukan tindakan. Anda dapat menggunakan template literal, operator, fungsi, referensi, dan substitusi dalam ekspresi. AWS IoT Events Dengan menggabungkan komponen-komponen ini, Anda dapat membuat ekspresi yang kuat dan fleksibel untuk memproses data IoT, melakukan perhitungan, memanipulasi string, dan membuat keputusan logis dalam model detektor Anda.

### Literal
<a name="expression-literal"></a>
+ Bilangan Bulat
+ Decimal
+ String
+ Boolean

### Operator
<a name="expression-operator"></a>

Unary  
+ Tidak (Boolean): `!`
+ Tidak (bitwise): `~`
+ Minus (aritmatika): `-`

String  
+ Penggabungan: **`+`**

  Kedua operan harus berupa string. String literal harus diapit dalam tanda kutip tunggal (').

  Misalnya: `'my' + 'string'` -> `'mystring'`

Aritmatika  
+ Penambahan: **`+`**

  Kedua operan harus numerik.
+ Pengurangan: **`-`**
+ Divisi: **`/`**

  Hasil pembagian adalah nilai integer bulat kecuali setidaknya salah satu operan (pembagi atau dividen) adalah nilai desimal.
+ Perkalian: **`*`**

Bitwise (Bilangan bulat)  
+ ATAU: **`|`**

  Misalnya: `13 | 5` -> `13`
+ DAN: **`&`**

  Misalnya: `13 & 5` -> `5`
+ XOR: **`^`**

  Misalnya: `13 ^ 5` -> `8`
+ TIDAK: **`~`**

  Misalnya: `~13` -> `-14`

Boolean  
+ Kurang dari: **`<`**
+ Kurang dari atau sama dengan: **`<=`**
+ Sama dengan: **`==`**
+ Tidak Sama Dengan: **`!=`**
+ Lebih besar dari atau sama dengan: **`>=`**
+ Lebih besar dari: **`>`**
+ DAN: **`&&`**
+ ATAU: **`||`**
**catatan**  
Ketika subexpression `||` berisi data yang tidak ditentukan, subexpression itu diperlakukan sebagai. `false`

Tanda kurung  
Anda dapat menggunakan tanda kurung untuk mengelompokkan istilah dalam ekspresi.

### Fungsi untuk digunakan dalam AWS IoT Events ekspresi
<a name="expression-function"></a>

AWS IoT Events menyediakan serangkaian fungsi bawaan untuk meningkatkan kemampuan ekspresi model detektor Anda. Fungsi-fungsi ini memungkinkan manajemen timer, konversi tipe, pemeriksaan null, identifikasi tipe pemicu, verifikasi input, manipulasi string, dan operasi bitwise. Dengan memanfaatkan fungsi-fungsi ini, Anda dapat membuat logika AWS IoT Events pemrosesan responsif, meningkatkan efektivitas keseluruhan aplikasi IoT Anda.

Fungsi Bawaan    
`timeout("timer-name")`  
Mengevaluasi `true` apakah timer yang ditentukan telah berlalu. Ganti **timer-name** "" dengan nama timer yang Anda tentukan, dalam tanda kutip. Dalam tindakan peristiwa, Anda dapat menentukan timer dan kemudian memulai timer, mengatur ulang, atau menghapus salah satu yang Anda tentukan sebelumnya. Lihat lapangan`detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName`.  
Timer yang disetel dalam satu status dapat direferensikan dalam keadaan yang berbeda. Anda harus mengunjungi negara bagian di mana Anda membuat timer sebelum Anda memasukkan status di mana timer direferensikan.  
Misalnya, model detektor memiliki dua status, `TemperatureChecked` dan`RecordUpdated`. Anda membuat timer di `TemperatureChecked` negara bagian. Anda harus mengunjungi `TemperatureChecked` negara bagian terlebih dahulu sebelum Anda dapat menggunakan timer di `RecordUpdated` negara bagian.  
Untuk memastikan akurasi, waktu minimum pengatur waktu harus diatur adalah 60 detik.  
`timeout()`mengembalikan `true` hanya pertama kali diperiksa setelah kedaluwarsa timer aktual dan kembali `false` setelahnya.  
`convert(type, expression)`  
Mengevaluasi nilai ekspresi yang dikonversi ke tipe yang ditentukan. *type*Nilai harus`String`,`Boolean`, atau`Decimal`. Gunakan salah satu kata kunci ini atau ekspresi yang mengevaluasi string yang berisi kata kunci. Hanya konversi berikut yang berhasil dan mengembalikan nilai yang valid:   
+ Boolean -> string

  Mengembalikan string `"true"` atau`"false"`.
+ Desimal -> string
+ String -> Boolean
+ String -> desimal

  String yang ditentukan harus merupakan representasi yang valid dari angka desimal, atau `convert()` gagal.
Jika `convert()` tidak mengembalikan nilai yang valid, ekspresi bahwa itu adalah bagian dari juga tidak valid. Hasil ini setara dengan `false` dan tidak akan memicu transisi `actions` atau ke yang `nextState` ditentukan sebagai bagian dari peristiwa di mana ekspresi terjadi.  
`isNull(expression)`  
Mengevaluasi `true` jika ekspresi mengembalikan null. Misalnya, jika input `MyInput` menerima pesan`{ "a": null }`, maka yang berikut ini mengevaluasi`true`, tetapi `isUndefined($input.MyInput.a)` mengevaluasi ke. `false`  

```
isNull($input.MyInput.a)
```  
`isUndefined(expression)`  
Mengevaluasi `true` apakah ekspresi tidak terdefinisi. Misalnya, jika input `MyInput` menerima pesan`{ "a": null }`, maka yang berikut ini mengevaluasi`false`, tetapi `isNull($input.MyInput.a)` mengevaluasi ke. `true`  

```
isUndefined($input.MyInput.a)
```  
`triggerType("type")`  
*type*Nilainya bisa `"Message"` atau`"Timer"`. Mengevaluasi `true` apakah kondisi peristiwa di mana itu muncul sedang dievaluasi karena timer telah kedaluwarsa seperti pada contoh berikut.  

```
triggerType("Timer")
```
Atau pesan masukan diterima.   

```
triggerType("Message")
```  
`currentInput("input")`  
Mengevaluasi `true` apakah kondisi acara di mana itu muncul sedang dievaluasi karena pesan input yang ditentukan telah diterima. Misalnya, jika input `Command` menerima pesan`{ "value": "Abort" }`, maka yang berikut ini akan dievaluasi. `true`   

```
currentInput("Command")
```
Gunakan fungsi ini untuk memverifikasi bahwa kondisi sedang dievaluasi karena input tertentu telah diterima dan timer belum kedaluwarsa, seperti pada ekspresi berikut.  

```
currentInput("Command") && $input.Command.value == "Abort"
```

Fungsi Pencocokan String    
`startsWith(expression1, expression2)`  
Mengevaluasi `true` apakah ekspresi string pertama dimulai dengan ekspresi string kedua. Misalnya, jika input `MyInput` menerima pesan`{ "status": "offline"}`, maka yang berikut ini akan dievaluasi. `true`  

```
startsWith($input.MyInput.status, "off")
```
Kedua ekspresi harus mengevaluasi nilai string. Jika salah satu ekspresi tidak mengevaluasi nilai string, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.  
`endsWith(expression1, expression2)`  
Mengevaluasi `true` apakah ekspresi string pertama berakhir dengan ekspresi string kedua. Misalnya, jika input `MyInput` menerima pesan`{ "status": "offline" }`, maka yang berikut ini akan dievaluasi. `true`  

```
endsWith($input.MyInput.status, "line")
```
Kedua ekspresi harus mengevaluasi nilai string. Jika salah satu ekspresi tidak mengevaluasi nilai string, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.  
`contains(expression1, expression2)`  
Mengevaluasi `true` apakah ekspresi string pertama berisi ekspresi string kedua. Misalnya, jika input `MyInput` menerima pesan`{ "status": "offline" }`, maka yang berikut ini akan dievaluasi. `true`  

```
contains($input.MyInput.value, "fli")
```
Kedua ekspresi harus mengevaluasi nilai string. Jika salah satu ekspresi tidak mengevaluasi nilai string, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.

Fungsi Manipulasi Bitwise Integer    
`bitor(expression1, expression2)`  
Mengevaluasi bitwise OR dari ekspresi integer (operasi OR biner dilakukan pada bit yang sesuai dari bilangan bulat). Misalnya, jika input `MyInput` menerima pesan`{ "value1": 13, "value2": 5 }`, maka yang berikut ini akan dievaluasi. `13`  

```
bitor($input.MyInput.value1, $input.MyInput.value2)
```
Kedua ekspresi harus mengevaluasi ke nilai integer. Jika salah satu ekspresi tidak mengevaluasi nilai integer, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.  
`bitand(expression1, expression2)`  
Mengevaluasi bitwise AND dari ekspresi integer (operasi biner AND dilakukan pada bit yang sesuai dari bilangan bulat). Misalnya, jika input `MyInput` menerima pesan`{ "value1": 13, "value2": 5 }`, maka yang berikut ini akan dievaluasi. `5`   

```
bitand($input.MyInput.value1, $input.MyInput.value2)
```
Kedua ekspresi harus mengevaluasi ke nilai integer. Jika salah satu ekspresi tidak mengevaluasi nilai integer, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.  
`bitxor(expression1, expression2)`  
Mengevaluasi XOR bitwise dari ekspresi integer (operasi XOR biner dilakukan pada bit yang sesuai dari bilangan bulat). Misalnya, jika input `MyInput` menerima pesan`{ "value1": 13, "value2": 5 }`, maka yang berikut ini akan dievaluasi. `8`  

```
bitxor($input.MyInput.value1, $input.MyInput.value2)
```
Kedua ekspresi harus mengevaluasi ke nilai integer. Jika salah satu ekspresi tidak mengevaluasi nilai integer, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.  
`bitnot(expression)`  
Mengevaluasi bitwise NOT dari ekspresi integer (operasi NOT biner dilakukan pada bit integer). Misalnya, jika input `MyInput` menerima pesan`{ "value": 13 }`, maka yang berikut ini akan dievaluasi. `-14`  

```
bitnot($input.MyInput.value)
```
Kedua ekspresi harus mengevaluasi ke nilai integer. Jika salah satu ekspresi tidak mengevaluasi nilai integer, maka hasil dari fungsi tersebut tidak terdefinisi. Tidak ada konversi yang dilakukan.

### AWS IoT Events referensi untuk input dan variabel dalam ekspresi
<a name="expression-reference"></a>

Masukan  
`$input.input-name.path-to-data`  
`input-name`adalah masukan yang Anda buat menggunakan [CreateInput](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateInput.html)tindakan.  
Misalnya, jika Anda memiliki masukan bernama `TemperatureInput` yang Anda tetapkan `inputDefinition.attributes.jsonPath` entri, nilainya mungkin muncul di bidang yang tersedia berikut.  

```
{
    "temperature": 78.5,
    "date": "2018-10-03T16:09:09Z"
  }
```
Untuk mereferensikan nilai `temperature` bidang, gunakan perintah berikut.  

```
$input.TemperatureInput.temperature
```
Untuk bidang yang nilainya adalah array, Anda dapat mereferensikan anggota array menggunakan`[n]`. Misalnya, diberikan nilai-nilai berikut:  

```
{
    "temperatures": [
      78.4,
      77.9,
      78.8
    ],
    "date": "2018-10-03T16:09:09Z"
  }
```
Nilai `78.8` dapat direferensikan dengan perintah berikut.  

```
$input.TemperatureInput.temperatures[2]
```

Variabel  
`$variable.variable-name`  
`variable-name`Ini adalah variabel yang Anda definisikan menggunakan [CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html)tindakan.  
Misalnya, jika Anda memiliki variabel bernama `TechnicianID` yang Anda definisikan menggunakan`detectorDefinition.states.onInputEvents.actions.setVariable.variableName`, Anda dapat mereferensikan nilai (string) yang terakhir diberikan ke variabel dengan perintah berikut.  

```
$variable.TechnicianID
```
Anda dapat mengatur nilai variabel hanya menggunakan `setVariable` tindakan. Anda tidak dapat menetapkan nilai untuk variabel dalam ekspresi. Variabel tidak dapat di-unset. Misalnya, Anda tidak dapat menetapkan nilainya`null`.

**catatan**  
Dalam referensi yang menggunakan pengidentifikasi yang tidak mengikuti pola (ekspresi reguler)`[a-zA-Z][a-zA-Z0-9_]*`, Anda harus menyertakan pengidentifikasi tersebut di backticks (). ``` Misalnya, referensi ke input bernama `MyInput` dengan bidang bernama `_value` harus menentukan bidang ini sebagai`$input.MyInput.`_value``.

Saat Anda menggunakan referensi dalam ekspresi, periksa hal berikut:<a name="expression-reference-type-compatibility"></a>
+ Bila Anda menggunakan referensi sebagai operan dengan satu atau beberapa operator, pastikan semua tipe data yang Anda referensikan kompatibel.

  Misalnya, dalam ekspresi berikut, integer `2` adalah operan dari kedua operator `==` dan`&&`. Untuk memastikan bahwa operan kompatibel, `$variable.testVariable + 1` dan `$variable.testVariable` harus mereferensikan bilangan bulat atau desimal.

  Selain itu, integer `1` adalah operan dari operator. `+` Oleh karena itu, `$variable.testVariable` harus referensi bilangan bulat atau desimal.

  ```
  ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  ```
+ Bila Anda menggunakan referensi sebagai argumen yang diteruskan ke fungsi, pastikan bahwa fungsi tersebut mendukung tipe data yang Anda referensikan.

  Misalnya, `timeout("time-name")` fungsi berikut membutuhkan string dengan tanda kutip ganda sebagai argumen. Jika Anda menggunakan referensi untuk *timer-name* nilainya, Anda harus mereferensikan string dengan tanda kutip ganda.

  ```
  timeout("timer-name")
  ```
**catatan**  
Untuk `convert(type, expression)` fungsi, jika Anda menggunakan referensi untuk *type* nilai, hasil evaluasi dari referensi Anda harus`String`,`Decimal`, atau`Boolean`.

AWS IoT Events ekspresi mendukung tipe data integer, desimal, string, dan Boolean. Tabel berikut menyediakan daftar pasangan jenis yang tidak kompatibel.


|  Pasangan tipe yang tidak kompatibel  | 
| --- | 
|  Bilangan bulat, string  | 
|  Bilangan bulat, Boolean  | 
|  Desimal, string  | 
|  Desimal, Boolean  | 
|  Tali, Boolean  | 

### Templat substitusi untuk ekspresi AWS IoT Events
<a name="expression-substitution-template"></a>

****  
`'${expression}'`  
`${}`Mengidentifikasi string sebagai string interpolasi. Itu `expression` bisa berupa AWS IoT Events ekspresi apa saja. Ini termasuk operator, fungsi, dan referensi.  
Misalnya, Anda menggunakan [SetVariableAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetVariableAction.html)tindakan untuk mendefinisikan variabel. `variableName` adalah `SensorID`, dan `value` adalah `10`. Anda dapat membuat template substitusi berikut.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iotevents/latest/developerguide/iotevents-expressions.html)

# Contoh ekspresi dan penggunaan untuk AWS IoT Events
<a name="expression-usage"></a>

Anda dapat menentukan nilai dalam model detektor dengan cara berikut:
+ Masukkan ekspresi yang didukung di AWS IoT Events konsol.
+ Lewati ekspresi ke parameter AWS IoT Events APIs as.

Ekspresi mendukung literal, operator, fungsi, referensi, dan templat substitusi.

**penting**  
Ekspresi Anda harus mereferensikan nilai integer, desimal, string, atau Boolean.

## Menulis AWS IoT Events ekspresi
<a name="write-expressions"></a>

Lihat contoh berikut untuk membantu Anda menulis AWS IoT Events ekspresi Anda:

**Literal**  
Untuk nilai literal, ekspresi harus berisi tanda kutip tunggal. Nilai Boolean harus salah satu `true` atau`false`.  

```
'123'        # Integer
'123.12'     # Decimal
'hello'      # String
'true'       # Boolean
```

**Referensi**  
Untuk referensi, Anda harus menentukan variabel atau nilai input.  
+ Input berikut mereferensikan angka desimal,. `10.01`

  ```
  $input.GreenhouseInput.temperature
  ```
+ Variabel berikut referensi string,`Greenhouse Temperature Table`.

  ```
  $variable.TableName
  ```

**Templat substitusi**  
Untuk templat substitusi, Anda harus menggunakan `${}`, dan templat harus berada dalam tanda kutip tunggal. Templat substitusi juga dapat berisi kombinasi dari templat literal, operator, fungsi, referensi, dan substitusi.  
+ Hasil evaluasi dari ekspresi berikut adalah string,`50.018 in Fahrenheit`.

  ```
  '${$input.GreenhouseInput.temperature * 9 / 5 + 32} in Fahrenheit'
  ```
+ Hasil evaluasi dari ekspresi berikut adalah string,`{\"sensor_id\":\"Sensor_1\",\"temperature\":\"50.018\"}`.

  ```
  '{\"sensor_id\":\"${$input.GreenhouseInput.sensors[0].sensor1}\",\"temperature\":\"${$input.GreenhouseInput.temperature*9/5+32}\"}'
  ```

**Penggabungan string**  
Untuk rangkaian string, Anda harus menggunakan `+`. Rangkaian string juga dapat berisi kombinasi dari templat literal, operator, fungsi, referensi, dan substitusi.  
+ Hasil evaluasi dari ekspresi berikut adalah string,`Greenhouse Temperature Table 2000-01-01`.

  ```
  'Greenhouse Temperature Table ' + $input.GreenhouseInput.date
  ```