Letzte Aktualisierung: Juni 2026
Anwendungsfall: Pädiatrisches Typ-1-Diabetes-Management (anonymisiert, Einzelperson)
Diese Dokumentation ist zugleich Bedienungsanleitung (Teil A: Dashboard, Teil B: Matrix-Bot)
und Systembeschreibung (Teil C: Datenmodell & Modelle). Alle Screenshots zeigen anonymisierte
Echtdaten.
Teil A – Bedienung Dashboard
1. Schnellstart & Aufbau
2. Reiter „Dashboard"
3. Ereignisse erfassen
4. Reiter „Erweitert"
5. Reiter „Parameter"
6. Reiter „Analyse"
7. Edit-Modus, Neustart & PWA
Teil B – Bedienung Matrix-Bot
8. Der Matrix-Chat-Bot
Teil C – System & Modelle
9. Architektur & Datenmodell
10. Insulin-PK-Modell (IOB)
11. KH-Absorption & FPE
12. CIQ-Pumpenmodell
13. Glukoseprognose & Einschlaf-Effekt
14. Therapieparameter
15. Tuning & Wartung
Das Web-Dashboard (Flask, Port 5050) ist die primäre Tagesoberfläche. Aufruf lokal unter
http://localhost:5050 oder extern über den Tunnel. Es ist als PWA installierbar
(„Zum Startbildschirm hinzufügen").

Aufbau (von oben):
| Bereich | Inhalt |
|---|---|
| Kopfzeile | Letzter BZ groß + Trendpfeil, „vor X min"; Chips: Basal, KH-Faktor, ISF, Modell-ISF, TIR (heute/24 h), Katheterstatus, Datenqualität |
| Reiter | 📊 Dashboard · 📈 Erweitert · ⚙️ Parameter · 🔍 Analyse |
| Zeitnavigation | Zeitreise (end), Schnellsprünge, Vergangenheits-/Zukunftsfenster |
| Glukoseverlauf | BZ-Kurve + Prognose + Ereignis-Markierungen |
| Ereignis-Panel (rechts) | Chronologische Liste + KI-Eingabe |
Die Kopfzeilen-Chips sind verlinkt: Klick führt zum passenden Parameter-Bereich.
Der wichtigste Bedien-Trick: Pinch (Touch) bzw. Mausrad zoomt die x-Achse, Ziehen schwenkt.
Nach jeder Geste wird das sichtbare Fenster als neuer Zeitbereich übernommen und alle Plots
ziehen synchron nach (auch IOB/Abgabe im Erweitert-Reiter). Zoomt man in die Vergangenheit,
schaltet das Dashboard automatisch in den Zeitreise-Modus. Doppeltipp auf den Plot = zurück
zu Live (Standard 6 h zurück / 3 h voraus).
Alternativ: die Schnellknöpfe unter „🕐 Zeitnavigation" (−1h/+1h für Vergangenheit & Zukunft,
Datums-/Zeitfeld für gezielte Zeitreise, „Jetzt"/„Live").
Rechts laufen alle Ereignisse chronologisch. Im Edit-Modus lässt sich jedes bearbeiten/löschen
(✏️/🗑). Darunter die KI-Eingabe: freie Nachricht an Claude/Copilot mit medizinischem Kontext
(Modellwahl per Dropdown).
Über „+ Ereignis" (Edit-Modus) öffnet sich die Erfassungsmaske. Typen: KH, Insulin (Bolus),
Insulin + KH (Kombi), gestrecktes Insulin, Kontext (Aktivität/Schlaf/Krankheit/Katheter/Sensor …).

