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 WORKDIR /src
COPY ./python/src/ . COPY ./python/src/ .
COPY ./python/docker_entrypoint.sh / COPY ./python/docker_entrypoint.sh /
RUN mkdir data RUN mkdir -p data/log
VOLUME /src/data VOLUME /src/data
RUN apk add --no-cache sudo bluez tzdata 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 data_class import Data
from devices import get_device 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` # This is the list, where the responses will be stored from the `handleDiscovery`
devices = [] devices = []
@ -38,9 +40,9 @@ class ScanDelegate(DefaultDelegate):
device_from_config = get_device(dev) device_from_config = get_device(dev)
try:print(f"Device: {dev.addr.upper()} ({dev.addrType}), RSSI: {dev.rssi}dB, Room: {device_from_config.room}") try:logger.info(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: ?") except:logger.info(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') logger.info(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%')
return True return True
@ -52,7 +54,7 @@ def cleanup():
def start_discovery(timeout=20): def start_discovery(timeout=20):
cleanup() cleanup()
global devices global devices
print(f'Start discovery with timout {timeout}s...') logger.info(f'Start discovery with timout {timeout}s...')
scanner = Scanner().withDelegate(ScanDelegate()) scanner = Scanner().withDelegate(ScanDelegate())
scanner.scan(timeout=timeout, passive=False) scanner.scan(timeout=timeout, passive=False)

View File

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

View File

@ -4,18 +4,20 @@ import os
import FindMyIP import FindMyIP
from socket import * from socket import *
from helpers import get_unix_time from helpers import get_unix_time
from logger import get_logger
DEBUG = True if os.environ.get('DEBUG') is not None else False DEBUG = True if os.environ.get('DEBUG') is not None else False
DISCOVERY_ACK = 'IP_DISCOVERY_ACK'.encode() # ACK for broadcast DISCOVERY_ACK = 'IP_DISCOVERY_ACK'.encode() # ACK for broadcast
DISCOVERY_RSP_GTW = 'IP_DISCOVERY_RSP_GTW'.encode() # RSP for gateway DISCOVERY_RSP_GTW = 'IP_DISCOVERY_RSP_GTW'.encode() # RSP for gateway
DISCOVERY_RSP_MSH = 'IP_DISCOVERY_RSP_MSH'.encode() # RSP for mesh DISCOVERY_RSP_MSH = 'IP_DISCOVERY_RSP_MSH'.encode() # RSP for mesh
DISCOVERY_TIMEOUT = 20 DISCOVERY_TIMEOUT = 1
SOCKET_TIMEOUT = 5 SOCKET_TIMEOUT = 0.2
PORT_SERVER = 9434 PORT_SERVER = 9434
PORT_CLIENT = 9435 PORT_CLIENT = 9435
def start_discovery_server(): def start_discovery_server():
logger = get_logger(__name__)
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)
@ -23,22 +25,22 @@ def start_discovery_server():
local_ip = FindMyIP.internal() local_ip = FindMyIP.internal()
try: try:
sock.bind(server_address) sock.bind(server_address)
print("Started discovery socket") logger.info("Started discovery socket")
while True: while True:
data, addr = sock.recvfrom(4096) data, addr = sock.recvfrom(4096)
print(f"Received a packet from {addr}") logger.debug(f"Received a packet from {addr}")
print(f"{addr[0]} | {local_ip}") logger.debug(f"{addr[0]} | {local_ip}")
print(f"{data} | {DISCOVERY_ACK}") logger.debug(f"{data} | {DISCOVERY_ACK}")
if data == DISCOVERY_ACK: if data == DISCOVERY_ACK:
print("ACK accepted") logger.debug("ACK accepted")
if str(addr[0]) == str(local_ip): continue if str(addr[0]) == str(local_ip): continue
print("IP accepted") logger.debug("IP accepted")
sock.sendto(DISCOVERY_RSP_GTW, (addr[0], PORT_CLIENT)) 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: except Exception as err:
print(err) logger.error(err)
sock.close() sock.close()
@ -49,27 +51,27 @@ def start_discovery_client():
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
sock.settimeout(SOCKET_TIMEOUT) sock.settimeout(SOCKET_TIMEOUT)
server_address = ('255.255.255.255', PORT_SERVER) server_address = ('255.255.255.255', PORT_SERVER)
local_ip = FindMyIP.internal()
start_time_stamp = get_unix_time() start_time_stamp = get_unix_time()
delta = round(get_unix_time() - start_time_stamp, 2) delta = round(get_unix_time() - start_time_stamp, 2)
discovered_devices = [] discovered_devices = []
try: try:
sock.bind(('', PORT_CLIENT)) sock.bind(('', PORT_CLIENT))
while True: while delta <= DISCOVERY_TIMEOUT:
delta = round(get_unix_time() - start_time_stamp, 2) delta = round(get_unix_time() - start_time_stamp, 2)
print(delta)
sock.sendto(DISCOVERY_ACK, server_address) sock.sendto(DISCOVERY_ACK, server_address)
data, addr = sock.recvfrom(4096) data, addr = sock.recvfrom(4096)
print('IP: ' + str(addr[0])) if data == DISCOVERY_RSP_GTW or data == DISCOVERY_RSP_MSH:
if data == DISCOVERY_RSP_GTW or data == DISCOVERY_RSP_GTW and addr[0] not in discovered_devices: if str(addr[0]) in discovered_devices: continue
print('IP: ' + str(addr[0])) print('IP: ' + str(addr[0]))
discovered_devices.append(addr[0]) discovered_devices.append(str(addr[0]))
except Exception as err: except Exception as err:
print(err) print(err)
finally: finally:
sock.close() 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 import json
from data_class import Data from data_class import Data
from devices import Device 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): def log_to_json(devices):
@ -15,7 +17,7 @@ def log_to_json(devices):
data_obj: Data data_obj: Data
from_config: Device from_config: Device
file_name = f'{workdir}/data/{str(data_obj.mac).replace(":", "-")}.json' 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: try:
with open(file_name, 'r') as file: data = json.load(file) with open(file_name, 'r') as file: data = json.load(file)
@ -35,7 +37,7 @@ def log_to_json(devices):
} }
data.append(measurements) 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)) 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 time import sleep
from log_data import log_to_json from log_data import log_to_json
from ble_discovery import start_discovery from ble_discovery import start_discovery
from logger import get_logger
logger = get_logger(__name__)
def start_loop(interval=40, timeout=20): 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: while True:
devices = start_discovery(timeout=timeout) devices = start_discovery(timeout=timeout)
log_to_json(devices) log_to_json(devices)

View File

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