

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

# Klien Hub SDK
<a name="hub-sdk-client"></a>

Pustaka Klien SDK Hub berfungsi sebagai antarmuka antara integrasi terkelola Hub SDK dan tumpukan protokol Anda sendiri yang berjalan di hub yang sama. Ini mengekspos satu set API publik untuk memfasilitasi interaksi tumpukan protokol Anda dengan komponen Device Hub SDK. Kasus penggunaan termasuk kontrol plugin khusus, penyedia plugin khusus, dan pengontrol lokal.

**Topics**
+ [Dapatkan integrasi terkelola Hub SDK](#custom-protocol-plugin-getting-started)
+ [Tentang toolkit Hub SDK](#custom-protocol-plugin-toolkit)
+ [Buat aplikasi kustom Anda dengan klien Hub SDK](#custom-protocol-plugin-create-app)
+ [Menjalankan aplikasi kustom Anda](#custom-protocol-plugin-running-application)
+ [Referensi API klien SDK Hub](hub-sdk-client-api-reference.md)
+ [Jenis Data](#custom-protocol-plugin-data-types)

## Dapatkan integrasi terkelola Hub SDK
<a name="custom-protocol-plugin-getting-started"></a>

Klien Hub SDK dilengkapi dengan SDK integrasi terkelola. Hubungi kami dari [konsol integrasi terkelola](https://console.aws.amazon.com/iot/home#/managed-integrations/intro) untuk mengakses SDK hub.

## Tentang toolkit Hub SDK
<a name="custom-protocol-plugin-toolkit"></a>

Setelah mengunduh, Anda akan melihat `IotMI-DeviceSDK-Toolkit` folder, yang berisi semua file header publik dan `.so` file yang dapat Anda konsumsi dalam aplikasi Anda. Tim integrasi terkelola juga memberikan contoh `main.cpp` untuk tujuan demo, bersama dengan biner aplikasi demo di bawah `bin/` yang dapat Anda jalankan secara langsung. Anda dapat secara opsional menggunakan ini sebagai titik awal untuk aplikasi Anda. 

## Buat aplikasi kustom Anda dengan klien Hub SDK
<a name="custom-protocol-plugin-create-app"></a>

Gunakan langkah-langkah berikut untuk membuat aplikasi kustom Anda.

1. Sertakan file header (.h) dan file objek bersama (.so) dalam aplikasi Anda.

   Anda harus menyertakan file header publik (.h) dan file objek bersama (.so) dalam aplikasi Anda. Untuk file.so, Anda dapat menempatkannya di folder lib. Tata letak akhir akan mirip dengan ini:

   ```
   ├── include
   │   ├── iotmi_device_sdk_client
   │   │   └── iotmi_device_sdk_client_common_types.h
   │   ├── iotmi_device_sdk_client.h
   │   └── iotshd_status.h
   ├── lib
   │   ├── libiotmi_devicesdk_client_module.so
   │   └── libiotmi_log_c.so
   ```

1. Buat klien Hub SDK di aplikasi utama Anda.

   1. Dalam aplikasi utama Anda, Anda harus terlebih dahulu menginisialisasi klien Hub SDK sebelum dapat digunakan untuk memproses permintaan. Anda cukup membangun klien dengan`clientId`.

   1. Setelah Anda memiliki klien, Anda dapat menghubungkannya ke integrasi terkelola Device SDK.

      Berikut ini adalah contoh pembuatan klien Hub SDK dan cara menghubungkannya.

      ```
      #include <cstdlib>
      #include <string>
      #include "iotshd_status.h"
      #include "iotmi_device_sdk_client.h"
      
      auto client = std::make_unique<DeviceSDKClient>({{your_own_clientId}});
      iotmi_statusCode_t status = client->connect();
      ```
**catatan**  
{{your\_own\_clientId}}harus sama dengan yang Anda tentukan di [start-device-discovery di penyiapan yang dipandu pengguna, atau untuk [create-managed-thing](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/create-managed-thing.html)](https://docs.aws.amazon.com/cli/latest/reference/iot-managed-integrations/start-device-discovery.html) dalam alur penyediaan penyiapan sederhana.

1. Publikasikan dan berlangganan dengan melakukan langkah-langkah berikut.

   1. Setelah koneksi dibuat, Anda sekarang dapat berlangganan tugas masuk dari integrasi terkelola Hub SDK. Tugas yang masuk dapat berupa tugas kontrol atau tugas penyediaan. Anda juga perlu menentukan fungsi callback Anda sendiri pada tugas yang diterima, dan konteks kustom Anda sendiri untuk tujuan penelusuran Anda sendiri.

      ```
            // subscribe to provisioning tasks
            iotmi_statusCode_t status = client->iotmi_provision_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
            
            // subscribe to control tasks
            iotmi_statusCode_t status = client->iotmi_control_subscribe_to_tasks(
            example_subscriber_callback, custom_context);
      ```

   1. Setelah koneksi dibuat, Anda sekarang dapat mempublikasikan permintaan dari aplikasi Anda ke integrasi terkelola Hub SDK. Anda dapat menentukan jenis pesan tugas Anda sendiri, dengan muatan yang berbeda untuk tujuan bisnis yang berbeda. Permintaan dapat mencakup permintaan kontrol dan permintaan ketentuan, mirip dengan alur berlangganan. Terakhir, Anda dapat menetapkan alamat `rspPayload` untuk mendapatkan respons dari integrasi terkelola Hub SDK dengan cara yang disinkronkan. 

      ```
      // publish control request
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_CONTROL_EVENT,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
      
        status = client->iotmi_control_publish_request(&api_payload); 
        
        // publish provision request 
        iotmi_client_request_t api_payload = {
                  .messageType = C2MIMessageType::C2MI_DEVICE_ONBOARDED,
                  .reqPayload = (uint8_t *)"{{define_your_req_payload}}",
                  .rspPayload = (uint8_t *)calloc(1000, sizeof(uint8_t))
        };
        status = client->iotmi_provision_publish_request(&api_payload);
      ```

1. Bangun aplikasi Anda sendiri `CMakeLists.txt` dan bangun aplikasi Anda dari sana. Output akhir bisa berupa biner yang dapat dieksekusi seperti `MyFirstApplication`

## Menjalankan aplikasi kustom Anda
<a name="custom-protocol-plugin-running-application"></a>

Sebelum menjalankan aplikasi kustom, selesaikan langkah-langkah berikut untuk menyiapkan hub dan memulai integrasi terkelola Hub SDK:
+ Ikuti instruksi orientasi di[Mengonboard hub Anda ke Integrasi Terkelola](managedintegrations-sdk-v2-cookbook-usinghub.md).
+ Selesaikan proses instalasi yang didokumentasikan di[Instal dan validasi Hub SDK integrasi terkelola](managedintegrations-sdk-v2-cookbook-deployment.md).

Setelah prasyarat terpenuhi, Anda dapat menjalankan aplikasi kustom Anda. Contoh:

```
./MyFirstApplication
```

**penting**  
Anda harus memperbarui skrip awal yang tercantum secara manual [Menerapkan Hub SDK dengan skrip](managedintegrations-sdk-v2-cookbook-deployment-nogg.md) dengan skrip untuk memulai aplikasi Anda sendiri. Urutannya penting, jangan ubah urutannya.  
Perbarui yang berikut ini. Ubah  

```
./IotMI-DeviceSDK-Toolkit/bin/DeviceSDKClientDemo >> $LOGS_DIR/logDeviceSDKClientDemo_logs.txt &
```
kepada  

```
./MyFirstApplication >> $LOGS_DIR/MyFirstApplication_logs.txtt &
```

## Jenis Data
<a name="custom-protocol-plugin-data-types"></a>

Bagian ini mendefinisikan tipe data yang digunakan untuk plugin protokol kustom.

**iotmi\_client\_request\_t**  
Merupakan permintaan untuk dipublikasikan ke komponen integrasi terkelola.    
**MessageType**  
Jenis pesan (CommonTypes::C2MIMessageType). Daftar berikut menunjukkan nilai yang valid.  
+ `C2MI_DEVICE_ONBOARDED`: Menunjukkan pesan orientasi perangkat dengan muatan terkait.
+ `C2MI_DE_PROVISIONING_PRE_ASSOCIATED_COMPLETE`: Menunjukkan pemberitahuan lengkap tugas de-penyediaan untuk perangkat yang telah dikaitkan sebelumnya.
+ `C2MI_DE_PROVISIONING_ACTIVATED_COMPLETE`: Menunjukkan pemberitahuan lengkap tugas de-penyediaan untuk perangkat yang diaktifkan.
+ `C2MI_DE_PROVISIONING_COMPLETE_RESPONSE`: Menunjukkan respons lengkap tugas de-penyediaan.
+ `C2MI_CONTROL_EVENT`: Menunjukkan peristiwa kontrol dengan potensi perubahan status perangkat.
+ `C2MI_CONTROL_SEND_COMMAND`: Menunjukkan perintah kontrol dari pengontrol lokal.
+ `C2MI_CONTROL_SEND_DEVICE_STATE_QUERY`: Menunjukkan kueri status perangkat kontrol dari pengontrol lokal.  
**ReqPayload**  
Permintaan payload, biasanya JSON-formatted string.  
**RSPPayload**  
Payload respons, diisi oleh komponen integrasi terkelola.

**iotmi\_client\_event\_t**  
Merupakan peristiwa yang diterima dari komponen integrasi terkelola.    
**event\_id**  
Pengidentifikasi unik acara tersebut.  
**panjang**  
Panjang data acara.  
**data**  
Sebuah pointer ke data peristiwa, termasuk. `messageType` Daftar berikut menunjukkan nilai yang mungkin.  
+ `C2MI_PROVISION_UGS_TASK`: Menunjukkan tugas penyediaan untuk aliran UGS.
+ `C2MI_PROVISION_SS_TASK`: Menunjukkan tugas penyediaan untuk SimpleSetup aliran.
+ `C2MI_DE_PROVISION_PRE_ASSOCIATED_TASK`: Menunjukkan tugas de-penyediaan untuk perangkat yang telah dikaitkan sebelumnya.
+ `C2MI_DE_PROVISION_ACTIVATED_TASK`: Menunjukkan tugas de-penyediaan untuk perangkat yang diaktifkan.
+ `C2MI_DEVICE_ONBOARDED_RESPONSE`: Menunjukkan respons orientasi perangkat.
+ `C2MI_CONTROL_TASK`: Menunjukkan tugas kontrol.
+ `C2MI_CONTROL_EVENT_NOTIFICATION`: Menunjukkan pemberitahuan peristiwa kontrol untuk pengontrol lokal.  
**ctx**  
Konteks khusus yang terkait dengan acara tersebut.