fix api and stuff

This commit is contained in:
DasMoorhuhn 2024-09-11 15:58:30 +02:00
parent 387c41db05
commit 249b111e67
7 changed files with 39 additions and 23 deletions

View File

@ -3,6 +3,8 @@ FROM python:3.12-alpine3.20 AS pip_build_stage
COPY ./python/requierements.txt / COPY ./python/requierements.txt /
RUN pip3.12 install setuptools
RUN apk add \ RUN apk add \
make \ make \
git \ git \

View File

@ -4,7 +4,7 @@ NAME=
INTERACTIVE=true INTERACTIVE=true
BUILD=true BUILD=true
API=true API=true
DEBUG=INFO DEBUG=DEBUG
MODE=1 MODE=1
LOOP=20 LOOP=20
TIMEOUT=20 TIMEOUT=20

View File

@ -23,6 +23,9 @@ class API:
def serve_root(): def serve_root():
workdir, filename = os.path.split(os.path.abspath(__file__)) workdir, filename = os.path.split(os.path.abspath(__file__))
update = check_for_update() update = check_for_update()
files = os.listdir(f'{workdir}/data')
for file in files:
if not file.endswith('.json'): files.remove(file)
root_dict = { root_dict = {
"version": { "version": {
"version": os.getenv('VERSION'), "version": os.getenv('VERSION'),
@ -34,14 +37,15 @@ class API:
"name": os.getenv('NAME'), "name": os.getenv('NAME'),
"info": { "info": {
"files_size_sum": self.get_file_size(), "files_size_sum": self.get_file_size(),
"files": os.listdir(f'{workdir}/data') "files": files
} }
} }
return jsonify(root_dict) return jsonify(root_dict)
@self.app.route('/api/json/<path:path>') @self.app.route('/api/<path:path>')
@cross_origin() @cross_origin()
def serve_json(path): def serve_json(path):
workdir, filename = os.path.split(os.path.abspath(__file__))
return send_from_directory(f'{workdir}/data', path) return send_from_directory(f'{workdir}/data', path)
@self.app.route('/charts') @self.app.route('/charts')

View File

@ -18,18 +18,16 @@ class ScanDelegate(DefaultDelegate):
global devices global devices
for (sdid, desc, val) in dev.getScanData(): for (sdid, desc, val) in dev.getScanData():
if self.is_temperature(sdid, val): if not self.is_temperature(sdid, val): continue
data_obj = Data(val) data_obj = Data(val)
if self.is_atc_device(dev, data_obj): if self.is_atc_device(dev, data_obj):
device_from_config = get_device(dev) device_from_config = get_device(dev)
devices.append([dev, data_obj, device_from_config]) devices.append([dev, data_obj, device_from_config])
@staticmethod @staticmethod
def is_temperature(sdid, val): def is_temperature(sdid, val):
if sdid != 22: return False return sdid == 22 and len(val) == 30
if len(val) != 30: return False
return True
@staticmethod @staticmethod
def is_atc_device(dev, data_obj): def is_atc_device(dev, data_obj):
@ -40,8 +38,8 @@ class ScanDelegate(DefaultDelegate):
device_from_config = get_device(dev) 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}") room = device_from_config.room if device_from_config.room is not None else '?'
except:logger.info(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: ?") 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}%') logger.info(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%')
return True return True

8
python/src/config.py Normal file
View File

@ -0,0 +1,8 @@
import sys
from dataclasses import dataclass
@dataclass
class Config:
API_PORT:int

View File

@ -18,7 +18,7 @@ PORT_SERVER = 9434
PORT_CLIENT = 9435 PORT_CLIENT = 9435
def create_socket(): def create_udp_socket():
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
@ -28,7 +28,7 @@ def create_socket():
def start_discovery_server(): def start_discovery_server():
"""Serves the UDP socket for UDP broadcast discovery""" """Serves the UDP socket for UDP broadcast discovery"""
logger = get_logger(__name__) logger = get_logger(__name__)
sock = create_socket() sock = create_udp_socket()
server_address = ('', PORT_SERVER) server_address = ('', PORT_SERVER)
local_ip = FindMyIP.internal() local_ip = FindMyIP.internal()
@ -57,7 +57,7 @@ def start_discovery_server():
def start_discovery_client(): def start_discovery_client():
print("Started discovery client") print("Started discovery client")
sock = create_socket() sock = create_udp_socket()
sock.settimeout(SOCKET_TIMEOUT) sock.settimeout(SOCKET_TIMEOUT)
server_address = ('255.255.255.255', PORT_SERVER) server_address = ('255.255.255.255', PORT_SERVER)
start_time_stamp = get_unix_time() start_time_stamp = get_unix_time()

View File

@ -20,8 +20,14 @@ def log_to_json(devices):
try: try:
with open(file_name, 'r') as file: data = json.load(file) with open(file_name, 'r') as file: data = json.load(file)
except: except:
with open(file_name, 'w') as file: file.write("[]") with open(file_name, 'w') as file:
data = [] 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 = { measurements = {
"timestamp": data_obj.timestamp, "timestamp": data_obj.timestamp,
@ -29,13 +35,11 @@ def log_to_json(devices):
"humidity": data_obj.humidity, "humidity": data_obj.humidity,
"battery_percent": data_obj.battery_percent, "battery_percent": data_obj.battery_percent,
"battery_volt": data_obj.battery_volt, "battery_volt": data_obj.battery_volt,
"rssi": dev.rssi, "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"
} }
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)) with open(file_name, 'w') as file: file.write(json.dumps(data, indent=2))