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.