- Internationalisierung der Kommentare
- parse_mode hinzugefügt (für Formatierungsmöglichkeiten) mit Auswahlmöglichkeit "HTML" und "MarkdownV2"
- Ergänzung in Dokumentation
- kleinere Korrekturen in Dokumentation
- Dokumentation um die Möglichkeit von Block-Strings (|) ergänzt (Danke sm7tix für den Input!)
Implementiert automatische Installation des 'colorama'-Pakets mit Fallback-Mechanismus (Dummy-Klassen) hinzu.
Erhöhung der Robustheit der Service-Installation.
**Breaking Changes / Fixes:**
- Korrigiert den ExecStart-Pfad im Server-Service von 'python' zu 'python3'.
- Ersetzt 'systemctl daemon-reexec' durch 'systemctl daemon-reload'.
**Verbesserungen (Improvements):**
- Führt Timeouts (5s/10s) für systemd-Befehle ('verify', 'is-active') ein.
- Standardisiert Dateivorgänge (YAML) auf UTF-8-Encoding.
- Sortiert gefundene YAML-Dateien alphabetisch.
- Codekommentare einheitlich auf Englisch
Errorcode führte zu Programmexit:
> 12.10.2025 02:20:39,918 - inputThread sdrInput _runThread [ERROR] error in sdr input routine
Traceback (most recent call last):
> File "/opt/boswatch3/boswatch/inputSource/sdrInput.py", line 65, in _runThread
> self.addToQueue(line)
> ...
> ValueError: invalid literal for int() with base 10: ' '
Ursache:
Die Funktion `_getBitrateRicSubric()` in `pocsagDecoder.py` griff fest auf `data[40]` zu, um den SubRIC-Wert zu ermitteln. Bei Fehlerhaften Datensätzen von multimon-ng kann sich die Position jedoch verschieben, wodurch an dieser Stelle ein Leerzeichen (' ') statt einer Ziffer stand. Dies führte zu einem ValueError und damit zum Abbruch des gesamten SDR-Threads.
Änderung:
Die Funktion wurde auf robuste Regex-Analyse umgestellt (analog fmsDecoder.py und pocsagDecoder.py):
- Bitrate, Address (RIC) und Function (SubRIC) werden nun mit regulären Ausdrücken extrahiert.
- Die ursprüngliche Logik (`subric = int(Function) + 1`) bleibt vollständig erhalten.
- Enthält die Zeile keine gültige Function, wird eine Warnung geloggt ("Invalid POCSAG function (not 0–3)")
- Zusätzliche Fehlerabsicherung durch try/except.
Ergebnis:
Der Decoder ist nun tolerant gegenüber Formatabweichungen und verhindert Abstürze bei fehlerhaften oder unvollständigen multimon-ng-Zeilen.
- Neues CLI-Interface via argparse für flexible Steuerung
- Unterstützt Dry-Run-Modus zur sicheren Vorschau
- Sprachumschaltung via --lang (de/en)
- Internationalisierung aller Ausgaben via `t()` und `TEXT`-Dict (Deutsch/Englisch)
- Logging mit farbiger Terminalausgabe und Logdatei (log/install/)
- YAML-Validierung und Service-Typ-Erkennung (client/server)
- Interaktive Benutzerführung für (De)Installation von Services
- Verbesserte Fehlerbehandlung und Nutzerabfragen mit Fallback
- DOKU:
- Install.md (Installation von BW3) ergänzt
- Service.md (für Install as a Service-Skript) zweisprachig (Deutsch/Englisch) ergänzt
- mkdocs um Seiten Install/Service/Usage.md ergänzt
Durch Einbau einer Warteschlange kein Datenverlust bei belegter API (Sendelimit ca. 30 Nachrichten/min, gibt aber Soft-Limit)
Exponentielles Backoff mit Maximalgrenze
Retry-Zähler mit Abbruch bei zu vielen Fehlversuchen
Kein Wiederholen bei permanenten Fehlern (400/401)
dynamische Zeitanpassung bei 429 Fehlern
Fehlerrobustheit verbessert hinsichtlich Connection Error
neues Plugin ohne telegram-bot
* Timeout (timeout=10),
* HTTP-Fehlerprüfung (raise_for_status()),
* Retry-Logik (3 Versuche mit wachsender Wartezeit),
* Sauberem Logging mit logger statt print).
send_location aus altem Skript übernommen und angepasst
Änderungen:
- Wildcard-Ersetzung in `replaceWildcards()` nach Paketmodus (fms, pocsag, zvei, msg) aufgeteilt
- Unnötige Wildcards werden nun abhängig vom Modus nicht mehr verarbeitet
- `{MSG}` wird nun explizit für den Modus `msg` unterstützt
- Kopfzeile mit aktuellem Änderungsdatum versehen
- Logdateipfad wird vor dem Aufruf von fileConfig() über builtins.log_filename gesetzt
- Entfernt manuelles Patchen des Loghandlers (BaseFilename, Stream etc.) nach dem Laden
- Logging-Konfiguration (logger_client.ini) wird nur noch einmal geladen
- logger_*.ini: Korrektur: interval=midnight ist nicht (mehr) offiziell unterstützt, Änderung auf korrekte Schreibweise (when=midnight, interval=1)
- Ändern der Kommentare auf Englisch (stringent zu anderen Kommentaren)
- Logdatei wird nun zur Laufzeit anhand des Konfigurationsdateinamens gesetzt, z. B.:
client1.yaml → log/client1.log
- Ermöglicht parallele Ausführung mehrerer Clients mit getrennten Logs auf derselben Hardware
- Der bisher fest codierte client.log entfällt
- Argumente (args.config) werden nun vor dem Logging-Setup geparst
- logger_client.ini bleibt erhalten; Pfad des TimedRotatingFileHandler
wird nachträglich im Code gesetzt
- Log-Rotation (Mitternacht, 7 Backups) funktioniert weiterhin wie konfiguriert
- `disable_existing_loggers=False` verhindert das Deaktivieren benutzerdefinierter Logger in den BOSWatch-Modulen
- Falls die zuvor standardmäßige placeholder-Datei `log/client.log` noch existiert und nicht mehr verwendet wird,
wird sie beim Start automatisch gelöscht
BREAKING CHANGE: Logging wird nicht mehr standardmäßig nach log/client.log geschrieben