From 282b5d043b60adfb55cf41fcbc5145227f79fef7 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 17 Jun 2025 19:40:29 +0200 Subject: [PATCH 1/2] updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a380544..c2b74a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /webserver/static/plots/ +*_data.json From fc98a1283e979544e951bf974588578f8f94e4e5 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 17 Jun 2025 22:57:01 +0200 Subject: [PATCH 2/2] added websocktet support. all sensors should now send data to the webserver at the ip and port defined in sender.py. --- sensors/__pycache__/sender.cpython-311.pyc | Bin 0 -> 2335 bytes sensors/json/ky015_data.json | 30 - sensors/json/ky018_data.json | 3909 ++++++++++++++++- sensors/json/ky037_data.json | 4541 ++++++++++++++++++-- sensors/lichtwiderstandsSensor.py | 37 +- sensors/mikrofonSensor.py | 38 +- sensors/sender.py | 2 +- sensors/temperaturSensor.py | 32 +- 8 files changed, 8071 insertions(+), 518 deletions(-) create mode 100644 sensors/__pycache__/sender.cpython-311.pyc delete mode 100644 sensors/json/ky015_data.json diff --git a/sensors/__pycache__/sender.cpython-311.pyc b/sensors/__pycache__/sender.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e26f034d06574903da8d55b8d5f20617c5e458e7 GIT binary patch literal 2335 zcmb_cU2GFa5Z?QFmVws#BSUlUoB6I^`gqakI)kh}AIBPb>Vm8KM zF2-a26BHAO3kw%OA0hp3?80s=Vu?k>4V|5GzT*KyF__2K?Y08xsLrAY${`7z9!YcQi|f(b+`ILvL$s z@e+@N%HYm97PqX;7Ox|o0$lithZk|nPTX>HgihS-l(&(i(98QX6POu;3K>Ja>ldlo z@q!%PJs2L0grkx0F0ExdLWxF>VIQguanPTg1nCWAuG*Vw%uOCNUXbZpo*{IeZN}e) zt}&*xvX7b7mbVdRS6kmkU-8ZM3^L^v>!}9PRn)A9IeKT;*sDy5#{UXkWlQ2KLJ;7W z@S43c^i9Ec7v9Ic#v5T!M&62|$lx!rm$`9tiDA$SC#;HfW9bC|q7*Bvrqo-0!Roe3Pdq2qKp1l=m zUsc*?BTfiE3_cZoW&e@yj{<}C)6V)>5l5=xNLd_t8tD9D$Ia7~Ku{XFtAi?(=h{BbAQ6YDZs1?5~RbWwGCOgI~wF!~UQ!e^Rz0d)@5$^XIP<|0N>9 zQ}#qEe6-3(%gfCOz_IQe+&tvv9(nnpR`;WJ2Dl~0<7rjP#N&m)P+m)6Et6CZD*eha zbwYW|^3<;^9*IOP*(B*4(N#0AlRUlfNB0jc?u9Y=^JAc6?;Pl5E!H$F;i8(#le+XV zNO_CZu*I8Ka>U~E8O^jrC<}^YtO6Lc#L0YG!jH^888q_IE;+I?V=K963XPG6`_pDYBRrHM{ctkWNWlW=x+BlamF~W3ci*>qr91jyxEvgUR(qYseX|_g2hA3^ zjR9K{eSRBJ7IYl<)IweVv*V8TpvM+E+gvsRHa%)bkl>#lEov1$ROLfuJ_LvIw--O0 z9lSn1Gj5}Hq0?bSW+BuEdtKWXl&vMMG+G*-AH8#Q{%A#sRF%ksXgRbWn$59WI&DE{ z3&6Dj^Z%>C+Yh(=xThRC4DDs37GKD33$5!sHUd_Z?H(iriqh=PinysNZYqnLYGR MAX_ENTRIES: - data["readings"] = data["readings"][-MAX_ENTRIES:] + data["sensors"][0]["readings"].append(entry) + livetemp["sensors"][0]["readings"][0] = {entry} + if len(data["sensors"][0]["readings"]) > MAX_ENTRIES: + data["sensors"][0]["readings"] = data["sensors"][0]["readings"][-MAX_ENTRIES:] + + s(livetemp) + livetemp.clear() save_data(data) +print(load_data()) +s(load_data()) + try: while True: if light_pin.value: diff --git a/sensors/mikrofonSensor.py b/sensors/mikrofonSensor.py index f6e5958..8cf5cfe 100644 --- a/sensors/mikrofonSensor.py +++ b/sensors/mikrofonSensor.py @@ -3,9 +3,11 @@ import time import json from datetime import datetime import os +from sender import send_data as s SENSOR_PIN = 17 JSON_FILE = "json/ky037_data.json" +MAX_ENTRIES = 3000 INTERVAL = 1 GPIO.setmode(GPIO.BCM) @@ -14,10 +16,23 @@ GPIO.setup(SENSOR_PIN, GPIO.IN) datamikro = { "location": "Hausstrasse - 2", - "id": "sensor_001", - "type": "noise", - "unit": "bool", - "readings": [] + "sensors": [ + { + "id": "sensor_001", + "type": "noise", + "unit": "bool", + "readings": [] + } + ] +} +datalive = { + "location": "Hausstrasse - 2", + "sensors": [ + { + "id": "sensor_001", + "readings": [{}] + } + ] } def load_data(): @@ -34,17 +49,28 @@ def save_data(data): def capture_and_store(): state = GPIO.input(SENSOR_PIN) timestamp = int(time.time()) + data = load_data() noise = True if state == 0 else False + livetemp = datalive.copy() entry = { "ts": timestamp, "value": noise} - data = load_data() - data["readings"].append(entry) + data["sensors"][0]["readings"].append(entry) + livetemp["sensors"][0]["readings"][0] = (entry) + + if len(data["sensors"][0]["readings"]) > MAX_ENTRIES: + data["sensors"][0]["readings"] = data["sensors"][0]["readings"][-MAX_ENTRIES:] + + + s(livetemp) + livetemp.clear() save_data(data) dt_str = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S') print(f"[{dt_str}] Noise detected: {'YES' if noise else 'NO'}") +s(load_data()) + if __name__ == "__main__": print("Starting noise detection with KY-037") try: diff --git a/sensors/sender.py b/sensors/sender.py index 3d77fc2..91d17b9 100644 --- a/sensors/sender.py +++ b/sensors/sender.py @@ -2,7 +2,7 @@ import socket import json import time -SERVER_HOST = "127.0.0.1" +SERVER_HOST = "172.20.10.5" SERVER_PORT = 9999 def send_data(data): diff --git a/sensors/temperaturSensor.py b/sensors/temperaturSensor.py index 6f67186..4b02c5e 100644 --- a/sensors/temperaturSensor.py +++ b/sensors/temperaturSensor.py @@ -4,6 +4,7 @@ import adafruit_dht import json from datetime import datetime import os +from sender import send_data as s dhtDevice = adafruit_dht.DHT11(board.D23) @@ -26,6 +27,19 @@ datatemp = { } ] } +datalive = { + "location": "Hausstrasse - 3", + "sensors": [ + { + "id": "sensor_002", + "readings": [{}] + }, + { + "id": "sensor_003", + "readings": [{}] + } + ] +} def load_data(): if os.path.exists(json_file): @@ -43,18 +57,32 @@ max_entries=3000 def capture_and_store(temperature_c,humidity): timestamp = int(time.time()) data=load_data() + livetemp = datalive.copy() temp_sensor = next(s for s in data["sensors"] if s["type"] == "temperature") hum_sensor = next(s for s in data["sensors"] if s["type"] == "humidity") + livetemp_sensor = datalive["sensors"][0] + livehum_sensor = datalive["sensors"][1] - temp_sensor["readings"].append({"ts": timestamp, "value": temperature_c}) - hum_sensor["readings"].append({"ts": timestamp, "value": humidity}) + humentry = { "ts": timestamp, "value": humidity} + tempentry = { "ts": timestamp, "value": temperature_c} + + + temp_sensor["readings"].append(tempentry) + hum_sensor["readings"].append(humentry) + livetemp_sensor["readings"][0] = tempentry + livehum_sensor["readings"][0] = humentry if len(temp_sensor["readings"]) > max_entries: temp_sensor["readings"] = temp_sensor["readings"][-max_entries:] if len(hum_sensor["readings"]) > max_entries: hum_sensor["readings"] = hum_sensor["readings"][-max_entries:] + s(livetemp_sensor) + s(livehum_sensor) + livetemp.clear() + livetemp_sensor.clear() + livehum_sensor.clear() save_data(data)