

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.

# Buat model detektor di AWS IoT Events
<a name="iotevents-detector-model"></a>

Dalam topik ini, Anda mendefinisikan *model detektor* (model peralatan atau proses Anda) menggunakan *status*.

Untuk setiap status, Anda mendefinisikan logika kondisional (Boolean) yang mengevaluasi input yang masuk untuk mendeteksi peristiwa penting. Ketika suatu peristiwa terdeteksi, itu mengubah status dan dapat memulai tindakan tambahan. Peristiwa ini dikenal sebagai peristiwa transisi.

Di status Anda, Anda juga menentukan peristiwa yang dapat menjalankan tindakan setiap kali detektor masuk atau keluar dari status tersebut atau ketika input diterima (ini dikenal sebagai`OnEnter`, `OnExit` dan `OnInput` peristiwa). Tindakan berjalan hanya jika logika kondisional acara mengevaluasi. `true`

**Untuk membuat model detektor**

1. Status detektor pertama telah dibuat untuk Anda. Untuk memodifikasinya, pilih lingkaran dengan label **State\$11** di ruang pengeditan utama.

1. Di panel **Negara**, masukkan **nama Negara** dan **OnEnter**, pilih **Tambah acara**. 

1. Pada halaman **Tambah OnEnter acara**, masukkan **nama Acara** dan **kondisi Acara**. Dalam contoh ini, enter `true` untuk menunjukkan acara selalu dimulai ketika status dimasukkan. 

1. Di bawah **Tindakan acara**, pilih **Tambah tindakan**.

1. Di bawah **tindakan Acara**, lakukan hal berikut:

   1. Pilih **Tetapkan variabel**

   1.  Untuk **operasi Variabel**, pilih **Tetapkan nilai**.

   1. Untuk **nama Variabel**, masukkan nama variabel yang akan ditetapkan.

   1. Untuk **nilai Variabel**, masukkan nilai **0** (nol).

1. Pilih **Simpan**. 

   Variabel, seperti yang Anda tentukan, dapat diatur (diberi nilai) dalam peristiwa apa pun dalam model detektor. Nilai variabel hanya dapat direferensikan (misalnya, dalam logika kondisional suatu peristiwa) setelah detektor mencapai status dan menjalankan tindakan di mana ia didefinisikan atau ditetapkan.

1. Di panel **State**, pilih **X** di sebelah **State** untuk kembali ke **palet model Detector**.

1. Untuk membuat status detektor kedua, dalam **palet model Detektor**, pilih **Status** dan seret ke ruang pengeditan utama. Ini menciptakan negara berjudul`untitled_state_1`.

1. Jeda pada keadaan pertama (**Normal**). Panah muncul di lingkar negara.

1. Klik dan seret panah dari status pertama ke status kedua. Garis terarah dari keadaan pertama ke keadaan kedua (berlabel **Untitled**) muncul.

1. Pilih baris **Untitled**. Di panel **peristiwa Transisi**, masukkan **nama Acara** dan **logika pemicu peristiwa**.

1. Di panel **acara Transisi**, pilih **Tambah tindakan**.

1. Pada panel **Tambahkan tindakan peristiwa transisi**, pilih **Tambah tindakan**. 

1.  Untuk **Pilih tindakan**, pilih **Tetapkan variabel**. 

   1. Untuk **operasi Variabel**, pilih **Tetapkan nilai**.

   1. Untuk **nama Variabel**, masukkan nama variabel.

   1. Untuk **Menetapkan nilai**, masukkan nilai seperti: `$variable.pressureThresholdBreached + 3`

   1. Pilih **Simpan**.

1. Pilih status kedua **untitled\$1state\$11**.

1. Di panel **Negara**, masukkan **nama Negara** dan untuk **On Enter**, pilih **Tambah acara**.

1. Pada halaman **Tambah OnEnter acara**, masukkan **nama Acara** dan **kondisi Acara**. Pilih **Tambahkan tindakan**.

1. Untuk **Pilih tindakan**, pilih **Kirim pesan SNS**.

   1. Untuk **topik SNS**, masukkan ARN target topik Amazon SNS Anda.

   1. Pilih **Simpan**.

1. Lanjutkan untuk menambahkan acara dalam contoh.

   1. Untuk **OnInput**, pilih **Tambahkan acara**, lalu masukkan dan simpan informasi acara berikut.

      ```
        Event name: Overpressurized
        Event condition: $input.PressureInput.sensorData.pressure > 70
        Event actions:
          Set variable:
            Variable operation: Assign value
            Variable name: pressureThresholdBreached
            Assign value: 3
      ```

   1. Untuk **OnInput**, pilih **Tambahkan acara**, lalu masukkan dan simpan informasi acara berikut.

      ```
        Event name: Pressure Okay
        Event condition: $input.PressureInput.sensorData.pressure <= 70
        Event actions:
          Set variable:
            Variable operation: Decrement
            Variable name: pressureThresholdBreached
      ```

   1. Untuk **OnExit**, pilih **Tambahkan acara**, lalu masukkan dan simpan informasi acara berikut menggunakan ARN dari topik Amazon SNS yang Anda buat.

      ```
        Event name: Normal Pressure Restored
        Event condition: true
        Event actions:
          Send SNS message: 
            Target arn: arn:aws:sns:us-east-1:123456789012:pressureClearedAction
      ```

