ase2024-docs

ASE2024 Project Description

Overview

In teams of 4 students, you will develop a RESTful API to consult environmental data captured by multi-sensor Internet of Things devices. Moreover, you will build upon your API to create a complete Internet of Things (IoT) scenario. Examples of such scenarios from recent projects include activity tracker (fitness coach), monitoring and control of wash machines or fridges, parcel tracking, terrarium monitoring, predictive analysis for clothing, and voice assistant. This scenario should integrate some sort of dataflow programming (i.e., workflow engine, business rules…) as well as a mobile, web, or desktop client. The application should also use and consume data from other services (service mashup).

Thingy:91

The project is based on the Thingy:91 cellular IoT device from Nordic Semiconductor. According to Nordic; “The Nordic Thingy:91 is an easy-to-use battery-operated prototyping platform for cellular IoT using LTE-M, NB-IoT, and GPS. It is ideal for creating Proof-of-Concept (PoC), demos, and initial prototypes in your cIoT development phase.” The device can probe temperature, humidity, air pressure, air quality (IAQ and CO2 equivalent), color, and light intensity. It has a GPS for positioning, an accelerometer, a push button, an RGB LED, and a buzzer. We will provide some Thingy:91 devices to each group.

Thingy:91 Thingy:91

The Thingy:91 directly connects to the Internet using LTE-M. It sends and receives data using the MQTT protocol. The device publishes its sensor data (temperature…) at a regular interval (i.e., 30s by default). When there is an event (e.g., the button is pressed), the device publishes a notification. The device also subscribes to a specific topic(s) for interaction with actuators (i.e., LED and buzzer).

You can explore published sensor data by subscribing to things/+/shadow/update.

MQTT messages

MQTT messages are subscribed from/published to the MQTT broker with the following scheme:

appId messageType topic
GPS DATA things/{device_uuid}/shadow/update
FLIP DATA things/{device_uuid}/shadow/update
BUTTON DATA things/{device_uuid}/shadow/update
TEMP DATA things/{device_uuid}/shadow/update
HUMID DATA things/{device_uuid}/shadow/update
AIR_PRESS DATA things/{device_uuid}/shadow/update
AIR_QUAL DATA things/{device_uuid}/shadow/update
CO2_EQUIV DATA things/{device_uuid}/shadow/update
LIGHT DATA things/{device_uuid}/shadow/update
LED CFG_SET things/{device_uuid}/shadow/update/accepted
BUZZER CFG_SET things/{device_uuid}/shadow/update/accepted

Here are examples pub/sub using Mosquitto client:

Architecture

Your application should have a similar architecture: architecture

Thingy API

You should create a RESTful API (thingy-api) using Koa.js or Python async framework aiohttp.

The thingy-api should (at a bare minimum) provide the following features:

Thingy Client (thingy-client)

You should also create a web, mobile, or desktop client (thingy-client) consuming the resources of thingy-api. You can use any programming language/technology you want as long as you are able to demonstrate your prototype at the end of the sprints and during the final presentation. Also, make sure that each of your team members has a compatible device if you make a mobile application.

The thingy-client should (at a bare minimum) provide the following features:

There are many possible features that fit your scenario and creativity.

Evaluation criteria and deliverables

You will mostly be evaluated on the following criteria:

Of course, your contribution to the group will also be an important aspect of our evaluation. Note that we allow ourselves to check your Github repository and scrum planning document on a regular basis to ensure the respect of good practices (regular work, updating the planning document, etc.).

Timeline

Date Task
03.10.2024 Group Formation
06.10.2024 Deadline for submission: Todo backend with database persistence
10.10.2024 Project plan presentation
24.10.2024 thingy-api v1 on GitHub (end of sprint #1)
31.10.2024 thingy-client v1 demo (during the course)
27.11.2023 thingy-api v2 on GitHub (end of sprint #2)
28.11.2024 thingy-client v2 + workflow v1 demo (during the course)
18.12.2024 thingy-api v3 (final) on GitHub and deployed on server (end of sprint #3)
19.12.2024 Final presentation