全部产品
Search
文档中心

IoT Platform:Gunakan topik kustom untuk komunikasi

更新时间:Nov 11, 2025

Perangkat yang menggunakan protokol MQTT untuk terhubung ke Platform IoT berkomunikasi dengan berlangganan ke topik atau memublikasikan pesan ke topik. Topik diklasifikasikan menjadi topik sistem, topik model TSL, dan topik kustom. Topik kustom harus didefinisikan di Konsol. Dokumen ini menjelaskan cara perangkat menggunakan topik kustom untuk berkomunikasi dengan Platform IoT serta bagaimana Platform IoT berkomunikasi dengan server bisnis.

Informasi latar belakang

Dalam contoh ini, termometer elektronik berlangganan ke topik kustom untuk menerima instruksi dan memublikasikan pesan ke topik kustom untuk melaporkan data suhu. Platform IoT meneruskan data suhu ke server pengguna melalui langganan sisi server AMQP. Server pengguna memanggil operasi Pub untuk memublikasikan pesan ke topik kustom guna mengonfigurasi presisi termometer dari jarak jauh.

自定义Topic通信

Persiapkan lingkungan pengembangan

Dalam contoh ini, perangkat dan Platform IoT menggunakan SDK untuk Java. Oleh karena itu, Anda harus menyiapkan lingkungan pengembangan Java. Anda dapat mengunduh dan menginstal lingkungan pengembangan Java dari situs web resmi Java.

Dalam contoh ini, lingkungan pengembangan terdiri atas komponen-komponen berikut:

Buat produk dan perangkat

  1. Masuk ke Konsol Platform IoT.

  2. Pada halaman Overview, temukan instans yang ingin Anda kelola dan klik ID instans atau nama instans tersebut.

  3. Di panel navigasi sebelah kiri, pilih Devices > Products.

  4. Klik Create Product untuk membuat produk termometer dan mendapatkan Productkey, misalnya a1uzcH0****.

    Untuk informasi selengkapnya, lihat Buat produk.

  5. Setelah produk dibuat, klik View di samping produk tersebut.

  6. Pada halaman Product Details, klik tab Topic Categories, lalu klik Custom Topic untuk menambahkan kategori topik kustom.

    Untuk informasi selengkapnya, lihat Gunakan topik kustom untuk komunikasi.

    Dalam contoh ini, kategori topik berikut diperlukan:

    • Topik bagi perangkat untuk memublikasikan pesan: /a1uzcH0****/${deviceName}/user/devmsg, dengan izin Publish.

    • Topik bagi perangkat untuk berlangganan pesan: /a1uzcH0****/${deviceName}/user/cloudmsg, dengan izin Subscribe.

  7. Klik tab Server-side Subscription, lalu klik Create Subscription untuk mengonfigurasi langganan sisi server AMQP. Berlangganan pesan Device Upstream Notification ke Default Consumer Group.

    Device Upstream Notification mencakup pesan topik kustom dan pesan model TSL. Untuk informasi selengkapnya, lihat Konfigurasi langganan sisi server AMQP.

  8. Di panel navigasi sebelah kiri, pilih Devices > Devices. Kemudian, tambahkan perangkat bernama device1 ke produk termometer yang telah Anda buat. Dapatkan informasi sertifikat perangkat, termasuk ProductKey, DeviceName, dan DeviceSecret.

    Untuk informasi selengkapnya, lihat Buat perangkat.

Konfigurasi perangkat untuk mengirim pesan ke server

Gambar berikut menunjukkan cara perangkat mengirim pesan ke server.

自定义Topic通信

