The lab exercise in the form of a two-day hackathon, in the course of the lecture Internet of Things, was to use a scale to measure the current coffee level at our institute's coffee pot. The challange was, based on this starting position, to build an IoT solution collecting this data from the scale, processing and providing it in an appropriate form to the end users.
After a brainstorming, the team agreed to the following requirements in order to provide a minimal viable product:
- Implement a sensor (
Python) reading the measurements from the scale
- Sensor script has to publish those measurements (one measurement per second) in bulks to IBM's Watson IoT Platform
- The sensor's time-series data has to be persisted in a NoSQL database
- A backend function has to check thresholds to trigger additional actions
- Must: Tweet about the current status of the coffee can
- Optional: Learn thresholds automatically based on historical data
- Implement a RESTful interface to request the current state of the coffee can
- Having a simple but mobile friendly web application utilizing the RESTful interface to visualize the state
The GRAM RZ-30 scale is connected to a Raspberry Pi. Those two parts build our sensor. On the Raspberry Pi, a Python script receives the measurements from the scale and pushes them to IBM Bluemix.
The Device API is implemented as
Node-RED Cloud Foundry application and receives the data from our sensor. The data will be persisted into a NoSQL data store. Additionally, the application checks a certain threshold and if this threshold is violated it will tweet in order to inform the end users about its current status.
The Kaffee API is also implemented as
Node-RED Cloud Foundry application and is responsible to serve the latest state of the coffee can in a RESTful manner.
Using Cloud Foundry's
staticfile buildpack, we are going to serve the end-user's web application. The end-users will access the application simply thru their web browser (optimized for mobile devices).
Contributors (and Responsibilities)
- Daniel Joos (Python Sensor, Raspberry Pi integration)
- Eduard Yarolyan (Kaffee API, NoSQL Database Layer)
- Manuel Breithaupt (Device API, Twitter Integration)
- Michael Wurster (Raspberry Pi integration, Web Application)
- Arbnora Selimi (Documentation, Web Application)
- Emrullah Apaydin (Documentation, IBM Bluemix Setup, supported other team members)