diff --git a/report/main/database/sequence.typ b/report/main/database/sequence.typ index 95b999f..66cf454 100644 --- a/report/main/database/sequence.typ +++ b/report/main/database/sequence.typ @@ -1,11 +1,11 @@ #import "../../resources/helper.typ": * #let b = actor("broker", - disp_name: [@mqtt\ broker], + disp_name: [@mqtt:short\ broker], shape: "queue", show-bottom:false ) #let mg = actor("mqtt", - disp_name: [@mqtt\ gateway], + disp_name: [@mqtt:short\ gateway], show-bottom:false ) #let ig = actor("influx", diff --git a/report/meetings/260611-final/db.typ b/report/meetings/260611-final/db.typ index 7b87df8..baa9cbe 100644 --- a/report/meetings/260611-final/db.typ +++ b/report/meetings/260611-final/db.typ @@ -5,6 +5,64 @@ #import "/resources/slides.typ": * +#import "/main/database/sequence.typ": * // server // mqtt->db -// db->rest \ No newline at end of file +// db->rest + +#let toDB = { + import chronos: * + b.display + mg.display + main.display + ig.display + db.display + + _col(b.name, mg.name, width: 5cm) + _col(mg.name, main.name, width: 5cm) + _col(main.name, ig.name, width: 5cm) + _col(ig.name, db.name, width: 5cm) + + sync(main, mg, "New", create-dst: true) + sync(mg, b, "subscribe") + sync(main, ig, "New", create-dst: true) + async(b, mg, "message") + sync(mg, main, "DataPoint") + sync(main, main, "map topics") + sync(main, ig, "DataPoint") + async(ig, db, "flush") +} + +#let fromDB = { + import chronos: * + db.display + ig.display + main.display + rg.display + u.display + + _col(db.name, ig.name, width: 5cm) + _col(ig.name, main.name, width: 5cm) + _col(main.name, rg.name, width: 5cm) + _col(rg.name, u.name, width: 5cm) + + async(u, rg, "Request") + sync(rg, main, "getNodes") + sync(main, rg, "", dashed: true) + sync(rg, ig, "Query") + sync(ig, db, "") + sync(db, ig, "", dashed: true) + sync(ig, rg, "", dashed: true) + sync(rg, u, "", dashed: true) +} + +--- +#figure( + chronos.diagram(toDB, width: 90%), + caption: [Sequence from broker to DB] +) +--- +#figure( + chronos.diagram(fromDB, width: 90%), + caption: [Sequence to REST from DB] +) \ No newline at end of file diff --git a/report/meetings/260611-final/gateway.typ b/report/meetings/260611-final/gateway.typ index 8d6546d..579050e 100644 --- a/report/meetings/260611-final/gateway.typ +++ b/report/meetings/260611-final/gateway.typ @@ -14,13 +14,13 @@ [ *Architecture* - Raspberry Pi 4 — Python - - Passive BLE scan (bleak) + - Passive @ble:short scan (bleak) - MQTTS publisher (paho-mqtt) - systemd service — auto-restart - Remote access via Tailscale ], [ - *Data flow* + *Data flow*\ Thingy:52 -> BLE advertising Raspberry Pi @@ -62,6 +62,9 @@ #slide[ #align(center)[ - #image("/resources/img/sequence_data_collection.svg", height: 85%) + #figure( + image("/resources/img/gateway_overview.svg", height: 40%), + caption: [Gateway communication chain — from @ble:short advertising to database storage] + ) ] ] \ No newline at end of file diff --git a/report/meetings/260611-final/models.typ b/report/meetings/260611-final/models.typ index 229f607..a39202b 100644 --- a/report/meetings/260611-final/models.typ +++ b/report/meetings/260611-final/models.typ @@ -2,20 +2,18 @@ #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 +- User parameters : Room name, number of students, initial @co2:short concentration #pause Output: -- Evolution of @co2 concentration without considering air ventilation #pause +- Evolution of @co2:short 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 +- Evolution of @co2:short concentration decrease under natural ventilation #pause - Time required to reach outdoor-equivalent concentration level --- diff --git a/report/meetings/260611-final/nodes.typ b/report/meetings/260611-final/nodes.typ index 1a5a9c7..c6047e1 100644 --- a/report/meetings/260611-final/nodes.typ +++ b/report/meetings/260611-final/nodes.typ @@ -21,7 +21,7 @@ ) ] #nodes_sequence_diagram -== Nodes | Nodes_interface +== Nodes | BLE data #figure( table( columns: (auto, auto, auto), @@ -30,14 +30,14 @@ [Window opening status],[0x01],[1B], [Humidity],[0x02],[1B], [Temperature],[0x03],[2B], - [CO2 level],[0x04],[4B], + [@co2:short level],[0x04],[4B], [Battery percent of charge],[0x05],[1B], ), caption: [Data communicated in the nodes_interface], ) --- -=== Nodes | Takeaways +== Nodes | Takeaways - Breadboard validation #pause - 28 days later #pause - - Improve nodes_interface reliability \ No newline at end of file + - Improve @ble:short reliability \ No newline at end of file diff --git a/report/meetings/260611-final/slides.typ b/report/meetings/260611-final/slides.typ index c599c91..1991276 100644 --- a/report/meetings/260611-final/slides.typ +++ b/report/meetings/260611-final/slides.typ @@ -62,17 +62,20 @@ TECHNIQUE = Intro // (50s) Rémi // Context of the project // Dimitri missing ---- -@co2 - #speaker-note[ This is a personal note - - here also @co2 ] +--- + == Architecture // (50s) Ibrahima -TODO +#let top_level_architecture = [ + #figure( + image("../../resources/img/ui_images/architecture.png"), + caption: [Top level architecture] + ) +] +#top_level_architecture == Organisation & Task Management // (50s) Djelal @@ -118,7 +121,7 @@ TODO = Conclusion == Whole project's takeaways // (50s) Adrien (Regard critique) -- @trl 4 #pause +- @trl:short 4 #pause - Forecasting and Teams notifications == Future perspectives // (50s) Alison @@ -141,8 +144,7 @@ TODO // 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 + disable-back-references: true ) @@ -152,9 +154,6 @@ TODO = Annexes -== Backup slide example -This slide is an example for create a backup slide. - == Description of the model #grid( diff --git a/report/meetings/260611-final/ui.typ b/report/meetings/260611-final/ui.typ index 7023597..d6116fd 100644 --- a/report/meetings/260611-final/ui.typ +++ b/report/meetings/260611-final/ui.typ @@ -3,4 +3,114 @@ #import "/tail/glossary.typ": * #import "/main/architecture/description.typ": * -#import "/resources/slides.typ": * \ No newline at end of file +#import "/resources/slides.typ": * + +#let c-dark = rgb("#0F172A") +#let c-teal = rgb("#0EA5E9") +#let c-text = rgb("#1E293B") +#let c-muted = rgb("#64748B") +#let c-white = rgb("#FFFFFF") +#let c-border = rgb("#E2E8F0") + +--- + +───────────────────────────────────────────────────────────────────────────── +// SLIDE 2 — Cycle DevSecOps +// ───────────────────────────────────────────────────────────────────────────── +#let slide-devsecops() = { + // Header custom (subtitle à droite) + block(width: 100%, height: 43.9pt, fill: c-dark, inset: 0pt)[ + #pad(x: 25.5pt)[ + #align(horizon)[ + #grid(columns: (1fr, auto), + align(left + horizon)[ + #text(size: 16pt, weight: "bold", fill: rgb("#FFFFFF"))[Cycle DevSecOps - PI E2EEDA] + ], + align(right + horizon)[ + #text(size: 8pt, fill: rgb("#94A3B8"))[Shift-left · Security by design] + ], + ) + ] + ] + ] + + pad(x: 17pt, top: 11pt, bottom: 9pt)[ + #grid(columns: (1fr, 1fr, 1fr, 1fr), gutter: 10pt, + + // ① Code & PR Gate + // image10 = TypeScript (TS logo), image11 = Angular (grisé) + // image19 = GitHub Actions (GHCR/GitHub logo) + devsec-col("① Code & PR Gate", ( + (icon: "../../resources/img/ui_images/images/image10.png", bg: rgb("#3178C6"), name: "TypeScript", + extra: [#text(size: 7pt, fill: c-muted)[tsc / ESLint]]), + (icon: "../../resources/img/ui_images/images/image11.png", bg: rgb("#DD0031"), name: "Angular CI", + extra: [#text(size: 7pt, fill: c-muted)[Build check]]), + )), + + // ② SAST · SCA + // image13 = GitHub octocat (SpotBugs hébergé GitHub), image13 aussi CodeQL (GitHub) + // image14 = checklist hexagone (Dep. Check / OWASP DC) + devsec-col("② SAST · SCA", ( + (icon: "../../resources/img/ui_images/images/image13.png", bg: rgb("#1F2328"), name: "SpotBugs", + extra: [#badge("BLOCKING")]), + (icon: "../../resources/img/ui_images/images/image13.png", bg: rgb("#1F2328"), name: "CodeQL", + extra: [#badge("BLOCKING")]), + (icon: "../../resources/img/ui_images/images/image14.png", bg: rgb("#F97316"), name: "Dep. Check", + extra: [#badge("NON-BLOCK", fill: rgb("#F97316"))]), + )), + + // ③ DAST · Tests + // image15 = libellule OWASP ZAP, image16 = Karma/Jasmine, image17 = Tux Linux + devsec-col("③ DAST · Tests", ( + (icon: "../../resources/img/ui_images/images/image15.png", bg: rgb("#00549E"), name: "OWASP ZAP", + extra: [#badge("BLOCKING")]), + (icon: "../../resources/img/ui_images/images/image16.png", bg: rgb("#DD0031"), name: "Karma Tests", + extra: [#badge("BLOCKING")]), + (icon: "../../resources/img/ui_images/images/image17.png", bg: rgb("#64748B"), name: "Runtime check", + extra: [#text(size: 7pt, fill: c-muted)[HTTP headers]]), + )), + + // ④ Build · Deploy + // image18 = Docker, image19 = GHCR, image17 = Tux Linux (SSH) + devsec-col("④ Build · Deploy", ( + (icon: "../../resources/img/ui_images/images/image18.png", bg: rgb("#0DB7ED"), name: "Docker", + extra: [#text(size: 7pt, fill: c-muted)[SHA-tagged]]), + (icon: "../../resources/img/ui_images/images/image19.png", bg: rgb("#1F2328"), name: "GHCR Push", + extra: [#text(size: 7pt, fill: c-muted)[main only]]), + (icon: "../../resources/img/ui_images/images/image17.png", bg: rgb("#10B981"), name: "SSH Deploy", + extra: [#text(size: 7pt, fill: c-muted)[cert-auth]]), + )), + ) + + #v(9pt) + + // Barre résumé + #rect(width: 100%, height: 30pt, fill: c-dark, radius: 5pt, inset: 0pt)[ + #pad(x: 30pt)[ + #align(horizon)[ + #grid(columns: (1fr, 1fr, 1fr), + align(center + horizon)[#text(size: 9pt, fill: rgb("#FFFFFF"))[🔐 #h(3pt) Shift-left security]], + align(center + horizon)[#text(size: 9pt, fill: rgb("#FFFFFF"))[🔑 #h(3pt) Zero secret in code]], + align(center + horizon)[#text(size: 9pt, fill: rgb("#FFFFFF"))[🔄 #h(3pt) Automated Deployment]], + ) + ] + ] + ] + + #v(8pt) + + // GitHub Actions — image19 (GitHub/GHCR logo) + #align(center)[ + #grid(columns: (auto, auto, auto), gutter: 7pt, + align(horizon)[#icon-circle("../../resources/img/ui_images/images/image19.png", size: 24pt, bg: rgb("#1F2328"))], + align(horizon)[#text(size: 8.5pt, weight: "bold", fill: c-text)[GitHub Actions]], + align(horizon)[#text(size: 8.5pt, fill: c-muted)[Coverage]], + ) + ] + ] + + v(1fr) + +} + +// \ No newline at end of file diff --git a/report/resources/img/gateway_overview.svg b/report/resources/img/gateway_overview.svg new file mode 100644 index 0000000..ba9344c --- /dev/null +++ b/report/resources/img/gateway_overview.svg @@ -0,0 +1,43 @@ +Thingy:52──────────CO2, TempHumidityBatteryWindowRaspberry Pi 4──────────gateway.pybleak + paho-mqttasyncio + systemdRabbitMQ──────────MQTTS brokerTLS + authInfluxDBFilters:- company_id = 0xffff- payload = 14 bytes- dedup 10s per MACBLE advertisingcompany_id 0xffff14 bytes3 channels (37/38/39)MQTTS port 80JSON payload{gateway_id}/{mac}/updatestore measurement \ No newline at end of file diff --git a/report/resources/img/ui_images/architecture.png b/report/resources/img/ui_images/architecture.png new file mode 100644 index 0000000..e5bfb40 Binary files /dev/null and b/report/resources/img/ui_images/architecture.png differ diff --git a/report/resources/img/ui_images/image.png b/report/resources/img/ui_images/image.png new file mode 100644 index 0000000..68dea8a Binary files /dev/null and b/report/resources/img/ui_images/image.png differ diff --git a/report/resources/img/ui_images/images/image1.png b/report/resources/img/ui_images/images/image1.png new file mode 100644 index 0000000..dd9b105 Binary files /dev/null and b/report/resources/img/ui_images/images/image1.png differ diff --git a/report/resources/img/ui_images/images/image10.png b/report/resources/img/ui_images/images/image10.png new file mode 100644 index 0000000..edd34ec Binary files /dev/null and b/report/resources/img/ui_images/images/image10.png differ diff --git a/report/resources/img/ui_images/images/image11.png b/report/resources/img/ui_images/images/image11.png new file mode 100644 index 0000000..5113af1 Binary files /dev/null and b/report/resources/img/ui_images/images/image11.png differ diff --git a/report/resources/img/ui_images/images/image12.png b/report/resources/img/ui_images/images/image12.png new file mode 100644 index 0000000..f2336fb Binary files /dev/null and b/report/resources/img/ui_images/images/image12.png differ diff --git a/report/resources/img/ui_images/images/image13.png b/report/resources/img/ui_images/images/image13.png new file mode 100644 index 0000000..60cdb56 Binary files /dev/null and b/report/resources/img/ui_images/images/image13.png differ diff --git a/report/resources/img/ui_images/images/image14.png b/report/resources/img/ui_images/images/image14.png new file mode 100644 index 0000000..eb1283b Binary files /dev/null and b/report/resources/img/ui_images/images/image14.png differ diff --git a/report/resources/img/ui_images/images/image15.png b/report/resources/img/ui_images/images/image15.png new file mode 100644 index 0000000..e3cdb9f Binary files /dev/null and b/report/resources/img/ui_images/images/image15.png differ diff --git a/report/resources/img/ui_images/images/image16.png b/report/resources/img/ui_images/images/image16.png new file mode 100644 index 0000000..5f0f364 Binary files /dev/null and b/report/resources/img/ui_images/images/image16.png differ diff --git a/report/resources/img/ui_images/images/image17.png b/report/resources/img/ui_images/images/image17.png new file mode 100644 index 0000000..69329e7 Binary files /dev/null and b/report/resources/img/ui_images/images/image17.png differ diff --git a/report/resources/img/ui_images/images/image18.png b/report/resources/img/ui_images/images/image18.png new file mode 100644 index 0000000..95610e5 Binary files /dev/null and b/report/resources/img/ui_images/images/image18.png differ diff --git a/report/resources/img/ui_images/images/image19.png b/report/resources/img/ui_images/images/image19.png new file mode 100644 index 0000000..43c1eaa Binary files /dev/null and b/report/resources/img/ui_images/images/image19.png differ diff --git a/report/resources/img/ui_images/images/image2.png b/report/resources/img/ui_images/images/image2.png new file mode 100644 index 0000000..85616c3 Binary files /dev/null and b/report/resources/img/ui_images/images/image2.png differ diff --git a/report/resources/img/ui_images/images/image20.png b/report/resources/img/ui_images/images/image20.png new file mode 100644 index 0000000..004bd1f Binary files /dev/null and b/report/resources/img/ui_images/images/image20.png differ diff --git a/report/resources/img/ui_images/images/image21.png b/report/resources/img/ui_images/images/image21.png new file mode 100644 index 0000000..91b40ca Binary files /dev/null and b/report/resources/img/ui_images/images/image21.png differ diff --git a/report/resources/img/ui_images/images/image22.png b/report/resources/img/ui_images/images/image22.png new file mode 100644 index 0000000..b99d369 Binary files /dev/null and b/report/resources/img/ui_images/images/image22.png differ diff --git a/report/resources/img/ui_images/images/image3.png b/report/resources/img/ui_images/images/image3.png new file mode 100644 index 0000000..874b486 Binary files /dev/null and b/report/resources/img/ui_images/images/image3.png differ diff --git a/report/resources/img/ui_images/images/image4.png b/report/resources/img/ui_images/images/image4.png new file mode 100644 index 0000000..2eed302 Binary files /dev/null and b/report/resources/img/ui_images/images/image4.png differ diff --git a/report/resources/img/ui_images/images/image5.png b/report/resources/img/ui_images/images/image5.png new file mode 100644 index 0000000..bb8fe54 Binary files /dev/null and b/report/resources/img/ui_images/images/image5.png differ diff --git a/report/resources/img/ui_images/images/image6.png b/report/resources/img/ui_images/images/image6.png new file mode 100644 index 0000000..38d9284 Binary files /dev/null and b/report/resources/img/ui_images/images/image6.png differ diff --git a/report/resources/img/ui_images/images/image7.png b/report/resources/img/ui_images/images/image7.png new file mode 100644 index 0000000..6a0a82e Binary files /dev/null and b/report/resources/img/ui_images/images/image7.png differ diff --git a/report/resources/img/ui_images/images/image8.png b/report/resources/img/ui_images/images/image8.png new file mode 100644 index 0000000..ba3e4ac Binary files /dev/null and b/report/resources/img/ui_images/images/image8.png differ diff --git a/report/resources/img/ui_images/images/image9.jpeg b/report/resources/img/ui_images/images/image9.jpeg new file mode 100644 index 0000000..25583fe Binary files /dev/null and b/report/resources/img/ui_images/images/image9.jpeg differ