<h1 align="center">
  <br>
  Software Engineering Project - Team Raclette
  <br>
</h1>
This monorepo hosts all parts of the project for the Software Engineering course.


# Table of contents

<p align="center">
<a href="#project-flow">Project flow</a> •
<a href="#architecture">Architecture</a> •
<a href="#Authors">Authors</a> • 
<a href="#licence">Licence</a>
</p>

# Project flow
[(Back to top)](#table-of-contents)

For our project, we choose a flow near to a Trunk-based flow.
The Main idea was to keep shot-branch directly merged to the main branch.

We diverge from the Trunk-based flow in the sense that we don't have a release branch. Release would be directly a 
tag in the main as we decide to have only atomic commits in the main branch. We don't create a new release on each 
merge,
but all merges are releasable. 

We also have an additional constraint. We need a semi-linear history on the main branch. This means that we don't 
have several branches in parallel in the history.
We need to rebase our own branch before merging it to the main branch.
The purpose of this constraint is to have a clean history and to be able to use the `git bisect` command to find 
bugs easily.



# Architecture
[(Back to top)](#table-of-contents)

![2-Container-Server.svg](docs/2-Container-Server.svg)

As required by the course, we have dockerized all parts of the project.
But we deploy all our components on a real server (*.mse.kb28.ch). This server auto-fetches new docker image with the 
watchtower service to auto-deploy new versions of the components.

In addition to using our own server, we also push all the time data with other connected sensors.
So, as we have a lot of data, we don't display the 100 last measurements as requested, but the last 24h of 
measurements (This design choice was validated by Mr. S. Fringeli).

## Web application
[(Back to top)](#table-of-contents)

The web application is deployed on the server at the following URL: [app.mse.kb28.ch](https://app.mse.kb28.ch). <br>
The most interesting measurement is under Rémi -> Terrasse -> Shed.

More details in [web-app/README.md](web-app/README.md).


## Gateway MQTT / Rest API / influxDB
[(Back to top)](#table-of-contents)

The MQTT part is accessible via the following URL: `mqtt.mse.kb28.ch` on the port `1883`.

The Rest API is accessible via the following URL: [rest.mse.kb28.ch](https://rest.mse.kb28.ch/) with swagger 
documentation on the following URL: [rest.mse.kb28.ch/swagger/index.html](https://rest.mse.kb28.ch/swagger/index.html).


## Influx DB
[(Back to top)](#table-of-contents)

The InfluxDB is deployed on the server at the following URL: [influxdb.mse.kb28.ch](http://influx.mse.kb28.ch:8086/). 
<br>
Credentials are available [on request](mailto:remi@heredero.ch).


## Pico Sensor
[(Back to top)](#table-of-contents)

Details in [pico-sensor/README.md](pico-sensor/README.md).



# Authors

[(Back to top)](#table-of-contents)

* [Sylvan Arnold](https://github.com/Sylvan22)
* [Rémi Heredero](https://github.com/Klagarge)
* [Yann Sierro](https://github.com/Fastium)



# Licence

[(Back to top)](#table-of-contents)

* This repository is under GPL 3.0
* Some parts can be under other licences, they are specified in the README of the concerned part