Bagian ini menjelaskan cara mengonfigurasi server dan perangkat untuk mengimplementasikan proses pengiriman pesan.

  • Sambungkan klien AMQP Anda ke Platform IoT, dan konfigurasikan klien untuk mendengarkan pesan dari perangkat. Server menerima pesan dengan menggunakan klien AMQP. Untuk informasi selengkapnya, lihat Sambungkan klien AMQP ke Platform IoT menggunakan SDK untuk Java.

    Penting

    Kelompok konsumen klien AMQP harus berada dalam instans Platform IoT yang sama dengan perangkat.

  • Konfigurasi SDK perangkat untuk menyambungkan perangkat ke Platform IoT dan mengaktifkan perangkat untuk mengirim pesan.

    • Konfigurasi parameter untuk mengautentikasi perangkat.

      final String productKey = "a1uzcH0****";
      final String deviceName = "device1";
      final String deviceSecret = "uwMTmVAMnxB****";
      final String region = "cn-shanghai";
      final String iotInstanceId = "iot-2w****";

      Anda harus mengonfigurasi parameter yang dijelaskan dalam tabel berikut berdasarkan kebutuhan bisnis Anda.

      Parameter

      Contoh

      Deskripsi

      productKey

      a1uzcH0****

      Informasi sertifikat perangkat. Anda dapat melihat informasi tersebut pada halaman Device Details di Konsol Platform IoT.Untuk informasi selengkapnya, lihat Lihat detail perangkat.

      deviceName

      device1

      deviceSecret

      uwMTmVAMnxB****

      region

      cn-shanghai

      ID wilayah tempat perangkat Platform IoT Anda berada. Untuk informasi selengkapnya tentang ID wilayah, lihat Wilayah dan zona.

      iotInstanceId

      iot-2w****

      ID instans tempat perangkat tersebut berada.

      Anda dapat melihat ID instans pada halaman Overview di Konsol Platform IoT.

      • Jika ID instans ditampilkan, Anda harus menentukan parameter ini.

      • Jika tidak ada Overview atau ID yang dihasilkan untuk instans Anda, tentukan string kosong (iotInstanceId = "") untuk parameter tersebut.

    • Konfigurasi parameter untuk menginisialisasi koneksi, termasuk parameter koneksi MQTT, parameter perangkat, dan parameter model TSL.

      LinkKitInitParams params = new LinkKitInitParams();
      // Konfigurasi parameter koneksi MQTT. Link SDK menggunakan protokol MQTT.
      IoTMqttClientConfig config = new IoTMqttClientConfig();
      config.productKey = productKey;
      config.deviceName = deviceName;
      config.deviceSecret = deviceSecret;
      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";
      // Konfigurasi parameter perangkat.
      DeviceInfo deviceInfo = new DeviceInfo();
      deviceInfo.productKey = productKey;
      deviceInfo.deviceName = deviceName;
      deviceInfo.deviceSecret = deviceSecret;
      // Tentukan status awal perangkat.
      Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>();
      
      params.mqttClientConfig = config;
      params.deviceInfo = deviceInfo;
      params.propertyValues = propertyValues;

      Anda harus memodifikasi kode dan menentukan parameter berdasarkan kebutuhan bisnis Anda.

      Parameter

      Contoh

      Deskripsi

      config.channelHost

      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";

      Nama domain untuk koneksi MQTT.

      • Instans publik lama: config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";.

      • Instans publik baru dan instans Edisi Perusahaan: config.channelHost = iotInstanceId + ".mqtt.iothub.aliyuncs.com:1883";.

    • Inisialisasi koneksi.

      //Sambungkan dan konfigurasi fungsi callback yang dipanggil setelah koneksi berhasil dibuat.
      LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
           @Override
           public void onError(AError aError) {
               System.out.println("Init error:" + aError);
           }
      
           // Implementasikan fungsi callback.
           @Override
           public void onInitDone(InitResult initResult) {
               System.out.println("Init done:" + initResult);
           }
       });
    • Kirim pesan dari perangkat.

      Setelah perangkat terhubung ke Platform IoT, Anda dapat menggunakan perangkat untuk mengirim pesan ke topik kustom. Anda harus mengganti konten fungsi onInitDone dengan konten berikut:

      @Override
       public void onInitDone(InitResult initResult) {
           // Tentukan topik tempat pesan dipublikasikan dan isi pesannya.
           MqttPublishRequest request = new MqttPublishRequest();
           request.topic = "/" + productKey + "/" + deviceName + "/user/devmsg";
           request.qos = 0;
           request.payloadObj = "{\"temperature\":35.0, \"time\":\"sometime\"}";
           // Publikasikan pesan dan konfigurasi fungsi callback yang digunakan setelah pesan dipublikasikan.
           LinkKit.getInstance().publish(request, new IConnectSendListener() {
               @Override
               public void onResponse(ARequest aRequest, AResponse aResponse) {
                   System.out.println("onResponse:" + aResponse.getData());
               }
      
               @Override
               public void onFailure(ARequest aRequest, AError aError) {
                   System.out.println("onFailure:" + aError.getCode() + aError.getMsg());
               }
           });
       }

      Saat memanggil operasi ini, Anda harus mengonfigurasi parameter berdasarkan kebutuhan bisnis Anda.

      Parameter

      Contoh

      Deskripsi

      request.topic

      "/" + productKey + "/" + deviceName + "/user/devmsg"

      Topik kustom tempat perangkat memiliki izin Publish.

      request.payloadObj

      "{\"temperature\":35.0, \"time\":\"sometime\"}"

      Isi pesan.

      Server menerima pesan berikut:

      Message
      {payload={"temperature":35.0, "time":"sometime"},
      topic='/a1uzcH0****/device1/user/devmsg',
      messageId='1131755639450642944',
      qos=0,
      generateTime=1558666546105}

