אפליקציית ה-IoT המותאמת אישית שלנו לניהול צי רכב מספקת מעקב בזמן אמת וניתוח התנהגות נהגים. על ידי אינטגרציה עם Traccar, אנו מבטיחים עיבוד חלק של נתוני GPS. האפליקציה מציגה מיקומים חיים על מפה, מייצרת דוחות נסיעות, ועובדת במצב לא מקוון. חיסכון בדלק של עד 30% מושג באמצעות ניתוח מפורט של התנהגות נהגים. עלות פיתוח MVP טיפוסית נעה בין $15,000 ל-$30,000 בהתאם למורכבות. עבור צי של 10 כלי רכב, חיסכון שנתי בדלק יכול להגיע ל-$12,000–$24,000. קבלו ייעוץ כדי לקבל הצעת מחיר מדויקת.
מה זה טלמטיקה לרכב?
טלמטיקה היא איסוף נתונים מעצמים נעים: קואורדינטות GPS, מהירות, קילומטראז', התנהגות נהג (האצות חדות, בלימות), צריכת דלק, טמפרטורה לטנדרים מקוררים. הנתונים זורמים ממכשיר מעקב מובנה דרך GPRS/LTE לשרת; האפליקציה הניידת היא הכלי של המוקדן או מנהל הצי. הפיתוח מתחלק לשלוש שכבות: פרוטוקול מעקב, פלטפורמת שרת, ולקוח נייד.
פרוטוקולים של מכשירי GPS
מכשירי מעקב משתמשים במספר פרוטוקולים נפוצים:
| פרוטוקול | מכשירי מעקב | תעבורה |
|---|---|---|
| Teltonika codec 8/8E | Teltonika FMB920, FMC003 | TCP |
| פרוטוקול Concox | Concox GT06, JT701 | TCP |
| GT06N (Gotop) | 90% ממכשירי המעקב הסיניים הזולים | TCP |
| NMEA 0183 | רוב מודולי ה-GPS | RS-232/TCP |
| MQTT JSON | מכשירי IoT מודרניים | MQTT/TLS |
לניתוח פרוטוקולי מעקב אנו משתמשים ב-Traccar — פלטפורמת שרת בקוד פתוח התומכת ביותר מ-200 פרוטוקולים. Traccar נפרס על שרת, מקבל נתוני מעקב, ומספק REST API + WebSocket ללקוחות ניידים. השימוש ב-Traccar מהיר פי 3 ממנתח מותאם אישית מבחינת זמן אינטגרציה: אין צורך ליישם ניתוח ואחסון נתוני מסלול.
Traccar מפשט את פיתוח הטלמטיקה
Traccar מטפל בכל העבודה הקשה: ניתוח פרוטוקולים, אחסון נתוני מסלול, חישוב סטטיסטיקות יומיות, עיבוד אירועים (למשל, חריגות מהירות). התפקיד שלנו הוא רק הלקוח הנייד שמתחבר דרך WebSocket. דוגמה לאינטגרציה באנדרואיד:
// Retrofit интерфейс к Traccar API
interface TraccarApi {
@GET("devices")
suspend fun getDevices(
@Query("all") all: Boolean = false,
@Query("groupId") groupId: Long? = null,
): List<Device>
@GET("positions")
suspend fun getLatestPositions(
@Query("deviceId") deviceId: Long? = null,
): List<Position>
@GET("reports/trips")
suspend fun getTrips(
@Query("deviceId") deviceId: Long,
@Query("from") from: String, // ISO 8601
@Query("to") to: String,
): List<Trip>
}
data class Position(
val id: Long,
val deviceId: Long,
val latitude: Double,
val longitude: Double,
val speed: Double, // узлы, конвертируем в км/ч * 1.852
val course: Double,
val altitude: Double,
val accuracy: Double,
val fixTime: String,
val valid: Boolean,
val attributes: Map<String, Any>, // батарея, зажигание, пробег и т.д.
)
עדכונים בזמן אמת דרך Traccar WebSocket:
class TraccarWebSocketClient(private val baseUrl: String, private val token: String) {
private val okHttpClient = OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS) // бесконечный timeout для WS
.build()
fun connect(): Flow<TraccarEvent> = callbackFlow {
val request = Request.Builder()
.url("wss://${baseUrl}/api/socket")
.header("Cookie", "JSESSIONID=$token")
.build()
val ws = okHttpClient.newWebSocket(request, object : WebSocketListener() {
override fun onMessage(webSocket: WebSocket, text: String) {
val event = json.decodeFromString<TraccarSocketMessage>(text)
event.positions?.forEach { trySend(TraccarEvent.Position(it)) }
event.devices?.forEach { trySend(TraccarEvent.DeviceUpdate(it)) }
event.events?.forEach { trySend(TraccarEvent.Alert(it)) }
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
close(t)
}
})
awaitClose {
ws.close(1000, "Closed")
}
}
} חיבור Traccar לניטור בזמן אמת
מדריך שלב אחר שלב
- פרוס שרת Traccar על Ubuntu 22.04:
// Retrofit интерфейс к Traccar API interface TraccarApi { @GET("devices") suspend fun getDevices( @Query("all") all: Boolean = false, @Query("groupId") groupId: Long? = null, ): List<Device> @GET("positions") suspend fun getLatestPositions( @Query("deviceId") deviceId: Long? = null, ): List<Position> @GET("reports/trips") suspend fun getTrips( @Query("deviceId") deviceId: Long, @Query("from") from: String, // ISO 8601 @Query("to") to: String, ): List<Trip> } data class Position( val id: Long, val deviceId: Long, val latitude: Double, val longitude: Double, val speed: Double, // узлы, конвертируем в км/ч * 1.852 val course: Double, val altitude: Double, val accuracy: Double, val fixTime: String, val valid: Boolean, val attributes: Map<String, Any>, // батарея, зажигание, пробег и т.д. ). - הגדר פרוטוקולי מעקב: ב-
class TraccarWebSocketClient(private val baseUrl: String, private val token: String) { private val okHttpClient = OkHttpClient.Builder() .readTimeout(0, TimeUnit.MILLISECONDS) // бесконечный timeout для WS .build() fun connect(): Flow<TraccarEvent> = callbackFlow { val request = Request.Builder() .url("wss://${baseUrl}/api/socket") .header("Cookie", "JSESSIONID=$token") .build() val ws = okHttpClient.newWebSocket(request, object : WebSocketListener() { override fun onMessage(webSocket: WebSocket, text: String) { val event = json.decodeFromString<TraccarSocketMessage>(text) event.positions?.forEach { trySend(TraccarEvent.Position(it)) } event.devices?.forEach { trySend(TraccarEvent.DeviceUpdate(it)) } event.events?.forEach { trySend(TraccarEvent.Alert(it)) } } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { close(t) } }) awaitClose { ws.close(1000, "Closed") } } }ציין פורטים לכל פרוטוקול (למשל,docker run -d --restart always --name traccar -p 8082:8082 -p 5000-5150:5000-5150/udp traccar/traccar:latest). - רשום מכשירים ב-Traccar דרך ממשק האינטרנט: הוסף מכשיר לפי IMEI ופרוטוקול.
- קבל אסימון API: צור אסימון גישה בפרופיל המשתמש.
- באפליקציה הניידת, השתמש ב-Traccar WebSocket כדי לקבל מיקומים בזמן אמת – הירשם ל-
conf/traccar.xmlעם קובץ ה-cookie<entry key='teltonika.port'>5060</entry>. - הצג מיקומים על מפה באמצעות Google Maps או Mapbox. הנפש סמנים לתנועה חלקה.
מפה חיה עם סמנים
אנו משתמשים ב-Google Maps SDK באנדרואיד עם סמני רכב מותאמים אישית. כל סמן מציג את מיקום המסלול הנוכחי, והאנימציה מזיזה אותו בצורה חלקה בין נקודות – בלעדיה, הסמל קופץ על המפה.
class FleetMapFragment : Fragment() {
private lateinit var map: GoogleMap
private val vehicleMarkers = HashMap<Long, Marker>()
private fun updateVehiclePosition(position: Position) {
val latLng = LatLng(position.latitude, position.longitude)
val marker = vehicleMarkers[position.deviceId]
if (marker == null) {
val newMarker = map.addMarker(
MarkerOptions()
.position(latLng)
.icon(getBitmapDescriptor(R.drawable.ic_truck, position.course))
.title(getVehicleName(position.deviceId))
)
vehicleMarkers[position.deviceId] = newMarker!!
} else {
// Анимируем перемещение маркера
animateMarker(marker, latLng, position.course)
}
}
private fun animateMarker(marker: Marker, to: LatLng, bearing: Float) {
val animator = ValueAnimator.ofFloat(0f, 1f).apply {
duration = 1000
interpolator = LinearInterpolator()
}
val from = marker.position
animator.addUpdateListener { anim ->
val fraction = anim.animatedValue as Float
marker.position = LatLng(
from.latitude + (to.latitude - from.latitude) * fraction,
from.longitude + (to.longitude - from.longitude) * fraction,
)
marker.rotation = bearing
}
animator.start()
}
} ניתוח התנהגות נהגים: איך להפחית צריכת דלק?
האצות חדות (> 0.3g), בלימות (> 0.4g), פניות חדות – אירועים ממד התאוצה של המכשיר. הם מגיעים ב-wss://your-server/api/socket של המיקום. ציון הנהג מחושב בשרת, והאפליקציה מקבלת נתונים מצטברים יומיים/שבועיים: אחוז זמן בחריגת מהירות, מספר אירועים חדים, דירוג מתוך 100. גדרות גיאוגרפיות – אזורים על המפה, אירועים נוצרים בכניסה/יציאה. הוספת גדר גיאוגרפית מהאפליקציה הניידת: צייר מצולע על המפה, שלח קואורדינטות ל-Traccar Geofences API.
מצב לא מקוון קריטי למוקדנים
המוקדן צופה באפליקציה כל הזמן, ואם השרת לא זמין למשך 5 דקות – אי אפשר להציג מפה ריקה. אנו שומרים במטמון את המיקומים האחרונים של כל כלי הרכב ב-Room. בעת ההפעלה, הצג את המטמון ועדכן דרך WebSocket. חותמת הזמן של העדכון האחרון נראית בכותרת. זה מבטיח שהאפליקציה עובדת גם בזמן אובדן רשת זמני.
גישות לניתוח מכשירי מעקב: השוואה
| קריטריון | מנתח מותאם אישית | Traccar |
|---|---|---|
| זמן יישום | 2-3 שבועות | 1-2 ימים |
| תמיכה בפרוטוקולים | 1-5 (פיתוח ידני) | 200+ מוכנים |
| מדרגיות | מוגבלת (ניתוח חד-תהליכי) | קנה מידה אופקי, אשכולות |
| אירועים וניתוחים | דורש פיתוח נפרד | מנוע מובנה לגדרות גיאוגרפיות, דוחות |
מה כלול בעבודה
אנו מציעים פיתוח טלמטיקה במפתח מלא. הפרויקט כולל:
- ניתוח פרוטוקולי המעקב שלך (עד יומיים)
- פריסת שרת Traccar עם יתירות
- אפליקציה ניידת ל-iOS/Android (Swift/Kotlin)
- אינטגרציה עם Traccar API ו-WebSocket
- יישום מפות, דוחות, גדרות גיאוגרפיות, ניתוחים
- שמירה במטמון לא מקוון של מיקומים אחרונים
- תיעוד API ותצורה
- הדרכה ל-2-3 אנשי צוות על שימוש במערכת
- תמיכה למשך שבועיים לאחר השחרור
ציר זמן: MVP תוך 5–8 שבועות, פלטפורמה מלאה עם אינטגרציית CAN – 3–4 חודשים. העלות מחושבת באופן אישי לאחר ניתוח צי המכשירים שלך. בקש גישת הדגמה לאפליקציה – הערך את הפונקציונליות על נתונים אמיתיים מהצי שלך. נגיב תוך יום אחד. קבל ייעוץ לגבי הצי שלך.
יש לנו ניסיון רב ב-IoT וטלמטיקה, לאחר שהשלמנו למעלה מ-50 פרויקטים. המהנדסים שלנו מחזיקים בהסמכות Google ו-Apple Developer. אנו מבטיחים עמידה ב-App Store Review Guidelines (סעיף 4.2) ו-5.1, כמו גם סודיות נתונים.







