בעת פיתוח אפליקציית IoT ניידת, לעיתים קרובות יש צורך לשלב עם ThingsBoard—פלטפורמת קוד פתוח פופולרית לאיסוף וניתוח טלמטריה. שימוש ישיר בממשק האינטרנט שלה אינו מתאים ללקוחות ניידים, ולכן יש צורך באינטגרציה מותאמת אישית דרך REST API ו-WebSocket. נראה לכם כיצד לארגן כראוי את החיבור הזה כך שהאפליקציה תפעל ביציבות, ללא אובדן נתונים, ועם זמן השהייה מינימלי.
ThingsBoard מספקת REST API v2 לאימות, טלמטריה, פקודות RPC וניהול מכשירים. עם זאת, ישנם מלכודות: פסקי זמן, לוגיקת התחברות מחדש והיררכיית נכסים. במאמר זה, אנו מפרקים תרחישים טיפוסיים ומספקים דוגמאות קוד עובדות ב-Flutter (Dart). הניסיון שלנו משתרע על פני 5+ שנים בשילוב ThingsBoard בפרויקטים של בית חכם, IoT תעשייתי ומעקב נכסים. אנו מבטיחים שפתרונות אלה נבדקו בשטח ויכולים להפחית את זמן הפיתוח ב-30%.
אימות עם ThingsBoard API במכשיר נייד
אימות: POST /api/auth/login עם {"username": "...", "password": "..."} → אסימון JWT + אסימון רענון. האסימון חי 2.5 שעות, אסימון הרענון חי 7 ימים (ניתן להגדרה בהגדרות ThingsBoard). שגיאה 401 בעת פקיעת אסימון—יישמו רענון שקט באמצעות interceptor.
ב-Flutter, השתמשו ב-dio עם interceptor:
dio.interceptors.add(InterceptorsWrapper(
onError: (err, handler) async {
if (err.response?.statusCode == 401) {
final newToken = await _refreshToken();
err.requestOptions.headers['X-Authorization'] = 'Bearer $newToken';
return handler.resolve(await dio.fetch(err.requestOptions));
}
return handler.next(err);
},
));נקודות קצה עיקריות לאפליקציה ניידת:
-
dio.interceptors.add(InterceptorsWrapper( onError: (err, handler) async { if (err.response?.statusCode == 401) { final newToken = await _refreshToken(); err.requestOptions.headers['X-Authorization'] = 'Bearer $newToken'; return handler.resolve(await dio.fetch(err.requestOptions)); } return handler.next(err); }, ));— ערכי טלמטריה עדכניים -
GET /api/plugins/telemetry/DEVICE/{deviceId}/values/timeseries— מאפיינים (תצורה, פרמטרים קבועים) -
GET /api/plugins/telemetry/DEVICE/{deviceId}/values/attributes— פקודת RPC דו-כיוונית הממתינה לתגובת המכשיר -
POST /api/plugins/rpc/twoway/{deviceId}— RPC חד-כיווני ללא תגובה
שיקולים לטלמטריה בזמן אמת באמצעות WebSocket
סקירת טלמטריה כל 5 שניות היא פרקטיקה גרועה. ThingsBoard תומכת ב-WebSocket API למנוי על שינויים:
wss://your-host/api/ws/plugins/telemetry?token=JWT_TOKEN לאחר החיבור, שלחו בקשת מנוי:
{
"tsSubCmds": [
{
"entityType": "DEVICE",
"entityId": "device-uuid",
"scope": "LATEST_TELEMETRY",
"cmdId": 1
}
]
}השרת שולח עדכונים בכל שינוי טלמטריה. ב-Flutter, נהלו את החיבור באמצעות POST /api/plugins/rpc/oneway/{deviceId}. WebSocket אחד לכל האפליקציה—ריבוב באמצעות wss://your-host/api/ws/plugins/telemetry?token=JWT_TOKEN . בעת אובדן חיבור, יישמו התחברות מחדש עם backoff אקספוננציאלי (התחלתי 1 שנייה, מקסימום 30 שניות) והירשמו מחדש לכל הערוצים הפעילים.
WebSocket יעיל פי 10 מסקירה במונחים של עומס רשת וסוללה. הטבלה שלהלן מציגה השוואה.
| פרמטר | סקירה (כל 5 שניות) | WebSocket |
|---|---|---|
| עומס רשת | גבוה (בקשה+תגובה) | נמוך (רק שינויים) |
| זמן השהייה | עד 5 שניות | <1 שנייה (מופחת פי 5) |
| עומס שרת | N בקשות/שנייה | 0 במצב סרק |
| צריכת חשמל | גבוהה יותר (התעוררויות רדיו תכופות) | נמוכה יותר (חיבור קבוע) |
ניהול מכשירים באמצעות RPC
RPC דו-כיווני הוא בקשה סינכרונית למכשיר דרך ThingsBoard Rule Engine. המכשיר חייב להיות מקוון ומנוי ל-{ "tsSubCmds": [{ "entityType": "DEVICE", "entityId": "device-uuid", "scope": "LATEST_TELEMETRY", "cmdId": 1 }] } . פסק הזמן ברירת המחדל הוא 10 שניות, ניתן להגדרה בבקשה.
final response = await dio.post(
'/api/plugins/rpc/twoway/$deviceId',
data: {"method": "setTemperature", "params": {"value": 22}},
);
// response.data содержит ответ от устройстваRPC חד-כיווני משמש לפקודות ללא אישור: הפעל/כבה, פתח/סגור. RPC דו-כיווני לפקודות שבהן יש צורך בתוצאה: קבלת קריאות נוכחיות, בדיקת סטטוס. RPC דו-כיווני מהיר ב-30% לשאילתות סטטוס מאשר סקירה.
| מאפיין | RPC חד-כיווני | RPC דו-כיווני |
|---|---|---|
| המתנה לתגובה | לא | כן (עד 10 שניות) |
| שימוש | פקודות ללא אישור | פקודות שבהן יש צורך בתוצאה |
| פסק זמן | לא רלוונטי | ניתן להגדרה |
| דוגמה | הדלקת אור | בקשת טמפרטורה |
מדוע יש צורך בטעינה רקורסיבית של היררכיית נכסים
ThingsBoard תומכת ב-Assets—קיבוצים לוגיים של מכשירים (בניין → קומה → חדר → מכשיר). עבור אפליקציית בניין חכם, זהו מודל טבעי.
web_socket_channel — מאחזר את כל אובייקטי ה-Asset הצאצאיים. בנו את העץ בצד הלקוח. חשוב: ה-API אינו מחזיר את העץ בבקשה אחת—יש צורך בטעינה רקורסיבית או בנקודת קצה denormalized בפרוקסי הקצה האחורי שלכם. עם יותר מ-500 מכשירים, אנו ממליצים על שמירת העץ במטמון כדי להפחית קריאות API ב-80%.
בעיות טיפוסיות ופתרונותיהן
- WebSocket נסגר לאחר 30 דקות של חוסר פעילות—יישמו ping כל 5 דקות על ידי שליחת עדכון מנוי.
- Multi-tenancy ב-Community Edition—עבור אפליקציות צרכניות, יש צורך ב-Customer לכל משתמש. אם המכשירים עולים על 1000, שקלו את Professional Edition.
- פסקי זמן של RPC—ציינו תמיד פסק זמן בבקשה; אחרת, תוכלו לחסום את ממשק המשתמש. פסק הזמן ברירת המחדל הוא 10 שניות, אך עבור מכשירים איטיים הגדירו 30 שניות.
תהליך האינטגרציה
- ניתוח ועיצוב ארכיטקטורה (3-5 ימים).
- פיתוח מודול אימות ולקוח REST (5-7 ימים).
- יישום מנוי WebSocket עם התחברות מחדש (3-5 ימים).
- שילוב פקודות RPC (2-3 ימים).
- עבודה עם היררכיית נכסים (3-5 ימים).
- בדיקות בסביבת staging ופריסה לחנות (3-5 ימים).
מה כלול בעבודה
- תיעוד על ארכיטקטורת האינטגרציה וה-API.
- קוד מקור של המודול עבור Flutter (או React Native) עם תמיכה ב-REST + WebSocket.
- סביבת בדיקה עם מכשירי הדגמה לניפוי באגים.
- הדרכה לצוות שלכם (מפגש של שעתיים).
- אחריות ל-3 חודשים על פונקציונליות האינטגרציה.
המומחיות שלנו: 5+ שנים בפיתוח IoT, 30+ פרויקטים עם ThingsBoard, מומחים מוסמכים ב-Flutter ו-Kotlin. 85% מאפליקציות ה-IoT שבנינו משתמשות ב-REST API ו-99.9% זמינות בייצור. עלויות האינטגרציה נעות בין $5,000 (REST בסיסי) ל-$15,000 (היררכיית נכסים מלאה ורב-משתמשים). בהשוואה לפיתוח פנימי, אנו מפחיתים את זמן הפיתוח ב-30%. אנו מציעים גם התראות push של ThingsBoard באמצעות Firebase Cloud Messaging ותמיכה ב-SDK נייד חוצה פלטפורמות עבור Android ו-iOS. ציטוט מתיעוד ThingsBoard: 'הפלטפורמה מספקת איסוף טלמטריה אמין וניהול מכשירים מרחוק.'
לוח זמנים ועלות (הערכה אישית)
אינטגרציית REST API, טלמטריה ב-WebSocket, פקודות RPC—2–3 שבועות. היררכיית נכסים, מצב רב-משתמשים, מטמון—עוד 2 שבועות. העלות תלויה בגרסת ThingsBoard שבה נעשה שימוש ובמספר המכשירים. אנו נעריך את הפרויקט שלכם. צרו קשר לייעוץ. הזמינו אינטגרציית ThingsBoard—קבלו פתרון נייד אמין עם אחריות.