Konfigurasi server untuk mengirim pesan ke perangkat

Gambar berikut menunjukkan cara server mengirim pesan ke perangkat.

自定义Topic通信

  • Konfigurasi SDK perangkat untuk berlangganan ke topik kustom.

    Untuk informasi tentang cara mengonfigurasi parameter untuk mengautentikasi perangkat, mengonfigurasi parameter untuk menginisialisasi koneksi, dan menginisialisasi koneksi, lihat kode contoh di Konfigurasi perangkat untuk mengirim pesan ke server.

    Anda harus mengonfigurasi perangkat untuk berlangganan ke topik kustom.

    Kode contoh berikut memberikan contoh cara mengonfigurasi perangkat untuk berlangganan ke topik:

    // Implementasikan fungsi callback.
    @Override
    public void onInitDone(InitResult initResult) {
        // Tentukan topik tempat perangkat berlangganan.
        MqttSubscribeRequest request = new MqttSubscribeRequest();
        request.topic = "/" + productKey + "/" + deviceName + "/user/cloudmsg";
        request.isSubscribe = true;
        // Kirim permintaan langganan dan konfigurasi fungsi callback yang dipanggil setelah langganan berhasil atau gagal.
        LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() {
            @Override
            public void onSuccess() {
                System.out.println("");
            }
    
            @Override
            public void onFailure(AError aError) {
    
            }
        });
    
        // Konfigurasi pendengar untuk pesan downstream.
        IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
            // Konfigurasi fungsi callback yang digunakan setelah pesan downstream diterima.
            @Override
            public void onNotify(String connectId, String topic, AMessage aMessage) {
                System.out.println(
                    "received message from " + topic + ":" + new String((byte[])aMessage.getData()));
            }
    
            @Override
            public boolean shouldHandle(String s, String s1) {
                return false;
            }
    
            @Override
            public void onConnectStateChange(String s, ConnectState connectState) {
    
            }
        };
        LinkKit.getInstance().registerOnNotifyListener(notifyListener);
    }

    Anda harus mengatur parameter request.topic ke topik kustom tempat perangkat memiliki izin Subscribe.

  • Konfigurasi SDK cloud untuk memanggil operasi Pub Platform IoT guna memublikasikan pesan. Untuk informasi selengkapnya tentang parameter, lihat Pub. Untuk informasi selengkapnya tentang cara menggunakan SDK untuk Java, lihat Gunakan SDK untuk Java.

    • Konfigurasi parameter untuk mengautentikasi perangkat.

       String regionId = "cn-shanghai";
       String accessKey = "LTAI****";
       String accessSecret = "********";
       final String productKey = "a1uzcH0****";
       final String deviceName = "device1";
       final String iotInstanceId = "iot-2w****";

      Anda harus memodifikasi kode dan menentukan parameter berdasarkan kebutuhan bisnis Anda.

      Parameter

      Contoh

      Deskripsi

      accessKey

      LTAI****

      ID AccessKey dan Rahasia AccessKey akun Alibaba Cloud Anda.

      Masuk ke Konsol Platform IoT, arahkan kursor ke gambar profil, lalu klik AccessKey Management untuk mendapatkan ID AccessKey dan Rahasia AccessKey.

      Catatan

      Jika Anda menggunakan Pengguna RAM, Anda harus melampirkan kebijakan izin AliyunIOTFullAccess ke Pengguna RAM tersebut. Kebijakan ini memungkinkan Pengguna RAM untuk mengelola sumber daya Platform IoT. Jika Anda tidak melampirkan kebijakan izin AliyunIOTFullAccess ke Pengguna RAM, koneksi ke Platform IoT akan gagal. Untuk informasi selengkapnya tentang cara memberikan izin kepada Pengguna RAM, lihat Akses Pengguna RAM.

      accessSecret

      ********

      productKey

      a1uzcH0****

      Informasi sertifikat perangkat. Anda dapat melihat informasi tersebut pada halaman Device Details di Konsol Platform IoT.Untuk informasi selengkapnya, lihat Lihat detail perangkat.

      deviceName

      device1

      region

      cn-shanghai

      ID wilayah tempat perangkat Platform IoT Anda berada. Untuk informasi selengkapnya tentang ID wilayah, lihat Wilayah dan zona.

      iotInstanceId

      iot-2w****

      ID instans tempat perangkat tersebut berada.

      Anda dapat melihat ID instans pada halaman Overview di Konsol Platform IoT.

      • Jika ID instans ditampilkan, Anda harus menentukan parameter ini.

      • Jika tidak ada Overview atau ID yang dihasilkan untuk instans Anda, tentukan string kosong (iotInstanceId = "") untuk parameter tersebut.

    • Konfigurasi parameter koneksi.

      //Konfigurasi parameter klien.
      DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
      IAcsClient client = new DefaultAcsClient(profile);
    • Konfigurasi parameter yang digunakan untuk memublikasikan pesan.

      PubRequest request = new PubRequest();
      request.setIotInstanceId(iotInstanceId);
      request.setQos(0);
      // Tentukan topik tempat pesan dipublikasikan.
      request.setTopicFullName("/" + productKey + "/" + deviceName + "/user/cloudmsg");
      request.setProductKey(productKey);
      // Konfigurasi parameter MessageContent. Isi pesan harus dikodekan dalam Base64. Jika tidak, isi pesan akan ditampilkan sebagai karakter acak.
      request.setMessageContent(Base64.encode("{\"accuracy\":0.001,\"time\":now}"));

      Saat memanggil operasi ini, Anda harus mengonfigurasi parameter berdasarkan kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Pub.

    • Publikasikan pesan.

      try {
           PubResponse response = client.getAcsResponse(request);
           System.out.println("pub success?:" + response.getSuccess());
       } catch (Exception e) {
           System.out.println(e);
       }

      Perangkat menerima pesan berikut:

      msg = [{"accuracy":0.001,"time":now}]

Lampiran: Kode contoh

Penting

Anda harus memodifikasi kode dan menentukan parameter berdasarkan kebutuhan bisnis Anda.

Unduh demo Pub/Sub, yang berisi kode contoh untuk konfigurasi SDK cloud dan SDK perangkat dalam contoh ini.

Untuk informasi tentang cara menyambungkan klien AMQP ke Platform IoT, lihat topik-topik berikut: