From c76ba93e823cd0afda49d07d7ba635f3a802b2f8 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 26 Nov 2024 13:30:38 +0100 Subject: [PATCH 01/14] code req --- docs/code/code-requirements.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/code/code-requirements.md diff --git a/docs/code/code-requirements.md b/docs/code/code-requirements.md new file mode 100644 index 0000000..4e17678 --- /dev/null +++ b/docs/code/code-requirements.md @@ -0,0 +1,10 @@ +# Requirements + +1. Het compileerd op x86 en ARM architechturen +2. Geen dubbele code +3. commentaar bij lastige code +4. Doxygen comments bij elke functie, behalve als het duidelijk is in de functienaam +5. Hou je code leesbaar +6. Geen dode code +7. Gebruik TODO comments (TODO TREE) +8. \ No newline at end of file From 492f506aa2eba90a3bc21695c112b1de32e7afc0 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Tue, 26 Nov 2024 14:55:45 +0100 Subject: [PATCH 02/14] daily stand up-/ hoofdvraag en deelvragen --- docs/scrum/daily_stand_up.md | 24 +++++++----- teamdocumentatie/Ishak/hoofd-deelvraag.md | 42 +++++++++++++++++++++ teamdocumentatie/Ishak/hoofd-deelvraag.pdf | Bin 0 -> 52837 bytes 3 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 teamdocumentatie/Ishak/hoofd-deelvraag.md create mode 100644 teamdocumentatie/Ishak/hoofd-deelvraag.pdf diff --git a/docs/scrum/daily_stand_up.md b/docs/scrum/daily_stand_up.md index 24efb01..730ae05 100644 --- a/docs/scrum/daily_stand_up.md +++ b/docs/scrum/daily_stand_up.md @@ -1,13 +1,17 @@ # Daily stand ups ??? note "Daily Stand-ups Sprint 4" - | Day | Submitted by | What did you do yesterday | What will you do today | Any blockers? | - | ---------- | ------------ | ----------------------------- | -------------------------------------------------- | ----------------------- | - | 18/11/2024 | Ishak | --- | Engels, Repo fixen, beginnen met nieuwe user story | --- | - | 18/11/2024 | Sam | --- | Engels, Feedback verwerken medium stake | None | - | 18/11/2024 | Yannick | --- | Engels, Documentatie, Code samenvoegen | None | - | 18/11/2024 | Mees | --- | Engels, Onderzoek | None | - | 19/11/2024 | Ishak | Engels, Repo fixen | workshop | --- | - | 19/11/2024 | Sam | Engels, Feedback verwerken | workshop | None | - | 19/11/2024 | Yannick | code samenvoegen,schema maken | workshop, documentatie | None | - | 19/11/2024 | Mees | niks | workshop, fixen include path | include path werkt niet | + | Day | Submitted by | What did you do yesterday | What will you do today | Any blockers? | + | ---------- | ------------ | ----------------------------- | -------------------------------------------------- | ------------------------------------ | + | 18/11/2024 | Ishak | --- | Engels, Repo fixen, beginnen met nieuwe user story | --- | + | 18/11/2024 | Sam | --- | Engels, Feedback verwerken medium stake | None | + | 18/11/2024 | Yannick | --- | Engels, Documentatie, Code samenvoegen | None | + | 18/11/2024 | Mees | --- | Engels, Onderzoek | None | + | 19/11/2024 | Ishak | Engels, Repo fixen | workshop | --- | + | 19/11/2024 | Sam | Engels, Feedback verwerken | workshop | None | + | 19/11/2024 | Yannick | code samenvoegen,schema maken | workshop, documentatie | None | + | 19/11/2024 | Mees | niks | workshop, fixen include path | include path werkt niet | + | 26/11/2024 | Ishak | database | fix database, engels video opnemen | phpmyadmin werkt niet(weet probleem) | + | 26/11/2024 | Sam | opencv | opencv | --- | + | 26/11/2024 | Yannick | ziek | ziek | --- | + | 26/11/2024 | Mees | Engels video | stepper motor | vscode werkt niet | \ No newline at end of file diff --git a/teamdocumentatie/Ishak/hoofd-deelvraag.md b/teamdocumentatie/Ishak/hoofd-deelvraag.md new file mode 100644 index 0000000..b4c8eae --- /dev/null +++ b/teamdocumentatie/Ishak/hoofd-deelvraag.md @@ -0,0 +1,42 @@ +# Hoofd en deelvragen + +**Wat is de aanleiding?** +De aanleiding is de de behoefte aan veilige communicatie tussen apparaten. Dit is belangrijk omdat onbeveiligde dataoverdracht kan leiden tot datalekken. + +**wat is het probleem/behoefte en waaruit blijkt dat?** +Het probleem is dat data die tussen apparaten wordt verstuurd kwetsbaar kan zijn. Dit blijkt nadat wij te horen hebben gekregen dat er niet goed was omgegaan met communicatie tussen apparaten. + +**Wie heeft het probleem/behoefte?** +ons groepje, maar ook bijvoorbeeld grote bedrijven waar het heel belangrijk is dat data veilig wordt verstuurd zonder dat het in de verkeerde handen valt. + +**Wanneer is het probleem/behoefte ontstaan?** +Het probleem is ontstaan nadat wij te horen hebben gekregen dat er niet goed was omgegaan met communicatie tussen apparaten. + +**Waarom is het een probleem?** +Het is een probleem omdat onbeveiligde communicatie kan leiden tot datalekken waaronder privacy. Hiermee kunnen bedrijven in de problemen komen. + +**Waar doet het probleem/behoefte zich voor (afbakening)?** +Het probleem komt voor in verschillende sectoren waar data tussen apparaten wordt verstuurd. Dit kan zijn in de zorg, industrie, op kantoor, maar ook met IoT projecten wat je thuis kan hebben. + +## Hoofdvraag + +Welke communicatieprotocol geeft de mogelijkheid om veilig en betrouwbaar te communiceren tussen IoT apparaten? + +## Deelvragen + +1. Wat houdt veilige en betrouwbare communicatie tussen apparaten in? +2. Welke protocollen zijn er om veilig en betrouwbaar te communiceren tussen apparaten? +3. Wat zijn de voor- en nadelen van de verschillende protocollen? + +## Bronnen + +- Singh, S., & Jyoti. (2024, June 7). Secure Communications Protocols for IoT networks: a survey. https://journal.ijprse.com/index.php/ijprse/article/view/1082 +- Nguyen, K. T., Laurent, M., Oualha, N., CEA, & Institut Mines-Telecom. (2015). Survey on secure communication protocols for the Internet of Things. In Ad Hoc Networks (Vol. 32, pp. 17–31) [Journal-article]. http://dx.doi.org/10.1016/j.adhoc.2015.01.006 +- Miorandi, D., Sicari, S., De Pellegrini, F., & Imrich Chlamtac. (2012). Internet of things: Vision, applications and research challenges. In Ad Hoc Networks (Vol. 10, pp. 1497–1516) [Journal-article]. Elsevier B.V. http://dx.doi.org/10.1016/j.adhoc.2012.02.016 +- Christiano, P. (2023, November 5). Top 9 IoT communication protocols & their features in 2024: An In-Depth guide - ExpertBeacon. Expertbeacon. https://expertbeacon.com/iot-communication-protocol/ +- Yugha, R., & Chithra, S. (2020). A survey on technologies and security protocols: Reference for future generation IoT. Journal of Network and Computer Applications, 169, 102763. https://doi.org/10.1016/j.jnca.2020.102763 +- De Mendizábal, I. (2022, June 16). IoT Communication Protocols—IoT Data Protocols. Technical Articles. https://www.allaboutcircuits.com/technical-articles/internet-of-things-communication-protocols-iot-data-protocols/ +- IoT-technologieën en -protocollen | Microsoft Azure. (n.d.). https://azure.microsoft.com/nl-nl/solutions/iot/iot-technology-protocols +- Het IoT verbinden: wat is MQTT en waarin verschilt het van CoAP? (n.d.). https://www.onlogic.com/nl/blog/het-iot-verbinden-wat-is-mqtt-en-waarin-verschilt-het-van-coap/ +- Nader, K. (2023, October 30). Wat zijn de voordelen van het gebruik van WebSocket voor IoT-communicatie? AppMaster - Ultimate All-in No-code Platform. https://appmaster.io/nl/blog/websocket-voor-iot-communicatie +- Sidna, J., Amine, B., Abdallah, N., & Alami, H. E. (2020). Analysis and evaluation of communication Protocols for IoT Applications. Karbala International Journal of Modern Science. https://doi.org/10.1145/3419604.3419754 \ No newline at end of file diff --git a/teamdocumentatie/Ishak/hoofd-deelvraag.pdf b/teamdocumentatie/Ishak/hoofd-deelvraag.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e55e61f9c4d4c7d497f06c0b57699e33a7656942 GIT binary patch literal 52837 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 literal 0 HcmV?d00001 From 048790ec8b376b3f80bf91eef011412e5cc3624b Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Thu, 28 Nov 2024 13:16:03 +0100 Subject: [PATCH 03/14] Add WSGI entry point for the application --- src/Python/wsgi.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/Python/wsgi.py diff --git a/src/Python/wsgi.py b/src/Python/wsgi.py new file mode 100644 index 0000000..d9c2cef --- /dev/null +++ b/src/Python/wsgi.py @@ -0,0 +1,7 @@ +import sys +import logging + +logging.basicConfig(stream=sys.stderr) +sys.path.insert(0, "/app.py") + +from app import app as application \ No newline at end of file From db6fa156c9b33c55fbf51990db8db60d2f42d7fa Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Thu, 28 Nov 2024 13:21:24 +0100 Subject: [PATCH 04/14] Update WSGI path to point to the correct application directory --- src/Python/wsgi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Python/wsgi.py b/src/Python/wsgi.py index d9c2cef..8d0f393 100644 --- a/src/Python/wsgi.py +++ b/src/Python/wsgi.py @@ -2,6 +2,6 @@ import sys import logging logging.basicConfig(stream=sys.stderr) -sys.path.insert(0, "/app.py") +sys.path.insert(0, "/home/rooziinuubii79/src/Python/flask/web") from app import app as application \ No newline at end of file From 62cdf98098ad5ae4a632567fb7da8beee0532e70 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Sat, 30 Nov 2024 15:18:01 +0100 Subject: [PATCH 05/14] testing phpmyadmin --- src/Python/flask/web/app.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Python/flask/web/app.py b/src/Python/flask/web/app.py index 60ddd63..e979435 100644 --- a/src/Python/flask/web/app.py +++ b/src/Python/flask/web/app.py @@ -43,6 +43,10 @@ def move(): def data(): return kobuki_message +@app.route('/phpmyadmin/') +def phpmyadmin_passthrough(path): + # Laat Apache deze route direct afhandelen + return "", 404 From 80fcb1ccc30dcedf96975ad8086853b73cd7a409 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Mon, 2 Dec 2024 09:13:34 +0100 Subject: [PATCH 06/14] daily stand up 02/12/2024 --- docs/scrum/daily_stand_up.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/scrum/daily_stand_up.md b/docs/scrum/daily_stand_up.md index 730ae05..9b0aacd 100644 --- a/docs/scrum/daily_stand_up.md +++ b/docs/scrum/daily_stand_up.md @@ -14,4 +14,7 @@ | 26/11/2024 | Ishak | database | fix database, engels video opnemen | phpmyadmin werkt niet(weet probleem) | | 26/11/2024 | Sam | opencv | opencv | --- | | 26/11/2024 | Yannick | ziek | ziek | --- | - | 26/11/2024 | Mees | Engels video | stepper motor | vscode werkt niet | \ No newline at end of file + | 26/11/2024 | Mees | Engels video | stepper motor | vscode werkt niet | + | 02/12/2024 | Ishak | database | database | phpmyadmin werkt niet(weet probleem) | + | 02/12/2024 | Sam | opencv | camera beeld op website | --- | + | 02/12/2024 | Yannick | ziek, documentatie | behuizing voor esp | --- | \ No newline at end of file From eb04d35d40fc6fa30e005cb9f0b5ff2c59bd9793 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Mon, 2 Dec 2024 10:13:42 +0100 Subject: [PATCH 07/14] changed path --- src/Python/wsgi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Python/wsgi.py b/src/Python/wsgi.py index 8d0f393..ec77ef1 100644 --- a/src/Python/wsgi.py +++ b/src/Python/wsgi.py @@ -2,6 +2,6 @@ import sys import logging logging.basicConfig(stream=sys.stderr) -sys.path.insert(0, "/home/rooziinuubii79/src/Python/flask/web") +sys.path.insert(0, "/home/ishak/rooziinuubii79/src/Python/flask/web") from app import app as application \ No newline at end of file From 2e5af52ba86d388a72630da95472c528345ccba4 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Mon, 2 Dec 2024 12:45:26 +0100 Subject: [PATCH 08/14] changed mqtt port to 8080 --- src/Python/flask/web/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Python/flask/web/app.py b/src/Python/flask/web/app.py index e979435..28c0ea8 100644 --- a/src/Python/flask/web/app.py +++ b/src/Python/flask/web/app.py @@ -10,7 +10,7 @@ def on_message(client, userdata, message): # Create an MQTT client instance mqtt_client = mqtt.Client() mqtt_client.username_pw_set("server", "serverwachtwoordofzo") -mqtt_client.connect("localhost", 1884, 60) +mqtt_client.connect("localhost", 8080, 60) mqtt_client.loop_start() mqtt_client.subscribe("kobuki/data") mqtt_client.on_message = on_message # this lines needs to be under the function definition otherwise it cant find which function it needs to use From 1563528b671932b1a261b8129e859a100890560e Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Mon, 2 Dec 2024 13:32:45 +0100 Subject: [PATCH 09/14] changed file location --- src/Python/flask/web/static/{images => }/script.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Python/flask/web/static/{images => }/script.js (100%) diff --git a/src/Python/flask/web/static/images/script.js b/src/Python/flask/web/static/script.js similarity index 100% rename from src/Python/flask/web/static/images/script.js rename to src/Python/flask/web/static/script.js From dd2a1b56c439933952907a5d61d5ec077e2fdc3a Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 2 Dec 2024 12:58:14 +0000 Subject: [PATCH 10/14] changed port --- src/Python/flask/web/app.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Python/flask/web/app.py b/src/Python/flask/web/app.py index 28c0ea8..311d6ab 100644 --- a/src/Python/flask/web/app.py +++ b/src/Python/flask/web/app.py @@ -3,14 +3,16 @@ import paho.mqtt.client as mqtt app = Flask(__name__) +kobuki_message = "empty" def on_message(client, userdata, message): global kobuki_message #set scope for this variable kobuki_message = str(message.payload.decode("utf-8")) + print(kobuki_message) # Create an MQTT client instance mqtt_client = mqtt.Client() mqtt_client.username_pw_set("server", "serverwachtwoordofzo") -mqtt_client.connect("localhost", 8080, 60) +mqtt_client.connect("localhost", 1884, 60) mqtt_client.loop_start() mqtt_client.subscribe("kobuki/data") mqtt_client.on_message = on_message # this lines needs to be under the function definition otherwise it cant find which function it needs to use From a03894e52ef2115122e986ed9df62e02cb3b934a Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Tue, 3 Dec 2024 12:18:02 +0100 Subject: [PATCH 11/14] changed MQTT connection port from 1884 to 80 --- src/Python/flask/web/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Python/flask/web/app.py b/src/Python/flask/web/app.py index 311d6ab..3fc45f6 100644 --- a/src/Python/flask/web/app.py +++ b/src/Python/flask/web/app.py @@ -12,7 +12,7 @@ def on_message(client, userdata, message): # Create an MQTT client instance mqtt_client = mqtt.Client() mqtt_client.username_pw_set("server", "serverwachtwoordofzo") -mqtt_client.connect("localhost", 1884, 60) +mqtt_client.connect("localhost", 80, 60) mqtt_client.loop_start() mqtt_client.subscribe("kobuki/data") mqtt_client.on_message = on_message # this lines needs to be under the function definition otherwise it cant find which function it needs to use From 5eff7fccba75c25769eae2a8efa077d8b8fe279a Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Tue, 3 Dec 2024 12:45:18 +0100 Subject: [PATCH 12/14] fix --- docs/scrum/daily_stand_up.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scrum/daily_stand_up.md b/docs/scrum/daily_stand_up.md index 9b0aacd..0a6dbe7 100644 --- a/docs/scrum/daily_stand_up.md +++ b/docs/scrum/daily_stand_up.md @@ -11,10 +11,10 @@ | 19/11/2024 | Sam | Engels, Feedback verwerken | workshop | None | | 19/11/2024 | Yannick | code samenvoegen,schema maken | workshop, documentatie | None | | 19/11/2024 | Mees | niks | workshop, fixen include path | include path werkt niet | - | 26/11/2024 | Ishak | database | fix database, engels video opnemen | phpmyadmin werkt niet(weet probleem) | + | 26/11/2024 | Ishak | Workshop | database, engels video opnemen | phpmyadmin werkt niet(weet probleem) | | 26/11/2024 | Sam | opencv | opencv | --- | | 26/11/2024 | Yannick | ziek | ziek | --- | | 26/11/2024 | Mees | Engels video | stepper motor | vscode werkt niet | - | 02/12/2024 | Ishak | database | database | phpmyadmin werkt niet(weet probleem) | + | 02/12/2024 | Ishak | database | database | --- | | 02/12/2024 | Sam | opencv | camera beeld op website | --- | | 02/12/2024 | Yannick | ziek, documentatie | behuizing voor esp | --- | \ No newline at end of file From 6efd95fb32cad844d129ca14d3e6f2cb957a8255 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Tue, 3 Dec 2024 13:34:43 +0100 Subject: [PATCH 13/14] feedback sprint 4 --- docs/scrum/review_feedback.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/scrum/review_feedback.md diff --git a/docs/scrum/review_feedback.md b/docs/scrum/review_feedback.md new file mode 100644 index 0000000..2825d47 --- /dev/null +++ b/docs/scrum/review_feedback.md @@ -0,0 +1,10 @@ +# sprint review 4 feedback + +- Definition of done SMART maken +- Uitgebreider beschrijven wat er voor de definition of done nodig is +- Testen van de software niet meer dan een halve A4 +- Acceptatie criteria beter uitschrijven( vragen aan ed) +- Meer software ontwikkelen +- kijken of we met een punten systeem kunnen werken in user stories. zo kan je zien hoe groot een user story is. +- read.me file aanpassen +- meer aan documentatie doen. \ No newline at end of file From 606506e40c5e721666e2a6937083a11b96f1df58 Mon Sep 17 00:00:00 2001 From: "ishak jmilou.ishak" Date: Tue, 3 Dec 2024 13:37:44 +0100 Subject: [PATCH 14/14] update review feedback with additional documentation and planning notes --- docs/scrum/review_feedback.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/scrum/review_feedback.md b/docs/scrum/review_feedback.md index 2825d47..84b4121 100644 --- a/docs/scrum/review_feedback.md +++ b/docs/scrum/review_feedback.md @@ -7,4 +7,6 @@ - Meer software ontwikkelen - kijken of we met een punten systeem kunnen werken in user stories. zo kan je zien hoe groot een user story is. - read.me file aanpassen -- meer aan documentatie doen. \ No newline at end of file +- meer aan documentatie doen. +- technisch iets te uitdagend +- planning beter maken \ No newline at end of file