diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be40c27 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/webserver/plots/ 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 0000000..c7e6383 Binary files /dev/null and b/webserver/plots/sensor_001.png differ diff --git a/webserver/plots/sensor_002.png b/webserver/plots/sensor_002.png new file mode 100644 index 0000000..4b768f0 Binary files /dev/null and b/webserver/plots/sensor_002.png differ diff --git a/webserver/plots/sensor_003.png b/webserver/plots/sensor_003.png new file mode 100644 index 0000000..930084a Binary files /dev/null and b/webserver/plots/sensor_003.png differ diff --git a/webserver/plots/test.png b/webserver/plots/test.png new file mode 100644 index 0000000..1af3b86 Binary files /dev/null and b/webserver/plots/test.png differ 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