How it works? Learn more about the API

telematics sdk location drive analytics

Features in TL KIT



Using patented AI connectivity and analytics, we enable you to wirelessly stream vehicle telematics data without the hassle of physical connectors. The smartphone provides a low cost, widely available platform to collect, evaluate and optimize driving behaviors that is on par with dedicated hardware solutions.

Drive Detection & Recording

Detect starts, stops and record all your routes

Fleet Management Solution

Get going with your own branded mobile workforce solution

Activity Recognition

Distinguish between stationary, pedestrian and driving activities

Always-on Location

Receive position updates 24/7 with minimal battery usage

Runs in the background

Keep working hands-free, no user interaction required

Driving Behavior Scoring & Analytics

Easily transform telematics data into driver scoring and analytics

Minimal battery impact

High-end features delivered over a low-power footprint

Data stream enablement SDKs

Allow your app to seamlessly collect and provision telematics data

Mobile Platform Consistency

Ensure features are consistent between Android & iOS

Crash Detection

When accidents happen, know the when, where and how

context kit SDK location awareness
Products
Telematics SDK for rich driver behavior analytics

Context Kit Telematics SDK supports apps to automatically detect the start of a drive, and accurately monitors the driving behavior from any smart phone. Our patented telematics and sensor fusion technology allows reliable drive-data collection with minimal battery impact. The rich telematics data will be pre-computed on the device and uploaded into our backend, allowing for data analytics and comprehensive driver-risk scoring.

Data points gathered include:

  • Start: date, time, place
  • Braking
  • Acceleration
  • Turning
  • End: date, time, place
  • Direction: North, East, South, West
  • Route
Driver Behavior Analytics App

Features:


Automatic Drive Detection SDK

Features:

Do you have an app that would benefit from accurately detecting that your users are driving, what time of day and to where?

Extracting this location and time data from from different devices using different platforms is difficult, costly and typically consumes a lot of battery power.

Tourmaline Labs has created a product called ContextKit DriMa (Driving Matters), providing a sophisticated and elegant solution.

ContextKit DriMa provides SDK APIs to receive location and drive information:
  • after the start of a ride (backdated to the startpoint of the ride)
  • after the end of a ride (backdated to the start­ and endpoint of the ride)
  • with route information, including date and time travelled


Drive Detection App
Always on Location SDK

Features:

You think location matters? We think so too! Apps often rely on location information to the benefit of the user experience. However, retrieving location data comes at a price - typically it comes with heavy battery consumption. Regardless of the brand and model of the device, minimizing location sampling while providing accurate positioning is difficult, time-consuming, and costly to develop.

Tourmaline Labs created a product called ContextKit LoMa (ContextKit Location Matters) providing a solution at a fraction of the cost.

ContextKit LoMa provides SDK APIs to receive location information
  • upon request
  • at specified time intervals
  • once a predefined distance has been travelled
  • once a predefined time interval has passed with no movement

Why us and not native location API?

Our SDK is always on, and consumes a fraction of the battery power compared to other products. Power consumption is minimized by using our patent pending sensor calibration. Benefit from our analysis tool and get insights into your user data.


Always On Location SDK
Activity Recognition SDK

Features:

Automatically recognize and record any driving, walking and periods of no movement done by your users. This ultra low power consumption tool is ready to be integrated in your app. View start and end times; place, duration and route for each activity. The SDK is always on, so there’s no need to start and stop it. End users of your app will benefit from enhanced activity recognition and location data features.

Data points gathered include:
  • Start: date, time, and place
  • End: date, time, and place
  • Route taken

How it works:

Our patent pending technology detects activities within moments of beginning. Setting the smartphone in motion triggers the accelerometer sensors built in the device and the SDK starts recording the activity right away. When the activity ends, the SDK falls back to hibernation waiting to be reawoken. Activity-detection information and location sampling will enable functions and services within your own app.

Why our SDK?

Our SDK is always on, provides accurate, reliable data, and consumes 80% less battery power compared to other products. You can benefit from our analysis tool and get insights into your user data.

Use case: Fleet management

The ContextKit SDK is the perfect hardware-free, easy-to-integrate solution for fleet management. The ready to use SDK can be integrated in any iPhone or Android app and is ready to operate. Driving activities are automatically recognized and accurate data is uploaded to the backend. This phone based solution helps maximize your vehicle efficiency. Safer, more efficient driving means less miles, less fuel and less downtime. Know where your workers are located for effective work order management. Boost ROI with better utilization, improved security and maintenance.



Technology Approach

Artificial Intelligence and Sensor Fusion

  • Which sensor should we use to learn what?
  • How noisy is the data, are the sensors calibrated?
  • Which sensor chipset is used, how is it different?
  • Which sensor to use, when and for how long?
  • How much power is consumed by each sensor?
  • How to detect vehicle vs. phone motion?
