Skip to content

Architecture de

mxkissnr edited this page May 25, 2026 · 1 revision

Sprache: Deutsch | English

Architektur — wie die drei GLP-Komponenten zusammenspielen

Das GLP-Ökosystem (GLP = Gaggiuino Local Profiler) besteht aus drei unabhängigen Komponenten, die aufeinander aufbauen.

Übersicht

  Gaggiuino-Maschine
  └─ /api/shots          (Shot-Verlauf)
  └─ /api/system/status  (Live-Brühdaten)
  └─ /api/system/info    (Firmware-Version)
         │
         │  Sync alle N Min. + Live-Polling während des Bezugs
         ▼
  ┌──────────────────────────────────┐
  │       GLP Add-on                 │  ← HA-Add-on (dieses Repo)
  │  Node.js-Server, Port 8099       │
  │  speichert Shots in /data/       │
  │  REST-API + Web-Oberfläche       │
  └────────┬─────────────────────────┘
           │                    ▲
           │  fragt ab           │  HA Ingress (Browser, authentifiziert)
           │  /api/status        │  Port 8099 direkt (Integration, Karte)
           │  /shots.json        │
           │  /api/preheat       │
           │  /api/maintenance   │
           ▼                     │
  ┌─────────────────────┐        │
  │  GLP HA-Integration │        │  ┌──────────────────────┐
  │  (Custom Component) │        └──│  GLP Lovelace-Karte  │
  │  erstellt Sensoren, │           │  (Custom Card)       │
  │  feuert HA-Events   │──────────►│  liest switch_entity │
  └─────────────────────┘  Sensor-  │  aus machine_status- │
           │               Attribut │  Sensor-Attribut     │
           ▼                        └──────────────────────┘
    HA-Sensoren, Automationen,
    Energie-Monitoring, …

GLP Add-on

Repo: mxkissnr/gaggiuino-local-profiler

Das zentrale Stück. Es synchronisiert den Shot-Verlauf von der Gaggiuino-Maschine, speichert ihn lokal in /data/shots.json und stellt Folgendes bereit:

  • Eine Web-Oberfläche über HA Ingress (das ☕-Panel in der HA-Seitenleiste) — durch HA authentifiziert
  • Eine REST-API auf Port 8099, die von der Integration und der Lovelace-Karte genutzt wird

Das Add-on fragt außerdem den Live-Status der Maschine während eines Bezugs sekündlich ab, sammelt Datenpunkte und speichert den Shot automatisch sobald der Bezug endet.

GLP HA-Integration

Repo: mxkissnr/gaggiuino-profiler-integration · Installation via HACS

Fragt das Add-on alle 60 Sekunden ab (konfigurierbar) und stellt alle GLP-Daten als native HA-Sensoren bereit:

Sensor Beschreibung
sensor.glp_shot_count Gesamtanzahl gespeicherter Shots
sensor.glp_shots_today Shots heute
sensor.glp_last_shot_profile Profilname des letzten Shots
sensor.glp_last_shot_score Score (0–100) des letzten Shots
sensor.glp_last_shot_duration Dauer in Sekunden
sensor.glp_last_shot_weight Ausbeute in Gramm
sensor.glp_machine_status online / error — enthält switch_entity als Attribut
binary_sensor.glp_preheat_ready true sobald die Aufwärmzeit abgelaufen ist
sensor.glp_preheat_remaining Sekunden bis die Maschine brühbereit ist

Löst nach jedem Shot ein gaggiuino_profiler_shot_completed-Event aus — ideal für Automationen.

GLP Lovelace-Karte

Repo: mxkissnr/glp-lovelace-card · Installation via HACS

Eine Custom Lovelace-Karte mit Maschinenstatus, letztem Shot, Aufwärm-Fortschritt und Power-Button. Sie kommuniziert direkt mit Port 8099 und liest switch_entity aus dem machine_status-Sensor-Attribut der Integration — keine manuelle Konfiguration nötig außer der GLP-URL.

API-Token

Alle drei Komponenten authentifizieren sich automatisch — keine Konfiguration erforderlich.

  1. Das Add-on generiert beim ersten Start einen zufälligen 64-stelligen Token mit crypto.randomBytes(32) (Betriebssystem-CSPRNG — kein vorhersehbares Muster) und speichert ihn in /data/api_token.txt.
  2. /api/status ist öffentlich zugänglich und gibt den Token zurück.
  3. Browser-UI und Integration lesen den Token beim Start aus /api/status und schicken ihn als X-GLP-Token-Header bei allen Folge-Anfragen mit.
  4. Anfragen über HA Ingress umgehen die Token-Prüfung — HA hat den Benutzer bereits authentifiziert.

Token erneuern: /data/api_token.txt löschen und Add-on neu starten.

Clone this wiki locally