101 lines
4.1 KiB
Markdown
101 lines
4.1 KiB
Markdown
---
|
|
name: chart-to-chat
|
|
description: Generiert hochwertige Diagramme und Charts (Balken, Linien, Verlauf, Donut/Kuchen, KPI-Karten, Tabellen) aus strukturierten Chat-Daten und sendet sie direkt als Bild (PNG) nach Telegram. Basiert auf dbt-charts (lokales Rendering via dct) mit QuickChart.io-Fallback.
|
|
---
|
|
|
|
# 📊 Chart-to-Chat: Diagramm- und Chart-Generator
|
|
|
|
Dieser Skill transformiert tabellarische Daten, Verläufe, Statistiken oder Kennzahlen direkt in fertige, publikationsreife **PNG-Grafiken**, die nativ per Telegram-Bildnachricht ausgeliefert werden.
|
|
|
|
---
|
|
|
|
## 🎯 Wann diesen Skill verwenden?
|
|
|
|
* Immer wenn der Nutzer nach einer Visualisierung fragt:
|
|
* *„Zeig mir das als Diagramm / Chart / Balkendiagramm“*
|
|
* *„Plotte mir den Verlauf von X über die letzten 7 Tage“*
|
|
* *„Visualisiere meine Ausgaben / mein Training / meine Schritte“*
|
|
* *„Erstelle eine Grafik / Kurve dazu“*
|
|
* Bei Vergleichsdaten oder Verteilungen (z. B. Anteile, Kategorien, Monatsumsätze).
|
|
* Für KPI-Zusammenfassungen mit Hauptwert und Delta.
|
|
|
|
---
|
|
|
|
## 📈 Welcher Chart-Typ passt wann?
|
|
|
|
| Chart-Typ (`--type`) | Bester Anwendungsfall | Beispiel |
|
|
|---|---|---|
|
|
| `bar` (Default) | Diskrete Kategorien, Rankings, Monatsvergleiche | Schritte pro Tag, Stunden pro Projekt |
|
|
| `hbar` | Viele Kategorien mit langen Namen | Ranking der Supermärkte nach Ersparnis |
|
|
| `line` | Zeitreihen, kontinuierliche Verläufe, Messwerte | Herzfrequenz, Temperaturverlauf, Gewicht, Watt |
|
|
| `area` | Kumulierte Volumina oder Trends über Zeit | Datenverbrauch, kumulierter Regen, Trainingsvolumen |
|
|
| `donut` / `pie` | Prozentuale Anteile an einem Ganzen (100 %) | Ausgaben nach Kategorie, Makronährstoff-Verteilung |
|
|
| `kpi` | Einzelne prominente Kennzahl mit Kontext/Delta | Aktueller FTP, Monatsumsatz, Gesamtschritte |
|
|
| `table` | Strukturierte Datentabelle mit formatierten Spalten | Vergleichstabelle von Produkten oder Tarifen |
|
|
|
|
---
|
|
|
|
## 🛠️ Ausführung
|
|
|
|
Führe das Skript `chart.py` via `uv run` aus (Cluster-Pfad: `/home/node/mop-skills/mop-skills/skills/chart-to-chat/scripts/chart.py`):
|
|
|
|
### 1. Daten direkt als JSON-String übergeben
|
|
|
|
```bash
|
|
uv run /home/node/mop-skills/mop-skills/skills/chart-to-chat/scripts/chart.py \
|
|
--title "Wöchentliche Laufdistanz" \
|
|
--type bar \
|
|
--data '[{"tag": "Mo", "km": 8.5}, {"tag": "Mi", "km": 12.0}, {"tag": "Fr", "km": 6.2}, {"tag": "So", "km": 16.5}]'
|
|
```
|
|
|
|
### 2. Daten per Pipe (Standard-Eingabe) übergeben
|
|
|
|
Besonders empfohlen bei größeren Datenmengen oder um Shell-Escaping-Probleme zu vermeiden:
|
|
|
|
```bash
|
|
cat << 'EOF' | uv run /home/node/mop-skills/mop-skills/skills/chart-to-chat/scripts/chart.py --title "Ruhepuls Trend" --type line --data -
|
|
[
|
|
{"datum": "12.09.", "puls": 54},
|
|
{"datum": "13.09.", "puls": 52},
|
|
{"datum": "14.09.", "puls": 55},
|
|
{"datum": "15.09.", "puls": 53},
|
|
{"datum": "16.09.", "puls": 51}
|
|
]
|
|
EOF
|
|
```
|
|
|
|
### 3. Donut-Chart für Anteile / Verteilungen
|
|
|
|
```bash
|
|
uv run /home/node/mop-skills/mop-skills/skills/chart-to-chat/scripts/chart.py \
|
|
--title "Ausgaben September" \
|
|
--type donut \
|
|
--data '[{"kategorie": "Miete", "euro": 950}, {"kategorie": "Lebensmittel", "euro": 420}, {"kategorie": "Sport", "euro": 110}]'
|
|
```
|
|
|
|
### 4. Optionen des CLI-Tools
|
|
|
|
- `--title "<Text>"`: Überschrift des Diagramms.
|
|
- `--notes "<Text>"`: Optionale Unterzeile / Erläuterung.
|
|
- `--type bar|hbar|line|area|donut|kpi|table`: Visualisierungstyp.
|
|
- `--data "<JSON>"` oder `--data -` (Stdin): Eingabedaten.
|
|
- `--x <Spaltenname>` / `--y <Spaltenname>`: Manuelle Angabe der Achsenspalten (wird ansonsten automatisch erkannt).
|
|
- `--engine auto|dct|quickchart`: `auto` nutzt primär das lokale `dbt-charts` und fällt bei Bedarf transparent auf `QuickChart.io` zurück.
|
|
|
|
---
|
|
|
|
## 📱 Auslieferung an Telegram
|
|
|
|
Das Skript gibt als letzte Zeile den Pfad der erzeugten PNG-Datei im Format `MEDIA:<pfad>` aus, z. B.:
|
|
```text
|
|
MEDIA:/tmp/charts/chart_a1b2c3d4.png
|
|
```
|
|
|
|
Schließe diese Zeile einfach in deine finale Antwort an den Nutzer ein. OpenClaw versendet das Diagramm dadurch automatisch als Bild im Chat:
|
|
|
|
```markdown
|
|
Hier ist die Übersicht deiner Laufdistanzen für diese Woche:
|
|
|
|
MEDIA:/tmp/charts/chart_a1b2c3d4.png
|
|
```
|