דלג לתוכן הראשי

ארכיטקטורת IoT ופרוטוקול תקשורת

המערכת משתמשת בפרוטוקול MQTT (Message Queuing Telemetry Transport) לתקשורת דו-כיוונית בזמן אמת עם מכשירי הקצה (מסכים). המימוש בשרת מבוסס על ספריית mqtt.js ועטוף ב-MqttService המנל את החיבורים, האבטחה וה-Pool.

נושאים (Topics)

כל התקשורת מתבצעת תחת נושאים (Topics) בפורמט קבוע, כאשר :deviceId הוא המזהה הייחודי של המכשיר.

TopicPublisherSubscriberתיאורPayload
device/:id/commandServerDeviceשליחת פקודות למכשיר{ "type": "RELOAD", "commandId": "...",params": {} }
device/:id/responseDeviceServerתשובה לפקודה{ "commandId": "...", "success": true, "result": {} }
device/:id/statusDeviceServerדיווח סטטוס (Heartbeat){ "state": "online", "version": "1.0.0", "ip": "..." }
device/:id/telemetryDeviceServerנתוני ביצועים (CPU/RAM){ "cpu": 40, "memory": 512, "uptime": 3600 }

ארכיטקטורת השרת

1. Connection Pooling

כאשר המערכת עובדת ב-Scale גבוה, שרת יחיד לא יכול להחזיק אלפי חיבורי MQTT פתוחים ביעילות. MqttConnectionPoolService מנהל מאגר של חיבורים (Clients) ומשתמש בהם ברוטציה לשליחת הודעות, במקום לפתוח חיבור חדש לכל בקשה.

2. אבטחה והצפנה

כאשר MQTT_USE_ADVANCED_SECURITY=true:

  • ה-Payload מוצפן (End-to-End) באמצעות מפתחות ייחודיים לכל מכשיר.
  • MqttSecurityService מוודא הרשאות (ACL) לפני שליחה/קבלה מ-Topic מסוים.

3. אמינות (Reliability)

  • QoS 1: הודעות נשלחות עם אישור קבלה (At least once).
  • Retained Messages: הודעות קונפיגורציה קריטיות נשמרות ב-Broker כדי שהמכשיר יקבל אותן מיד עם ההתחברות.
  • Fallback: המערכת מזהה ניתוקים ושומרת פקודות ב-Pending עד לחיבור מחדש (או Timeout).

תצורת Docker

שרת ה-Broker הוא Eclipse Mosquitto, המוגדר ב-docker-compose.yml.

  • פורט פנימי: 1883
  • פורט WebSockets (לדפדפן): 9001 (אם בשימוש)