

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

# Adaptor protokol Modbus-RTU
<a name="modbus-rtu-protocol-adapter-component"></a>

Komponen adaptor protokol Modbus-RTU (`aws.greengrass.Modbus`) mengumpulkan informasi dari perangkat Modbus RTU lokal.

Untuk meminta informasi dari perangkat Modbus RTU lokal dengan komponen ini, publikasikan pesan ke topik di mana komponen ini berlangganan. Dalam pesan, tentukan permintaan Modbus RTU yang akan dikirim ke perangkat. Kemudian, komponen ini akan menerbitkan respon yang berisi hasil permintaan Modbus RTU.

**catatan**  
Komponen ini menyediakan fungsionalitas yang mirip dengan konektor adaptor protokol Modbus RTU di AWS IoT Greengrass V1. Untuk informasi selengkapnya, lihat [konektor adaptor protokol RTU Modbus](https://docs.aws.amazon.com/greengrass/latest/developerguide/modbus-protocol-adapter-connector.html) di *Panduan Developer V1 AWS IoT Greengrass *.

**Topics**
+ [Versi](#modbus-rtu-protocol-adapter-component-versions)
+ [Tipe](#modbus-rtu-protocol-adapter-component-type)
+ [Sistem operasi](#modbus-rtu-protocol-adapter-component-os-support)
+ [Persyaratan](#modbus-rtu-protocol-adapter-component-requirements)
+ [Dependensi](#modbus-rtu-protocol-adapter-component-dependencies)
+ [Konfigurasi](#modbus-rtu-protocol-adapter-component-configuration)
+ [Data input](#modbus-rtu-protocol-adapter-component-input-data)
+ [Data output](#modbus-rtu-protocol-adapter-component-output-data)
+ [Permintaan dan tanggapan Modbus RTU](#modbus-rtu-protocol-adapter-component-requests-responses)
+ [File log lokal](#modbus-rtu-protocol-adapter-component-log-file)
+ [Lisensi](#modbus-rtu-protocol-adapter-component-licenses)
+ [Changelog](#modbus-rtu-protocol-adapter-component-changelog)

## Versi
<a name="modbus-rtu-protocol-adapter-component-versions"></a>

Komponen ini memiliki versi berikut:
+ 2.1.x
+ 2.0.x

## Tipe
<a name="modbus-rtu-protocol-adapter-component-type"></a>

<a name="public-component-type-lambda"></a><a name="public-component-type-lambda-phrase"></a>Komponen ini adalah komponen Lambda () `aws.greengrass.lambda`. [Inti [Greengrass](greengrass-nucleus-component.md) menjalankan fungsi Lambda komponen ini menggunakan komponen peluncur Lambda.](lambda-launcher-component.md)

<a name="public-component-type-more-information"></a>Untuk informasi selengkapnya, lihat [Jenis komponen](develop-greengrass-components.md#component-types).

## Sistem operasi
<a name="modbus-rtu-protocol-adapter-component-os-support"></a>

Komponen ini hanya dapat diinstal pada perangkat inti Linux.

## Persyaratan
<a name="modbus-rtu-protocol-adapter-component-requirements"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="core-device-lambda-function-requirements"></a>Perangkat inti Anda harus memenuhi persyaratan untuk menjalankan fungsi Lambda. Jika Anda ingin perangkat inti untuk menjalankan fungsi Lambda kontainer, perangkat harus memenuhi persyaratan untuk melakukannya. Untuk informasi selengkapnya, lihat [Persyaratan fungsi Lambda](setting-up.md#greengrass-v2-lambda-requirements).
+ <a name="public-component-python3-requirement"></a>[Python](https://www.python.org/) versi 3.7 diinstal pada perangkat inti dan ditambahkan ke variabel lingkungan PATH.
+ Koneksi fisik antara perangkat AWS IoT Greengrass inti dan perangkat Modbus. Perangkat inti harus terhubung secara fisik ke jaringan Modbus RTU melalui port serial, seperti port USB.
+ <a name="connector-component-legacy-subscription-router-dependency"></a>Untuk menerima data keluaran dari komponen ini, Anda harus menggabungkan pemutakhiran konfigurasi berikut untuk [komponen router langganan lama (`aws.greengrass.LegacySubscriptionRouter`) saat menerapkan komponen](legacy-subscription-router-component.md) ini. Konfigurasi ini menentukan topik di mana komponen ini menerbitkan tanggapan.

------
#### [ Legacy subscription router v2.1.x ]

  ```
  {
    "subscriptions": {
      "aws-greengrass-modbus": {
        "id": "aws-greengrass-modbus",
        "source": "component:aws.greengrass.Modbus",
        "subject": "modbus/adapter/response",
        "target": "cloud"
      }
    }
  }
  ```

------
#### [ Legacy subscription router v2.0.x ]

  ```
  {
    "subscriptions": {
      "aws-greengrass-modbus": {
        "id": "aws-greengrass-modbus",
        "source": "arn:aws:lambda:region:aws:function:aws-greengrass-modbus:version",
        "subject": "modbus/adapter/response",
        "target": "cloud"
      }
    }
  }
  ```<a name="connector-component-legacy-subscription-router-dependency-replace"></a>
  + Ganti *region* dengan Wilayah AWS yang Anda gunakan.
  + Ganti *version* dengan versi fungsi Lambda yang dijalankan komponen ini. Untuk menemukan versi fungsi Lambda, Anda harus melihat resep untuk versi komponen ini yang ingin Anda deploy. Buka halaman detail komponen ini di [konsol AWS IoT Greengrass](https://console.aws.amazon.com//greengrass) tersebut, dan cari pasangan nilai kunci **Fungsi Lambda**. Pasangan kunci-nilai ini berisi nama dan versi fungsi Lambda.

**penting**  <a name="connector-component-legacy-subscription-router-dependency-note"></a>
Anda harus memperbarui versi fungsi Lambda pada router langganan warisan setiap kali Anda men-deploy komponen ini. Hal ini memastikan bahwa Anda menggunakan versi fungsi Lambda yang benar untuk versi komponen yang Anda deploy.

------

  <a name="connector-component-create-deployments"></a>Untuk informasi selengkapnya, lihat [Buat deployment](create-deployments.md).
+ Adaptor protokol Modbus-RTU didukung untuk berjalan di VPC.

## Dependensi
<a name="modbus-rtu-protocol-adapter-component-dependencies"></a>

Saat Anda menerapkan komponen, gunakan AWS IoT Greengrass juga versi dependensinya yang kompatibel. Ini berarti bahwa Anda harus memenuhi persyaratan untuk komponen dan semua dependensinya untuk berhasil men-deploy komponen. Bagian ini berisi daftar dependensi untuk [versi yang dirilis](#modbus-rtu-protocol-adapter-component-changelog) dari komponen ini dan kendala versi semantik yang menentukan versi komponen untuk setiap dependensi. Anda juga dapat melihat dependensi untuk setiap versi komponen di [konsol AWS IoT Greengrass](https://console.aws.amazon.com//greengrass) tersebut. Pada halaman detail komponen, cari daftar **Dependensi**.

------
#### [ 2.1.11 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.11 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.16.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.10 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.10 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.15.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.9 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.9 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.14.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.8 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.8 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.13.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.7 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.7 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.12.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.6 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.6 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.11.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.4 and 2.1.5 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.4 dan 2.1.5 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.10.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.3 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.3 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.9.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.2 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.2 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.8.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.1.1 ]

Tabel berikut mencantumkan dependensi untuk versi 2.1.1 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.7.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.8 and 2.1.0 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.8 dan 2.1.0 dari komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.6.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.7 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.7 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.5.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.6 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.6 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.4.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.5 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.5 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.3.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan pertukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.4 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.4 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.0 <2.2.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | ^2.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | ^2.0.0  | Lunak | 
| [Layanan penukaran Token](token-exchange-service-component.md) | ^2.0.0  | Keras | 

------
#### [ 2.0.3 ]

Tabel berikut mencantumkan dependensi untuk versi 2.0.3 komponen ini.


| Dependensi | Versi yang kompatibel | Jenis dependensi | 
| --- | --- | --- | 
| [Inti Greengrass](greengrass-nucleus-component.md) | >=2.0.3 <2.1.0  | Keras | 
| [Peluncur Lambda](lambda-launcher-component.md) | >=1.0.0  | Keras | 
| [Runtime Lambda](lambda-runtimes-component.md) | >=1.0.0  | Lunak | 
| [Layanan penukaran Token](token-exchange-service-component.md) | >=1.0.0  | Keras | 

------

Untuk informasi selengkapnya tentang dependensi komponen, lihat [referensi resep komponen](component-recipe-reference.md#recipe-reference-component-dependencies).

## Konfigurasi
<a name="modbus-rtu-protocol-adapter-component-configuration"></a>

Komponen ini menyediakan parameter konfigurasi berikut yang dapat Anda sesuaikan ketika Anda men-deploy komponen.

**catatan**  <a name="connector-component-lambda-parameters"></a>
Konfigurasi default komponen ini meliputi parameter fungsi Lambda. Kami sarankan Anda mengedit hanya parameter berikut untuk mengonfigurasi komponen ini pada perangkat Anda.

------
#### [ v2.1.x ]

`lambdaParams`  
Sebuah objek yang berisi parameter untuk fungsi Lambda komponen ini. Objek ini berisi informasi berikut:    
`EnvironmentVariables`  
Sebuah objek yang berisi parameter fungsi Lambda ini. Objek ini berisi informasi berikut:    
`ModbusLocalPort`  <a name="modbus-rtu-protocol-adapter-configuration-modbuslocalport"></a>
Jalur absolut ke port serial Modbus fisik pada perangkat inti, seperti`/dev/ttyS2`.  
Untuk menjalankan komponen ini dalam wadah, Anda harus mendefinisikan jalur ini sebagai perangkat sistem (in`containerParams.devices`) yang dapat diakses komponen. Komponen berjalan dalam kontainer secara default.  
Komponen ini harus memiliki read/write akses ke perangkat.  
`ModbusBaudRate`  
(Opsional) Nilai string yang menentukan baud rate untuk komunikasi serial dengan perangkat Modbus TCP lokal.  
Default: `9600`  
`ModbusByteSize`  
(Opsional) Nilai string yang menentukan ukuran byte dalam komunikasi serial dengan perangkat Modbus TCP lokal. Pilih`5`,`6`,`7`, atau `8` bit.  
Default: `8`  
`ModbusParity`  
(Opsional) Mode paritas yang digunakan untuk memverifikasi integritas data dalam komunikasi serial dengan perangkat Modbus TCP lokal.  
+ `E`— Verifikasi integritas data dengan paritas yang merata.
+ `O`— Verifikasi integritas data dengan paritas ganjil.
+ `N`— Jangan memverifikasi integritas data.
Default: `N`  
`ModbusStopBits`  
(Opsional) Nilai string yang menentukan jumlah bit yang menunjukkan akhir byte dalam komunikasi serial dengan perangkat Modbus TCP lokal.  
Default: `1`

`containerMode`  <a name="modbus-rtu-protocol-adapter-configuration-containermode"></a>
(Opsional) Mode kontainerisasi untuk komponen ini. Pilih dari salah satu pilihan berikut:  
+ `GreengrassContainer`— Komponen berjalan di lingkungan runtime yang terisolasi di dalam AWS IoT Greengrass wadah.

  Jika Anda menentukan opsi ini, Anda harus menentukan perangkat sistem (in`containerParams.devices`) untuk memberikan akses wadah ke perangkat Modbus.
+ `NoContainer` – Komponen tersebut tidak berjalan di lingkungan waktu aktif terisolasi.
Default: `GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>(Opsional) Sebuah objek yang berisi parameter kontainer untuk komponen ini. Komponen menggunakan parameter ini jika Anda menentukan `GreengrassContainer` untuk `containerMode`.  
Objek ini berisi informasi berikut:    
`memorySize`  
<a name="connector-component-container-params-memory-size-description"></a>(Opsional) Jumlah memori (dalam kilobyte) yang akan dialokasikan ke komponen.  
Defaultnya 512 MB (525.312 KB).  
`devices`  
(Opsional) Sebuah objek yang menentukan perangkat sistem yang dapat diakses oleh komponen dalam kontainer.  
Untuk menjalankan komponen ini dalam sebuah kontainer, Anda harus menentukan perangkat sistem yang Anda konfigurasi di variabel lingkungan `ModbusLocalPort`.
Objek ini berisi informasi berikut:    
`0` - Ini adalah indeks himpunan sebagai string.  
Objek yang berisi informasi berikut:    
`path`  
Jalur ke perangkat sistem pada perangkat inti. Ini harus memiliki nilai yang sama dengan nilai yang Anda konfigurasi untuk `ModbusLocalPort`.  
`permission`  
(Opsional) Izin untuk mengakses perangkat sistem dari kontainer. Nilai ini harus`rw`, yang menentukan bahwa komponen memiliki read/write akses ke perangkat sistem.  
Default: `rw`  
`addGroupOwner`  
(Opsional) Apakah akan menambahkan grup sistem atau tidak yang akan menjalankan komponen sebagai pemilik perangkat sistem.  
Default: `true`

`pubsubTopics`  <a name="connector-component-pubsub-topics-parameter"></a>
(Opsional) Sebuah objek yang berisi topik di mana komponen berlangganan untuk menerima pesan. Anda dapat menentukan setiap topik dan apakah komponen berlangganan topik MQTT dari AWS IoT Core atau topik lokal. publish/subscribe   
Objek ini berisi informasi berikut:    
`0` - Ini adalah indeks himpunan sebagai string.  
Objek yang berisi informasi berikut:    
`type`  
(Opsional) Jenis publish/subscribe pesan yang digunakan komponen ini untuk berlangganan pesan. Pilih dari salah satu pilihan berikut:  
+ `PUB_SUB` — Berlangganan pesan publish/subscribe lokal. Jika Anda memilih opsi ini, topik tidak dapat berisi wildcard MQTT. Untuk informasi lebih lanjut tentang cara mengirim pesan dari komponen kustom ketika Anda menentukan opsi ini, lihat [Pesan lokal publikasi/berlangganan](ipc-publish-subscribe.md).
+ `IOT_CORE`— Berlangganan pesan AWS IoT Core MQTT. Jika Anda memilih opsi ini, topik dapat berisi wildcard MQTT. Untuk informasi lebih lanjut tentang cara mengirim pesan dari komponen kustom ketika Anda menentukan opsi ini, lihat [Terbitkan/berlangganan pesan MQTT AWS IoT Core](ipc-iot-core-mqtt.md).
Default: `PUB_SUB`  
`topic`  
(Opsional) Topik yang menjadi langganan komponen untuk menerima pesan. Jika Anda menentukan `IotCore` untuk `type`, Anda dapat menggunakan wildcard MQTT (`+` dan `#`) dalam topik ini.

**Example Contoh: Pembaruan gabungan konfigurasi (mode kontainer)**  <a name="modbus-rtu-protocol-adapter-configuration-example-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "GreengrassContainer",
  "containerParams": {
    "devices": {
      "0": {
        "path": "/dev/ttyS2",
        "permission": "rw",
        "addGroupOwner": true
      }
    }
  }
}
```

**Example Contoh: Pembaruan gabungan konfigurasi (tidak ada mode kontainer)**  <a name="modbus-rtu-protocol-adapter-configuration-example-no-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "NoContainer"
}
```

------
#### [ v2.0.x ]

`lambdaParams`  
Sebuah objek yang berisi parameter untuk fungsi Lambda komponen ini. Objek ini berisi informasi berikut:    
`EnvironmentVariables`  
Sebuah objek yang berisi parameter fungsi Lambda ini. Objek ini berisi informasi berikut:    
`ModbusLocalPort`  <a name="modbus-rtu-protocol-adapter-configuration-modbuslocalport"></a>
Jalur absolut ke port serial Modbus fisik pada perangkat inti, seperti`/dev/ttyS2`.  
Untuk menjalankan komponen ini dalam wadah, Anda harus mendefinisikan jalur ini sebagai perangkat sistem (in`containerParams.devices`) yang dapat diakses komponen. Komponen berjalan dalam kontainer secara default.  
Komponen ini harus memiliki read/write akses ke perangkat.

`containerMode`  <a name="modbus-rtu-protocol-adapter-configuration-containermode"></a>
(Opsional) Mode kontainerisasi untuk komponen ini. Pilih dari salah satu pilihan berikut:  
+ `GreengrassContainer`— Komponen berjalan di lingkungan runtime yang terisolasi di dalam AWS IoT Greengrass wadah.

  Jika Anda menentukan opsi ini, Anda harus menentukan perangkat sistem (in`containerParams.devices`) untuk memberikan akses wadah ke perangkat Modbus.
+ `NoContainer` – Komponen tersebut tidak berjalan di lingkungan waktu aktif terisolasi.
Default: `GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>(Opsional) Sebuah objek yang berisi parameter kontainer untuk komponen ini. Komponen menggunakan parameter ini jika Anda menentukan `GreengrassContainer` untuk `containerMode`.  
Objek ini berisi informasi berikut:    
`memorySize`  
<a name="connector-component-container-params-memory-size-description"></a>(Opsional) Jumlah memori (dalam kilobyte) yang akan dialokasikan ke komponen.  
Defaultnya 512 MB (525.312 KB).  
`devices`  
(Opsional) Sebuah objek yang menentukan perangkat sistem yang dapat diakses oleh komponen dalam kontainer.  
Untuk menjalankan komponen ini dalam sebuah kontainer, Anda harus menentukan perangkat sistem yang Anda konfigurasi di variabel lingkungan `ModbusLocalPort`.
Objek ini berisi informasi berikut:    
`0` - Ini adalah indeks himpunan sebagai string.  
Objek yang berisi informasi berikut:    
`path`  
Jalur ke perangkat sistem pada perangkat inti. Ini harus memiliki nilai yang sama dengan nilai yang Anda konfigurasi untuk `ModbusLocalPort`.  
`permission`  
(Opsional) Izin untuk mengakses perangkat sistem dari kontainer. Nilai ini harus`rw`, yang menentukan bahwa komponen memiliki read/write akses ke perangkat sistem.  
Default: `rw`  
`addGroupOwner`  
(Opsional) Apakah akan menambahkan grup sistem atau tidak yang akan menjalankan komponen sebagai pemilik perangkat sistem.  
Default: `true`

`pubsubTopics`  <a name="connector-component-pubsub-topics-parameter"></a>
(Opsional) Sebuah objek yang berisi topik di mana komponen berlangganan untuk menerima pesan. Anda dapat menentukan setiap topik dan apakah komponen berlangganan topik MQTT dari AWS IoT Core atau topik lokal. publish/subscribe   
Objek ini berisi informasi berikut:    
`0` - Ini adalah indeks himpunan sebagai string.  
Objek yang berisi informasi berikut:    
`type`  
(Opsional) Jenis publish/subscribe pesan yang digunakan komponen ini untuk berlangganan pesan. Pilih dari salah satu pilihan berikut:  
+ `PUB_SUB` — Berlangganan pesan publish/subscribe lokal. Jika Anda memilih opsi ini, topik tidak dapat berisi wildcard MQTT. Untuk informasi lebih lanjut tentang cara mengirim pesan dari komponen kustom ketika Anda menentukan opsi ini, lihat [Pesan lokal publikasi/berlangganan](ipc-publish-subscribe.md).
+ `IOT_CORE`— Berlangganan pesan AWS IoT Core MQTT. Jika Anda memilih opsi ini, topik dapat berisi wildcard MQTT. Untuk informasi lebih lanjut tentang cara mengirim pesan dari komponen kustom ketika Anda menentukan opsi ini, lihat [Terbitkan/berlangganan pesan MQTT AWS IoT Core](ipc-iot-core-mqtt.md).
Default: `PUB_SUB`  
`topic`  
(Opsional) Topik yang menjadi langganan komponen untuk menerima pesan. Jika Anda menentukan `IotCore` untuk `type`, Anda dapat menggunakan wildcard MQTT (`+` dan `#`) dalam topik ini.

**Example Contoh: Pembaruan gabungan konfigurasi (mode kontainer)**  <a name="modbus-rtu-protocol-adapter-configuration-example-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "GreengrassContainer",
  "containerParams": {
    "devices": {
      "0": {
        "path": "/dev/ttyS2",
        "permission": "rw",
        "addGroupOwner": true
      }
    }
  }
}
```

**Example Contoh: Pembaruan gabungan konfigurasi (tidak ada mode kontainer)**  <a name="modbus-rtu-protocol-adapter-configuration-example-no-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "NoContainer"
}
```

------

## Data input
<a name="modbus-rtu-protocol-adapter-component-input-data"></a>

Komponen ini menerima parameter permintaan Modbus RTU pada topik berikut dan mengirimkan permintaan Modbus RTU ke perangkat. <a name="connector-component-local-publish"></a>Secara default, komponen ini berlangganan publish/subscribe pesan lokal. Untuk informasi lebih lanjut tentang cara mempublikasikan pesan ke komponen ini dari komponen kustom Anda, lihat [Pesan lokal publikasi/berlangganan](ipc-publish-subscribe.md). 

**Topik default (publish/subscribe lokal):** `modbus/adapter/request`

<a name="connector-component-input-properties"></a>Pesan menerima properti berikut. Pesan input harus dalam format JSON.

`request`  
Parameter untuk permintaan Modbus RTU yang akan dikirim.  
Bentuk pesan permintaan tergantung pada jenis Modbus RTU permintaan yang diwakilinya. Properti berikut diperlukan untuk semua permintaan.  
Jenis: `object` yang berisi informasi berikut:    
`operation`  
Nama operasi yang akan dijalankan. Sebagai contoh, tentukan `ReadCoilsRequest` untuk membaca kumparan pada perangkat Modbus RTU. Untuk informasi lebih lanjut tentang operasi tulis, lihat [Permintaan dan tanggapan Modbus RTU](#modbus-rtu-protocol-adapter-component-requests-responses).  
Tipe: `string`  
`device`  
Perangkat target permintaan.  
Nilai ini harus berupa bilangan bulat antara `0` dan `247`.  
Tipe: `integer`
Parameter lain yang akan tercakup dalam permintaan tergantung pada operasi. Komponen ini menangani [pemeriksaan redundansi siklik (CRC)](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) untuk memverifikasi permintaan data untuk Anda.  
Jika permintaan Anda mencakup properti `address`, Anda harus menentukan nilainya sebagai bilangan bulat. Misalnya, `"address": 1`.

`id`  <a name="connector-component-input-property-id"></a>
ID acak untuk permintaan. Gunakan properti ini untuk memetakan permintaan inpun untuk respons output. Ketika Anda menentukan properti ini, komponen menetapkan properti `id` di objek respons untuk nilai ini.  
Tipe: `string`

**Example Contoh input: Baca permintaan kumparan**  

```
{
  "request": {
    "operation": "ReadCoilsRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "MyRequest"
}
```

## Data output
<a name="modbus-rtu-protocol-adapter-component-output-data"></a>

 <a name="connector-component-output-data"></a>Komponen ini menerbitkan tanggapan sebagai data output pada topik MQTT berikut secara default. Anda harus menentukan topik ini sebagai `subject` dalam konfigurasi untuk [komponen router langganan warisan](legacy-subscription-router-component.md). Untuk informasi lebih lanjut tentang cara mempublikasikan pesan ke komponen ini dari komponen kustom Anda, lihat [Terbitkan/berlangganan pesan MQTT AWS IoT Core](ipc-iot-core-mqtt.md). 

**Topik default (AWS IoT Core MQTT):** `modbus/adapter/response`

Bentuk pesan respon tergantung pada operasi permintaan dan status respon. Sebagai contoh, lihat [Contoh permintaan dan respons](#modbus-rtu-protocol-adapter-component-examples).

Setiap respons mencakup properti berikut:

`response`  
Respons dari perangkat Modbus RTU.  
Jenis: `object` yang berisi informasi berikut:    
`status`  
Status HTTP dari permintaan. Nilai bisa jadi salah satu dari yang berikut:  
+ `Success` — Permintaannya valid, komponen mengirim permintaan ke jaringan Modbus RTU, dan jaringan RTU Modbus mengembalikan respons.
+ `Exception` — Permintaannya valid, komponen mengirim permintaan ke jaringan Modbus RTU, dan jaringan RTU Modbus mengembalikan pengecualian. Untuk informasi selengkapnya, lihat [Status respons: Pengecualian](#modbus-rtu-protocol-adapter-component-response-exception).
+ `No Response` — Permintaan tidak valid, dan komponen menangkap kesalahan sebelum mengirim permintaan ke jaringan Modbus RTU. Untuk informasi selengkapnya, lihat [Status respon: Tidak ada respon](#modbus-rtu-protocol-adapter-component-response-noresponse).  
`operation`  
Operasi yang diminta komponen.  
`device`  
Perangkat tempat komponen mengirim permintaan.  
`payload`  
Respons dari perangkat Modbus RTU. Jika `status` adalah `No Response`, objek ini hanya akan berisi properti `error` dengan deskripsi kesalahan (misalnya, `[Input/Output] No Response received from the remote unit`).

`id`  
ID dari permintaan, yang dapat Anda gunakan untuk mengidentifikasi respons yang sesuai dengan yang diminta.

**catatan**  
Sebuah respons untuk operasi write hanyalah pengulangan dari permintaan. Meskipun tanggapan write tidak mencakup informasi yang berarti, ia merupakan praktik yang baik untuk memeriksa status respons untuk melihat apakah permintaan berhasil atau gagal.

**Example Contoh output: Berhasil**  

```
{
  "response" : {
    "status" : "success",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 1,
      "bits": [1]
    }
  },
  "id" : "MyRequest"
}
```

**Example Contoh output: Gagal**  

```
{
  "response" : {
    "status" : "fail",
    "error_message": "Internal Error",
    "error": "Exception",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 129,
      "exception_code": 2
    }
  },
  "id" : "MyRequest"
}
```

Untuk contoh lainnya, lihat [Contoh permintaan dan respons](#modbus-rtu-protocol-adapter-component-examples).

## Permintaan dan tanggapan Modbus RTU
<a name="modbus-rtu-protocol-adapter-component-requests-responses"></a>

Konektor ini menerima parameter permintaan Modbus RTU sebagai [data input](#modbus-rtu-protocol-adapter-component-input-data) dan menerbitkan tanggapan sebagai [data output](#modbus-rtu-protocol-adapter-component-output-data).

Operasi umum berikut ini didukung.


| Nama operasi dalam permintaan | Kode fungsi dalam respons | 
| --- | --- | 
| ReadCoilsRequest | 01 | 
| ReadDiscreteInputsRequest | 02 | 
| ReadHoldingRegistersRequest | 03 | 
| ReadInputRegistersRequest | 04 | 
| WriteSingleCoilRequest | 05 | 
| WriteSingleRegisterRequest | 06 | 
| WriteMultipleCoilsRequest | 15 | 
| WriteMultipleRegistersRequest | 16 | 
| MaskWriteRegisterRequest | 22 | 
| ReadWriteMultipleRegistersRequest | 23 | 

### Contoh permintaan dan respons
<a name="modbus-rtu-protocol-adapter-component-examples"></a>

Berikut ini adalah contoh permintaan dan tanggapan untuk operasi yang didukung.

Baca kumparan  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "ReadCoilsRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 1,
      "bits": [1]
    }
  },
  "id" : "TestRequest"
}
```

Baca input diskrit  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "ReadDiscreteInputsRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "ReadDiscreteInputsRequest",
    "payload": {
      "function_code": 2,
      "bits": [1]
    }
  },
  "id" : "TestRequest"
}
```

Baca register yang memiliki  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "ReadHoldingRegistersRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "ReadHoldingRegistersRequest",
    "payload": {
      "function_code": 3,
      "registers": [20,30]
    }
  },
  "id" : "TestRequest"
}
```

Baca register input  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "ReadInputRegistersRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "TestRequest"
}
```

Tulis kumparan tunggal  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "WriteSingleCoilRequest",
    "device": 1,
    "address": 1,
    "value": 1
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "WriteSingleCoilRequest",
    "payload": {
      "function_code": 5,
      "address": 1,
      "value": true
    }
  },
  "id" : "TestRequest"
}
```

Tulis register tunggal  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "WriteSingleRegisterRequest",
    "device": 1,
    "address": 1,
    "value": 1
  },
  "id": "TestRequest"
}
```

Tulis beberapa kumparan  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "WriteMultipleCoilsRequest",
    "device": 1,
    "address": 1,
    "values": [1,0,0,1]
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "WriteMultipleCoilsRequest",
    "payload": {
      "function_code": 15,
      "address": 1,
      "count": 4
    }
  },
  "id" : "TestRequest"
}
```

Tulis beberapa register  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "WriteMultipleRegistersRequest",
    "device": 1,
    "address": 1,
    "values": [20,30,10]
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "WriteMultipleRegistersRequest",
    "payload": {
      "function_code": 23,
      "address": 1,
      "count": 3
    }
  },
  "id" : "TestRequest"
}
```

Register mask write  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "MaskWriteRegisterRequest",
    "device": 1,
    "address": 1,
    "and_mask": 175,
    "or_mask": 1
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "MaskWriteRegisterRequest",
    "payload": {
      "function_code": 22,
      "and_mask": 0,
      "or_mask": 8
    }
  },
  "id" : "TestRequest"
}
```

Baca tulis beberapa register  
**Contoh permintaan:**  

```
{
  "request": {
    "operation": "ReadWriteMultipleRegistersRequest",
    "device": 1,
    "read_address": 1,
    "read_count": 2,
    "write_address": 3,
    "write_registers": [20,30,40]
  },
  "id": "TestRequest"
}
```
**Contoh respons:**  

```
{
  "response": {
    "status": "success",
    "device": 1,
    "operation": "ReadWriteMultipleRegistersRequest",
    "payload": {
      "function_code": 23,
      "registers": [10,20,10,20]
    }
  },
  "id" : "TestRequest"
}
```
Tanggapan meliputi register yang dibaca komponen.

### Status respons: Pengecualian
<a name="modbus-rtu-protocol-adapter-component-response-exception"></a>

Pengecualian dapat terjadi bila format permintaan valid, tetapi permintaan tersebut tidak berhasil diselesaikan. Dalam kasus ini, respons berisi informasi berikut:
+ `status` ditetapkan ke `Exception`.
+ `function_code` sama dengan kode fungsi permintaan \$1 128.
+ `exception_code` berisi kode pengecualian. Untuk informasi selengkapnya, lihat kode pengecualian Modbus.

**Contoh:**

```
{
  "response": {
    "status": "fail",
    "error_message": "Internal Error",
    "error": "Exception",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 129,
      "exception_code": 2
    }
  },
  "id": "TestRequest"
}
```

### Status respon: Tidak ada respon
<a name="modbus-rtu-protocol-adapter-component-response-noresponse"></a>

Konektor ini melakukan pemeriksaan validasi pada permintaan Modbus. Sebagai contoh, ia memeriksa format yang tidak sah dan kolom yang hilang. Jika validasi gagal, konektor tidak akan mengirim permintaan. Sebaliknya, ia mengembalikan respon yang berisi informasi berikut:
+ `status` ditetapkan ke `No Response`.
+ `error` berisi alasan kesalahan.
+ `error_message` berisi pesan kesalahan.

**Contoh:**

```
{
  "response": {
    "status": "fail",
    "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>",
    "error": "No Response",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "error": "Invalid address field. Expected Expected <type 'int'>, got <type 'str'>"
    }
  },
  "id": "TestRequest"
}
```

Jika permintaan menargetkan perangkat yang tidak ada atau jika jaringan Modbus RTU tidak berfungsi, Anda mungkin mendapatkan `ModbusIOException`, yang menggunakan format No Response.

```
{
  "response": {
    "status": "fail",
    "error_message": "[Input/Output] No Response received from the remote unit",
    "error": "No Response",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "error": "[Input/Output] No Response received from the remote unit"
    }
  },
  "id": "TestRequest"
}
```

## File log lokal
<a name="modbus-rtu-protocol-adapter-component-log-file"></a>

Komponen ini menggunakan file log berikut.

```
/greengrass/v2/logs/aws.greengrass.Modbus.log
```

**Untuk melihat log komponen ini**
+ Jalankan perintah berikut pada perangkat inti untuk melihat file log komponen ini secara real time. Ganti `/greengrass/v2` dengan jalur ke folder AWS IoT Greengrass root.

  ```
  sudo tail -f /greengrass/v2/logs/aws.greengrass.Modbus.log
  ```

## Lisensi
<a name="modbus-rtu-protocol-adapter-component-licenses"></a>

Komponen ini mencakup perangkat lunak/lisensi pihak ketiga berikut:
+ [pymodbus](https://github.com/riptideio/pymodbus/blob/master/README.rst)Lisensi BSD
+ [pyserial](https://github.com/pyserial/pyserial)Lisensi BSD

<a name="component-core-software-license"></a>Komponen ini dirilis menurut [Perjanjian Lisensi Perangkat Lunak Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Changelog
<a name="modbus-rtu-protocol-adapter-component-changelog"></a>

Tabel berikut menjelaskan perubahan dalam setiap versi komponen.


|  **Versi**  |  **Perubahan**  | 
| --- | --- | 
|  2.1.11  | Versi diperbarui untuk Greengrass nucleus versi 2.15.0 rilis. | 
|  2.1.10  | Versi diperbarui untuk Greengrass nucleus versi 2.14.0 rilis. | 
|  2.1.9  | Versi diperbarui untuk Greengrass nucleus versi 2.13.0 rilis. | 
|  2.1.8  | Versi diperbarui untuk Greengrass nucleus versi 2.12.0 rilis. | 
|  2.1.7  | Versi diperbarui untuk Greengrass nucleus versi 2.11.0 rilis. | 
|  2.1.6  | Versi diperbarui untuk Greengrass nucleus versi 2.10.0 rilis. | 
|  2.1.5  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/modbus-rtu-protocol-adapter-component.html) | 
|  2.1.4  | Versi diperbarui untuk Greengrass nucleus versi 2.9.0 rilis. | 
|  2.1.3  | Versi diperbarui untuk Greengrass nucleus versi 2.8.0 rilis. | 
|  2.1.2  |  Versi diperbarui untuk Greengrass nucleus versi 2.7.0 rilis.  | 
|  2.1.1  |  Versi diperbarui untuk Greengrass nucleus versi 2.6.0 rilis.  | 
|  2.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/modbus-rtu-protocol-adapter-component.html)  | 
|  2.0.8  |  Versi diperbarui untuk Greengrass nucleus versi 2.5.0 rilis.  | 
|  2.0.7  |  Versi diperbarui untuk Greengrass nucleus versi 2.4.0 rilis.  | 
|  2.0.6  |  Versi yang diperbarui untuk rilis inti Greengrass versi 2.3.0.  | 
|  2.0.5  |  Versi yang diperbarui untuk rilis inti Greengrass versi 2.2.0.  | 
|  2.0.4  |  Versi yang diperbarui untuk rilis inti Greengrass versi 2.1.0.  | 
|  2.0.3  |  Versi awal.  | 