npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@zurdai/n8n-nodes-wtt

v0.3.0

Published

n8n Node für Arbeitszeiterfassung mit Trigger und Listen-Funktionen

Readme

@zurdai/n8n-nodes-wtt

n8n Node für Arbeitszeiterfassung (Work Time Tracking) mit Trigger-Endpunkt und Auswertungsfunktionen.

Installation

npm install @zurdai/n8n-nodes-wtt

Verwendung

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 - start oder stop (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:

  1. Öffne den Workflow in n8n
  2. Klicke auf die "ZTimeTracker Trigger" Node
  3. 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
  4. 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:

  1. Alle Zeiten Anzeigen

    • Zeigt alle erfassten Arbeitszeiten sortiert nach Timestamp
  2. Summen Berechnen

    • Berechnet die Gesamtarbeitszeit aus Start/Stop-Paaren
    • Zeigt einzelne Arbeitsperioden und Gesamtsumme
  3. 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:

  1. Erstelle eine Data Table:

    • Gehe zu SettingsData TablesCreate Table
    • Name: Arbeitszeit
    • Wichtig: Spalten müssen genau so benannt werden:
      • Datum (String)
      • Zeit (String)
      • Timestamp (String)
      • Aktion (String)
      • Vollstaendige_Zeit (String)
      • Standort (String)
  2. 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 }}

📁 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/Dashboard

Vorteile:

  • ✅ Keine zusätzliche Node-Installation nötig
  • ✅ Vollständig anpassbar
  • ✅ Funktioniert direkt in n8n

Code:

// Siehe: examples/javascript-arbeitszeit-berechnung.js

📁 Fertige Vorlagen:

Alternative: Google Sheets Speicherung

Workflow:

ZTimeTracker Trigger → Google Sheets (Append/Update) → Respond to Webhook

Setup:

  • 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 Webhook

Auswertung:

Trigger → PostgreSQL (SELECT *) → ZTimeTracker Node → Ausgabe

Lizenz

MIT

Autor

Daniel Zurmühle ([email protected])

Homepage: https://zurdai.com