mqtt --- Klien MQTT sederhana

Modul mqtt menyediakan implementasi klien MQTT v3.1.1 yang minimal, cocok untuk digunakan pada perangkat dengan memori terbatas. Modul ini mendukung koneksi ke broker (dengan TLS opsional), penerbitan pesan, berlangganan topik, konfigurasi last-will, dan ping keep-alive.

Contoh:

from mqtt import MQTTClient

def callback(topic, msg):
    print(topic, msg)

client = MQTTClient("openmv", "broker.example.com", 1883)
client.set_callback(callback)
client.connect()
client.subscribe(b"openmv/in")
client.publish(b"openmv/out", b"hello")
while True:
    client.check_msg()

Pengecualian

exception mqtt.MQTTException

Dimunculkan ketika broker menolak permintaan CONNECT atau ketika permintaan SUBSCRIBE ditolak. Argumen tunggalnya adalah kode kembalian numerik yang diberikan broker.

Kelas

class mqtt.MQTTClient(client_id: bytes | str, server: str, port: int, ssl_params: dict | None = None, user: bytes | str | None = None, password: bytes | str | None = None, keepalive: int = 0, callback: callable | None = None)

Membuat klien MQTT.

Argumen:

  • client_id -- pengenal klien unik yang dikirimkan ke broker.

  • server -- nama host atau alamat IP broker (diselesaikan dengan socket.getaddrinfo()).

  • port -- port TCP broker (biasanya 1883 biasa atau 8883 untuk TLS).

  • ssl_params -- jika tidak None, soket dibungkus dengan ssl.wrap_socket() dan ssl_params diteruskan sebagai argumen kata kunci. Berikan {} untuk mengaktifkan TLS dengan pengaturan default.

  • user -- nama pengguna opsional untuk autentikasi broker. Jika diberikan, password harus juga disediakan.

  • password -- kata sandi opsional yang digunakan bersama user.

  • keepalive -- interval keep-alive dalam detik (0 menonaktifkan). Harus kurang dari 65536.

  • callback -- callable yang dipanggil sebagai callback(topic, msg) untuk setiap PUBLISH yang dikirimkan dari broker. Dapat juga diatur nanti dengan set_callback().

Metode

set_callback(f: callable) None

Mengatur callback yang dipanggil oleh wait_msg() dan check_msg() ketika pesan PUBLISH diterima. Callback dipanggil sebagai f(topic, msg) dengan kedua argumen sebagai bytes.

set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None

Mengonfigurasi Last Will and Testament MQTT. Broker menerbitkan msg pada topic jika klien terputus secara tidak normal. Harus dipanggil sebelum connect().

Argumen:

  • topic -- topik last-will (tidak boleh kosong).

  • msg -- payload last-will.

  • retain -- jika True, broker menyimpan pesan will sebagai pesan yang dipertahankan.

  • qos -- level QoS last-will. Harus 0, 1 atau 2.

connect(clean_session: bool = True, timeout: float = 5.0) int

Membuka koneksi TCP (dan opsional TLS) ke broker dan mengirimkan paket CONNECT.

Argumen:

  • clean_session -- jika True, meminta sesi bersih; jika tidak, broker melanjutkan status sesi sebelumnya.

  • timeout -- batas waktu soket dalam detik yang diterapkan ke soket yang mendasarinya.

Mengembalikan flag session present dari broker (0 atau 1). Memunculkan MQTTException jika broker mengembalikan kode kembalian CONNACK yang bukan nol.

disconnect() None

Mengirimkan paket DISCONNECT dan menutup soket yang mendasarinya.

ping() None

Mengirimkan paket PINGREQ ke broker. Harus dipanggil secara berkala jika keepalive bukan nol agar broker tidak memutus koneksi.

publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None

Menerbitkan msg ke topic.

Argumen:

  • topic -- nama topik yang diterbitkan.

  • msg -- byte payload.

  • retain -- jika True, perintahkan broker untuk mempertahankan pesan bagi pelanggan baru.

  • qos -- level quality-of-service. 0 (kirim dan lupakan) dan 1 (dengan konfirmasi) didukung. 2 tidak diimplementasikan dan akan memunculkan AssertionError.

Untuk qos 1, panggilan diblokir hingga PUBACK yang sesuai diterima. Ukuran total paket harus kurang dari 2097152 byte.

subscribe(topic: bytes | str, qos: int = 0) None

Berlangganan ke topic pada level qos yang diberikan. Callback harus telah didaftarkan melalui set_callback() atau diberikan ke konstruktor; jika tidak, AssertionError akan dimunculkan.

Memblokir hingga SUBACK yang sesuai diterima. Memunculkan MQTTException jika broker menolak langganan (kode kembalian 0x80).

wait_msg() int | None

Memblokir menunggu satu paket MQTT masuk dan memprosesnya. Paket PUBLISH dikirimkan ke callback yang terdaftar. Paket PINGRESP dikonsumsi secara diam-diam. Untuk paket kontrol lainnya, byte pertama mentah dikembalikan. Mengembalikan None jika tidak ada data yang tersedia atau jika PINGRESP telah diproses.

check_msg() int | None

Varian non-blocking dari wait_msg(). Mempolling soket selama paling banyak ~50 ms menggunakan select.select(); jika ada data yang tertunda, melakukan pemrosesan yang sama seperti wait_msg(), jika tidak mengembalikan None.