Inspiration
Can we improve the drivers' awareness of his environment and habits with IoT and a Smartphone App?
What it does
The main application is native Android App for the driver that gives an overview of the driving environment when it is opened. It detects when the car is driving and shows the driver our ride screen. In the ride screen, the average speed and driving skill of his environment is shown by default. The core of the ride experience is a warning system based on his driving skill and knowledge of the environment. Finally, the driver can use the App to show his driving performance with improvement suggestions. Besides giving driving advice, also a gamification based on experience points is inside the drivers' profile screen.
How we built it
We built the Android App with Android Studio with the newest Android 25 SDK. We tried to follow the material design standard to give a pleasant user interface. To increase our speed we heavily relied on mocking the information shown in the user interface. After implementing the basics of the mockup we discussed with our partner BMW the team split into backend and frontend developers.
The frontend developers worked on integrating the BMW Android SDK into our project, as well as further improvements to the GUI. The backend setup is based on the given "mqttexample" from BMW that is written with protocol buffer and JavaScript ES6. The given code was used to generate a mqtt-client that stores the proto buffer messages into a MongoDB instance. The BMW Android SDK is required to later link the vehicle to the users phone identifiers. The REST-API was integrated with the frontend as soon as an endpoint was finished. To ensure that frontend and backend feature work remained in sync. The focus of the development was on GUI and the generation of the idea.
The REST-API that the Android App consumes was built with JavaScript and Express as sufficient developer knowledge was present in the team and the original example was already written in JavaScript. As the core foucs of the idea is generating a driver behaviour profile the vehicle driving data is crucial. This means we listen to the mqtt-broker for the change events structure for vehicle data and record it to MongoDB with the client.js running as a server. The Express server then calculates the necessary information for the App and exposes it as an REST-API.
To have easy and consistent code deploys we use Docker. The node code of the backend is inside a single Docker container and the node command is exchanged to have a client instance or a server instance. As our host, we used the AWS EC2 Container Service to deploy the Docker composition to Cloud infrastructure.
Challenges I ran into
We ran into the following challenges:
- It took a lot of time to build a team and generate a good mock version of our idea.
- The mqtt-broker does not send all the data we require to calculate the driving behaviour to a sofisticated degree.
- The original plan was to stream the mqtt-data via RethinkDB, but insufficient time and experience with RethinkDB led to the usage of MongoDB instead of RethinkDB.
Accomplishments that I'm proud of
We spent enough time on fleshing out the idea and build a mock for each team member then one for the entire idea with our best ideas in the end. We managed to push a well-designed prototype with Android studio as a team. We managed to work with the car and get mqtt working.
What I learned
The following lessions were learned:
- Application of data collection technology for solving real world challenges
- Integrating different technologies together, MQTT, Android, Node.js, mongodb, Amazon AWS, docker
- Great teamwork and new friends
Built With
- android
- android-studio
- babel
- es6
- express.js
- java
- javascript
- node.js
- protocol-buffer
Log in or sign up for Devpost to join the conversation.