1. Jeda pada keadaan kedua (**Berbahaya**``). Panah muncul di lingkar negara

1. Klik dan seret panah dari status kedua ke status pertama. Baris terarah dengan label **Untitled muncul**.

1. Pilih baris **Tanpa Judul** dan di panel **peristiwa Transisi**, masukkan **nama Acara** dan **logika pemicu peristiwa menggunakan informasi** berikut.

   ```
   {
     Event name: BackToNormal
     Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0
   }
   ```

   Untuk informasi lebih lanjut tentang mengapa kami menguji `$input` nilai dan `$variable` nilai dalam logika pemicu, lihat entri untuk ketersediaan nilai variabel di[AWS IoT Events pembatasan dan batasan model detektor](iotevents-restrictions-detector-model.md).

1. Pilih status **Mulai**. Secara default, status ini dibuat saat Anda membuat model detektor). Di panel **Mulai**, pilih **status Tujuan** (misalnya, **Normal**).

1. Selanjutnya, konfigurasikan model detektor Anda untuk mendengarkan input. **Di sudut kanan atas, pilih Publish.**

1. Pada halaman **model Publish detector**, lakukan hal berikut.

   1.  Masukkan **nama model Detektor**, **Deskripsi**, dan nama **Peran**. Peran ini dibuat untuk Anda.

   1. Pilih **Buat detektor untuk setiap nilai kunci unik**. Untuk membuat dan menggunakan **Peran** Anda sendiri, ikuti langkah-langkahnya [Menyiapkan izin untuk AWS IoT Events](iotevents-permissions.md) dan masukkan sebagai **Peran** di sini.

1. Untuk **kunci pembuatan Detektor**, pilih nama salah satu atribut input yang Anda tentukan sebelumnya. Atribut yang Anda pilih sebagai kunci pembuatan detektor harus ada di setiap input pesan, dan harus unik untuk setiap perangkat yang mengirim pesan. Contoh ini menggunakan atribut **motorid**.

1. Pilih **Simpan dan terbitkan**.

**catatan**  
Jumlah detektor unik yang dibuat untuk model detektor tertentu didasarkan pada pesan input yang dikirim. Ketika model detektor dibuat, kunci dipilih dari atribut input. Kunci ini menentukan instance detektor mana yang akan digunakan. Jika kunci belum pernah terlihat sebelumnya (untuk model detektor ini), instance detektor baru dibuat. Jika kunci telah terlihat sebelumnya, kami menggunakan instance detektor yang ada sesuai dengan nilai kunci ini.

Anda dapat membuat salinan cadangan definisi model detektor Anda (dalam JSON) membuat ulang atau memperbarui model detektor atau digunakan sebagai templat untuk membuat model detektor lain.

Anda dapat melakukan ini dari konsol atau dengan menggunakan perintah CLI berikut. Jika perlu, ubah nama model detektor agar sesuai dengan yang Anda gunakan saat Anda menerbitkannya di langkah sebelumnya.

```
aws iotevents describe-detector-model  --detector-model-name motorDetectorModel > motorDetectorModel.json 
```

Ini membuat file (`motorDetectorModel.json`) yang memiliki konten yang mirip dengan berikut ini.

```
{
    "detectorModel": {
        "detectorModelConfiguration": {
            "status": "ACTIVE", 
            "lastUpdateTime": 1552072424.212, 
            "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole", 
            "creationTime": 1552072424.212, 
            "detectorModelArn": "arn:aws:iotevents:us-west-2:123456789012:detectorModel/motorDetectorModel", 
            "key": "motorid", 
            "detectorModelName": "motorDetectorModel", 
            "detectorModelVersion": "1"
        }, 
        "detectorModelDefinition": {
            "states": [
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached + 3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70", 
                                "nextState": "Dangerous"
                            }
                        ], 
                        "events": []
                    }, 
                    "stateName": "Normal", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "init", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "0"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": []
                    }
                }, 
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Back to Normal", 
                                "actions": [], 
                                "condition": "$variable.pressureThresholdBreached <= 1 && $input.PressureInput.sensorData.pressure <= 70", 
                                "nextState": "Normal"
                            }
                        ], 
                        "events": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70"
                            }, 
                            {
                                "eventName": "Pressure Okay", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached - 1"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure <= 70"
                            }
                        ]
                    }, 
                    "stateName": "Dangerous", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "Pressure Threshold Breached", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:MyIoTButtonSNSTopic"
                                        }
                                    }
                                ], 
                                "condition": "$variable.pressureThresholdBreached > 1"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": [
                            {
                                "eventName": "Normal Pressure Restored", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:IoTVirtualButtonTopic"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }
                }
            ], 
            "initialStateName": "Normal"
        }
    }
}
```