Replace prints with logger

This commit is contained in:
DasMoorhuhn 2024-08-28 22:06:50 +02:00
parent 9747010caf
commit 4c6689007d
9 changed files with 74 additions and 46 deletions

0
.env Normal file
View File

View File

@ -38,7 +38,7 @@ FROM python:3.12-alpine3.20
WORKDIR /src
COPY ./python/src/ .
COPY ./python/docker_entrypoint.sh /
RUN mkdir data
RUN mkdir -p data/log
VOLUME /src/data
RUN apk add --no-cache sudo bluez tzdata

View File

@ -3,6 +3,8 @@ from bluepy.btle import Scanner
from data_class import Data
from devices import get_device
from logger import get_logger
logger = get_logger(__name__)
# This is the list, where the responses will be stored from the `handleDiscovery`
devices = []
@ -38,9 +40,9 @@ class ScanDelegate(DefaultDelegate):
device_from_config = get_device(dev)
try:print(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: {device_from_config.room}")
except:print(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: ?")
print(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%\n')
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: ?")
logger.info(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%')
return True
@ -52,7 +54,7 @@ def cleanup():
def start_discovery(timeout=20):
cleanup()
global devices
print(f'Start discovery with timout {timeout}s...')
logger.info(f'Start discovery with timout {timeout}s...')
scanner = Scanner().withDelegate(ScanDelegate())
scanner.scan(timeout=timeout, passive=False)

View File

@ -1,8 +1,10 @@
import os
import json
import requests
from logger import get_logger
DEBUG = True if os.environ.get('DEBUG') is not None else False
DEBUG = os.getenv('DEBUG') == 'true'
logger = get_logger(__name__)
class State:
@ -28,7 +30,7 @@ class Release:
def check_for_update():
try: version_current = int(os.getenv('VERSION').replace("-", ""))
except:
print("Error getting current version")
logger.error("Error getting current version")
return
project_id = 58341398
request = f"https://gitlab.com/api/v4/projects/{project_id}/releases"
@ -43,7 +45,7 @@ def check_for_update():
if release.version_int > latest[0]:
latest[0] = release.version_int
latest[1] = release
print(repr(latest)) if DEBUG else {}
logger.debug(repr(latest))
release = latest[1]
if release.version_int > version_current:
@ -64,11 +66,10 @@ def check_for_update():
def print_state(state:State):
if state is None: return
print(f"Current version: {os.getenv('VERSION')}")
logger.info(f"Current version: {os.getenv('VERSION')}")
if state.update_available:
print(f"Update available: {state.version_str}")
logger.info(f"Update available: {state.version_str}")
if state.up_to_date:
print(f"Up to date")
logger.info(f"Up to date")
if state.development:
print(f"Development Version")
print("")
logger.info(f"Development Version")

View File

@ -4,18 +4,20 @@ import os
import FindMyIP
from socket import *
from helpers import get_unix_time
from logger import get_logger
DEBUG = True if os.environ.get('DEBUG') is not None else False
DISCOVERY_ACK = 'IP_DISCOVERY_ACK'.encode() # ACK for broadcast
DISCOVERY_RSP_GTW = 'IP_DISCOVERY_RSP_GTW'.encode() # RSP for gateway
DISCOVERY_RSP_MSH = 'IP_DISCOVERY_RSP_MSH'.encode() # RSP for mesh
DISCOVERY_TIMEOUT = 20
SOCKET_TIMEOUT = 5
DISCOVERY_TIMEOUT = 1
SOCKET_TIMEOUT = 0.2
PORT_SERVER = 9434
PORT_CLIENT = 9435
def start_discovery_server():
logger = get_logger(__name__)
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
@ -23,22 +25,22 @@ def start_discovery_server():
local_ip = FindMyIP.internal()
try:
sock.bind(server_address)
print("Started discovery socket")
logger.info("Started discovery socket")
while True:
data, addr = sock.recvfrom(4096)
print(f"Received a packet from {addr}")
print(f"{addr[0]} | {local_ip}")
print(f"{data} | {DISCOVERY_ACK}")
logger.debug(f"Received a packet from {addr}")
logger.debug(f"{addr[0]} | {local_ip}")
logger.debug(f"{data} | {DISCOVERY_ACK}")
if data == DISCOVERY_ACK:
print("ACK accepted")
logger.debug("ACK accepted")
if str(addr[0]) == str(local_ip): continue
print("IP accepted")
logger.debug("IP accepted")
sock.sendto(DISCOVERY_RSP_GTW, (addr[0], PORT_CLIENT))
print(f"Send ACK to {addr}")
logger.debug(f"Send ACK to {addr}")
except Exception as err:
print(err)
logger.error(err)
sock.close()
@ -49,27 +51,27 @@ def start_discovery_client():
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
sock.settimeout(SOCKET_TIMEOUT)
server_address = ('255.255.255.255', PORT_SERVER)
local_ip = FindMyIP.internal()
start_time_stamp = get_unix_time()
delta = round(get_unix_time() - start_time_stamp, 2)
discovered_devices = []
try:
sock.bind(('', PORT_CLIENT))
while True:
while delta <= DISCOVERY_TIMEOUT:
delta = round(get_unix_time() - start_time_stamp, 2)
print(delta)
sock.sendto(DISCOVERY_ACK, server_address)
data, addr = sock.recvfrom(4096)
print('IP: ' + str(addr[0]))
if data == DISCOVERY_RSP_GTW or data == DISCOVERY_RSP_GTW and addr[0] not in discovered_devices:
if data == DISCOVERY_RSP_GTW or data == DISCOVERY_RSP_MSH:
if str(addr[0]) in discovered_devices: continue
print('IP: ' + str(addr[0]))
discovered_devices.append(addr[0])
discovered_devices.append(str(addr[0]))
except Exception as err:
print(err)
finally:
sock.close()
return discovered_devices
# start_discovery_client()
# devices = start_discovery_client()
# print(f"Devices: {devices}")

View File

@ -3,8 +3,10 @@ import sys
import json
from data_class import Data
from devices import Device
from logger import get_logger
logger = get_logger(__name__)
DEBUG = True if os.getenv('DEBUG') == 'true' else False
DEBUG = os.getenv('DEBUG') == 'true'
def log_to_json(devices):
@ -15,7 +17,7 @@ def log_to_json(devices):
data_obj: Data
from_config: Device
file_name = f'{workdir}/data/{str(data_obj.mac).replace(":", "-")}.json'
print(file_name) if DEBUG else {}
logger.debug(f"Save to {file_name}")
try:
with open(file_name, 'r') as file: data = json.load(file)
@ -35,7 +37,7 @@ def log_to_json(devices):
}
data.append(measurements)
print(measurements) if DEBUG else {}
logger.debug(measurements)
with open(file_name, 'w') as file: file.write(json.dumps(data, indent=2))

18
python/src/logger.py Normal file
View File

@ -0,0 +1,18 @@
import os
import logging
def get_logger(logger_name:str, log_file='gateway.log'):
logger_name = logger_name.replace('__', '')
DEBUG = os.getenv('DEBUG') == 'true'
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG) if DEBUG else logger.setLevel(logging.INFO)
handler = logging.FileHandler(filename=f'data/{log_file}', encoding='utf-8', mode='a')
formatter = logging.Formatter('%(asctime)s|%(levelname)s|%(name)s|:%(message)s')
handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.addHandler(handler)
logger.info(f"Logger {logger_name} init done")
return logger

View File

@ -1,10 +1,12 @@
from time import sleep
from log_data import log_to_json
from ble_discovery import start_discovery
from logger import get_logger
logger = get_logger(__name__)
def start_loop(interval=40, timeout=20):
print(f"Starting loop with interval {interval}s")
logger.info(f"Starting loop with interval {interval}s")
while True:
devices = start_discovery(timeout=timeout)
log_to_json(devices)

View File

@ -1,4 +1,5 @@
import os
from logger import get_logger
from ble_discovery import start_discovery
from log_data import log_to_json
from loop import start_loop
@ -7,27 +8,27 @@ from check_update import print_state
INTERVAL = 40
TIMEOUT = 20
DOCKER = True if os.getenv('DOCKER') == 'true' else False
DEBUG = True if os.getenv('DEBUG') == 'true' else False
DOCKER = os.getenv('DOCKER') == 'true'
DEBUG = os.getenv('DEBUG') == 'true'
interval = os.getenv('LOOP')
timeout = os.getenv('TIMEOUT')
if DEBUG:
print(f"INTERVAL: {INTERVAL}")
print(f"TIMEOUT: {TIMEOUT}")
print(f"interval: {interval}")
print(f"timeout: {timeout}")
print(f"DOCKER: {DOCKER}")
print(f"DEBUG: {DEBUG}")
print(f"VERSION: {os.getenv('VERSION')}")
print("")
logger = get_logger(__name__)
logger.debug(f"INTERVAL: {INTERVAL}")
logger.debug(f"TIMEOUT: {TIMEOUT}")
logger.debug(f"interval: {interval}")
logger.debug(f"timeout: {timeout}")
logger.debug(f"DOCKER: {DOCKER}")
logger.debug(f"DEBUG: {DEBUG}")
logger.debug(f"VERSION: {os.getenv('VERSION')}")
update_state = check_for_update()
print_state(update_state)
if DOCKER:
print("Running in docker")
logger.info('Running in Docker')
try:INTERVAL = int(interval)
except:pass