/flurry-server

Collecting drivers driving data for self and academic use

Primary LanguageJavaScript

Flurry

Collecting drivers driving data for self and academic use


Flurry project helps you to collect data from experimenters using Android application and OBD-II device

















Server

Client

Server

Django Rest Framework API- easy to understand and use.

You are welcome to use our server: https://flurry.herokuapp.com/api/v1/flurry/ or manage your own:

  • Clone Flurry project
  • Create PostgreSQL database
  • Edit flurry.settings
  • Set environment variables: SECRET_KEY, DEBUG, DATABASE_URL, HERE_API_APP_ID and HERE_API_APP_CODE
  • Run: python manage.py makemigrations and then python manage.py migrate

DATABASE_URL connection string: postgres://username:password@host/DB

HERE_API_APP tokens are used in order to detect what is the maximum limitation of speed in a current location. you can get them from https://developer.here.com/

Querying the server

If you're familiar with Django Rest Framework then it will be very easy for you to understand the api.

  • List of drivers:
$ curl https://flurry.herokuapp.com/api/v1/flurry/drivers/
>> [
    {
      "id": 1,
      "user": {"id": 24, "username": "test"},
      "name": "Test Driver",
      "creation_date": "2016-07-13", 
      "driving_data": "https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/"
    },
    ...
]

"driving_data": url of the driver driving data.

  • Specific driver:
$ curl https://flurry.herokuapp.com/api/v1/flurry/drivers/{driver_id}/
>> {
      "id": {driver_id},
      "user": {"id": 24, "username": "test"},
      "name": "Test Driver",
      "creation_date": "2016-07-13", 
      "driving_data": "https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/"
    },
  • Driver driving data: list of lists where each list is a ride data. ride data is a list of jsons where each json is the driving data for specific time given that "Test Driver" driving data id id 3:
$ curl https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/
>> {
    "id": 3,
    "data": [
        [  // begin ride number 1
            {
                "throttle": "25.490196",
                "rpm": "839",
                "maximum_limition_of_speed": 30.0,
                "time": "1463043516031",
                "speed": "0",
                "gps": {
                    "lat": "31.87628096",
                    "lon": "34.9199814"
                }
            },
            {
                "throttle": "25.490196",
                "rpm": "858",
                "maximum_limition_of_speed": 30.0,
                "time": "1463043517152",
                "speed": "9",
                "gps": {
                    "lat": "31.87628096",
                    "lon": "34.9199814"
                }
            },
            {
                "throttle": "20.392157",
                "rpm": "2566",
                "maximum_limition_of_speed": 50.0,
                "time": "1463043543250",
                "speed": "22",
                "gps": {
                    "lat": "31.87641365",
                    "lon": "34.92051463"
                }
            },
            {
                "throttle": "94.90196",
                "rpm": "1545",
                "maximum_limition_of_speed": 50.0,
                "time": "1463043549281",
                "speed": "16",
                "gps": {
                    "lat": "31.8763137",
                    "lon": "34.9208201"
                }
            },
        ], // end ride number 1
        [ // begin ride number 2
        ...
        ], // end ride number 2
        ....
    ]
}
  • Specific ride: get the specific ride of driver by passing the parameter "ride" ride parameter starts from 0 (the first ride) and also supports negative index: ride=-1 => last ride
$ curl https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/?ride=2
>> [
     {
        "load": "56.47059",
        "throttle": "20.784313",
        "rpm": "1274",
        "maximum_limition_of_speed": 50.0,
        "time": 1468406223678,
        "speed": "10",
        "gps": {
            "lat": "31.89901517",
            "lon": "35.00820239"
        }
    },
    {
        "load": "54.901962",
        "throttle": "20.392157",
        "rpm": "919",
        "maximum_limition_of_speed": 50.0,
        "time": 1468406224989,
        "speed": "10",
        "gps": {
            "lat": "31.89901517",
            "lon": "35.00820239"
        }
    },
    {
        "load": "34.901962",
        "throttle": "17.647058",
        "rpm": "862",
        "maximum_limition_of_speed": 50.0,
        "time": 1468406226479,
        "speed": "6",
        "gps": {
            "lat": "31.89901517",
            "lon": "35.00820239"
        }
    },
    ...
]
  • specific data unit of specific ride: get the specific data unit by passing the parameter "data_unit".
    data_unit parameter starts from 0 (the first data unit of the given ride) and also supports negative index: ride=-1 => last data unit
$ curl https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/?ride=2&data_unit=-1
>> {
        "load": "26.666666",
        "throttle": "17.647058",
        "rpm": "854",
        "maximum_limition_of_speed": 50.0,
        "time": 1468407153683,
        "speed": "0",
        "gps": {
            "lat": "31.89163008",
            "lon": "34.92453954"
        }
}
  • get details about specific driver driving data:
$ curl https://flurry.herokuapp.com/api/v1/flurry/data-drivers/3/len/
>> {
    "number of rides": 55,
    "number of data units": 50357
}

###Apache License v2