mqtt — Basit MQTT istemcisi

mqtt modülü, belleği kısıtlı cihazlarda kullanıma uygun, minimal bir MQTT v3.1.1 istemci uygulaması sağlar. Bir broker’a bağlanmayı (isteğe bağlı TLS ile), mesaj yayınlamayı, konulara abone olmayı, son istek (last-will) yapılandırmasını ve canlı tutma (keep-alive) ping’lerini destekler.

Örnek:

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()

İstisnalar

exception mqtt.MQTTException

Broker CONNECT isteğini reddettiğinde veya bir SUBSCRIBE isteği reddedildiğinde ortaya çıkar. Tek argüman, broker tarafından sağlanan sayısal dönüş kodudur.

Sınıflar

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)

Bir MQTT istemcisi oluşturur.

Argümanlar:

  • client_id – broker’a gönderilen benzersiz istemci tanımlayıcısı.

  • server – broker ana bilgisayar adı veya IP adresi (socket.getaddrinfo() ile çözümlenir).

  • port – broker TCP bağlantı noktası (genellikle düz bağlantı için 1883 veya TLS için 8883).

  • ssl_paramsNone değilse, soket ssl.wrap_socket() ile sarmalanır ve ssl_params anahtar sözcük argümanları olarak iletilir. TLS’yi varsayılan ayarlarla etkinleştirmek için {} geçirin.

  • user – broker kimlik doğrulaması için isteğe bağlı kullanıcı adı. Verilirse, password da sağlanmalıdır.

  • passworduser ile birlikte kullanılan isteğe bağlı parola.

  • keepalive – saniye cinsinden canlı tutma aralığı (0 devre dışı bırakır). 65536 değerinden küçük olmalıdır.

  • callback – broker’dan iletilen her PUBLISH için callback(topic, msg) olarak çağrılan çağrılabilir nesne. Ayrıca daha sonra set_callback() ile de ayarlanabilir.

Yöntemler

set_callback(f: callable) None

Bir PUBLISH mesajı alındığında wait_msg() ve check_msg() tarafından çağrılan geri çağırmayı ayarlar. Geri çağırma, her iki argüman da bytes olacak şekilde f(topic, msg) olarak çağrılır.

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

MQTT Last Will and Testament (son istek) yapılandırmasını ayarlar. İstemci düzgün bir şekilde bağlantısını kesmezse broker, msg mesajını topic üzerine yayınlar. connect() çağrılmadan önce çağrılmalıdır.

Argümanlar:

  • topic – son istek konusu (boş olmamalıdır).

  • msg – son istek yükü.

  • retainTrue ise, broker istek mesajını saklanan bir mesaj olarak depolar.

  • qos – son istek QoS seviyesi. 0, 1 veya 2 olmalıdır.

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

Broker’a bir TCP (ve isteğe bağlı olarak TLS) bağlantısı açar ve bir CONNECT paketi gönderir.

Argümanlar:

  • clean_sessionTrue ise, temiz bir oturum ister; aksi takdirde broker önceki herhangi bir oturum durumunu sürdürür.

  • timeout – alttaki sokete uygulanan, saniye cinsinden soket zaman aşımı.

Broker’ın session present (oturum mevcut) bayrağını döndürür (0 veya 1). Broker sıfır olmayan bir CONNACK dönüş kodu döndürürse MQTTException ortaya çıkarır.

disconnect() None

Bir DISCONNECT paketi gönderir ve alttaki soketi kapatır.

ping() None

Broker’a bir PINGREQ paketi gönderir. keepalive sıfır değilse, broker’ın bağlantıyı düşürmemesi için düzenli aralıklarla çağrılmalıdır.

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

msg mesajını topic üzerine yayınlar.

Argümanlar:

  • topic – yayınlanacak konu adı.

  • msg – yük baytları.

  • retainTrue ise, broker’a mesajı yeni aboneler için saklamasını söyler.

  • qos – hizmet kalitesi seviyesi. 0 (gönder ve unut) ve 1 (onaylanmış) desteklenir. 2 uygulanmamıştır ve AssertionError ortaya çıkarır.

qos 1 için, çağrı eşleşen PUBACK alınana kadar bloke olur. Toplam paket boyutu 2097152 bayttan küçük olmalıdır.

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

Verilen qos seviyesinde topic konusuna abone olur. set_callback() aracılığıyla veya yapıcıya bir geri çağırma kaydedilmiş olmalıdır; aksi takdirde AssertionError ortaya çıkar.

Eşleşen SUBACK alınana kadar bloke olur. Broker aboneliği reddederse (dönüş kodu 0x80) MQTTException ortaya çıkarır.

wait_msg() int | None

Tek bir gelen MQTT paketini bekleyerek bloke olur ve onu işler. PUBLISH paketleri kayıtlı geri çağırmaya iletilir. PINGRESP paketleri sessizce tüketilir. Diğer kontrol paketleri için ham ilk bayt döndürülür. Hiç veri yoksa veya bir PINGRESP işlendiyse None döndürür.

check_msg() int | None

wait_msg() fonksiyonunun bloke etmeyen çeşididir. select.select() kullanarak soketi en fazla ~50 ms boyunca yoklar; veri bekliyorsa wait_msg() ile aynı işlemi gerçekleştirir, aksi takdirde None döndürür.