docs(reports): init final presentation
Signed-off-by: Klagarge <remi@heredero.ch>
This commit is contained in:
10
report/meetings/260611-final/db.typ
Normal file
10
report/meetings/260611-final/db.typ
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#import "/metadata.typ": *
|
||||||
|
#import "/tail/bibliography.typ": *
|
||||||
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
|
#import "/resources/slides.typ": *
|
||||||
|
|
||||||
|
// server
|
||||||
|
// mqtt->db
|
||||||
|
// db->rest
|
||||||
67
report/meetings/260611-final/gateway.typ
Normal file
67
report/meetings/260611-final/gateway.typ
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#import "/metadata.typ": *
|
||||||
|
#import "/tail/bibliography.typ": *
|
||||||
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
|
#import "/resources/slides.typ": *
|
||||||
|
|
||||||
|
== Gateway — BLE to MQTT Bridge
|
||||||
|
|
||||||
|
#slide[
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
gutter: 2em,
|
||||||
|
[
|
||||||
|
*Architecture*
|
||||||
|
- Raspberry Pi 4 — Python
|
||||||
|
- Passive BLE scan (bleak)
|
||||||
|
- MQTTS publisher (paho-mqtt)
|
||||||
|
- systemd service — auto-restart
|
||||||
|
- Remote access via Tailscale
|
||||||
|
],
|
||||||
|
[
|
||||||
|
*Data flow*
|
||||||
|
Thingy:52
|
||||||
|
-> BLE advertising
|
||||||
|
Raspberry Pi
|
||||||
|
-> MQTTS (TLS)
|
||||||
|
RabbitMQ broker
|
||||||
|
->
|
||||||
|
InfluxDB
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
== Gateway — Key Challenges
|
||||||
|
|
||||||
|
#slide[
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
gutter: 2em,
|
||||||
|
[
|
||||||
|
*BLE filtering*
|
||||||
|
- GATT → passive advertising
|
||||||
|
(BlueZ limitation)
|
||||||
|
- Filter: `company_id = 0xffff`
|
||||||
|
- exactly 14 bytes
|
||||||
|
- Continuous BLE scan (100% duty cycle)
|
||||||
|
- Deduplication: 10s cache per MAC address
|
||||||
|
],
|
||||||
|
[
|
||||||
|
*Reliability*
|
||||||
|
- MQTT auto-restart via systemd
|
||||||
|
- `os._exit(1)` on disconnection
|
||||||
|
- Validated with 2 cases:
|
||||||
|
- Network disconnection
|
||||||
|
- Wrong MQTT credentials
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
== Gateway — Data Collection Flow
|
||||||
|
|
||||||
|
#slide[
|
||||||
|
#align(center)[
|
||||||
|
#image("/resources/img/sequence_data_collection.svg", height: 85%)
|
||||||
|
]
|
||||||
|
]
|
||||||
62
report/meetings/260611-final/models.typ
Normal file
62
report/meetings/260611-final/models.typ
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#import "/metadata.typ": *
|
||||||
|
#import "/tail/bibliography.typ": *
|
||||||
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
|
#import "/resources/slides.typ": *
|
||||||
|
|
||||||
|
---
|
||||||
|
Input:
|
||||||
|
- Provence classrooms specifications - Space A #pause
|
||||||
|
- Open data #pause
|
||||||
|
- Ventilation standard formula #pause
|
||||||
|
- User parameters : Room name, number of students, initial @co2 concentration #pause
|
||||||
|
|
||||||
|
Output:
|
||||||
|
- Evolution of @co2 concentration without considering air ventilation #pause
|
||||||
|
- Time required to reach a threshold of 1400 ppm #pause
|
||||||
|
- Evolution of @co2 concentration decrease under natural ventilation #pause
|
||||||
|
- Time required to reach outdoor-equivalent concentration level
|
||||||
|
|
||||||
|
---
|
||||||
|
=== Modelling the temporal evolution of @co2:short concentration
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
[
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/Physical model/CO2 concentration over time Simaria.png"),
|
||||||
|
caption: [Comparison of modelled and open data #cite(<Simaria>) @co2:short concentration evolution]
|
||||||
|
) <fig:comparison_open_data_model_no_window_opening>
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/Physical model/CO2 concentration over time INRS secondary school.png"),
|
||||||
|
caption: [Comparison of modelled and open data #cite(<INRS_Study>) @co2:short concentration evolution]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
---
|
||||||
|
=== Modelling the @co2:short concentration increase without air ventilation and @co2:short decrease under natural ventilation
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
[
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/Physical model/Window user window opening model.png"),
|
||||||
|
caption: [User input parameters and results]
|
||||||
|
) <fig:user_input_parameters_results>
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/Physical model/CO2 concentration over time user window opening model.png"),
|
||||||
|
caption: [Temporal evolution of @co2:short level using input parameters from @fig:user_input_parameters_results]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
---
|
||||||
|
=== Comparison of experimental data and the physical model
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/Physical model/Comparison_expdata_model.png", width: 59%),
|
||||||
|
caption: [Comparison of experimental data and the physical model (A2 classroom, 11 students)]
|
||||||
|
)
|
||||||
43
report/meetings/260611-final/nodes.typ
Normal file
43
report/meetings/260611-final/nodes.typ
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#import "/metadata.typ": *
|
||||||
|
#import "/tail/bibliography.typ": *
|
||||||
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
|
#import "/resources/slides.typ": *
|
||||||
|
---
|
||||||
|
== Nodes | Class diagram
|
||||||
|
#let nodes_class_diagram_impl = [
|
||||||
|
#figure(
|
||||||
|
image("../..//resources/img/nodes_class_diagram_impl.svg"),
|
||||||
|
caption: [Nodes class diagram following implementation]
|
||||||
|
) <fig:nodes_class_diagram_impl>
|
||||||
|
]
|
||||||
|
#nodes_class_diagram_impl
|
||||||
|
== Nodes | Sequence diagram
|
||||||
|
#let nodes_sequence_diagram = [
|
||||||
|
#figure(
|
||||||
|
image("../../resources/img/nodes_sequence_diagram.svg", width: 60%),
|
||||||
|
caption: [Nodes sequence diagram]
|
||||||
|
) <fig:nodes_sequence_diagram>
|
||||||
|
]
|
||||||
|
#nodes_sequence_diagram
|
||||||
|
== Nodes | Nodes_interface
|
||||||
|
#figure(
|
||||||
|
table(
|
||||||
|
columns: (auto, auto, auto),
|
||||||
|
align: center,
|
||||||
|
table.header("name", "key", "data size"),
|
||||||
|
[Window opening status],[0x01],[1B],
|
||||||
|
[Humidity],[0x02],[1B],
|
||||||
|
[Temperature],[0x03],[2B],
|
||||||
|
[CO2 level],[0x04],[4B],
|
||||||
|
[Battery percent of charge],[0x05],[1B],
|
||||||
|
),
|
||||||
|
caption: [Data communicated in the nodes_interface],
|
||||||
|
)<tab:nodes_interface_content>
|
||||||
|
|
||||||
|
---
|
||||||
|
=== Nodes | Takeaways
|
||||||
|
- Breadboard validation #pause
|
||||||
|
- 28 days later #pause
|
||||||
|
- Improve nodes_interface reliability
|
||||||
@@ -1,14 +1,15 @@
|
|||||||
#import "/metadata.typ": *
|
#import "/metadata.typ": *
|
||||||
#import "/tail/bibliography.typ": *
|
#import "/tail/bibliography.typ": *
|
||||||
#import "/tail/glossary.typ": *
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
#import "/resources/slides.typ": *
|
#import "/resources/slides.typ": *
|
||||||
|
|
||||||
#show:make-glossary
|
#show:make-glossary
|
||||||
#register-glossary(entry-list)
|
#register-glossary(entry-list)
|
||||||
|
|
||||||
#let HANDOUT = true
|
#let HANDOUT = false
|
||||||
#let NOTES = false
|
#let NOTES = true
|
||||||
|
|
||||||
#show: metropolis-theme.with(
|
#show: metropolis-theme.with(
|
||||||
aspect-ratio: "16-9",
|
aspect-ratio: "16-9",
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
#title-slide()
|
#title-slide()
|
||||||
|
|
||||||
// 20 min presentation
|
// 20 min presentation
|
||||||
// 5 (students) + 25 (teacher) min Q&A
|
// 5 (students) + 25 (teachers) min Q&A
|
||||||
|
|
||||||
/*
|
/*
|
||||||
technical -> each section should go for around (3min / pers)
|
technical -> each section should go for around (3min / pers)
|
||||||
@@ -58,16 +59,138 @@ TECHNIQUE
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
= Intro
|
= Intro // (50s) Rémi
|
||||||
|
// Context of the project
|
||||||
|
// Dimitri missing
|
||||||
|
---
|
||||||
|
@co2
|
||||||
|
|
||||||
== foo
|
#speaker-note[
|
||||||
|
This is a personal note
|
||||||
|
|
||||||
|
here also @co2
|
||||||
|
]
|
||||||
|
|
||||||
Yolo
|
== Architecture // (50s) Ibrahima
|
||||||
|
TODO
|
||||||
|
|
||||||
== bar
|
== Organisation & Task Management // (50s) Djelal
|
||||||
Hello world
|
|
||||||
|
#slide[
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
gutter: 2em,
|
||||||
|
[
|
||||||
|
*Project management*
|
||||||
|
- Weekly meetings — Thursday 17h (1h)
|
||||||
|
- PV after each meeting (Thank's to Adrien)
|
||||||
|
- GitHub Issues & sub-issues
|
||||||
|
- Pull Requests with code review
|
||||||
|
- Teams for daily communication
|
||||||
|
- GULAG Git conventions
|
||||||
|
],
|
||||||
|
[
|
||||||
|
*Work distribution*
|
||||||
|
- Adrien — Nodes firmware (Zephyr)
|
||||||
|
- Djelal — Gateway (BLE-to-MQTT)
|
||||||
|
- Rémi — Database & API
|
||||||
|
- Ibrahima — User Interface
|
||||||
|
- Alison — Physical model
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
= Nodes // (3min) Adrien
|
||||||
|
#include "nodes.typ"
|
||||||
|
|
||||||
|
= Gateway // (3min) Djelal
|
||||||
|
#include "gateway.typ"
|
||||||
|
|
||||||
|
= Database & API // (3min) Rémi
|
||||||
|
#include "db.typ"
|
||||||
|
|
||||||
|
= User interface // (3min) Ibrahima
|
||||||
|
#include "ui.typ"
|
||||||
|
|
||||||
|
= Physical model // (3min) Alison
|
||||||
|
#include "models.typ"
|
||||||
|
|
||||||
= Conclusion
|
= Conclusion
|
||||||
|
|
||||||
---
|
== Whole project's takeaways // (50s) Adrien (Regard critique)
|
||||||
It's the end of the world
|
- @trl 4 #pause
|
||||||
|
- Forecasting and Teams notifications
|
||||||
|
|
||||||
|
== Future perspectives // (50s) Alison
|
||||||
|
- Deployment in every room #pause
|
||||||
|
- Equip the door with sensors #pause
|
||||||
|
- Calibrate the sensors and, if necessary, replace them with higher-performance devices #pause
|
||||||
|
- Conduct multiple measurement campaigns knowing the number of students to adjust the physical model #pause
|
||||||
|
- Display the predicted time to reach the threshold and the window opening duration on the board #pause
|
||||||
|
- Teams notifications #pause
|
||||||
|
- Implement a forecasting using machine learning
|
||||||
|
|
||||||
|
|
||||||
|
#focus-slide[Questions?]
|
||||||
|
|
||||||
|
#show: appendix
|
||||||
|
|
||||||
|
== Glossary
|
||||||
|
#print-glossary(
|
||||||
|
entry-list,
|
||||||
|
// show all term even if they are not referenced, default to true
|
||||||
|
show-all: false,
|
||||||
|
// disable the back ref at the end of the descriptions
|
||||||
|
disable-back-references: false,
|
||||||
|
deduplicate-back-references: true
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
== Bibliography
|
||||||
|
|
||||||
|
#bibliography(title: i18n("bib-title", lang: option.lang), bib.path, style:bib.style)
|
||||||
|
|
||||||
|
= Annexes
|
||||||
|
|
||||||
|
== Backup slide example
|
||||||
|
This slide is an example for create a backup slide.
|
||||||
|
|
||||||
|
== Description of the model
|
||||||
|
|
||||||
|
#grid(
|
||||||
|
columns: (1.7fr,0.1fr,1fr),
|
||||||
|
[#figure(
|
||||||
|
image("../../resources/img/Physical model/data flow diagram window opening .png"),
|
||||||
|
caption: [Description of the model]
|
||||||
|
) <fig:physical_model_no_ventilation>],
|
||||||
|
[
|
||||||
|
],
|
||||||
|
[
|
||||||
|
Formulas for determining the evolution of @co2 concentration :
|
||||||
|
|
||||||
|
#text(size: 12pt)[
|
||||||
|
- $C_"CO2" (t) = C_"CO2" (t=0) + frac(N.Q_"CO2_prod".t,V)
|
||||||
|
$
|
||||||
|
|
||||||
|
- $C_"CO2" (t) = (C_"CO2_indoor" (t=0) - C_"CO2_outdoor" - frac(0.001 . Q_"CO2_prod", Q_"air")) . \ exp (frac(-Q_"air", V) . t)
|
||||||
|
+ C_"CO2_outdoor" + frac(0.001 . Q_"CO2_prod", Q_"air")
|
||||||
|
$
|
||||||
|
where,
|
||||||
|
|
||||||
|
$C_"CO2" (t=0)$ #h(1.5cm) initial co2 concentration [ppm]
|
||||||
|
|
||||||
|
N #h(3.4cm) number of students
|
||||||
|
|
||||||
|
$Q_"CO2_prod"$ #h(2cm) co2 flow rate per person [l/h]
|
||||||
|
|
||||||
|
$C_"CO2_indoor" (t=0)$ #h(0.6cm) indoor co2 level before window-opening [ppm]
|
||||||
|
|
||||||
|
$C_"CO2_outdoor"$ #h(1.7cm) outdoor air concentration [ppm]
|
||||||
|
|
||||||
|
$Q_"air"$ #h(3cm) incoming air flow rate [$m^3$/h]
|
||||||
|
|
||||||
|
$V$ #h(3.3cm) room volume [$m^3$]
|
||||||
|
|
||||||
|
$t$ #h(3.5cm) time [h]]
|
||||||
|
]
|
||||||
|
)
|
||||||
6
report/meetings/260611-final/ui.typ
Normal file
6
report/meetings/260611-final/ui.typ
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#import "/metadata.typ": *
|
||||||
|
#import "/tail/bibliography.typ": *
|
||||||
|
#import "/tail/glossary.typ": *
|
||||||
|
#import "/main/architecture/description.typ": *
|
||||||
|
|
||||||
|
#import "/resources/slides.typ": *
|
||||||
@@ -128,6 +128,11 @@
|
|||||||
key: "svg",
|
key: "svg",
|
||||||
short: "SVG",
|
short: "SVG",
|
||||||
long: "Scalable Vector Graphics"
|
long: "Scalable Vector Graphics"
|
||||||
|
),
|
||||||
|
(
|
||||||
|
key: "trl",
|
||||||
|
short: "TRL",
|
||||||
|
long: "Technical Readiness Level"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user