Bei KH- und Kombi-Ereignissen gibt es optionale Felder Fett (g) und Eiweiß (g).
Wichtig: Eingetragen werden Gramm laut Nährwerttabelle – nicht fertige „FPE".
Das Modell rechnet daraus den Fett-Protein-Effekt = verzögerte KH (siehe Live-Hinweis
„12 g Fett + 10 g Eiweiß → FPE ≈ 4 g verzögerte KH"). Faktoren standardmäßig 10 % / 25 %,
einstellbar unter Parameter → Pumpe & Modell.
Bei fettigen Mahlzeiten (Pizza, Muffin) zusätzlich eine langsamere Absorption wählen
(slow/very_slow/ultra_slow) – sonst wird der typische Spätanstieg unterschätzt.
Aufklappbar unter „📈 Vorschau (isoliert)": zeigt, wie sich nur dieses Event zeitlich auswirkt
(relativ zu 0, ohne Basal/EGP/andere Events) – in drei Modi BZ, COB·IOB, Rate
(KH-Aufnahmerate mit FPE-Buckel). Gut zum Verständnis von Absorptionsgeschwindigkeit und FPE.
Bei „Insulin aus KH berechnen" wird der Bolus aus dem KH-Faktor abgeleitet und ebenfalls in der
Vorschau berücksichtigt.
Bei Kontext-Kategorie 🏃 Aktivität kann eine Dauer (min) erfasst werden. Sie erscheint im
BZ-Plot als dezente schattierte Zone über den Aktivitätszeitraum (mit Label „🏃 45min") –
ähnlich einer Pumpenpause, aber zurückhaltender.
Der Typ „💉↗ Insulin gestreckt" bildet den Kombi-Bolus der Pumpe ab:

Modelliert wird das als Sofort-Bolus + Micro-Boli über die Dauer. Das aktive Insulin läuft korrekt
bis Start + Dauer + Wirkdauer (DIA) aus – kein abrupter IOB-Sprung mehr.

Hier liegen – zeitlich exakt zum BZ-Plot ausgerichtet – die Zusatz-Diagramme:
Diese Diagramme werden nur geladen, solange der Reiter sichtbar ist, damit die schnelle
Live-Aktualisierung im Dashboard nicht ausgebremst wird.

Unter-Reiter: ISF · KH-Faktor · EGP · Pumpe & Modell.
Je Profil ein stündliches Balkendiagramm (0–23 Uhr). Im Edit-Modus sind die Modell-Balken
ziehbar; parallele Striche zeigen „alt" (zuletzt gespeichert, grau), „Pumpe" (lila) und einen
Fit-Vorschlag (orange, inkl. Konfidenz). Speichern/Wiederherstellen global und pro Stunde.
Schätzt aus historischen Daten ein Profil (ISF/EGP/KH-Faktor) mit Konfidenz & Güte:
1. Zeitbereich (Tage, optional Stundenfenster) wählen → zuerst wird die Datenpunkt-Anzahl
angezeigt, dann „Fit starten" (Laufzeit ~1–2 min, asynchron).
2. Der Vorschlag erscheint automatisch als oranger Strich im Profil. Per „📋 übertragen"
(alle / nur sichere) in die editierbaren Werte, dann speichern.
Die Fits nutzen das Pumpenmodell-Basal und sind damit Glooko-unabhängig.


Filterbare Auswertungen:
days + optional t_end), Kathetertyp/-stelle/-alter, Wochentage,(Im Experimentell-Modus zusätzlich eine retrospektive Modell-Analyse / Rückblick-Prognose.)
DIABOTUS_PASSWORD) entsperrt Schreibenmanifest.json + Service-Worker (sw.js); Standalone-Start auf Android. Kompakte/glance. Hell/Dunkel über 🌙/☀.Im Einstellungspanel (⚙ oben rechts) → „🔔 Alarme":

