"""Liest nur zurueck, was in der letzten Stunde bei ntfy unter dem Thema der Maschine ankam. Koordinator-Skript, nicht Teil des Repos. Schickt nichts. Das Thema wird nie ausgegeben -- weder hier noch in einer Fehlermeldung. Aufruf aus dem Projektordner (WSL): python ntfy_lesen.py """ import json import sys from datetime import datetime from pathlib import Path sys.path.insert(0, str(Path.cwd())) import requests from trading.paper.melder import lade_melder_config from trading.paper.melder import lies_ntfy_geheimnisse def main() -> int: config = lade_melder_config("config/paper.toml", secrets_pfad=None) thema, token = lies_ntfy_geheimnisse() kopf = {"Authorization": f"Bearer {token}"} if token else {} try: antwort = requests.get( f"{config.ntfy_url}/{thema}/json", params={"poll": "1", "since": "1h"}, headers=kopf, timeout=10, allow_redirects=False, ) except Exception as ausnahme: # Nur der Typ: Die Ausnahme von requests traegt die Adresse und damit das Thema. print(f"Ruecklesen gescheitert: {type(ausnahme).__name__}") return 1 print(f"Ruecklesen: HTTP {antwort.status_code}") anzahl = 0 for zeile in antwort.text.splitlines(): try: eintrag = json.loads(zeile) except ValueError: continue if eintrag.get("event") != "message": continue anzahl += 1 # Ohne Angabe fuehrt ntfy die Prioritaet 3 (default) und laesst das Feld weg. print(f" bei ntfy: Titel '{eintrag.get('title')}', Prioritaet {eintrag.get('priority', 3)}, " f"Zeit {datetime.fromtimestamp(eintrag.get('time', 0)).isoformat()}, " f"erste Zeile '{str(eintrag.get('message', '')).splitlines()[0][:70]}'") print(f"{anzahl} Meldung(en) in der letzten Stunde.") return 0 if __name__ == "__main__": sys.exit(main())