- Hausmeister-Bot Matomo-HTTP-Check korrigiert: Matomo laeuft in CT109
(10.10.10.109), nicht in CT113.
- Smart-Home-Doku ergaenzt: CT143/raspi-broker Error-Rate war durch
/tmp-tmpfs-Backups, vollen Swap und Telegraf-Noise verursacht.
- Cleanup-Script fuer alte raspi-broker-TARs versioniert, damit /tmp
im CT143 nicht erneut RAM/Swap fuellt.
- homelab.conf: ALERT_SUPPRESS_HOSTS um pve-pp-1 und pve-pp-2 erweitert
(Phnom-Penh-Kondo-Cluster: zu instabil, nicht betriebskritisch)
- monitor.py: HTTP_HEALTH_CHECKS bekommen optionalen 'host'-Key.
Check 'Flugscanner-Agent (pve-pp-1)' wird jetzt uebersprungen, solange
pve-pp-1 in der Suppress-Liste steht.
Neue zentrale Moeglichkeit, ganze Proxmox-Hosts temporaer aus allen
Hausmeister-Alerts herauszunehmen, gesteuert ueber homelab.conf.
- homelab.conf: ALERT_SUPPRESS_HOSTS Variable (Komma-Liste)
initial gesetzt auf pve-ka-1,pve-ka-2,pve-ka-3 (Kambodscha
ohne Internet seit 2026-04-04)
- core/config.py: Helper get_suppressed_hosts + get_suppressed_container_names
(letztere mappt Host -> Container-Namen fuer Loki/Silence-Filter)
- tools/predict.py: Filter in _gather_prometheus, _gather_loki, _gather_proxmox
+ sichtbarer Hinweis 'Unterdrueckt: ...' im taeglichen Forecast-Report
- monitor.py: Filter in check_all + format_report (Container, panic,
error_rate, silence, service_restarts)
Beim naechsten Mal Kambodscha-Internet-Comeback: einfach die drei Eintraege
in ALERT_SUPPRESS_HOSTS entfernen und hausmeister-bot neu starten.
rag_mode.py:
- Default fuer neue/unbekannte Chats: RAG-first (True statt False)
- State wird auf Disk geschrieben (/opt/homelab-ai-bot/data/rag_mode.json),
ueberlebt Bot-Restarts; threadsicher.
llm.py:
- _LOCAL_OVERRIDES erweitert um persoenliche Possessiv-/Besitz-Marker:
wohnung(en), apartment, condo/kondo, immobilie, kambodscha/cambodia,
phnom penh, arakawa, gekostet, kaufpreis, bezahlt, ausgegeben, ueberweisung,
meine/mein/meines/..., was haben, wie viel habe ich, ich fuer/für.
Damit werden klar persoenliche Fragen nie mehr faelschlich an Sonar
geroutet, selbst wenn Web-Trigger wie "wie viel" im Text vorkommen.
Hintergrund: Eine Frage der Form "wie viel habe ich fuer die Wohnungen in
Kambodscha bezahlt" wurde an Perplexity/Sonar geroutet (Websuche) statt an
RAG, weil der Mode-Schalter durch einen Bot-Restart im RAM verloren ging und
der Router bei "wie viel" sofort MODEL_ONLINE waehlte.
Query wird vor ES-Suche durch gpt-4o-mini in 4 DE/EN-Varianten umformuliert
(Synonyme, Fachbegriffe, Zahl-/Kosten-/Summenbegriffe). Dann Multi-Query-Merge
durch _merge_hits_from_queries. Fallback auf Single-Query bei API-Fehler oder
fehlendem Key. 1h-Cache, 8s-Timeout.
Loest ua. Kosten-/Preis-Fragen, die zuvor am Standardpfad gescheitert sind
(Beispiel: "was haben die wohnungen in kambodscha gekostet" findet jetzt
G2010B und D1603 in einem Rutsch).
- Seafile (CT 103) als HTTP-Health-Check hinzugefügt (https://seafile.orbitalo.net/api2/ping/)
- Seafile aus SILENCE_IGNORED_HOSTS ausgenommen (Logs nur im Container)
- 3 Retries mit 10s Timeout für robuste Erkennung
- SSH-Zugang (michael@192.168.178.149 via lokalem Netz)
- NAS-Struktur: 192.168.178.170/Medien mit allen Mount-Punkten
- Save.TV → Jellyfin Workflow
- Synology NAS Shares und Zugang
- Staging-Ordner Filme zum nachbearbeiten erklaert
- Duplikat-Check Prozess dokumentiert
python-telegram-bot verarbeitet Updates nacheinander, solange der Handler
nicht zurueckkehrt. Die Warteschleife auf ask_with_tools blockierte alle
weiteren Telegram-Updates (kein abbruch, keine Befehle, 'tot').
- Freitext und Sprache: Pipeline in asyncio.create_task ausgelagert
- concurrent_updates(True) zusaetzlich
- /downloads ersetzt durch Pipeline-Dashboard
- /api/pipeline: Status aller Filme (pending/bereit/auf NAS)
- /api/nas_synced: Callback wenn Jellyfin-Sync fertig
- Sync-Script meldet sich nach erfolg zurück ans CT
Credentials (mike:astral66) direkt im href-Link, damit kein Browser-Auth-Dialog erscheint.
SAVETV_DIRECT_USER/PASS als env-ueberschreibbare Konstanten.
- API /api/jellyfin_library: Jellyfin-Filme via Tailscale, 1h Cache
- Archiv-Karten: Badge Jellyfin wenn Titel in Mediathek (normalisierter Vergleich)
- Entfernt: /opt/savetv_extra_routes.py Doppelung (nur noch Repo-Modul)
Downloads page now has sort buttons (date/name/size) with toggle asc/desc.
Default: newest first. Client-side JS sorting, no page reload needed.
Previously this file was only in /opt/ outside git.