אפליקציית מעקב צי בזמן אמת וניתוח נהגים

כשהנהג כבר מזמן עזב את הנקודה, והסמן על המפה תקוע, נגרמים הפסדים של שעות ודלק. אנחנו בונים אפליקציות IoT ניידות לטלמטיקה תחבורתית, שמציגות מיקומי צי ומדדי נסיעות בזמן אמת. הצוות שלנו מספק פרויקטים סוהר, מאינטגרציית מעקב GPS ועד תמיכה לאחר ההשקה, כך שתוכלו לנהל את הפעילות שלכם בסמכות מלאה.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
אפליקציית מעקב צי בזמן אמת וניתוח נהגים
מורכב
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

אפליקציית ה-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 לניטור בזמן אמת

מדריך שלב אחר שלב
  1. פרוס שרת 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>, // батарея, зажигание, пробег и т.д. ) .
  2. הגדר פרוטוקולי מעקב: ב-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).
  3. רשום מכשירים ב-Traccar דרך ממשק האינטרנט: הוסף מכשיר לפי IMEI ופרוטוקול.
  4. קבל אסימון API: צור אסימון גישה בפרופיל המשתמש.
  5. באפליקציה הניידת, השתמש ב-Traccar WebSocket כדי לקבל מיקומים בזמן אמת – הירשם ל-conf/traccar.xml עם קובץ ה-cookie <entry key='teltonika.port'>5060</entry>.
  6. הצג מיקומים על מפה באמצעות 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, כמו גם סודיות נתונים.