לקורס האינטראקטיבי ←

MQTT Bite › יחידה 2

🌳 יחידה 2 מתוך 6 · טופיקים⏱️ 5 דק׳ קריאה🎥 סרטון 3 דק׳

שפת הנושאים (Topics) ו-Wildcards

מבנה עץ הטופיקים, סינון באמצעות פלוס וסולמית, וחוקי נושאי מערכת. נושא (Topic) ב-MQTT הוא מחרוזת UTF-8 היררכית המופרדת באמצעות לוכסנים ("/"), בדומה לנתיבי קבצים במערכת הפעלה. תכנון נכון של מבנה הנושאים הוא לב הארכיטקטורה של כל מערכת IoT.

פתחו את היחידה האינטראקטיבית עם הסימולטור ←

🎥 סרטון ההדרכה

🖼️ היחידה באינפוגרפיקה

אינפוגרפיקה: שפת הנושאים (Topics) ו-Wildcards

💡 מושגי מפתח

מבנה היררכי וחוקי יסוד

הנושא בנוי מרמות (Levels) מופרדות ב-"/". MQTT רגיש לאותיות גדולות/קטנות (Case-Sensitive), ולכן "Home/Temp" שונה לחלוטין מ-"home/temp". מומלץ להימנע מרווחים ומתווים שאינם ASCII.

✏️ דוגמה: מבנה מומלץ: factory/building-a/line-3/motor-1/vibration

ה-Wildcard החד-רמתי: "+"

הסימן "+" מייצג בדיוק רמה אחת בודדת בהיררכיית הנושא. ניתן להשתמש בו בכל מקום בעץ ואף מספר פעמים באותו מסנן.

✏️ דוגמה: המסנן "home/+/temperature" יתפוס את "home/kitchen/temperature" וגם את "home/bedroom/temperature", אך לא יתפוס את "home/kitchen/north/temperature".

ה-Wildcard הרב-רמתי: "#"

הסימן "#" מייצג אפס או יותר רמות עומק. חוק ברזל: "#" חייב להיות התו האחרון במסנן וברמה משלו!

✏️ דוגמה: המסנן "factory/line-1/#" יתפוס כל הודעה שמתחילה ב-"factory/line-1", כולל "factory/line-1/sensor", "factory/line-1/robot/arm/speed" ואפילו "factory/line-1".

נושאי מערכת: $SYS/

נושאים המתחילים בתו "$" שמורים לסטטיסטיקות פנימיות של הברוקר (כגון מספר הלקוחות המחוברים, עומס זיכרון, וקצב הודעות). חוק חשוב: הרשמה ל-"#" אינה תופסת נושאי $SYS!

✏️ דוגמה: $SYS/broker/clients/connected

📌 מה לקחת מהיחידה

  • הטופיקים הם Case-Sensitive ומופרדים בלוכסן ("/") בלבד.
  • + תופס רמה בודדת בכל מקום; # תופס את כל שאר הרמות וחייב להופיע בסוף.
  • נושאי $SYS הם שמורים ואינם נתפסים על ידי # ברמת השורש.

❓ שאלות ותשובות

איזה מהמסננים הבאים תקין לפי תקן MQTT ויקלוט את "home/kitchen/temp"?

home/+/temp. הסימן "+" תופס בדיוק רמה אחת ("kitchen"), ולכן "home/+/temp" מתאים. לעומת זאת, "#" חייב להיות רק בסוף המחרוזת ולעולם לא באמצע.

האם הרשמה למסנן "#" תקלוט הודעות מנושא המערכת "$SYS/broker/uptime"?

לא, נושאים המתחילים ב-$ אינם נלכדים על ידי Wildcard ברמת השורש. תקן MQTT אוסר במפורש על שרשור נושאי $SYS לתוך הרשמת # של לקוחות רגילים, כדי למנוע הצפת מנויים בטלמטריה פנימית.

מה הבעיה בטופיק המתחיל בלוכסן: "/home/sensors/temp"?

הוא יוצר רמה ראשונה ריקה מיותרת (Empty Level) ומסבך שימוש ב-Wildcards. לוכסן מוביל מייצר רמה ריקה ראשונה (כלומר "" לפני ה-home). זהו אנטי-פטרן מוכר שמבזבז בתים ומקשה על כתיבת פילטרים מדויקים.

→ יחידה קודמת: מהפכת ה-MQTT וארכיטקטורת Pub/Sub · יחידה הבאה: רמות איכות השירות (QoS 0, 1, 2) ←