165 lines
5.7 KiB
Python
165 lines
5.7 KiB
Python
"""
|
|
Configuration settings for Prezenta Work application
|
|
All server addresses and credentials are managed here
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# Base directories
|
|
BASE_DIR = Path(__file__).parent
|
|
DATA_DIR = BASE_DIR / "data"
|
|
FILES_DIR = BASE_DIR / "Files"
|
|
LOGS_DIR = DATA_DIR
|
|
|
|
# Ensure directories exist
|
|
DATA_DIR.mkdir(exist_ok=True)
|
|
FILES_DIR.mkdir(exist_ok=True)
|
|
LOGS_DIR.mkdir(exist_ok=True)
|
|
|
|
# ============================================================================
|
|
# SERVER CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# Monitoring Server (Server_Monitorizare)
|
|
MONITORING_SERVER_HOST = os.environ.get('MONITORING_SERVER_HOST', '192.168.1.103')
|
|
MONITORING_SERVER_PORT = int(os.environ.get('MONITORING_SERVER_PORT', 80))
|
|
MONITORING_SERVER_URL = f"http://{MONITORING_SERVER_HOST}:{MONITORING_SERVER_PORT}/logs"
|
|
|
|
# Auto-Update Server
|
|
AUTO_UPDATE_SERVER_HOST = os.environ.get('AUTO_UPDATE_SERVER_HOST', '192.168.1.103')
|
|
AUTO_UPDATE_SERVER_USER = os.environ.get('AUTO_UPDATE_SERVER_USER', 'pi')
|
|
AUTO_UPDATE_SERVER_PASSWORD = os.environ.get('AUTO_UPDATE_SERVER_PASSWORD', 'Initial01!')
|
|
AUTO_UPDATE_SERVER_APP_PATH = "/home/pi/Desktop/prezenta/app.py"
|
|
AUTO_UPDATE_SERVER_REPO_PATH = "/home/pi/Desktop/prezenta/Files/reposytory"
|
|
|
|
# Network Connectivity Check
|
|
CONNECTIVITY_CHECK_HOST = os.environ.get('CONNECTIVITY_CHECK_HOST', '192.168.1.103')
|
|
CONNECTIVITY_CHECK_INTERVAL = 2700 # 45 minutes in seconds
|
|
|
|
# ============================================================================
|
|
# LOCAL CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# File paths
|
|
DEVICE_INFO_FILE = DATA_DIR / "device_info.txt"
|
|
ID_MASA_FILE = DATA_DIR / "idmasa.txt"
|
|
TAG_FILE = DATA_DIR / "tag.txt"
|
|
LOG_FILE = LOGS_DIR / "log.txt"
|
|
|
|
# Logging
|
|
LOG_FILENAME = str(LOG_FILE)
|
|
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
|
|
LOG_RETENTION_DAYS = 10
|
|
|
|
# ============================================================================
|
|
# FLASK APPLICATION CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# Try to use FLASK_PORT from environment, default to 80
|
|
FLASK_PORT = int(os.environ.get('FLASK_PORT', 80))
|
|
FLASK_HOST = '0.0.0.0'
|
|
FLASK_DEBUG = False
|
|
FLASK_USE_RELOADER = False
|
|
|
|
# Preferred ports for fallback (in order of preference)
|
|
PREFERRED_PORTS = [
|
|
FLASK_PORT,
|
|
80,
|
|
5000,
|
|
8080,
|
|
3000
|
|
]
|
|
|
|
# ============================================================================
|
|
# REQUEST CONFIGURATION
|
|
# ============================================================================
|
|
|
|
REQUEST_TIMEOUT = 5 # seconds
|
|
UPDATE_TIMEOUT = 30 # seconds for version check
|
|
REPO_SYNC_TIMEOUT = 60 # seconds for repository sync
|
|
|
|
# ============================================================================
|
|
# HARDWARE CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# Serial devices for RFID reader (in order of preference)
|
|
SERIAL_DEVICES = [
|
|
'/dev/ttyS0', # Raspberry Pi default
|
|
'/dev/ttyAMA0', # Alternative Pi UART
|
|
'/dev/ttyUSB0', # USB serial adapter
|
|
'/dev/ttyACM0' # USB CDC ACM device
|
|
]
|
|
|
|
# GPIO devices
|
|
GPIO_DEVICES = ['/dev/gpiomem', '/dev/mem']
|
|
|
|
# ============================================================================
|
|
# SYSTEM CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# Commands allowed to execute via /execute_command endpoint
|
|
ALLOWED_COMMANDS = [
|
|
"sudo apt update",
|
|
"sudo apt upgrade -y",
|
|
"sudo apt autoremove -y",
|
|
"sudo apt autoclean",
|
|
"sudo reboot",
|
|
"sudo shutdown -h now",
|
|
"df -h",
|
|
"free -m",
|
|
"uptime",
|
|
"systemctl status",
|
|
"sudo systemctl restart networking",
|
|
"sudo systemctl restart ssh"
|
|
]
|
|
|
|
# Command execution timeout
|
|
COMMAND_TIMEOUT = 300 # 5 minutes
|
|
|
|
# ============================================================================
|
|
# RFID READER CONFIGURATION
|
|
# ============================================================================
|
|
|
|
# Special card IDs
|
|
CONFIG_CARD_ID = 12886709 # Card used for configuration
|
|
|
|
# ============================================================================
|
|
# DEPENDENCIES
|
|
# ============================================================================
|
|
|
|
# Required Python packages and their wheel files
|
|
REQUIRED_PACKAGES = {
|
|
'rdm6300': 'rdm6300-0.1.1-py3-none-any.whl',
|
|
'gpiozero': None, # System package
|
|
'requests': 'requests-2.32.3-py3-none-any.whl',
|
|
'aiohttp': 'aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl',
|
|
'flask': None, # Will try pip install if needed
|
|
'urllib3': 'urllib3-2.3.0-py3-none-any.whl',
|
|
'certifi': 'certifi-2025.1.31-py3-none-any.whl',
|
|
'charset_normalizer': 'charset_normalizer-3.4.1-py3-none-any.whl',
|
|
'idna': 'idna-3.10-py3-none-any.whl',
|
|
'multidict': 'multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl',
|
|
'aiosignal': 'aiosignal-1.3.2-py2.py3-none-any.whl',
|
|
'frozenlist': 'frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl',
|
|
'attrs': 'attrs-25.3.0-py3-none-any.whl',
|
|
'yarl': 'yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl',
|
|
'aiohappyeyeballs': 'aiohappyeyeballs-2.6.1-py3-none-any.whl',
|
|
'propcache': 'propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl'
|
|
}
|
|
|
|
REPOSITORY_PATH = FILES_DIR / "reposytory"
|
|
|
|
def load_from_env_file():
|
|
"""Load configuration from .env file if it exists"""
|
|
env_file = BASE_DIR / '.env'
|
|
if env_file.exists():
|
|
try:
|
|
from dotenv import load_dotenv
|
|
load_dotenv(env_file)
|
|
except ImportError:
|
|
print("Warning: python-dotenv not installed, skipping .env file")
|
|
|
|
# Load environment variables at startup
|
|
load_from_env_file()
|