Grenze: Es ist (noch) kein echter Hintergrund-Push – läuft das Dashboard nicht, gibt es keinen
Alarm. Für echte Hintergrund-Alarme wäre serverseitiges Web-Push (VAPID) nötig.
Diabotus läuft zusätzlich als Matrix-Bot (matrixbot.py). Du schreibst in natürlicher
Sprache; der Bot legt Einträge an, plottet, prognostiziert oder ruft die KI.
| Befehl | Wirkung |
|---|---|
!plot [h] |
Glukose-Plot der letzten h Stunden (Standard 6 h) |
!prognose [h] |
BZ + Prognose, h Stunden Verlauf davor |
!modelplot |
Modell-/Diagnostik-Plot |
!pumpe <min> [Grund] / !pumpe aus|an |
Pumpe pausieren (Auto-Resume) bzw. manuell |
!actins |
Aktuelles aktives Insulin (IOB) |
!active / !inactive |
Aktiv-/Ruhephase markieren |
!mode <claude|claude-haiku|claude-opus|copilot> |
KI-Modus umschalten |
!meta <Anfrage> |
Quellcode/DB per KI ändern – mächtig, mit Vorsicht nutzen |
Freitext-Nachrichten (z. B. „60 g Nudeln, slow, 5,45 E gespritzt", „schläft ein",
„Katheterwechsel, Soft, Bauch links") werden interpretiert und gespeichert bzw. an die KI
weitergeleitet.
Sicherheitshinweis:
!metalässt die KI eigenständig Quellcode und Datenbank ändern.
Das ist bewusst mächtig, aber riskant – Änderungen prüfen und ggf. per Git zurückrollen.
Matrix-Bot ─┐ ┌─ insulin_model.py (IOB/COB, project_glucose)
Nightscout ─┼─► PostgreSQL "diabotus" ┼─ therapy.py (Profile/Parameter, zentral)
Glooko ─┘ (CGM, Events, Profile)├─ plot.py / app.py (Plots, Prognose)
└─ pump_model.py (CIQ), fit_model.py (Fits)
Kerntabellen: glucose_entries (CGM, mg/dL, 5-min), events (carb/insulin/insulin_stretched/
pump_suspend/pump_resume/_basal), context_events (activity/sleep/illness/catheter_change/…),
basal_rates/carb_ratios/correction_factors (Pumpenprofile), model_isf_profile,
model_carb_ratio_profile, egp_profile (je 24 h), therapy_meta (Key/Value-Parameter).
Namens-Konvention: Event-Typ ist immer
carb(niemeal), JSON-Schlüssel immergrams
(niecarbs).
carb-Felder| Feld | Bedeutung |
|---|---|
description |
Lebensmittelname |
absorption |
Aufnahmetyp (s. Kap. 11) |
fat_g / protein_g |
Gramm Fett/Eiweiß → FPE |
directionDoubleUp/SingleUp/FortyFiveUp (steigend) · Flat (stabil) ·
FortyFiveDown/SingleDown/DoubleDown (fallend).
Berechnet das aktive Insulin (IOB) nach dem exponentiellen LoopKit/OpenAPS-Modell.
Zwei Parameter:

Tag- und Nacht-DIA/TP sind aktuell identisch (270/75); die Tag/Nacht-Unterschiede stecken im
stündlichen ISF-Profil. Basalinsulin wird als synthetische Micro-Boli alle 5 min modelliert.

KH werden linear über die Absorptionsdauer aufgenommen; COB = noch nicht absorbierte KH.

ABSORPTION_MAP)| Typ | Dauer | Beispiele |
|---|---|---|
very_fast |
30 min | Traubenzucker, Glukosegel |
fast |
60 min | Saft, Gummibärchen |
medium_fast |
90 min | schnellere Mischkost |
medium |
120 min | Brot, Müsli, Cornflakes |
medium_slow |
150 min | langsamere Mischkost |
slow |
180 min | Nudeln, Reis |
very_slow |
240 min | Hülsenfrüchte, fettreich |
ultra_slow |
300 min | sehr fett-/proteinreich (Pizza) |
Fallback ohne Angabe: medium (bzw. CARB_ABS_MIN = 180 min).

