diff --git a/report/meetings/260611-final/db.typ b/report/meetings/260611-final/db.typ new file mode 100644 index 0000000..7b87df8 --- /dev/null +++ b/report/meetings/260611-final/db.typ @@ -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 \ No newline at end of file diff --git a/report/meetings/260611-final/gateway.typ b/report/meetings/260611-final/gateway.typ new file mode 100644 index 0000000..8d6546d --- /dev/null +++ b/report/meetings/260611-final/gateway.typ @@ -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%) + ] +] \ No newline at end of file diff --git a/report/meetings/260611-final/models.typ b/report/meetings/260611-final/models.typ new file mode 100644 index 0000000..229f607 --- /dev/null +++ b/report/meetings/260611-final/models.typ @@ -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() @co2:short concentration evolution] + ) + ], + [ + #figure( + image("../../resources/img/Physical model/CO2 concentration over time INRS secondary school.png"), + caption: [Comparison of modelled and open data #cite() @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] + ) + ], + [ + #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)] +) \ No newline at end of file diff --git a/report/meetings/260611-final/nodes.typ b/report/meetings/260611-final/nodes.typ new file mode 100644 index 0000000..1a5a9c7 --- /dev/null +++ b/report/meetings/260611-final/nodes.typ @@ -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] + ) +] +#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] + ) +] +#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], +) + +--- +=== Nodes | Takeaways + - Breadboard validation #pause + - 28 days later #pause + - Improve nodes_interface reliability \ No newline at end of file diff --git a/report/meetings/260611-final/slides.typ b/report/meetings/260611-final/slides.typ index 5761a72..c599c91 100644 --- a/report/meetings/260611-final/slides.typ +++ b/report/meetings/260611-final/slides.typ @@ -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 \ No newline at end of file +== 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] + ) ], + [ + ], + [ + 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]] + ] +) \ No newline at end of file diff --git a/report/meetings/260611-final/ui.typ b/report/meetings/260611-final/ui.typ new file mode 100644 index 0000000..7023597 --- /dev/null +++ b/report/meetings/260611-final/ui.typ @@ -0,0 +1,6 @@ +#import "/metadata.typ": * +#import "/tail/bibliography.typ": * +#import "/tail/glossary.typ": * +#import "/main/architecture/description.typ": * + +#import "/resources/slides.typ": * \ No newline at end of file diff --git a/report/tail/glossary.typ b/report/tail/glossary.typ index 79f5f77..b4f16ff 100644 --- a/report/tail/glossary.typ +++ b/report/tail/glossary.typ @@ -128,6 +128,11 @@ key: "svg", short: "SVG", long: "Scalable Vector Graphics" + ), + ( + key: "trl", + short: "TRL", + long: "Technical Readiness Level" ) )