From 47f66573270a773a9e778d59916c38f788472da8 Mon Sep 17 00:00:00 2001 From: mia Date: Wed, 21 May 2025 21:21:39 +0000 Subject: [PATCH 1/2] added matplotlib to plot graphs; elements are now sorted from newest to oldest; slight changes in html structure; --- shell.nix | 22 ++++++++------ shell.nix.old | 12 ++++++++ webserver/data.json | 4 ++- webserver/plots/sensor_001.png | Bin 0 -> 22314 bytes webserver/plots/sensor_002.png | Bin 0 -> 23712 bytes webserver/plots/sensor_003.png | Bin 0 -> 23137 bytes webserver/plots/test.png | Bin 0 -> 16912 bytes webserver/server.py | 51 +++++++++++++++++++++++++++++---- 8 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 shell.nix.old create mode 100644 webserver/plots/sensor_001.png create mode 100644 webserver/plots/sensor_002.png create mode 100644 webserver/plots/sensor_003.png create mode 100644 webserver/plots/test.png diff --git a/shell.nix b/shell.nix index 59b64dd..7c8b82d 100644 --- a/shell.nix +++ b/shell.nix @@ -1,10 +1,14 @@ { pkgs ? import {} }: -(pkgs.buildFHSUserEnv { - name = "pipzone"; - targetPkgs = pkgs: (with pkgs; [ - python313 - python313Packages.pip - python313Packages.virtualenv - ]); - runScript = "bash --init-file /etc/profile"; -}).env + +pkgs.mkShell { + buildInputs = [ + (pkgs.python3.withPackages (ps: with ps; [ + matplotlib + numpy + ])) + ]; + shellHook = '' + export SHELL=${pkgs.zsh}/bin/zsh + exec ${pkgs.zsh}/bin/zsh + ''; +} diff --git a/shell.nix.old b/shell.nix.old new file mode 100644 index 0000000..714bdea --- /dev/null +++ b/shell.nix.old @@ -0,0 +1,12 @@ +{ pkgs ? import {} }: +(pkgs.buildFHSUserEnv { + name = "venv"; + targetPkgs = pkgs: (with pkgs; [ + python312 + python312Packages.pip + python312Packages.virtualenv + python312Packages.matplotlib + ]); + runScript = "bash --init-file /etc/profile"; + # runScript = "zsh"; +}).env diff --git a/webserver/data.json b/webserver/data.json index 94bb1fd..af037db 100644 --- a/webserver/data.json +++ b/webserver/data.json @@ -18,7 +18,9 @@ "readings": [ { "ts": 1747814400, "value": 45.2 }, { "ts": 1747818000, "value": 47.1 }, - { "ts": 1747821600, "value": 46.8 } + { "ts": 1747821600, "value": 46.8 }, + { "ts": 1747821700, "value": 35.8 }, + { "ts": 1747821800, "value": 48.2 } ] }, { diff --git a/webserver/plots/sensor_001.png b/webserver/plots/sensor_001.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e6383a840a28b3d753b6cbb358907e1a663cce GIT binary patch literal 22314 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 literal 0 HcmV?d00001 diff --git a/webserver/plots/sensor_002.png b/webserver/plots/sensor_002.png new file mode 100644 index 0000000000000000000000000000000000000000..4b768f08f66b405086882c652f34235b4b9f92f0 GIT binary patch literal 23712 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 T6Mi&k;gm0|4_Q@N_$B`Z>L6dX literal 0 HcmV?d00001 diff --git a/webserver/plots/sensor_003.png b/webserver/plots/sensor_003.png new file mode 100644 index 0000000000000000000000000000000000000000..930084a19cfc7b0c35ea18d6b4c958f267bb930a GIT binary patch literal 23137 zcmd?RbySvLw>J6^!UKqaNOuSdl1g_7q6nf$OGrv1DUGx=h=`;h3J3x!(wzzlNJ@uv zODc8djrx1v{q65NWA8KeIscsBc;DgB=f2myVy?O7ysm4m&>Jd>g!t6>C=`lN>5BYK z6bjQ9g~Av|3zq0cD5I} zMY#DdFj_b{**l8z@YwwG0Jq(Ja~>uYtZ&c=p8XYVM-+<42>Cxow$!V8D3taWC3zWj zx8&uK2kMWvCR^4!8U%gc3a6iB2@5HGHT@=0+V*kcwJ_aB(}Nt&c8P}^?>!1;Vy9yX zxSyKpjP!gepKiX(@rdBjGlC>$-iP=NY>S>gKH(}V4>7UYYd!U6+eKVcx5QG-S9V6Q zE?$vEV=%*i{50gv^e7Veua^gh5¬G(w$*KNG3`fBe_pqBwTdyPfGW7K884C#R(F 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 literal 0 HcmV?d00001 diff --git a/webserver/server.py b/webserver/server.py index d32595d..2b45460 100644 --- a/webserver/server.py +++ b/webserver/server.py @@ -1,6 +1,10 @@ from http.server import BaseHTTPRequestHandler, HTTPServer from datetime import datetime import json +import matplotlib.pyplot as plt +import mimetypes + +mimetypes.add_type("image/png", ".png") # Opening JSON file f = open("data.json") @@ -16,26 +20,61 @@ for i in data["sensors"]: # Closing file f.close() + +def create_plot(id: str, unit: str, xaxis: list, yaxis: list): + plt.plot(xaxis, yaxis) + plt.title(id) + plt.xlabel("Time") + plt.ylabel(unit) + plt.savefig(f"plots/{id}.png") # Save to file + plt.close() + + htmldata = "" + +def sortfunc(körber): + return körber + + for i in sensors: type = sensors[i][0] unit = sensors[i][1] readings = "" - sensorrange = len(sensors[i][2]) if len(sensors[i][2]) < 5 else 4 + datapoints: list = [] + sensorrange = len(sensors[i][2]) if len(sensors[i][2]) < 5 else 5 for j in range(sensorrange): + datapoints.append([]) ts = sensors[i][2][j]["ts"] - time = datetime.fromtimestamp(ts).strftime("%d.%m.%Y %H:%M.%S") value = sensors[i][2][j]["value"] - readings += f"{time}: {value}{unit}
" + datapoints[j].append(ts) + datapoints[j].append(value) + datapoints[j].append(unit) + datapoints.sort(key=sortfunc, reverse=True) + + graphdata: list = [[], []] + for j in datapoints: + ts = j[0] + time = datetime.fromtimestamp(ts).strftime("%d.%m.%Y %H:%M.%S") + timeNoDate = datetime.fromtimestamp(ts).strftime("%H:%M.%S") + value = j[1] + unit = j[2] + # print(f"{time} {j}") + readings += f"{time}> {value}{unit}
" + graphdata[0].append(timeNoDate) + graphdata[1].append(value) + + create_plot(i, unit, graphdata[0], graphdata[1]) + htmldata += f"""

Id: {i}

Type: {type}

Readings:

{readings} + Graph
-

---------------------------------------------

+
""" html = f""" @@ -46,7 +85,7 @@ html = f""" Sensor Data