Fett/Eiweiß heben den BZ verzögert. build_fpe_events() erzeugt aus fat_g/protein_g
verzögerte KH-Äquivalente:
FPE-KH = fat_g × fat_factor + protein_g × protein_factor
(Standard: 0.10 · Fett + 0.25 · Eiweiß)
Wirkung: beginnt +60 min nach der Mahlzeit, linear über 240 min.
Die Faktoren liegen in therapy_meta (fpe_fat_factor, fpe_protein_factor, fpe_delay_min,
fpe_duration_min) und sind im Dashboard unter Parameter → Pumpe & Modell einstellbar. Der
Eiweiß-Faktor wurde bewusst von 0.5 auf 0.25 gesenkt (0.5 schlug in der Praxis zu stark ein).
Beispiel Pizza (28 g KH, 20 g Fett, 14 g Eiweiß): FPE ≈ 20·0,1 + 14·0,25 = 5,5 g
verzögerte KH, ab +60 min über 4 h – plus die langsame Absorption der eigentlichen KH.
Die Tandem t:slim X2 mit Control-IQ liefert nicht die programmierte Basalrate, sondern eine
dynamisch angepasste (drosselt unter ~119 mg/dL, erhöht + Auto-Boli darüber). Diabotus modelliert
das empirisch (GradientBoostingRegressor aus Glooko-Daten): Vorhersage des Verhältnisses
tatsächliche/programmierte Rate aus BZ und Tageszeit.

In der Prognose läuft das Modell im Feedback-Regelkreis: je 5-min-Schritt aktuellen BZ → CIQ-Rate
→ als Insulin verbuchen → IOB/BZ aktualisieren. Zusätzlich ein Auto-Bolus-Simulator (Sleep-/
Normal-Modus).

Das CIQ-Modell ist die Schicht, die die Prognose Glooko-unabhängig macht: Glooko-Daten
trainieren nur das Modell, sie werden nicht laufend gebraucht.
project_glucose() kombiniert pro Zeitschritt:
ΔBZ = KH_absorbiert × (ISF / KH-Faktor) (Anstieg, inkl. FPE-Spät-KH)
− IOB_Abnahme × ISF (Senkung, inkl. CIQ-Basal)
+ EGP (endogene Glukose / Leber)
mit Trend-Anchoring: anfangs folgt die Kurve dem beobachteten Trend,
Gewicht w = 0.5^(Zeit/45 min) → nach ~45 min dominiert das Modell.
Einschlaf-Effekt: Beim Einschlafen steigt der BZ (weniger Muskelverbrauch, Wachstumshormon,
hepatische Glukose). Modelliert als synthetische 15-g-KH-Quelle (sleep_hepatic_glucose_g) über
90 min ab Einschlafzeit (Default 20:45). Das EGP-Profil enthält Einschlafknick und Dawn-Effekt aus
dem Fit.

Bekannte Grenze: Das Modell hat keinen Gegenregulations-/Hypo-Boden – rechnerisch laufen
Prognosekurven unter 0 weiter. Richtung stimmt, die Tiefe einer prognostizierten Hypo ist
überzeichnet.

Aktuelle Eckwerte (Stand Juni 2026, alle via Dashboard/!meta änderbar):
Bolus-Formel: Insulin (E) = KH (g) ÷ KH-Faktor.
Korrektur: (BZ − Ziel) ÷ ISF.
| Aufgabe | Wie |
|---|---|
| Profil aus Daten schätzen | Dashboard → Fit-Assistent (ISF/EGP/KH-Faktor) |
| Einzelparameter ändern | Dashboard (Edit-Modus) oder Bot !meta |
| Pumpenmodell neu trainieren | nach Glooko-Import: python pump_model.py |
| Glooko importieren | alle 2–3 Monate: python glooko_import.py |
| Prognose-Backtest | python model_eval.py (MAE/Bias pro Horizont) |
| Doku-Illustrationen neu | python docs/examples.py |
Wann tunen? Bei systematischem Prognose-Bias (>±20 mg/dL), Wachstums-/Saison-bedingter Änderung
des Bedarfs oder neuen Vorgaben der Kinderdiabetologie.
| Szenario | Bild |
|---|---|
| 5 g Traubenzucker, kein Bolus | ![]() |
| Mahlzeit mit Bolus | ![]() |
| Korrekturbolus (ISF 80/100/120) | ![]() |
Modell-Illustrationen (images/0X_*.png): python docs/examples.py.
Dashboard-Screenshots (images/dash_*.png): manuell aufgenommen.