All Products
Search
Document Center

IoT Platform:Menghubungkan klien ke IoT Platform menggunakan SDK untuk Python 2.7

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara menggunakan SDK untuk Python 2.7 guna menghubungkan klien Advanced Message Queuing Protocol (AMQP) ke Alibaba Cloud IoT Platform dan menerima pesan dari IoT Platform melalui fitur langganan sisi server.

Prasyarat

ID grup konsumen yang berlangganan pesan topik telah diperoleh.

  • Anda dapat menggunakan grup konsumen default bernama DEFAULT_GROUP atau membuat grup konsumen di konsol IoT Platform. Untuk informasi lebih lanjut, lihat Kelola Grup Konsumen.

  • Anda dapat menggunakan grup konsumen untuk berlangganan pesan topik. Untuk informasi lebih lanjut, lihat Konfigurasikan Langganan Sisi Server AMQP.

Lingkungan pengembangan

Contoh ini menggunakan Python 2.7.

Unduh SDK

Kami merekomendasikan penggunaan pustaka Apache Qpid Proton 0.29.0. Pustaka ini merangkum API Python. Untuk mengunduh pustaka dan melihat petunjuknya, kunjungi Qpid Proton 0.29.0.

Instal Qpid Proton. Untuk informasi lebih lanjut, lihat Menginstal Qpid Proton.

Setelah menginstal Qpid Proton, jalankan perintah Python berikut untuk memeriksa apakah pustaka SSL tersedia:

import proton;print('%s' % 'SSL present' if proton.SSL.present() else 'SSL NOT AVAILABLE')

Contoh kode

# encoding=utf-8
import sys
import logging
import time
from proton.handlers import MessagingHandler
from proton.reactor import Container
import hashlib
import hmac
import base64
import os

reload(sys)
sys.setdefaultencoding('utf-8')
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
console_handler = logging.StreamHandler(sys.stdout)


def current_time_millis():
    return str(int(round(time.time() * 1000)))


def do_sign(secret, sign_content):
    m = hmac.new(secret, sign_content, digestmod=hashlib.sha1)
    return base64.b64encode(m.digest())


class AmqpClient(MessagingHandler):
    def __init__(self):
        super(AmqpClient, self).__init__()

    def on_start(self, event):
        # Titik akhir. Untuk informasi lebih lanjut, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
        url = "amqps://${YourHost}:5671"
        # Jika Anda melakukan hard-code pasangan AccessKey dalam kode proyek, pasangan AccessKey tersebut mungkin terungkap jika kode proyek bocor. Dalam hal ini, sumber daya dalam akun Anda menjadi tidak aman. Contoh kode berikut memberikan contoh tentang cara mendapatkan pasangan AccessKey dari variabel lingkungan. Contoh ini hanya untuk referensi.
        accessKey = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
        accessSecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        consumerGroupId = "${YourConsumerGroupId}"
        clientId = "${YourClientId}"
        # iotInstanceId: ID instance IoT Platform.
        iotInstanceId = "${YourIotInstanceId}"
        # Algoritma tanda tangan. Nilai valid: hmacmd5, hmacsha1, dan hmacsha256.
        signMethod = "hmacsha1"
        timestamp = current_time_millis()
        # Struktur parameter userName. Untuk informasi lebih lanjut, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
        userName = clientId + "|authMode=aksign" + ",signMethod=" + signMethod \
                        + ",timestamp=" + timestamp + ",authId=" + accessKey \
                        + ",iotInstanceId=" + iotInstanceId + ",consumerGroupId=" + consumerGroupId + "|"
        signContent = "authId=" + accessKey + "&timestamp=" + timestamp
        # Hitung tanda tangan. Untuk informasi lebih lanjut tentang cara membangun kata sandi, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
        passWord = do_sign(accessSecret.encode("utf-8"), signContent.encode("utf-8"))
        conn = event.container.connect(url, user=userName, password=passWord, heartbeat=60)
        self.receiver = event.container.create_receiver(conn)

    # Jika koneksi berhasil dibuat, fungsi berikut dipanggil:
    def on_connection_opened(self, event):
        logger.info("Koneksi berhasil dibuat, remoteUrl: %s", event.connection.hostname)

    # Jika koneksi ditutup, fungsi berikut dipanggil:
    def on_connection_closed(self, event):
        logger.info("Koneksi ditutup: %s", self)

    # Jika server jarak jauh menutup koneksi karena kesalahan, fungsi berikut dipanggil:
    def on_connection_error(self, event):
        logger.info("Kesalahan koneksi")

    # Jika terjadi kesalahan koneksi AMQP, seperti kesalahan otentikasi atau kesalahan soket, fungsi berikut dipanggil:
    def on_transport_error(self, event):
        if event.transport.condition:
            if event.transport.condition.info:
                logger.error("%s: %s: %s" % (
                    event.transport.condition.name, event.transport.condition.description,
                    event.transport.condition.info))
            else:
                logger.error("%s: %s" % (event.transport.condition.name, event.transport.condition.description))
        else:
            logging.error("Kesalahan transportasi tidak ditentukan")

    # Jika pesan diterima, fungsi berikut dipanggil:
    def on_message(self, event):
        message = event.message
        content = message.body.decode('utf-8')
        topic = message.properties.get("topic")
        message_id = message.properties.get("messageId")
        print("menerima pesan: message_id=%s, topic=%s, content=%s" % (message_id, topic, content))
        event.receiver.flow(1)


