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 "/tail/bibliography.typ": *
|
||||
#import "/tail/glossary.typ": *
|
||||
#import "/main/architecture/description.typ": *
|
||||
|
||||
#import "/resources/slides.typ": *
|
||||
|
||||
#show:make-glossary
|
||||
#register-glossary(entry-list)
|
||||
|
||||
#let HANDOUT = true
|
||||
#let NOTES = false
|
||||
#let HANDOUT = false
|
||||
#let NOTES = true
|
||||
|
||||
#show: metropolis-theme.with(
|
||||
aspect-ratio: "16-9",
|
||||
@@ -33,7 +34,7 @@
|
||||
#title-slide()
|
||||
|
||||
// 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)
|
||||
@@ -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
|
||||
Hello world
|
||||
== Organisation & Task Management // (50s) Djelal
|
||||
|
||||
#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
|
||||
|
||||
---
|
||||
It's the end of the world
|
||||
== Whole project's takeaways // (50s) Adrien (Regard critique)
|
||||
- @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",
|
||||
short: "SVG",
|
||||
long: "Scalable Vector Graphics"
|
||||
),
|
||||
(
|
||||
key: "trl",
|
||||
short: "TRL",
|
||||
long: "Technical Readiness Level"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user