@zurdai/n8n-nodes-wtt
v0.3.0
Published
n8n Node für Arbeitszeiterfassung mit Trigger und Listen-Funktionen
Maintainers
Readme
@zurdai/n8n-nodes-wtt
n8n Node für Arbeitszeiterfassung (Work Time Tracking) mit Trigger-Endpunkt und Auswertungsfunktionen.
Installation
npm install @zurdai/n8n-nodes-wttVerwendung
Dieses Paket enthält zwei Nodes:
1. ZTimeTracker Trigger
Ein Webhook-Trigger, der Arbeitszeiteinträge über POST-Anfragen mit JSON-Body erfasst.
Endpunkt-Format:
- Test-Modus:
/webhook-test/{workflow-id}/arbeitszeit - Produktions-Modus:
/webhook/{workflow-id}/arbeitszeit
JSON-Body Parameter:
action-startoderstop(Pflicht)standort- Adresse/Ort (Optional)
Beispiel-Anfragen:
Test-Modus (nur nach Klick auf "Execute workflow"):
curl -X POST "https://your-n8n-instance.com/webhook-test/your-workflow-id/arbeitszeit" \
-H "Content-Type: application/json" \
-d '{"action": "start", "standort": "Hauptstraße 15, 10115 Berlin"}'
curl -X POST "https://your-n8n-instance.com/webhook-test/your-workflow-id/arbeitszeit" \
-H "Content-Type: application/json" \
-d '{"action": "stop", "standort": "Industrieweg 3, 80331 München"}'Produktions-Modus (immer verfügbar):
curl -X POST "https://your-n8n-instance.com/webhook/your-workflow-id/arbeitszeit" \
-H "Content-Type: application/json" \
-d '{"action": "start", "standort": "Hauptstraße 15, 10115 Berlin"}'
curl -X POST "https://your-n8n-instance.com/webhook/your-workflow-id/arbeitszeit" \
-H "Content-Type: application/json" \
-d '{"action": "stop", "standort": "Industrieweg 3, 80331 München"}'So findest du deine Workflow-ID:
- Öffne den Workflow in n8n
- Klicke auf die "ZTimeTracker Trigger" Node
- Die vollständige Webhook-URL wird angezeigt:
- Test:
https://your-domain/webhook-test/DEINE-ID-HIER/arbeitszeit - Production:
https://your-domain/webhook/DEINE-ID-HIER/arbeitszeit
- Test:
- Kopiere die URL direkt aus der Node!
Output:
{
"datum": "21.11.2025",
"zeit": "14:30:45",
"timestamp": "2025-11-21T14:30:45.123Z",
"anfrage": "start",
"vollstaendigeZeit": "21.11.2025, 14:30:45",
"standort": "Hauptstraße 15, 10115 Berlin"
}2. ZTimeTracker Node
Eine Action-Node zum Auswerten und Zusammenfassen von Arbeitszeiteinträgen.
Resource: Listen
Operationen:
Alle Zeiten Anzeigen
- Zeigt alle erfassten Arbeitszeiten sortiert nach Timestamp
Summen Berechnen
- Berechnet die Gesamtarbeitszeit aus Start/Stop-Paaren
- Zeigt einzelne Arbeitsperioden und Gesamtsumme
Detaillierte Auswertung
- Kombiniert alle Zeiten mit berechneten Summen
- Zeigt Warnungen bei fehlenden Stop-Einträgen
Beispiel-Output (Summen Berechnen):
{
"anzahlPerioden": 2,
"perioden": [
{
"start": "21.11.2025, 08:00:00",
"stop": "21.11.2025, 12:00:00",
"dauer": "4h 0m",
"minuten": 240
},
{
"start": "21.11.2025, 13:00:00",
"stop": "21.11.2025, 17:30:00",
"dauer": "4h 30m",
"minuten": 270
}
],
"gesamtMinuten": 510,
"gesamtZeit": "8h 30m",
"gesamtStunden": "8.50",
"offenerStart": false,
"letzterStart": null,
"warnungen": null
}Workflow-Beispiele
Wichtig: Alle Einträge müssen persistent gespeichert werden, damit keine Daten verloren gehen!
Empfohlen: n8n Data Table (am einfachsten!)
Die n8n Data Table ist die einfachste Lösung, da sie direkt in n8n integriert ist und keine externe Konfiguration benötigt.
Workflow 1: Einträge erfassen und speichern (Data Table)
ZTimeTracker Trigger (Webhook)
↓
Data Table - Insert Row (Tabelle: "Arbeitszeit")
↓
Respond to Webhook (Optional: Bestätigung zurückgeben)Data Table Setup:
Erstelle eine Data Table:
- Gehe zu Settings → Data Tables → Create Table
- Name:
Arbeitszeit - Wichtig: Spalten müssen genau so benannt werden:
Datum(String)Zeit(String)Timestamp(String)Aktion(String)Vollstaendige_Zeit(String)Standort(String)
Data Table Node Konfiguration:
- Operation: Insert
- Table: Arbeitszeit
- Columns Mapping Mode: "Map Each Column Manually"
- Column Mappings:
- Datum →
{{ $json.datum }} - Zeit →
{{ $json.zeit }} - Timestamp →
{{ $json.timestamp }} - Aktion →
{{ $json.anfrage }} - Vollstaendige_Zeit →
{{ $json.vollstaendigeZeit }} - Standort →
{{ $json.standort }}
- Datum →
📁 Fertige Workflow-Vorlage: examples/workflow-data-table.json
⚠️ Wichtiger Hinweis: Die Spaltennamen in der Data Table müssen genau mit den Spaltennamen im Workflow übereinstimmen! Bei Fehler "unknown column name 'datum'" → Prüfe, ob die Spalten korrekt erstellt wurden (Datum statt datum).
Workflow 2: Auswertung erstellen (Data Table)
Schedule Trigger (z.B. täglich um 18:00)
↓
Data Table - Get All (Tabelle: "Arbeitszeit")
↓
ZTimeTracker Node - Detaillierte Auswertung
↓
Email/Slack/Dashboard (Ergebnisse versenden)Arbeitszeit Node Setup:
- Resource: Listen
- Operation:
- Alle Zeiten Anzeigen - Listet alle Einträge auf
- Summen Berechnen - Nur Zusammenfassung
- Detaillierte Auswertung - Alle Einträge + Summen (empfohlen!)
Wichtig: Die ZTimeTracker Node liest automatisch beide Formate:
- Kleingeschrieben (
datum,zeit,timestamp,anfrage) - vom Trigger - Großgeschrieben (
Datum,Zeit,Timestamp,Aktion) - aus Data Table
📁 Fertige Workflow-Vorlage: examples/workflow-auswertung.json
Alternative: JavaScript Code Node (ohne eigene Node!)
Wenn du die ZTimeTracker Node nicht verwenden möchtest, kannst du auch eine JavaScript Code Node verwenden:
Schedule Trigger (z.B. täglich um 18:00)
↓
Data Table - Get All (Tabelle: "Arbeitszeit")
↓
Code Node - Arbeitszeit berechnen (JavaScript)
↓
Email/Slack/DashboardVorteile:
- ✅ Keine zusätzliche Node-Installation nötig
- ✅ Vollständig anpassbar
- ✅ Funktioniert direkt in n8n
Code:
// Siehe: examples/javascript-arbeitszeit-berechnung.js📁 Fertige Vorlagen:
examples/workflow-javascript-code.json- Kompletter Workflowexamples/javascript-arbeitszeit-berechnung.js- Nur der JavaScript Code
Alternative: Google Sheets Speicherung
Workflow:
ZTimeTracker Trigger → Google Sheets (Append/Update) → Respond to WebhookSetup:
- Erstelle ein Google Sheet mit Spalten: Datum, Zeit, Timestamp, Aktion, Vollständige Zeit, Standort
- Verwende die Google Sheets Node mit Operation "Append or Update"
- Tabelle: "Arbeitszeit"
📁 Fertige Workflow-Vorlage: examples/workflow-google-sheets.json
Alternative: PostgreSQL/MySQL Speicherung
Wenn du eine Datenbank verwendest:
CREATE TABLE arbeitszeiten (
id SERIAL PRIMARY KEY,
datum VARCHAR(20),
zeit VARCHAR(20),
timestamp TIMESTAMP,
aktion VARCHAR(10),
vollstaendige_zeit VARCHAR(50),
standort VARCHAR(255)
);Workflow:
ZTimeTracker Trigger → PostgreSQL (INSERT) → Respond to WebhookAuswertung:
Trigger → PostgreSQL (SELECT *) → ZTimeTracker Node → AusgabeLizenz
MIT
Autor
Daniel Zurmühle ([email protected])
Homepage: https://zurdai.com
