בחורף ב-25°C-, אתם מנסים להניע את המנוע מהאפליקציה. הפקודה נשלחת, אבל המתנע נשאר שקט. הסיבה: בלוק הטלמטיקה לא קיבל חתימה תקפה, או שהביומטריה נכשלה. התנעה מרחוק היא לא רק כפתור—זו פקודה עם השלכות חמורות. שגיאה עלולה לפגוע במתנע, לרוקן את המצבר, או ליצור סיכון ביטחוני. הארכיטקטורה של אפליקציית התנעה מרחוק חייבת להתחשב בהשהיית ערוץ GSM (2–15 שניות), לבדוק מספר מצבי רכב, ולחתום על כל פקודה עם HMAC-SHA256. ללא זה, השרשרת 'אפליקציה → שרת → יחידת טלמטיקה → ממסר' הופכת לפגיעה.
אנחנו עובדים על פרויקטים כאלה כבר למעלה מ-5 שנים, עם למעלה מ-100 התקנות והבטחת זמינות של 99.9%. הגישה שלנו כוללת ביומטריה חובה, פקודות חתומות וביקורת מפורטת. עם השירות הזה, אתם מקבלים את הפונקציה במפתח מלא: מניתוח יחידת הטלמטיקה ועד פרסום ב-App Store וב-Google Play. צרו קשר לייעוץ על שילוב יחידת הטלמטיקה שלכם—נמצא את הפתרון האופטימלי. עלות הפיתוח הממוצעת היא $20,000, עם החזר השקעה תוך פחות מ-12 חודשים.
התנעה מרחוק: מחסנית ואבטחה
התנעה מרחוק מיושמת דרך יחידת בקרת טלמטיקה (TCU) עם ממסרים המחוברים למעגל ההתנעה של הרכב. אפשרויות תקציב כוללות Pandora, StarLine, Scher-Khan עם מודול GSM ו-API של היצרן. פתרונות מותאמים אישית לציים משתמשים ב-Teltonika FMB003/FMB125 עם יציאות DOUT ופקודות דרך MQTT או SMS.
השוואת יחידות טלמטיקה פופולריות
| דגם | סוג חיבור | API | מספר DOUT | תמיכה באפליקציות צד שלישי |
|---|---|---|---|---|
| Pandora DX-90 | GSM/GPS | REST | 2 | כן |
| StarLine S96 | GSM/GPS | REST + MQTT | 1 | כן |
| Teltonika FMB125 | GSM | TCP/MQTT | 2 | נדרש קושחה מותאמת אישית |
הבחירה תלויה בסוג הרכב ובתקציב. עבור ציים, Teltonika עדיפה—הם מאפשרים לוגיקת ממסר גמישה דרך קונפיגורטור.
Pandora/StarLine מספקות ענן APIs. לפי תיעוד ה-API של PandoraPandora API, פקודות התנעה חייבות להיות חתומות. דוגמה ב-Kotlin:
suspend fun remoteStart(carId: Long): EngineStartResult {
// 1. Проверить предусловия через API
val status = api.getVehicleStatus(carId)
check(!status.isMoving) { "Автомобиль в движении" }
check(status.doorsLocked) { "Двери не заперты" }
check(status.hoodClosed) { "Капот открыт" }
// 2. Запрос с TOTP-подтверждением (или биометрией)
val otp = totpManager.generateOtp(currentUser.secret)
// 3. Подписанная команда
val command = EngineStartCommand(
carId = carId,
userId = currentUser.id,
timestamp = Instant.now().epochSecond,
otp = otp,
duration = 15, // минут работы на холостом ходу
)
val signature = hmacSha256(command.serialize(), currentUser.commandSecret)
return api.sendCommand(command.copy(signature = signature))
} איך פועל אישור ביומטרי
לפני שליחת פקודה—אישור חובה דרך suspend fun remoteStart(carId: Long): EngineStartResult { // 1. Проверить предусловия через API val status = api.getVehicleStatus(carId) check(!status.isMoving) { "Автомобиль в движении" } check(status.doorsLocked) { "Двери не заперты" } check(status.hoodClosed) { "Капот открыт" } // 2. Запрос с TOTP-подтверждением (или биометрией) val otp = totpManager.generateOtp(currentUser.secret) // 3. Подписанная команда val command = EngineStartCommand( carId = carId, userId = currentUser.id, timestamp = Instant.now().epochSecond, otp = otp, duration = 15, // минут работы на холостом ходу ) val signature = hmacSha256(command.serialize(), currentUser.commandSecret) return api.sendCommand(command.copy(signature = signature)) } (אנדרואיד) או BiometricPrompt (iOS). לא PIN, לא סיסמה—רק ביומטריה או אישור מכשיר:
suspend fun confirmWithBiometrics(context: FragmentActivity): Boolean {
val executor = ContextCompat.getMainExecutor(context)
val prompt = BiometricPrompt(context, executor, object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
continuation.resume(true)
}
override fun onAuthenticationFailed() {
continuation.resume(false)
}
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
continuation.resumeWithException(BiometricException(errString.toString()))
}
})
val info = BiometricPrompt.PromptInfo.Builder()
.setTitle("Подтвердите запуск двигателя")
.setSubtitle("Toyota Camry · ${car.plateNumber}")
.setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.DEVICE_CREDENTIAL)
.build()
return suspendCoroutine {
continuation = it.also { prompt.authenticate(info) }
}
}ב-iOS, האנלוג הוא LocalAuthentication (LocalAuthentication).
הגדרת ביומטריה שלב אחר שלב להתנעה
- ב-
suspend fun confirmWithBiometrics(context: FragmentActivity): Boolean { val executor = ContextCompat.getMainExecutor(context) val prompt = BiometricPrompt(context, executor, object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { continuation.resume(true) } override fun onAuthenticationFailed() { continuation.resume(false) } override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { continuation.resumeWithException(BiometricException(errString.toString())) } }) val info = BiometricPrompt.PromptInfo.Builder() .setTitle("Подтвердите запуск двигателя") .setSubtitle("Toyota Camry · ${car.plateNumber}") .setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.DEVICE_CREDENTIAL) .build() return suspendCoroutine { continuation = it.also { prompt.authenticate(info) } } }(אוLAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics)), אתחלוonCreate/viewDidLoad. - בלחיצה על כפתור "התנעה", קראו לאימות.
- בהצלחה—בנו פקודה חתומה ושלחו אותה לשרת.
- בכישלון—הציגו הודעה וחסמו את הכפתור למשך 30 שניות.
איך אנחנו מבטיחים אבטחת פקודות
כל פקודת התנעה עוברת 6 בדיקות: הרכב לא חייב להיות בתנועה, דלתות נעולות, מכסה מנוע סגור, לפחות 30 שניות מאז הניסיון האחרון, המשתמש לא שינה סיסמה ב-24 השעות האחרונות, והפקודה חתומה ב-HMAC-SHA256 עם סוד מכשיר ייחודי. יומן הביקורת נשמר למשך 90 יום—מאפשר לחקור כל תקרית. אנחנו מבטיחים שבלי ביומטריה וחתימה, הפקודה לא תגיע לשרת. עלות יישום מערכת כזו היא חלק מהתקציב הכולל, אבל החיסכון באבטחה ברור: אימות ביומטרי מהיר פי 5 מקוד SMS ומספק הגנה טובה פי 100 מפני התקפות כוח גס.
השוואת שיטות אימות
| שיטה | רמת אבטחה | זמן ביצוע | הגנה מפני כוח גס |
|---|---|---|---|
| ביומטריה (Face ID) | גבוהה | שנייה אחת | כן (השהיה לפני איפוס) |
| קוד PIN | בינונית | 3-5 שניות | ניסיונות מוגבלים |
| קוד SMS | נמוכה | 10-30 שניות | לא (תלוי ב-GSM) |
שגיאות נפוצות ופתרונות
- פסק זמן של 60 שניות: אם המנוע לא התניע, כבו את ממסר המתנע ונסו שוב לא לפני 30 שניות.
- ביומטריה לא זמינה: השתמשו באישור מכשיר (PIN/סיסמה) כגיבוי—עדיין בטוח יותר מכלום.
- שליחת פקודה כפולה: השרת דוחה כפילויות דרך nonce. הלקוח חוסם את הכפתור עד לקבלת סטטוס.
סטטוס ביצוע פקודה ופסק זמן
הפקודה נשלחה—המנוע לא מתניע מיד. פקודת GSM לוקחת 2-15 שניות למסירה, ההתנעה לוקחת עוד 3-5 שניות. בממשק המשתמש—מחוון התקדמות עם שלבים:
enum EngineStartStage {
sending, // команда уходит на сервер
delivered, // сервер подтвердил доставку на ТБУ
cranking, // ТБУ подал сигнал стартеру
running, // двигатель запустился (ignition = on, rpm > 400)
failed, // не запустился за отведённое время
}עדכוני סטטוס דרך WebSocket או בדיקת סטטוס מכשיר. פסק זמן של 60 שניות—אם המנוע לא התניע, הציגו שגיאה וכבו את ממסר המתנע (עצירה בטוחה).
אילו סיכונים אנחנו מבטלים
שליחת פקודות חוזרות נחסמת ברמת השרת (nonce). התנעה בזמן תנועה בלתי אפשרית: מהירות GPS נבדקת מראש. מכשיר לא מורשה לא יקבל את החתימה—הסוד מקושר לסמארטפון הספציפי. כל המנגנונים האלה יחד מפחיתים את הסתברות השגיאה לשוליים סטטיסטיים. החיסכון בזמן השבתת רכב מחזיר את ההשקעה תוך שנה. בנוסף, פונקציית ההתנעה מרחוק מפחיתה את צריכת המצבר ב-30% בהשוואה למחממי בלוק מסורתיים.
מה כלול בפיתוח פונקציית התנעה מרחוק
- ניתוח API של יחידת הטלמטיקה (פקודות זמינות, סטטוסים, תיעוד).
- עיצוב אבטחה (אימות, חתימת פקודות, ביקורת).
- יישום אפליקציה לנייד (iOS/Android) עם ביומטריה וסטטוס.
- שילוב צד שרת (REST/WebSocket, תור פקודות).
- בדיקות על רכב אמיתי (עד 100 התנעות בדיקה).
- תיעוד תפעול ותמיכה.
לוחות זמנים ועלות
הפיתוח אורך 5-8 שבועות כחלק מאפליקציה ניידת מקיפה. העלות מחושבת באופן אישי—תלויה במורכבות ה-TCU ובדרישות האבטחה. קבלו ייעוץ—נעריך את הפרויקט שלכם במפתח מלא.
צרו קשר לייעוץ על הפרויקט שלכם. הזמינו עיצוב התנעה מרחוק—פונקציה אחראית הדורשת הבנה עמוקה של טלמטיקה ואבטחה ניידת. הפקידו את היישום בידי צוות עם למעלה מ-100 התקנות ו-5+ שנות ניסיון. הצוות שלנו של 10+ מהנדסים השלים 200+ שילובים מוצלחים.
פיתוח האפליקציה הניידת שלנו להתנעת מנוע מרחוק משלב יחידות טלמטיקה ואימות ביומטרי כדי לאבטח פקודות התנעה. אנחנו גם מספקים ביקורת פקודות חזקה ושילוב API עבור iOS ו-Android.