telematics platform model

Performance: Phone vs. OBDII Dongle

We compared mobile phone telematics data (from our SDK) with OBDII dongle data.

Test setup

  • Phones: 13 different Android smartphones & iPhones 5 and 6
  • App / SDK: Betterways App (available on Goggle-play and Itunes)
  • Dongle: OBDII
  • Vehicles: 9 different vehicles (Ford F150, Sprinter Van, Volvo S40, Range Rover HSE etc).
  • Phone positions: cup holder, center concoul, passenger seat, glove box, pockets etc (normal user behavior simulation)
  • Miles: 6,000 miles with 5 drivers in cities & highways
phone data vs OBDII

Test results

Accuracy Threshold < 0.06g < 0.1g
Phone vs. Hardware 95.3% 98.0%
Phone vs. Phone 98.6% 99.1%
phone data vs OBDII test results

API

SDK Integration

The SDK along with the API key will be provided. It is packaged in a zip file which contains documentation, examples and libraries for Android and iOS.

Here is an example of its contents.

Betterways-4.0.16060801.zip

  • README.md
  • android
    • BWExample
    • Betterways-4.0.16060801.aar
    • docs
  • ios
    • BWExample
    • TLBetterways.framework
    • docs
android ios location aware skd integration

See below the platform specific steps for integrating the SDK.


SDK Integration Android

Step 1: Add the library

Copy Betterways-4.0.16060801.aar into the libs directory, creating that directory if necessary.
Add a dependency to this aar in the build.gradle for the project.

repositories {
	flatDir {dirs 'libs'}
} 
...
dependencies {
	compile(name: 'Betterways-4.0.16060801', ext: 'aar')
}

Step 2: Start the engine

Start the engine with the required api key, username and password. The SDK will only trigger events and collect data if and only if it is started.

Betterways.Start( getApplicationContext(), "apiKey", "userName", "password", 
		new StartListener() {
	@Override
	public void OnSuccess() { Log.d( "BW", "Started successfully"); }
					
	@Override 
	public void OnFail( int code, String msg ) { Log.w( "BW", "Failed" + msg);}
});

Step 3: Start location and drive monitoring

Betterways.LocationManager().RegisterLocationListener ( new LocationListener() {
	@Override
	public void OnLocationUpdated( Location 1 ) { Log.d( "BW", "Loc: " + 1 ); }
		
	@Override
	public void RegisterSucceeded() { Log.d( "BW", "Registered" );}
		
	@Override
	public void RegisterFailed( int code ) { Log.d( "BW", "Reg failed "+ code);}
} );
				
Betterways.DriveManager() .RegisterDriveListener( new ActivityListener() {
	@Override
	public void OnEvent( AcitivityEvent d ) { Log.d( "BW", "Drive" + d ); }
					
	@Override
	public void RegisterSucceeded() { Log.d( "BW", "Registered" );}
					
	@Override
	public void RegisterFailed( int code ) { Log.d( "BW", "Reg failed "+ code);}
} );

SDK Integration iOS

Step 1: Add the library & build settings

Follow Apple's instructions for adding an existing framework to add 'TLBetterways.framework' to the project.
The .xcodeproj file needs to be updated for each target using the SDK as follows:

General Linked Frameworks and Libraries
Add the following dependencies:

CoreMotion	SystemConfiguration
CoreLocation Security
libz.tbd

Build Settings Other Linker Flags
Make sure the following flags are set

-lm -all_load -ObjC

Capabilities  Background Modes
Check the following items:
Location Updates
Remote Notifications

Step 2: Start the engine

[ TLBetterways startWithUser:"user"
			andPass:"pass"
	withResultToQueue:dispatch_get_main_queue()
		withHandler:^(BOOL success, NSError *err) {
			if( success ) { NSLog(@"Success"); }
			else { NSLog(@"Fail %@", err ); }
		}];

Step 3: Start location and drive monitoring

BWLocationManager* bwLocMgr = [BWLocationManager new];
 [bwLocMgr startUpdatingLocationsToQueue:dispatch_get_main_queue()
		withHandler:^(CKLocation *loc) {
			NSLog(@"Location %@", loc );
		}
		completion:^(BOOL success, NSError *err) {
			if( success) {
				NSLog(@"Registered for locations");
			} else {
				NSLog(@"Reg failed %@", err);
			}
		}];

Step 4: Start drive monitoring

BWActivityManager* bwActMgr = [BWActivityManager new];
 [bwActMgr startDriveMonitoringToQueue:dispatch_get_main_queue()
		withHandler:^(CKActivityEvent *evt, NSError *err) {
			NSLog(@"Drive: %@", evt );
		}
		completion:^(BOOL success, NSError *err) {
			if( success) {
				NSLog(@"Registered for drives");
			} else {
				NSLog(@"Reg failed %@", err);
			}
		}];