From 4899ac3ebfa31bd305bd253e655854cacd455656 Mon Sep 17 00:00:00 2001 From: Joachim Hummel Date: Mon, 3 Nov 2025 23:55:14 +0000 Subject: [PATCH] added n8n flow --- README.md | 37 +++++++++++++++ n8n-mqtt.json | 112 +++++++++++++++++++++++++++++++++++++++++++++ pictures/readme.md | 0 3 files changed, 149 insertions(+) create mode 100644 n8n-mqtt.json create mode 100644 pictures/readme.md diff --git a/README.md b/README.md index af298d8..98f86f1 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ mqtt/ ├── .env # Umgebungsvariablen (NICHT committen!) ├── .env.example # Beispiel für Umgebungsvariablen ├── mqtt-panel-config.json # Legacy Dashboard Konfiguration +├── n8n-mqtt.json # n8n Workflow für MQTT-Integration ├── setup.sh # Setup-Script für User ├── test-mqtt.sh # Test-Script für MQTT Nachrichten ├── CLAUDE.md # Projekt-Dokumentation für Claude Code @@ -211,6 +212,42 @@ Nach Änderungen Container neu starten: docker compose restart mqttui ``` +## n8n Integration + +Das Repository enthält einen vorgefertigten n8n Workflow (`n8n-mqtt.json`), der automatisch MQTT-Nachrichten an den Broker sendet. + +### Was ist n8n? + +[n8n](https://n8n.io/) ist ein Workflow-Automatisierungstool, ähnlich wie Zapier oder Node-RED, mit dem sich verschiedene Dienste und APIs miteinander verbinden lassen. + +### Workflow-Funktionen + +Der bereitgestellte Workflow sendet automatisch das aktuelle Datum und die Uhrzeit an das Topic `devices/device1/now`: +- **Manueller Trigger**: Workflow manuell per Button ausführen +- **Schedule Trigger**: Automatische Ausführung jede Minute +- **MQTT Node**: Sendet Timestamp im Format "dd.MM.yyyy - HH:mm:ss" + +### Workflow importieren + +1. n8n installieren und starten (siehe [n8n Dokumentation](https://docs.n8n.io/)) +2. In n8n: **Workflows → Import → From File** +3. Die Datei `n8n-mqtt.json` auswählen +4. MQTT Credentials konfigurieren: + - Host: `localhost` (oder deine Server-IP) + - Port: `1883` + - Username: z.B. `device1` (aus deiner `.env`) + - Password: entsprechendes Passwort aus `.env` +5. Workflow aktivieren + +⚠️ **Hinweis**: Der User muss Schreibrechte für `devices/device1/#` haben (siehe ACL in `config/acl.conf`). + +### Workflow anpassen + +Du kannst den Workflow nach dem Import anpassen: +- **Topic ändern**: Passe das Topic im MQTT Node an (Zeile 17 in der JSON) +- **Schedule anpassen**: Ändere den Zeitplan im Schedule Trigger Node +- **Nachrichtenformat**: Passe die Message-Expression an (Zeile 19) + ## Test-Nachrichten senden ### Via Docker diff --git a/n8n-mqtt.json b/n8n-mqtt.json new file mode 100644 index 0000000..9799982 --- /dev/null +++ b/n8n-mqtt.json @@ -0,0 +1,112 @@ +{ + "name": "Send MQTT Data to Broker", + "nodes": [ + { + "parameters": {}, + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [ + -432, + -112 + ], + "id": "213b3a19-1c7b-4a2d-854a-84ffe962c6da", + "name": "When clicking ‘Execute workflow’" + }, + { + "parameters": { + "topic": "devices/device1/now", + "sendInputData": false, + "message": "={{ $now.toFormat('dd.MM.yyyy - HH:mm:ss') }}\n\n", + "options": {} + }, + "type": "n8n-nodes-base.mqtt", + "typeVersion": 1, + "position": [ + -144, + -32 + ], + "id": "cada589b-263e-4b4b-98c2-1912bc4685e5", + "name": "MQTT", + "credentials": { + "mqtt": { + "id": "L07VVR2BDfDda6Zo", + "name": "MQTT account" + } + } + }, + { + "parameters": { + "rule": { + "interval": [ + { + "field": "minutes" + } + ] + } + }, + "type": "n8n-nodes-base.scheduleTrigger", + "typeVersion": 1.2, + "position": [ + -432, + 64 + ], + "id": "40c2908e-43ae-41fc-a8d0-ed56e13d2593", + "name": "Schedule Trigger" + }, + { + "parameters": { + "content": "## MQTT-Broker Trigger\n**Click me** [MQTT-Broker](https://mqtt.example.com/)", + "height": 416, + "width": 608, + "color": 4 + }, + "type": "n8n-nodes-base.stickyNote", + "position": [ + -528, + -224 + ], + "typeVersion": 1, + "id": "d8f6c240-2f10-4214-908b-9a167479aba5", + "name": "Sticky Note" + } + ], + "pinData": {}, + "connections": { + "When clicking ‘Execute workflow’": { + "main": [ + [ + { + "node": "MQTT", + "type": "main", + "index": 0 + } + ] + ] + }, + "Schedule Trigger": { + "main": [ + [ + { + "node": "MQTT", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "active": true, + "settings": { + "executionOrder": "v1", + "callerPolicy": "workflowsFromSameOwner", + "availableInMCP": false, + "errorWorkflow": "0bBZzSE6SUzVsif5" + }, + "versionId": "dbb34898-a9e9-4ed2-9e23-17f7a500b7cf", + "meta": { + "templateCredsSetupCompleted": true, + "instanceId": "2f7fd37175cefa82de44e06b8af9ab9c01e7956018045d6efc4f7bf1588a41eb" + }, + "id": "YFFPaZaXOaQkYgQW", + "tags": [] +} diff --git a/pictures/readme.md b/pictures/readme.md new file mode 100644 index 0000000..e69de29