Maintenance systems make modern aircraft fault-tolerant. They provide a remote diagnosis of existing faults and capabilities. But why aren’t vehicles  packed with such descriptive analytics maintenance? That is exactly what we wondered right before coming up with the idea of Car Maintenance. Our first motive to experiment with Car Maintenance application was safety considerations for our vehicles, and the second - exercising our skills in the Internet of Things (IoT) software development.


The essence of Car Maintenance is instant data collecting, data analysis and data gathering about the current condition of the vehicle to prevent it from breaking down. Descriptive analytics enable us to create a summary of historical data related to a vehicle's condition. The collected data could be used further for sharing with a mechanic. The analytical approach helps a repair master make smarter decisions, solve problems and improve outcomes.

We track speed, location, engine rotation, the temperature of the important components of the car and dozens of other parameters that are supported by the vehicle. We collect data on a server, and it is also sent to a web application where you can review both the current condition of the connected car and the historical data.


It took a month to develop the project’s general architecture, web application and mobile app. The development team consisted of three developers Oleksiy Boyko, Oleg Bai and Pavlo Livchak. The CTO of ElifTech, Mykola Kozak, managed the development process.

Pavlo has played a key role in designing database architecture. During the process, the main task was to connect a mobile phone with Bluetooth to ELM-327 adapter scanner. We searched for plugins for the Bluetooth connector, and chose a cordova-bluetooth-serial that satisfied our needs for collecting data.


Oleg developed a mobile application that collects data from the ELM-327 car diagnostic interface tool and displays the current sensor data. The ELM-327 is directly connected to the OBD II port of the car, which monitors useful data including emissions, mileage and speed. The OBD-II is connected to the Check Engine Light, which illuminates when the system detects a problem. Oleksiy developed the site and configured the interaction between the server and the database.  

Tech Stack

Devices: ELM 327, Bluetooth compatible smartphones.

App development: Ionic-native 4, ionic-angular 3.7, cordova-plugins.

Frontend: React.js,, React Materialize, axios, google-maps-react.

Backend: Node.js (Express, Sequelize, Socket.IO).

Database: PostgreSQL.

Web Application

First, we wrote the endpoints based on a JWT token to use for user registration and user login. We included a user ID so we could always know if the user has access to the requested data. For interaction with relational databases, we chose PostgreSQL. The backend interacts with PostgreSQL via Sequelize (a promise-based ORM for Node.js).

The typical endpoint request in the database looks as follows:

      router.get('/cars/:car_id/data', usr.verify, (req, res) => {
        let limit = req.query.limit || 10;
        let page = || 1;
        let search = || '';
        let car_id = req.params.car_id;
                attributes: ['id', 'car_id', 'data_desc', 'data_value', 'time'],
                where: {
                    car_id: car_id,
                    data_desc: {
                        [Op.iLike]: `${search}%`
                raw: true,
                limit: limit,
                offset: limit * (page - 1),
                order: [['time', 'DESC']]
            .then(data => res.json({ data: data.rows, maxPages: Math.ceil(data.count / limit) }))
            .catch(err => res.json({ success: false, message: err.message }));

Among the trivial tasks during web development were adding the connected vehicles and distributing access to other users. The complexity of the development was related to the page with the map using WebSockets. The actual data about the connected vehicle, including geolocation, is shown on the page with a 1-second delay.


The Biggest Challenge

The ELM-327 device uses OBD-II protocol to read the data. Depending on the vehicle model year, there are fifteen signaling protocols with the standard and unique range of data that can be collected and permitted with the OBD-II. Moreover, there could be two engine control units (ECUs) embedded in a car, which makes our task even harder. First, we have to determine how many central computers are in the car. For example, in a 2016 model test car there are two ECUs: one is responsible for the engine and another one for the gearbox. Data for our purposes are in an ECU engine.

Mobile application

With a mobile app, we enable a user to select a connected car and then choose which data to browse on the phone and which to send to the server. Data stores automatically on the device in case of a lack of an internet connection, and it is sent to the server synchronically with an enabled internet connection. The car’s speed and the engine’s RPMs can be graphically displayed in an online mode in the app.


The Car Maintenance Android app’s listed features:

  • receives geolocation data and sends it to the server;
  • ability to add and remove permissions for other system users to view the car’s data;
  • users can choose which properties show on the mobile UI and which are sent to Cloud storage;
  • save selected properties for reading data;
  • read selected properties from vehicle;
  • show selected properties in mobile UI;
  • ability to send data to Cloud storage.

As we mentioned before, we used the ELM-327 car diagnostic interface tool. Here how it works with the application:

  • find all available Bluetooth devices;
  • choose one named ELM-327 or OBD-II;
  • select on which protocol to communicate;
  • scan the list of all available car properties;
  • choose what you want to be read;
  • start scanning;
  • data transforms into a readable form
  • data displays in the app’s UI and adds the information to the database.

The Car Maintenance project was initiated by the ElifTech team to help developers grow their junior IoT skills in a more creative way than a daily routine. During the project development, the programmers were supported by their experienced colleagues and practiced RESTful API designing, worked with relational databases and deepened their knowledge of React.js and Node.js. Also, they got their first experience with Android Studio, Ionic and TypeScript.

Moreover, connected cars are an ambitious direction in IoT development. According to IHS Automotive forecasts, there will be 152 million actively connected cars on global roads by 2020. The combination of new car features and aftermarket devices could mean nearly 2 billion connected cars on the world’s roadways by 2025. In addition to cars, kitchen appliances, homes and even heart monitors can be connected to the Internet of Things. The IoT is expected to solve automotive, energy, industrial and healthcare industry-specific challenges with emerging applications and change the way governments, businesses and consumers interact with the physical world.

We are excited to be pioneers in using the IoT approach in the auto industry. Stay tuned for our updates on implementing Car Maintenance in a car service for testing the idea of the remote diagnosis.