diff --git a/Dockerfile b/Dockerfile index cf2fed7..e4df7af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,8 @@ FROM python:3.12-alpine3.20 AS pip_build_stage COPY ./python/requierements.txt / +RUN pip3.12 install setuptools + RUN apk add \ make \ git \ diff --git a/example.env b/example.env index 37d421d..74b7ca3 100644 --- a/example.env +++ b/example.env @@ -4,7 +4,7 @@ NAME= INTERACTIVE=true BUILD=true API=true -DEBUG=INFO +DEBUG=DEBUG MODE=1 LOOP=20 TIMEOUT=20 \ No newline at end of file diff --git a/python/src/api_endpoints.py b/python/src/api_endpoints.py index 79d830d..efc3732 100644 --- a/python/src/api_endpoints.py +++ b/python/src/api_endpoints.py @@ -23,6 +23,9 @@ class API: def serve_root(): workdir, filename = os.path.split(os.path.abspath(__file__)) update = check_for_update() + files = os.listdir(f'{workdir}/data') + for file in files: + if not file.endswith('.json'): files.remove(file) root_dict = { "version": { "version": os.getenv('VERSION'), @@ -34,14 +37,15 @@ class API: "name": os.getenv('NAME'), "info": { "files_size_sum": self.get_file_size(), - "files": os.listdir(f'{workdir}/data') + "files": files } } return jsonify(root_dict) - @self.app.route('/api/json/') + @self.app.route('/api/') @cross_origin() def serve_json(path): + workdir, filename = os.path.split(os.path.abspath(__file__)) return send_from_directory(f'{workdir}/data', path) @self.app.route('/charts') diff --git a/python/src/ble_discovery.py b/python/src/ble_discovery.py index 5cecc10..c812b76 100644 --- a/python/src/ble_discovery.py +++ b/python/src/ble_discovery.py @@ -18,18 +18,16 @@ class ScanDelegate(DefaultDelegate): global devices for (sdid, desc, val) in dev.getScanData(): - if self.is_temperature(sdid, val): - data_obj = Data(val) + if not self.is_temperature(sdid, val): continue + data_obj = Data(val) - if self.is_atc_device(dev, data_obj): - device_from_config = get_device(dev) - devices.append([dev, data_obj, device_from_config]) + if self.is_atc_device(dev, data_obj): + device_from_config = get_device(dev) + devices.append([dev, data_obj, device_from_config]) @staticmethod def is_temperature(sdid, val): - if sdid != 22: return False - if len(val) != 30: return False - return True + return sdid == 22 and len(val) == 30 @staticmethod def is_atc_device(dev, data_obj): @@ -40,8 +38,8 @@ class ScanDelegate(DefaultDelegate): device_from_config = get_device(dev) - try:logger.info(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: {device_from_config.room}") - except:logger.info(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: ?") + room = device_from_config.room if device_from_config.room is not None else '?' + logger.info(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: {room}") logger.info(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%') return True diff --git a/python/src/config.py b/python/src/config.py new file mode 100644 index 0000000..3e60dbe --- /dev/null +++ b/python/src/config.py @@ -0,0 +1,8 @@ +import sys +from dataclasses import dataclass + + +@dataclass +class Config: + API_PORT:int + diff --git a/python/src/gateway_discovery.py b/python/src/gateway_discovery.py index 523e7ed..32aad1b 100644 --- a/python/src/gateway_discovery.py +++ b/python/src/gateway_discovery.py @@ -18,7 +18,7 @@ PORT_SERVER = 9434 PORT_CLIENT = 9435 -def create_socket(): +def create_udp_socket(): sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) @@ -28,7 +28,7 @@ def create_socket(): def start_discovery_server(): """Serves the UDP socket for UDP broadcast discovery""" logger = get_logger(__name__) - sock = create_socket() + sock = create_udp_socket() server_address = ('', PORT_SERVER) local_ip = FindMyIP.internal() @@ -57,7 +57,7 @@ def start_discovery_server(): def start_discovery_client(): print("Started discovery client") - sock = create_socket() + sock = create_udp_socket() sock.settimeout(SOCKET_TIMEOUT) server_address = ('255.255.255.255', PORT_SERVER) start_time_stamp = get_unix_time() diff --git a/python/src/log_data.py b/python/src/log_data.py index 1c8b4c3..d31b87f 100644 --- a/python/src/log_data.py +++ b/python/src/log_data.py @@ -20,8 +20,14 @@ def log_to_json(devices): try: with open(file_name, 'r') as file: data = json.load(file) except: - with open(file_name, 'w') as file: file.write("[]") - data = [] + with open(file_name, 'w') as file: + new_file = { + "name": from_config.name if from_config is not None else "Unknown", + "room": from_config.room if from_config is not None else "Unknown", + "measurements": [] + } + file.write(json.dumps(new_file)) + data = new_file measurements = { "timestamp": data_obj.timestamp, @@ -29,13 +35,11 @@ def log_to_json(devices): "humidity": data_obj.humidity, "battery_percent": data_obj.battery_percent, "battery_volt": data_obj.battery_volt, - "rssi": dev.rssi, - "name": from_config.name if from_config is not None else "Unknown", - "room": from_config.room if from_config is not None else "Unknown" + "rssi": dev.rssi } - data.append(measurements) + data['measurements'].append(measurements) - logger.debug(measurements) + # logger.debug(measurements) with open(file_name, 'w') as file: file.write(json.dumps(data, indent=2))