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
1883veya TLS için8883).ssl_params –
Nonedeğilse, soketssl.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.
password – user ile birlikte kullanılan isteğe bağlı parola.
keepalive – saniye cinsinden canlı tutma aralığı (
0devre dışı bırakır).65536değ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 sonraset_callback()ile de ayarlanabilir.
Yöntemler¶
- set_callback(f: callable) None¶
Bir PUBLISH mesajı alındığında
wait_msg()vecheck_msg()tarafından çağrılan geri çağırmayı ayarlar. Geri çağırma, her iki argüman dabytesolacak şekildef(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ü.
retain –
Trueise, broker istek mesajını saklanan bir mesaj olarak depolar.qos – son istek QoS seviyesi.
0,1veya2olmalı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_session –
Trueise, 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 (
0veya1). Broker sıfır olmayan bir CONNACK dönüş kodu döndürürseMQTTExceptionortaya çıkarı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ı.
retain –
Trueise, broker’a mesajı yeni aboneler için saklamasını söyler.qos – hizmet kalitesi seviyesi.
0(gönder ve unut) ve1(onaylanmış) desteklenir.2uygulanmamıştır veAssertionErrorortaya çıkarır.
qos
1için, çağrı eşleşen PUBACK alınana kadar bloke olur. Toplam paket boyutu2097152bayttan 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 takdirdeAssertionErrorortaya çıkar.Eşleşen SUBACK alınana kadar bloke olur. Broker aboneliği reddederse (dönüş kodu
0x80)MQTTExceptionortaya çı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
Nonedö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 bekliyorsawait_msg()ile aynı işlemi gerçekleştirir, aksi takdirdeNonedöndürür.