פיתוח אפליקציות מובייל לבית חכם (מנעולים אלקטרוניים/אינטרקום)
המנעול נתקע, ה-API מחזיר 503, חיבור ה-BLE נכשל — המשתמש עומד מול הדלת עם טלפון ללא סוללה. זו לא בעיית UX; זה אירוע חירום. אנו מעצבים אפליקציות למנעולים אלקטרוניים ואינטרקום שבהן לכל ערוץ תקשורת יש גיבוי. הניסיון שלנו: 10+ שנים ו-15 פרויקטים בתחום הבית החכם. לאחרונה, פתרנו בעיה עם מנעולי Nuki ב-iOS: האפליקציה לא קיבלה התראות BLE על מצב המנעול עקב הגדרה שגויה של מצב רקע ב-CoreBluetooth. לאחר הוספת FlutterBluePlus.adapterState ל-Info.plist ושימוש ב-flutter_blue_plus, הכל עבד. פרטים כאלה קובעים אמינות. אנו מוכנים להעריך את הפרויקט שלך תוך יומיים: צור קשר, ונציע פתרון סוהר.
כיצד אנו מבטיחים אמינות כאשר כל הערוצים נכשלים?
הארכיטקטורה מבוססת על יתירות. לפחות שתי דרכים עצמאיות לפתיחת המנעול. אם הערוץ הראשי נכשל, המשתמש לא צריך להתקשר לתמיכה בעמידה בקור. היררכיית ערוצים טיפוסית:
- BLE (מקומי, ללא אינטרנט) — עדיפות ראשונה כשקרוב
- Wi-Fi/ענן — אם BLE אינו זמין
- קוד PIN על המנעול — אם המערכת נכשלת לחלוטין
- מפתח מכני — גיבוי פיזי
האפליקציה מזהה אוטומטית ערוצים זמינים ועוברת ביניהם. BLE: בדוק את מצב ה-Bluetooth באמצעות 00001523-1212-EFDE-1523-785FEABCD123. אין BLE או שהמכשיר רחוק — נסה Wi-Fi/ענן. בממשק המשתמש, הצג את הערוץ הפעיל למשתמש. הפחת עלויות תמיכה — פחות שיחות, שביעות רצון גבוהה יותר.
מדוע BLE הוא הערוץ הראשי לפתיחה מהירה?
BLE מספק זמן השהיה מתחת ל-200 אלפיות השנייה — פי 10 מהר יותר משליטה בענן. טווח 5–15 מטרים, ללא צורך באינטרנט. יישום מקורי באמצעות CoreBluetooth (iOS) / Android BLE API, ב-Flutter — POST /v1.0/devices/{deviceId}/commands. כל מנעול הוא שירות GATT עם מאפיינים משלו. לדוגמה, מנעולי August משתמשים ב-UUID שירות {"commands": [{"code": "switch_1", "value": true}]} עם פרוטוקול קנייני — אין SDK רשמי, אנו עובדים באמצעות הנדסה לאחור או August API.
פרוטוקולים וסוגי מנעולים
| פרוטוקול | טווח | זמן השהיה | תלוי אינטרנט | דוגמאות מנעולים |
|---|---|---|---|---|
| BLE | 5–15 מ' | <200 אלפיות השנייה | לא | August, Schlage Encode, Nuki |
| Wi-Fi | ~100 מ' | 300–2000 אלפיות השנייה | כן | Tuya, Yale Connect, Kwikset Halo |
| Zigbee | 10–100 מ' | <500 אלפיות השנייה | דרך רכזת | Samsung SmartThings, Kwikset |
| Z-Wave | 30–100 מ' | <500 אלפיות השנייה | דרך רכזת | Schlage, Kwikset Z-Wave |
עבור מנעולי Wi-Fi של Tuya, השתמש ב-Tuya Open API: zigbee2mqtt/{device}/set עם {"state": "UNLOCK"}. עבור Zigbee — פקודת MQTT לנושא POST /smartlock/{smartlockId}/auth עם allowedWeekDays. Z-Wave עובד דרך Z-Wave JS או Home Assistant.
השוואת גישות לגישה זמנית
| גישה | מהירות פתיחה | אבטחה | תמיכה לא מקוונת | מנעולים טיפוסיים |
|---|---|---|---|---|
| Cloud API (Nuki, August) | <1 שנייה | גבוהה (SSL) | לא | Nuki, August |
| אסימון חתום BLE | <100 אלפיות השנייה | גבוהה (קריפטוגרפיה) | כן | כל BLE |
| קוד PIN על המנעול | מיידי | בינוני | כן | דגמי מסך מגע |
גישה זמנית ואורחים
מפתח לאורח ל-24 שעות, לשוכר Airbnb לשבוע, למנקה בימי שלישי מ-10 עד 14 — זו פונקציונליות ליבה. היישום תלוי במנעול. Nuki Web API: allowedFromDate יוצר הרשאה עם allowedUntilDate, allowedFromTime, allowedUntilTime, POST /access_codes, access_code. August API: priority: high עם סוג CallKit.
עבור מנעולי BLE ללא ענן, מפתח זמני הוא אסימון חתום קריפטוגרפית עם אילוצי זמן, המועבר דרך BLE. בשרת, אנו מאחסנים את כל המפתחות שהונפקו עם מטא-דאטה (למי, על ידי מי, תפוגה, רשימת שימושים). הודעת Push לבעלים על כל שימוש במפתח אורח.
כיצד ליישם שיחת וידאו מאינטרקום?
שיחת וידאו מאינטרקום למובייל = WebRTC + VoIP push. כאשר מישהו לוחץ על כפתור האינטרקום:
- האינטרקום מפרסם אירוע ל-MQTT
- השרת שולח VoIP push ל-iOS (דרך PushKit) או FCM עם
android.telecom.ConnectionServiceלאנדרואיד - האפליקציה מתעוררת ברקע, מקימה חיבור WebRTC עם האינטרקום
- מציגה ממשק שיחה נכנסת דרך
com.apple.developer.pushkit.unrestricted-dispatch(iOS) אוstartForeground
VoIP push ב-iOS דרך PushKit הוא הדרך היחידה להעיר את האפליקציה בצורה אמינה לשיחת וידאו. Push רגיל מגיע באיחור של 2–30 שניות. PushKit הוא מיידי. דורש אישור VoIP בפורטל Apple Developer, הרשאה ForegroundServiceType.CAMERA. באנדרואיד, שירות רקע עם ForegroundServiceType.MICROPHONE שומר על חיבור WebRTC מוכן. החל מאנדרואיד 14, ההגבלות על שירותי רקע הוחמרו; יש צורך ב-access_log (id, lock_id, user_id, method, timestamp, result) + (lock_id, timestamp DESC) במניפסט.
יומן אירועים
כל פתיחה מתועדת ביומן: מי, באיזו שיטה, באיזו שעה. עבור נכסים להשכרה, זה חשוב מבחינה חוקית. אחסון: PostgreSQL עם טבלה GET /api/locks/{id}/access-log?page=1&per_page=50. אינדקס על android.permission.BLUETOOTH_SCAN. האפליקציה הניידת מבקשת בעמודים: GET /api/locks/{id}/access-log?page=1&per_page=50.
טעויות אינטגרציה טיפוסיות
-
BLE לא סורק — מצב רקע bluetooth-central לא מופעל ב-iOS או
android.permission.BLUETOOTH_SCANלא מבוקש באנדרואיד 12+. - PushKit לא מגיע — אישור VoIP לא חודש או נושא לא צוין ב-payload.
- WebRTC לא מתחבר — שרתי STUN/TURN לא מוגדרים או חסומים על ידי חומת אש.
- מפתח זמני לא פותח את המנעול — אי התאמה באזור זמן בין המנעול לשרת.
מה כלול בפיתוח?
אתה מקבל את המחזור המלא: ניתוח דרישות והסכמת פרוטוקול, עיצוב ארכיטקטורה עם ערוצי גיבוי, פיתוח אפליקציות מובייל (iOS/Android), אינטגרציה עם מנעולים ואינטרקום דרך API, הגדרת Push notifications (PushKit, FCM), בדיקות על מכשירים אמיתיים, הכנת תיעוד ומדריכי משתמש. כולל 3 חודשי תמיכת אחריות לאחר השחרור.
לוח זמנים ועלות
סוג מנעול אחד (BLE או Wi-Fi/ענן), שליטה בסיסית, גישה זמנית — 6–8 שבועות. ריבוי פרוטוקולים, אינטרקום עם וידאו, CallKit/VoIP, יומן, התראות — 4–6 חודשים. העלות מחושבת לאחר קביעת דגמי המנעולים ודרישות גישת האורחים. צור קשר — קבל ייעוץ ארכיטקטוני והערכה ראשונית. הזמן פיתוח סוהר — נציע פתרון תוך יומיים.
תיעוד Apple PushKit: https://developer.apple.com/documentation/pushkit







