fix api and stuff
This commit is contained in:
parent
387c41db05
commit
249b111e67
@ -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 \
|
||||||
|
|||||||
@ -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
|
||||||
@ -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')
|
||||||
|
|||||||
@ -18,7 +18,7 @@ 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):
|
||||||
@ -27,9 +27,7 @@ class ScanDelegate(DefaultDelegate):
|
|||||||
|
|
||||||
@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
8
python/src/config.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import sys
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Config:
|
||||||
|
API_PORT:int
|
||||||
|
|
||||||
@ -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()
|
||||||
|
|||||||
@ -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))
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user