TaskMonkey Handbuch

Rezept: Live-KPI-Wand für Operations

Großes Display im Lager/Operation-Center mit Echtzeit-Kennzahlen.

Klassisch für Lager, Logistik, Operations: ein TV an der Wand zeigt rund um die Uhr die wichtigsten Kennzahlen. Verpackt heute, offene Bestellungen, Lieferbar, System-Status. Niemand muss sich einloggen — der Bildschirm läuft permanent.

Ziel

  • Großes Wand-Display zeigt 8–12 KPI-Tiles
  • Aktualisiert sich alle 20–60 Sekunden automatisch
  • Kein Login nötig (Token in URL)
  • Lesbar aus 5 Metern Entfernung

Voraussetzungen

  • Eine Datenquelle, die regelmäßig aktualisiert wird (z. B. Google Sheet, das ein Cron-Job alle 5 Minuten befüllt)
  • Ein Browser auf dem Display (Smart-TV, kleiner PC, Raspberry Pi)

1. KPI-Sheet einrichten

Du brauchst eine Datenquelle in tabellarischer Form. Beispiel: Google Sheet KPI-Live mit einer Zeile pro Update, Spalten:

Stand                      | 2026-04-20 14:23
Verpackt heute             | 142
Verpackt gestern Vergleich | 118
Verpackt gestern           | 287
Lieferbar                  | 1842
Bestellungen heute         | 187
Bestellungen gestern Verg. | 156
Bestellungen gestern       | 312
JTL API Status             | OK
JTL API ms                 | 124

Ein Scheduled Task in TaskMonkey hängt alle 5 Minuten eine neue Zeile an:

'refresh_kpi_sheet' => [
    'enabled' => true,
    'tool' => 'refreshKpiSheet',
    'interval' => '5min',
],

Das Tool refreshKpiSheet ruft die nötigen APIs ab und schreibt die neue Zeile via appendToSheet.

2. Dashboard-Konfiguration

dashboards.php:

<?php
return [
    'dashboards' => [
        'lager_wand' => [
            'title' => 'Lager Live',
            'description' => 'Tagesaktuelle Verpack- und Bestellkennzahlen',
            'type' => 'kpi',
            'access' => 'token',
            'token' => '33fc8db8f7c4a49ba882f70b43e5e0e3dd5f28c835fad8f2',
            'datasource' => [
                'type' => 'google_sheet',
                'slug' => 'kpi-live',
                'sheetName' => 'Tabellenblatt1',
                'cache_ttl' => 30,
                'row' => 'last',
            ],
            'tiles' => [
                ['type' => 'group', 'title' => 'Verpackt', 'icon' => '📦'],
                [
                    'title' => 'Verpackt heute',
                    'column' => 'Verpackt heute',
                    'compare_column' => 'Verpackt gestern Vergleich',
                    'format' => 'number',
                    'size' => 'large',
                    'span' => 3,
                    'compare_label' => 'gestern um diese Zeit',
                    'compare_mode' => 'higher_is_better',
                ],
                [
                    'title' => 'Forecast heute',
                    'type' => 'forecast',
                    'today_column' => 'Verpackt heute',
                    'yesterday_compare_column' => 'Verpackt gestern Vergleich',
                    'yesterday_total_column' => 'Verpackt gestern',
                    'format' => 'number',
                    'size' => 'medium',
                    'compare_mode' => 'neutral',
                ],
                [
                    'title' => 'Gestern gesamt',
                    'column' => 'Verpackt gestern',
                    'format' => 'number',
                    'size' => 'medium',
                    'compare_mode' => 'neutral',
                ],

                ['type' => 'group', 'title' => 'Lager', 'icon' => '🏭'],
                [
                    'title' => 'Lieferbar',
                    'column' => 'Lieferbar',
                    'format' => 'number',
                    'size' => 'large',
                    'span' => 3,
                    'compare_mode' => 'neutral',
                ],

                ['type' => 'group', 'title' => 'Bestellungen', 'icon' => '🛒'],
                [
                    'title' => 'Bestellungen heute',
                    'column' => 'Bestellungen heute',
                    'compare_column' => 'Bestellungen gestern Vergleich',
                    'format' => 'number',
                    'size' => 'large',
                    'span' => 3,
                    'compare_label' => 'gestern um diese Zeit',
                    'compare_mode' => 'higher_is_better',
                ],

                ['type' => 'group', 'title' => 'Systeme', 'icon' => '🟢'],
                [
                    'title' => 'JTL API',
                    'column' => 'JTL API Status',
                    'format' => 'text',
                    'size' => 'medium',
                    'extras' => [
                        ['label' => 'Response', 'column' => 'JTL API ms', 'suffix' => 'ms'],
                    ],
                ],
            ],
        ],
    ],
];

3. Aufrufen

https://taskmonkey.example.com/dashboards/view/lager_wand?token=33fc...&tenant=meco

Auf dem Wand-Display:

  • Browser im Vollbild-Modus (F11 / --kiosk)
  • Auto-Reload alle 5 Minuten ist nicht nötig — die Plattform pollt Browser-seitig schon alle 30s den Datasource
  • Bildschirmschoner deaktivieren

4. Hardware-Setup

Setup Vorteil Nachteil
Smart-TV mit eingebautem Browser Kein extra Gerät Browser oft veraltet, Probleme mit JS
Mini-PC + HDMI an TV Voller Browser, alles geht Extra-Gerät, Strom
Raspberry Pi + Chromium-Kiosk Günstig, klein, zuverlässig Etwas Setup nötig
Tablet (iPad, Android) im Wandhalter Schick, Touch Akku/Strom, 24/7-Betrieb fragwürdig

Klassischer Setup: Raspberry Pi 4 + Auto-Login + Chromium im Kiosk-Modus, läuft monatelang ohne Eingriff.

5. Tipps für die Lesbarkeit

  • Wenig Tiles: 8–12 max. — mehr Information macht den Bildschirm unlesbar
  • size: large und span: 3+ für die wichtigsten KPIs
  • Compare-Mode bewusst setzen: higher_is_better für Output-Größen, lower_is_better für Fehlerquoten, neutral für reine Stände
  • Gruppen-Header mit Emoji: erleichtern das Scannen
  • Cache-TTL niedrig (20–60s): Wand-Display soll wirken wie „live"

Erweiterungen

  • Multi-Wand: mehrere Dashboards für verschiedene Bereiche (Verpackung, Wareneingang, Versand)
  • Alarmierung: Tool, das bei kritischen Werten (z. B. „Lieferbar < 100") eine Slack-Nachricht schickt
  • Tageswechsel: am Morgen automatisch die Vortageswerte „einfrieren" und in einer separaten Sheet-Spalte sichern
  • Mobile-Variante: dasselbe Dashboard mit cache_ttl: 60 auf dem Smartphone der Schichtleitung
Zuletzt aktualisiert: 2026-04-20