Container(AmqpClient()).run()

Anda dapat mengonfigurasi parameter dalam kode sebelumnya sesuai dengan deskripsi parameter pada tabel berikut. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Menghubungkan Klien AMQP ke IoT Platform.

Penting

Pastikan Anda menentukan nilai parameter yang valid. Jika tidak, klien AMQP gagal terhubung ke IoT Platform.

Parameter

Deskripsi

url

Titik akhir yang digunakan oleh klien AMQP untuk terhubung ke IoT Platform. Format: "amqps://${YourHost}:5671".

Untuk informasi lebih lanjut tentang titik akhir yang dapat Anda tentukan untuk variabel ${YourHost}, lihat Kelola titik akhir sebuah instance.

accessKey

Masuk ke konsol IoT Platform, arahkan penunjuk mouse ke foto profil di sudut kanan atas, lalu klik AccessKey Management untuk mendapatkan ID AccessKey dan rahasia AccessKey.

Catatan

Jika Anda menggunakan pengguna Resource Access Management (RAM), Anda harus melampirkan kebijakan AliyunIOTFullAccess ke pengguna RAM. Kebijakan ini memungkinkan pengguna RAM mengelola sumber daya IoT Platform. Jika tidak, koneksi ke IoT Platform gagal. Untuk informasi lebih lanjut, lihat Akses IoT Platform sebagai pengguna RAM.

accessSecret

consumerGroupId

ID grup konsumen dari instance IoT Platform.

Untuk melihat ID grup konsumen, lakukan langkah-langkah berikut: Masuk ke konsol IoT Platform dan klik kartu instance yang ingin Anda kelola. Di panel navigasi di sebelah kiri, pilih Message Forwarding > Server-side Subscription. ID grup konsumen ditampilkan pada tab Consumer Groups.

iotInstanceId

ID instance IoT Platform. Anda dapat melihat ID instance pada tab Ikhtisar di konsol IoT Platform.

  • Jika ID instance ditampilkan, Anda harus menyetel parameter ini ke ID instance.

  • Jika tab Ikhtisar tidak ditampilkan atau instance Anda tidak memiliki ID, biarkan parameter ini kosong dalam format iotInstanceId = "".

clientId

ID klien. Anda harus menentukan ID kustom. ID tersebut harus memiliki panjang 1 hingga 64 karakter. Kami merekomendasikan Anda menggunakan pengenal unik sebagai ID klien, seperti UUID, alamat MAC, atau alamat IP server tempat klien berjalan.

Setelah klien AMQP terhubung ke IoT Platform dan dimulai, lakukan langkah-langkah berikut untuk melihat detail klien: Masuk ke konsol IoT Platform dan klik kartu instance yang ingin Anda kelola. Di panel navigasi di sebelah kiri, pilih Message Forwarding > Server-side Subscription. Pada tab Consumer Groups, temukan grup konsumen yang ingin Anda kelola dan klik View di kolom Tindakan. ID setiap klien ditampilkan pada tab Consumer Group Status. Anda dapat menggunakan ID klien untuk mengidentifikasi klien dengan mudah.

Hasil sampel

  • Jika informasi serupa dengan output berikut ditampilkan, klien AMQP berhasil terhubung ke IoT Platform dan dapat menerima pesan.成功

    Parameter

    Contoh

    Deskripsi

    message_id

    2**************7

    ID pesan.

    topic

    /***********/******/thing/event/property/post

    Topik yang digunakan untuk mengirimkan properti perangkat.

    content

    {"deviceType":"CustomCategory","iotId":"qPi***","requestId":"161***","checkFailedData":{},"productKey":"g4***","gmtCreate":1613635594038,"deviceName":"de***","items":{"Temperature":{"value":24,"time":1613635594036},"Humidity":{"value":26,"time":1613635594036}}}

    Isi pesan.

  • Jika informasi serupa dengan output berikut ditampilkan, klien AMQP gagal terhubung ke IoT Platform.

    Anda dapat memeriksa kode atau lingkungan jaringan berdasarkan log, menyelesaikan masalah, lalu menjalankan kode lagi.

    失败

Referensi

Untuk informasi lebih lanjut tentang kode kesalahan yang terkait dengan fitur langganan sisi server, lihat bagian Kode Kesalahan yang Terkait dengan Pesan dari topik "Log IoT Platform".