From a0a550172681f1a18b4721924d4d2eaf2dacdfd9 Mon Sep 17 00:00:00 2001 From: Bram Barbieri Date: Fri, 5 Apr 2024 13:18:21 +0200 Subject: [PATCH] small documetnation updating --- docs/rpi-documentation/Databaseconnection.md | 7 +++++-- docs/rpi-documentation/MyConnection.png | Bin 0 -> 24663 bytes 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 docs/rpi-documentation/MyConnection.png diff --git a/docs/rpi-documentation/Databaseconnection.md b/docs/rpi-documentation/Databaseconnection.md index eed4d28..d239f19 100644 --- a/docs/rpi-documentation/Databaseconnection.md +++ b/docs/rpi-documentation/Databaseconnection.md @@ -5,9 +5,12 @@ The data we collected originated from live "nodes" which were small boxes equipp This collected data needed to be transmitted to a database to facilitate its presentation on a website we were developing. The website would retrieve the data from the database and display it in various formats. -Given the critical nature of this data connection for our project, it was imperative that it functioned reliably. Bram was tasked with designing a connection in Python between the WebSocket (live server) and the database (data storage). +This is what the connection would be inserted. +![my connection](MyConnection.png) -Since we had the WebSocket data on a Raspberry Pi, it made sense to implement the connection on the Pi itself. This presented an opportunity for Bram to acquire knowledge about Python, considering he initially lacked experience with this programming language. +Given the high demand of this data connection for our project, it was imprtant that it was reliably. Bram was given the task to designing a connection in Python between the WebSocket (live server) and the database (data storage). + +Since we had the WebSocket data on a Raspberry Pi, it made sense to make the connection on the Pi itself. This became an opportunity for Bram to gain knowledge about Python, considering he originaly didn't have experience with this programming language. ## Python code + explaination In the given Raspberry Pi, a file named "data.py" was created, from which this script could be called when needed. diff --git a/docs/rpi-documentation/MyConnection.png b/docs/rpi-documentation/MyConnection.png new file mode 100644 index 0000000000000000000000000000000000000000..6e35a146be6f31a4c67b03df6cfabaf571be5f64 GIT binary patch literal 24663 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 R{xg6rCr_B^lXWjf{|niGjhp}g literal 0 HcmV?d00001