Files
mkcontrol-app/app/__init__.py
T
2026-10-05 11:33:37 +02:00

74 lines
2.3 KiB
Python

# app/__init__.py (App-Factory)
import logging
import threading
import time
import os
from flask import Flask
from .utils.logging import setup_logging, cleanup_old_log_dirs
from .bluetooth.manager import init_bluetooth
logger = logging.getLogger(__name__) # ← Logger für diese Datei
def create_app():
app = Flask(__name__,
template_folder='../templates', # ← Root/templates statt app/templates
static_folder='../static') # ← Root/static
# Config laden
app.config.from_object('config.Config')
# Logging zuerst (vor allem anderen)
setup_logging(app)
# Bluetooth initialisieren (Monitor-Thread startet automatisch)
init_bluetooth()
# pygame initialisieren (einmalig). Ein Audiofehler darf die Hub-Steuerung
# nicht am Start hindern; die API versucht die Initialisierung später erneut.
from config import Config
if Config.AUDIO_DEVICE:
os.environ['AUDIODEV'] = Config.AUDIO_DEVICE
import pygame
try:
init_args = {
'frequency': Config.AUDIO_FREQ,
'size': Config.AUDIO_SIZE,
'channels': Config.AUDIO_CHANNELS,
'buffer': Config.AUDIO_BUFFER,
}
if Config.AUDIO_DEVICE:
init_args['devicename'] = Config.AUDIO_DEVICE
pygame.mixer.init(**init_args)
pygame.mixer.set_num_channels(Config.AUDIO_NUM_CHANNELS)
pygame.mixer.music.set_volume(0.8)
app.logger.info(f"pygame initialisiert (Gerät: {Config.AUDIO_DEVICE or 'SDL-Standard'})")
except pygame.error as e:
app.logger.error(f"Audio konnte nicht initialisiert werden: {e}")
if Config.AUDIO_REQUIRED:
raise
# Blueprints registrieren
from .routes.main import main_bp
from .routes.admin import admin_bp
from .routes.api import api_bp
# Blueprints registrieren
app.register_blueprint(main_bp)
app.register_blueprint(admin_bp, url_prefix='/admin')
app.register_blueprint(api_bp, url_prefix='/api')
# Täglicher Cleanup-Thread starten (einmalig)
def daily_cleanup():
while True:
cleanup_old_log_dirs(90)
time.sleep(86400) # 24 Stunden
cleanup_thread = threading.Thread(target=daily_cleanup, daemon=True)
cleanup_thread.start()
logger.info("Täglicher Log-Cleanup-Thread gestartet (24h Intervall)")
return app