mqtt — לקוח MQTT פשוט¶
המודול mqtt מספק מימוש מינימלי של לקוח MQTT v3.1.1 המתאים לשימוש בהתקנים מוגבלי זיכרון. הוא תומך בהתחברות ל-broker (עם TLS אופציונלי), פרסום הודעות, הרשמה ל-topics, הגדרת last-will ו-keep-alive pings.
דוגמה:
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()
חריגות¶
- exception mqtt.MQTTException¶
מועלית כאשר ה-broker דוחה את בקשת ה-CONNECT או כאשר בקשת SUBSCRIBE נדחית. הארגומנט היחיד הוא קוד החזרה המספרי שסופק על ידי ה-broker.
מחלקות¶
- 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)¶
בונה לקוח MQTT.
ארגומנטים:
client_id – מזהה לקוח ייחודי הנשלח ל-broker.
server – שם המארח או כתובת ה-IP של ה-broker (נפתר באמצעות
socket.getaddrinfo()).port – פורט ה-TCP של ה-broker (בדרך כלל
1883רגיל או8883עבור TLS).ssl_params – אם אינו
None, ה-socket עטוף באמצעותssl.wrap_socket()ו-ssl_params מועבר כארגומנטים בעלי שם. העבירו{}כדי לאפשר TLS עם ברירות מחדל.user – שם משתמש אופציונלי לאימות מול ה-broker. אם ניתן, יש לספק גם password.
password – סיסמה אופציונלית המשמשת יחד עם user.
keepalive – מרווח keep-alive בשניות (
0משבית). חייב להיות קטן מ-65536.callback – ניתן-לקריאה המופעל כ-
callback(topic, msg)עבור כל PUBLISH המסופק מה-broker. ניתן גם להגדירו מאוחר יותר באמצעותset_callback().
מתודות¶
- set_callback(f: callable) None¶
מגדירה את פונקציית ה-callback המופעלת על ידי
wait_msg()ו-check_msg()כאשר מתקבלת הודעת PUBLISH. ה-callback נקראת כ-f(topic, msg)כששני הארגומנטים הםbytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
מגדירה את ה-Last Will and Testament של MQTT. ה-broker מפרסם את msg על topic אם הלקוח מתנתק באופן לא תקין. חייבת להיקרא לפני
connect().ארגומנטים:
topic – topic של ה-last-will (חייב להיות לא-ריק).
msg – מטען (payload) של ה-last-will.
retain – אם
True, ה-broker מאחסן את הודעת ה-will כהודעה שמורה (retained).qos – רמת QoS של ה-last-will. חייבת להיות
0,1או2.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
פותחת חיבור TCP (ובאופן אופציונלי TLS) אל ה-broker ושולחת חבילת CONNECT.
ארגומנטים:
clean_session – אם
True, מבקש session נקי; אחרת ה-broker מחדש כל מצב session קודם.timeout – timeout של ה-socket בשניות המוחל על ה-socket הבסיסי.
מחזירה את דגל ה-session present של ה-broker (
0או1). מעלהMQTTExceptionאם ה-broker מחזיר קוד החזרה של CONNACK שונה מאפס.
- ping() None¶
שולחת חבילת PINGREQ אל ה-broker. יש לקרוא לה מעת לעת אם keepalive שונה מאפס כדי שה-broker לא ינתק את החיבור.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
מפרסמת את msg אל topic.
ארגומנטים:
topic – שם ה-topic לפרסום אליו.
msg – בייטים של המטען (payload).
retain – אם
True, מורה ל-broker לשמור את ההודעה עבור מנויים חדשים.qos – רמת איכות-שירות (quality-of-service).
0(שלח ושכח) ו-1(מאושר) נתמכות.2אינה ממומשת ותעלהAssertionError.
עבור qos
1, הקריאה נחסמת עד שמתקבל ה-PUBACK התואם. גודל החבילה הכולל חייב להיות קטן מ-2097152בייט.
- subscribe(topic: bytes | str, qos: int = 0) None¶
נרשמת ל-topic ברמת ה-qos הנתונה. חייבת להיות רשומה callback באמצעות
set_callback()או שסופקה לבנאי; אחרת מועליתAssertionError.נחסמת עד שמתקבל ה-SUBACK התואם. מעלה
MQTTExceptionאם ה-broker מסרב להרשמה (קוד החזרה0x80).
- wait_msg() int | None¶
נחסמת בהמתנה לחבילת MQTT נכנסת יחידה ומעבדת אותה. חבילות PUBLISH מסופקות ל-callback הרשומה. חבילות PINGRESP נצרכות בשקט. עבור חבילות בקרה אחרות מוחזר הבייט הראשון הגולמי. מחזירה
Noneאם אין נתונים זמינים או אם עובדה PINGRESP.
- check_msg() int | None¶
וריאנט לא-חוסם של
wait_msg(). סוקרת את ה-socket למשך כ-50 ms באמצעותselect.select(); אם נתונים ממתינים היא מבצעת את אותו עיבוד כמוwait_msg(), אחרת מחזירהNone.