Replace prints with logger
This commit is contained in:
parent
9747010caf
commit
4c6689007d
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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("")
|
|
||||||
|
|||||||
@ -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}")
|
||||||
|
|||||||
@ -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
18
python/src/logger.py
Normal 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
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user