Prevents 'aktueller Stand zur G2010B-Vermietung?' from being routed to
perplexity/sonar (which can't tool-call) just because 'aktuelle' is in
_WEB_TRIGGERS. New triggers: concierge, listing, vermietung, kaution,
G2010B/D1603 apartment codes, etc.
Grok 4.1 Fast was eskaliereing 'Stand zur G2010B-Vermietung?' to
perplexity/sonar instead of using chatlog_*. Strengthened
SYSTEM_PROMPT_EXTRA with explicit triggers (G2010B, D1603, ARAKAWA,
Concierge, Bnb, Kaution, Mieter) and a 'NO web search for this' rule.
Phase 2 of the chatlogger feature.
Multi-tenant:
- chatlogger-bot.service -> chatlogger-bot@.service (systemd template)
- /opt/chatlogger/<instance>.env per bot, all share /opt/chatlogger/chats.db
- existing bot migrated: chatlogger-bot@arakawa.service
- adding a second group bot is now: cp arakawa.env <name>.env, edit token+chats,
systemctl enable --now chatlogger-bot@<name>
Jarvis (hausmeister-bot) tool:
- homelab-ai-bot/tools/chatlog.py (autodiscovered by tool_loader.py)
- 4 tools: chatlog_list_chats, chatlog_recent, chatlog_search, chatlog_since
- Reads SQLite directly via sys.path += /opt/homelab-brain/chatlogger
- SYSTEM_PROMPT_EXTRA tells the LLM when to use these (Concierge, Airbnb,
Listing, 'aktueller Stand', 'wer hat zugesagt', 'muss ich reagieren').
Tested live: hausmeister-bot loads 48 tools (44 + 4 new), all chatlog
handlers callable, returns real messages from the @arakawa_concierge_bot
recording of -1003924901022.
Standalone bot @arakawa_concierge_bot that silently records configured
group chats into SQLite (FTS5). Phase 1 — capture only, no LLM, no
auto-replies. Reads token + chat allowlist from /opt/chatlogger/env
(NOT in git). Runs as systemd unit chatlogger-bot.service on CT 116
sharing /opt/bot-venv with the hausmeister-bot.
- chatlogger_bot.py: telegram polling, message/edit handlers, admin cmds
(/whichchat, /log_status, /recent, /search) — silent in groups
- store.py: SQLite schema + FTS5 search + edit audit
- query.py: CLI (recent, search, stats, chats, since, export JSONL)
- chatlogger-bot.service: systemd unit, hardened (ProtectSystem=strict)
- env.example, README.md
Tested live: message 'hallo' from -1003924901022 stored, retrieved
via CLI within seconds. Group privacy must be off in BotFather.
- 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.
Klarstellungen (Stand 2026-04-20):
- ki-tower wird Jellyfin-Ersatz, NICHT zweite KI-Maschine.
Alte "Chef/Orchestrator/vLLM/ComfyUI"-Rolle gestrichen.
- MSI B550 Gaming Plus Build = Test-Rig fuer die alten 3080er/AMD-Karten
vor Verkauf. Kein produktiver Einsatz, keine Dual-GPU-Eignung.
- 4x RTX 3080 Rig: Verkauf bestaetigt.
- 8x RX 6600 XT AMD-Rig: Tendenz Verkauf.
- Dedizierte zweite KI-Maschine: NICHT geplant. Falls jemals ein
Dual-GPU-/Upgrade-Setup kommt, waere das ein separater neuer Build,
weder ki-tower noch B550 noch Umbau des KI-Servers.
Aktualisiert: homelab.conf, MASTER_INDEX.md, ki-video/PLAN.md
Made-with: Cursor
- smart-home/HEIZUNG.md: komplette Doku zur Ölbrenner-Erkennung (brennerstarts.py),
Schwellwerte, Rekonstruktion, Dashboard-Panels, Troubleshooting
- smart-home/STATE.md: klare Tabelle mit allen Dienst-URLs (public+intern) und
Logins — Grafana/ioBroker/InfluxDB laufen ALLE in CT 143 auf pve-mu-3
- homelab.conf: CT_143_MU3 Beschreibung korrigiert (war "Raspi-Broker"),
neue Variablen GRAFANA_URL_*/IOBROKER_URL_*/INFLUX_URL_INTERN + User/Pass
(=PW_DEFAULT) damit beim nächsten Mal keine Fragen aufkommen
- smart-home/scripts/: alle relevanten Skripte ins Repo:
grafana_shot.js (Puppeteer-Login mit admin/astral66)
add_month_panel.py (idempotente Monatskacheln im Heizung-Dashboard)
brenner_rekonstruktion.py + cleanup_reconstruct.py + check_april.py
patch_brenner.sh (Anpassung der Schwellwerte nach Regelkurven-Änderung)
- MASTER_INDEX.md: Verweis auf HEIZUNG.md
Made-with: Cursor
Refs #82. mem0 dedupliziert semantisch und verwirft zu aehnliche
Eintraege still. Agents interpretierten das faelschlich als Erfolg
und meldeten Erfolgreich dokumentiert, obwohl nichts gespeichert wurde.
Neue Regel: bei results:[] einmal spezifischer retryen, sonst ehrlich
nicht gespeichert melden.
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).