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
1883biasa atau8883untuk TLS).ssl_params -- jika tidak
None, soket dibungkus denganssl.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 (
0menonaktifkan). Harus kurang dari65536.callback -- callable yang dipanggil sebagai
callback(topic, msg)untuk setiap PUBLISH yang dikirimkan dari broker. Dapat juga diatur nanti denganset_callback().
Metode¶
- set_callback(f: callable) None¶
Mengatur callback yang dipanggil oleh
wait_msg()dancheck_msg()ketika pesan PUBLISH diterima. Callback dipanggil sebagaif(topic, msg)dengan kedua argumen sebagaibytes.
- 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,1atau2.
- 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 (
0atau1). MemunculkanMQTTExceptionjika broker mengembalikan kode kembalian CONNACK yang bukan nol.
- 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) dan1(dengan konfirmasi) didukung.2tidak diimplementasikan dan akan memunculkanAssertionError.
Untuk qos
1, panggilan diblokir hingga PUBACK yang sesuai diterima. Ukuran total paket harus kurang dari2097152byte.
- 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,AssertionErrorakan dimunculkan.Memblokir hingga SUBACK yang sesuai diterima. Memunculkan
MQTTExceptionjika broker menolak langganan (kode kembalian0x80).
- 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
Nonejika 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 menggunakanselect.select(); jika ada data yang tertunda, melakukan pemrosesan yang sama sepertiwait_msg(), jika tidak mengembalikanNone.