Logpy-AgentOne/.env.example
Jeuner 6e5fe59c53 feat: Störungswache (pipe.monitor) + Verschlüsselung-at-rest dokumentiert
Dienste-Ampel (Telefon, Verarbeitung, Spracherkennung, Nextcloud) alarmierte
bisher nur im offenen Leitstand. pipe/monitor.py laeuft jetzt als eigener
Dauerprozess, prueft dieselbe Ampel (neu ausgelagert nach pipe/dienste.py)
periodisch und alarmiert bei Stoerung lokal per macOS-Benachrichtigung + Ton
(pipe/alarm.py) - unabhaengig davon, ob pipe.watch oder pipe.server laufen.
Wird ab jetzt von telefon/starten.sh mitgestartet.

Verschluesselung at rest: keine App-eigene Verschluesselung eingebaut,
stattdessen im README als Betreiber-Pflicht dokumentiert (FileVault aktivieren)
- App verlaesst sich auf Festplattenverschluesselung durch das Betriebssystem.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EbdWYnDtyMgxsq4eN1WnrQ
2026-08-28 16:47:45 +02:00

110 lines
4.5 KiB
Text

# --- Spracherkennung (lokal) ---
# whispercpp = Apple-GPU, nutzt ein vorhandenes ggml-Modell (Standard)
# faster = faster-whisper, lädt das Modell bei Bedarf selbst
STT_BACKEND=whispercpp
# Feste Sprache erzwingen (de) oder leer lassen für Auto-Erkennung:
WHISPER_SPRACHE=de
# Nur für STT_BACKEND=whispercpp:
WHISPERCPP_BIN=whisper-cli
#WHISPERCPP_MODELL=/Users/DEIN_NAME/whisper-models/ggml-large-v3-turbo.bin
WHISPER_THREADS=8
# Nur für STT_BACKEND=faster:
WHISPER_MODELL=medium
WHISPER_COMPUTE=int8
# --- Kategorisierung ---
# Backend: "ollama" (Default, lokal) oder "openrouter" (Cloud, nur zum Testen
# ob ein staerkeres Modell besser extrahiert - Transkript verlaesst dabei den
# Rechner, nicht im Praxisbetrieb einsetzen).
KATEGORISIERUNG_BACKEND=ollama
OLLAMA_URL=http://127.0.0.1:11434
OLLAMA_MODELL=qwen3:8b
# Nur fuer KATEGORISIERUNG_BACKEND=openrouter:
OPENROUTER_KEY=
OPENROUTER_MODELL=
# --- Nextcloud (leer lassen = nur lokale Ablage) ---
NEXTCLOUD_URL=
NEXTCLOUD_USER=
NEXTCLOUD_PASS=
NEXTCLOUD_ORDNER=Anrufe
# Interne User-ID für den WebDAV-Pfad. Nur nötig, wenn der Login eine E-Mail ist
# und daher von der User-ID abweicht.
NEXTCLOUD_USERID=
# Schaltet nur den Datei-Upload ab (Aufnahmen/Transkripte) - für reinen
# Kontakt-Abgleich ohne dass Anrufdaten die Maschine verlassen auf 0 setzen.
NEXTCLOUD_UPLOAD=1
# Adressbuch (CardDAV) für den Kontakt-Abgleich bei eingehenden Anrufen.
# Nextclouds Standard-Adressbuch heißt "contacts".
NEXTCLOUD_ADRESSBUCH=contacts
# --- Aufbewahrungsfrist (pipe.loeschen, täglich per Cron) ---
# Nach so vielen Tagen wird ein erledigter Anruf (Aufnahme + Transkript)
# gelöscht - lokal und bei Nextcloud. 0 = aus, nichts wird gelöscht. Greift
# nur im letzten Stapel (DECK_STAPEL[-1], Default "Erledigt") - unbearbeitete
# Anrufe bleiben unangetastet, egal wie alt.
LOESCHFRIST_TAGE=0
# --- Störungswache (pipe.monitor, eigener Prozess, siehe telefon/starten.sh) ---
# Prüft die Dienste-Ampel (Telefon, Verarbeitung, Spracherkennung, Nextcloud)
# und alarmiert lokal per macOS-Benachrichtigung + Ton, wenn niemand auf den
# Leitstand schaut.
MONITOR_TAKT_S=60
MONITOR_WIEDERHOLUNG_MIN=15
MONITOR_TON=Sosumi
# --- Telefonie (SIP-Zugang der Praxis, leer lassen = keine Telefonannahme) ---
SIP_USER=
SIP_DOMAIN=sip.plusnet.de
SIP_PASS=
SIP_PROXY=voice01.sip.plusnet.de
# --- Ansage ---
# piper = lokal, natuerlich, Modelle unter ~/piper-voices
# say = lokal, macOS-Bordmittel (Rueckfall wenn Piper fehlt)
# mistral = Voxtral-API (Cloud) - nur fuer die einmalige Erzeugung der
# ansage.wav, die danach lokal fuer jeden Anruf wiederverwendet
# wird. Keine Live-Anrufdaten gehen dabei nach aussen.
ANSAGE_TTS=piper
ANSAGE_STIMME=de_DE-thorsten_emotional-medium
ANSAGE_EMOTION=0
# Nur fuer ANSAGE_TTS=mistral (Stimmen: telefon/ansage_bauen.sh --list-voices
# gibt es nicht direkt her - siehe MISTRAL_TTS_MODEL/Skill-Doku fuer die Liste)
MISTRAL_KEY=
MISTRAL_TTS_MODEL=voxtral-mini-tts-latest
# --- Deck-Triage-Board (Nextcloud) ---
# Hauptschalter: ohne 1 entsteht kein Board, egal was unten steht.
NEXTCLOUD_DECK=0
DECK_BOARD=Anrufe
# Nutzer, die das Deck-Board sehen sollen (kommagetrennt)
DECK_TEILEN=
# Stapel des Deck-Boards (Arbeitsablauf, kommagetrennt)
DECK_STAPEL="Eingang,In Bearbeitung,Rückfragen,Erledigt"
# --- Leitstand (Weboberfläche) ---
# 127.0.0.1 = nur dieser Rechner. 0.0.0.0 = im Netz erreichbar, dann ist
# LEITSTAND_PASS Pflicht (die Seiten zeigen Patiententranskripte).
# Achtung: 0.0.0.0 bindet auf ALLE Interfaces, nicht nur ein VPN/Tailscale -
# läuft nebenher ein normales WLAN/LAN, ist der Leitstand auch dort
# erreichbar. Gezielt nur im VPN erreichbar: die konkrete VPN-IP eintragen
# statt 0.0.0.0 (z. B. die Tailscale-IP 100.x.x.x).
LEITSTAND_HOST=127.0.0.1
LEITSTAND_PORT=8088
LEITSTAND_USER=praxis
LEITSTAND_PASS=
# Optional: geteiltes Geheimnis fuer signierte, 1h gueltige Testzugangslinks
# (z.B. per Chatbot-Kommando ausgegeben). Leer = Feature aus.
TESTZUGANG_SECRET=
# --- Telefonanlage (nur Stufe 2) ---
# Event-Socket-Port von FreeSWITCH. Muss zu listen-port in
# autoload_configs/event_socket.conf.xml passen, sonst antwortet fs_cli nicht
# und telefon/starten.sh sieht den Trunk nie als registriert.
FS_PORT=8099
# Konfigurationsverzeichnis von FreeSWITCH (Apple Silicon: /opt/homebrew/...)
FS_ETC=/opt/homebrew/etc/freeswitch
# Log von FreeSWITCH; der Leitstand liest daraus die Anruf-Ereignisse.
# Apple Silicon: /opt/homebrew/... , Intel-Mac: /usr/local/...
#FREESWITCH_LOG=/opt/homebrew/var/log/freeswitch/freeswitch.log