Bisher entschied jede Arbeitsstation fuer sich, welche Zeilenenden ein Commit bekommt: Git fuer Windows setzt core.autocrlf=input in seiner System-Konfiguration, die NAS setzt nichts. Weil der Bestand ausserdem in sich gemischt war - 34 PHP-Dateien mit LF, 30 mit CRLF -, gab es gar kein richtiges Zeilenende, an das ein Werkzeug sich haette halten koennen. Jede Ergaenzung mit LF in einer CRLF-Datei ergab eine gemischte Datei; helper.php und js/solar/homeMQTT.js waren bereits so entstanden. .gitattributes macht die Zeilenenden zur Eigenschaft des Repositorys. LF, weil dieses Verzeichnis der Web-Ordner der NAS ist und von Linux ausgeliefert wird - und weil Git fuer Windows mit "input" ohnehin schon dorthin zeigt. restricted/WebAuthn bleibt ausgenommen und damit byteweise so, wie die Bibliothek geliefert wurde; darunter liegen 292 Zertifikate. Von den 47 geaenderten Dateien wurde nachgerechnet keine einzige im Inhalt angefasst - der Vergleich HEAD-ohne-CR gegen Index ist ueberall gleich. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
WLED Module
|
|
Enthält NUR Logik-spezifische Geräte-Discovery Logik
|
|
KEINE Datenbank-Operationen!
|
|
"""
|
|
|
|
import requests
|
|
import socket
|
|
import concurrent.futures
|
|
import logging
|
|
from typing import List, Dict, Optional, Tuple
|
|
from modules.base_module import BaseModule
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LogicModule(BaseModule):
|
|
"""
|
|
Logic Modul - Implementiert BaseModule Interface
|
|
Gibt nur Actors zurück, KEINE DB-Operationen
|
|
"""
|
|
|
|
def is_enabled(self) -> bool:
|
|
"""Prüft ob Logic aktiviert ist"""
|
|
return self.config.logic_enable
|
|
|
|
def discover(self) -> Tuple[List[Dict], List[Dict]]:
|
|
"""
|
|
Erzeugt Einträge für Sensorunabhängige Funktionen (Timer, Sonnenauf/untergang, Uhrzeiten, etc.)
|
|
|
|
Returns:
|
|
Tuple (actors, sensors) - WLED sind immer Actors
|
|
"""
|
|
logger.info("\n" + "=" * 60)
|
|
logger.info("LOGIC-GERÄTE WERDEN ERZEUGT")
|
|
logger.info("=" * 60)
|
|
|
|
actors = []
|
|
sensors = []
|
|
|
|
states = []
|
|
states.append({
|
|
'name': 'Uhrzeit',
|
|
'url': 'time',
|
|
'type': 'time',
|
|
'current_value': '13:45'
|
|
})
|
|
states.append({
|
|
'name': 'Datum',
|
|
'url': 'date',
|
|
'type': 'date',
|
|
'current_value': '20.03.2026'
|
|
})
|
|
states.append({
|
|
'name': 'Sonnenaufgang',
|
|
'url': 'sunrise',
|
|
'type': 'deltatime',
|
|
'current_value': '00:00'
|
|
})
|
|
states.append({
|
|
'name': 'Sonnenuntergang',
|
|
'url': 'sunset',
|
|
'type': 'deltatime',
|
|
'current_value': '00:00'
|
|
})
|
|
|
|
sensors.append({'type': 'LOGIC',
|
|
'name': "Zeitpunkt",
|
|
'url': f"Logic",
|
|
'commands': [],
|
|
'states': states})
|
|
|
|
return actors, sensors
|