mqtt — Jednostavni MQTT klijent#

Modul mqtt pruža minimalnu implementaciju MQTT v3.1.1 klijenta prikladnu za uporabu na uređajima s ograničenom memorijom. Podržava povezivanje s brokerom (s opcijskim TLS-om), objavljivanje poruka, pretplatu na teme, konfiguraciju posljednje volje i keep-alive pingove.

Primjer:

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

Iznimke#

exception mqtt.MQTTException#

Podiže se kada broker odbije CONNECT zahtjev ili kada se SUBSCRIBE zahtjev odbije. Jedini argument je numerički povratni kod koji isporučuje broker.

Klase#

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

Konstruira MQTT klijent.

Argumenti:

  • client_id – jedinstveni identifikator klijenta koji se šalje brokeru.

  • server – naziv računala (hostname) ili IP adresa brokera (razrješava se pomoću socket.getaddrinfo()).

  • port – TCP port brokera (obično 1883 za nešifrirano ili 8883 za TLS).

  • ssl_params – ako nije None, soket se omata pomoću ssl.wrap_socket(), a ssl_params se prosljeđuje kao imenovani argumenti. Proslijedite {} za omogućavanje TLS-a sa zadanim postavkama.

  • user – opcijsko korisničko ime za autentifikaciju s brokerom. Ako je navedeno, mora se navesti i password.

  • password – opcijska lozinka koja se koristi zajedno s user.

  • keepalive – interval keep-alive u sekundama (0 onemogućuje). Mora biti manji od 65536.

  • callback – pozivni objekt koji se poziva kao callback(topic, msg) za svaki PUBLISH isporučen od brokera. Može se postaviti i kasnije pomoću set_callback().

Metode#

set_callback(f: callable) None#

Postavlja povratni poziv koji pozivaju wait_msg() i check_msg() kada se primi PUBLISH poruka. Povratni poziv se poziva kao f(topic, msg) s oba argumenta tipa bytes.

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

Konfigurira MQTT posljednju volju i oporuku (Last Will and Testament). Broker objavljuje msg na topic ako se klijent neispravno odspoji. Mora se pozvati prije connect().

Argumenti:

  • topic – tema posljednje volje (ne smije biti prazna).

  • msg – sadržaj posljednje volje.

  • retain – ako je True, broker pohranjuje poruku posljednje volje kao zadržanu poruku.

  • qos – razina QoS posljednje volje. Mora biti 0, 1 ili 2.

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

Otvara TCP (i opcijski TLS) vezu s brokerom i šalje CONNECT paket.

Argumenti:

  • clean_session – ako je True, traži čistu sesiju; u suprotnom broker nastavlja bilo koje prethodno stanje sesije.

  • timeout – istek vremena soketa u sekundama primijenjen na temeljni soket.

Vraća brokerovu zastavicu session present (0 ili 1). Podiže MQTTException ako broker vrati povratni kod CONNACK različit od nule.

disconnect() None#

Šalje DISCONNECT paket i zatvara temeljni soket.

ping() None#

Šalje PINGREQ paket brokeru. Treba ga pozivati periodički ako je keepalive različit od nule kako broker ne bi prekinuo vezu.

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

Objavljuje msg na topic.

Argumenti:

  • topic – naziv teme na koju se objavljuje.

  • msg – bajtovi sadržaja.

  • retain – ako je True, upućuje broker da zadrži poruku za nove pretplatnike.

  • qos – razina kvalitete usluge (quality-of-service). Podržani su 0 (pošalji i zaboravi) i 1 (potvrđeno). 2 nije implementiran i podići će AssertionError.

Za qos 1, poziv se blokira dok se ne primi odgovarajući PUBACK. Ukupna veličina paketa mora biti manja od 2097152 bajtova.

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

Pretplaćuje se na topic na zadanoj razini qos. Povratni poziv mora biti registriran putem set_callback() ili proslijeđen konstruktoru; u suprotnom se podiže AssertionError.

Blokira dok se ne primi odgovarajući SUBACK. Podiže MQTTException ako broker odbije pretplatu (povratni kod 0x80).

wait_msg() int | None#

Blokira čekajući jedan dolazni MQTT paket i obrađuje ga. PUBLISH paketi se isporučuju registriranom povratnom pozivu. PINGRESP paketi se tiho troše. Za ostale upravljačke pakete vraća se sirovi prvi bajt. Vraća None ako nema dostupnih podataka ili ako je obrađen PINGRESP.

check_msg() int | None#

Neblokirajuća varijanta metode wait_msg(). Provjerava soket najviše ~50 ms pomoću select.select(); ako podaci čekaju, izvodi istu obradu kao wait_msg(), u suprotnom vraća None.