The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "rSPOpj5iI4kxKvBi",
"name": "Banana-Pi-Down -> Zammad-Ticket",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "banana-pi-down",
"responseMode": "onReceived",
"options": {}
},
"id": "b1b1b1b1-0001-4000-8000-000000000001",
"name": "Alertmanager Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
260,
300
]
},
{
"parameters": {
"method": "GET",
"url": "http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring.svc.cluster.local:8428/api/v1/query",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "last_over_time((100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\",instance=\"vereinsheim-alarmmonitor\"}[5m])) * 100))[30m:1m])"
}
]
},
"options": {}
},
"id": "b1b1b1b1-0002-4000-8000-000000000002",
"name": "CPU abfragen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
520,
300
]
},
{
"parameters": {
"method": "GET",
"url": "http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring.svc.cluster.local:8428/api/v1/query",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "last_over_time(((node_memory_MemTotal_bytes{instance=\"vereinsheim-alarmmonitor\"} - node_memory_MemAvailable_bytes{instance=\"vereinsheim-alarmmonitor\"}) / node_memory_MemTotal_bytes{instance=\"vereinsheim-alarmmonitor\"} * 100)[30m:1m])"
}
]
},
"options": {}
},
"id": "b1b1b1b1-0003-4000-8000-000000000003",
"name": "RAM abfragen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
780,
300
]
},
{
"parameters": {
"method": "GET",
"url": "http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring.svc.cluster.local:8428/api/v1/query",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "last_over_time(avg by (instance) (node_hwmon_temp_celsius{instance=\"vereinsheim-alarmmonitor\"})[30m:1m])"
}
]
},
"options": {}
},
"id": "b1b1b1b1-0004-4000-8000-000000000004",
"name": "Temperatur abfragen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1040,
300
]
},
{
"parameters": {
"method": "GET",
"url": "http://vmsingle-monitoring-victoria-metrics-k8s-stack.monitoring.svc.cluster.local:8428/api/v1/query",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "query",
"value": "last_over_time(alamos_apager_last_start_timestamp_seconds{station=\"1002011_Fahrzeughalle\"}[5m])"
}
]
},
"options": {}
},
"id": "b1b1b1b1-0007-4000-8000-000000000007",
"name": "Letzte AMweb-Anfrage abfragen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1300,
300
]
},
{
"parameters": {
"jsCode": "// CHANGE-ME: Zammad-Gruppe + Requester ggf. anpassen (siehe docs/f-cicd-automatisierung/f0040-github-release-watcher.md fuer die Regeln dazu -- ZAMMAD_REQUESTER_EMAIL muss ein bereits existierender Zammad-User sein). Gruppe 'Support / Administration' angenommen als Unterguppe 'Administration' von 'Support' -> Zammad-API erwartet dafuer '::' als Trenner (siehe docs/f-cicd-automatisierung/f0040-github-release-watcher.md); falls es stattdessen eine einzelne Gruppe mit genau diesem Namen ist, hier auf 'Support / Administration' aendern.\nconst ZAMMAD_GROUP = 'Support::Administration';\nconst ZAMMAD_REQUESTER_EMAIL = 'info@edv-kretzer.de';\nconst GRAFANA_DASHBOARD_URL = 'https://grafana-tech.pke-lab.de/d/vereinsheim-alarmmonitor/vereinsheim-alarmmonitor';\n\nconst cpuRes = $('CPU abfragen').item.json;\nconst ramRes = $('RAM abfragen').item.json;\nconst tempRes = $('Temperatur abfragen').item.json;\nconst lastStartRes = $('Letzte AMweb-Anfrage abfragen').item.json;\nconst webhookBody = $('Alertmanager Webhook').item.json.body || {};\n\nfunction firstValue(res) {\n const result = res && res.data && res.data.result;\n if (!result || result.length === 0) return null;\n return parseFloat(result[0].value[1]);\n}\n\nconst cpu = firstValue(cpuRes);\nconst ram = firstValue(ramRes);\nconst temp = firstValue(tempRes);\nconst lastStartEpoch = firstValue(lastStartRes);\nconst lastStartText = (lastStartEpoch === null || Number.isNaN(lastStartEpoch))\n ? 'nie / unbekannt (alamos-apager hat noch keine /start-Anfrage fuer diese Station verzeichnet)'\n : new Date(lastStartEpoch * 1000).toISOString();\n\nfunction fmt(v, unit) {\n return (v === null || Number.isNaN(v)) ? 'unbekannt' : `${v.toFixed(1)} ${unit}`;\n}\n\nconst alert = (webhookBody.alerts && webhookBody.alerts[0]) || {};\nconst description = (alert.annotations && alert.annotations.description)\n || 'Vereinsheim-Alarmmonitor antwortet nicht mehr.';\nconst startsAt = alert.startsAt || new Date().toISOString();\n\nconst bodyText = [\n description,\n '',\n `Letzte erfolgreiche Anfrage der Alarmmonitor-Adresse (Kiosk hat zuletzt die echte AMweb-URL ueber alamos-apager angefragt): ${lastStartText}`,\n '',\n 'Letzte bekannte Metriken vor dem Ausfall (nicht live -- der Pi ist ja gerade nicht erreichbar):',\n `- CPU: ${fmt(cpu, '%')}`,\n `- RAM: ${fmt(ram, '%')}`,\n `- Temperatur: ${fmt(temp, '\u00b0C')}`,\n '',\n `Alarm seit: ${startsAt}`,\n '',\n `Grafana-Dashboard (Vereinsheim-Alarmmonitor): ${GRAFANA_DASHBOARD_URL}`,\n '',\n 'Das Problem wird so schnell es geht behoben, dies gilt lediglich als Information fuer dich.',\n '',\n '--',\n 'Mit freundlichen Gruessen',\n 'Peter Kretzer',\n '',\n 'E-Mail: info@edv-kretzer.de',\n 'Website: https://edv-kretzer.de/',\n].join('\\n');\n\nreturn [{\n json: {\n title: 'Vereinsheim-Alarmmonitor nicht erreichbar',\n group: ZAMMAD_GROUP,\n customer: ZAMMAD_REQUESTER_EMAIL,\n article: {\n subject: 'Vereinsheim-Alarmmonitor nicht erreichbar',\n body: bodyText,\n content_type: 'text/plain',\n type: 'note',\n internal: false,\n },\n },\n}];"
},
"id": "b1b1b1b1-0005-4000-8000-000000000005",
"name": "Ticket-Payload bauen",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1560,
300
]
},
{
"parameters": {
"method": "POST",
"url": "http://zammad.tech.homeserver/api/v1/tickets",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json) }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"id": "b1b1b1b1-0006-4000-8000-000000000006",
"name": "Zammad-Ticket erstellen",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1820,
300
],
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Alertmanager Webhook": {
"main": [
[
{
"node": "CPU abfragen",
"type": "main",
"index": 0
}
]
]
},
"CPU abfragen": {
"main": [
[
{
"node": "RAM abfragen",
"type": "main",
"index": 0
}
]
]
},
"RAM abfragen": {
"main": [
[
{
"node": "Temperatur abfragen",
"type": "main",
"index": 0
}
]
]
},
"Temperatur abfragen": {
"main": [
[
{
"node": "Letzte AMweb-Anfrage abfragen",
"type": "main",
"index": 0
}
]
]
},
"Letzte AMweb-Anfrage abfragen": {
"main": [
[
{
"node": "Ticket-Payload bauen",
"type": "main",
"index": 0
}
]
]
},
"Ticket-Payload bauen": {
"main": [
[
{
"node": "Zammad-Ticket erstellen",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"meta": {
"description": "Webhook-Ziel fuer die neue Alertmanager-Route 'n8n-banana-pi-down' (nur alertname=BananaPiAlarmmonitorDown, siehe argocd/apps/platform/monitoring/values.yaml). Fragt bei Ausloesung die letzten bekannten CPU/RAM/Temperatur-Werte sowie den Zeitstempel der letzten erfolgreichen /start-Anfrage (= Kiosk hat die echte AMweb-URL zuletzt tatsaechlich angefragt, exportiert von alamos-apager selbst -- siehe argocd/apps/workloads/alamos-apager/templates/configmap-script.yaml und vmservicescrape.yaml) aus VictoriaMetrics ab und erstellt darueber ein Zammad-Ticket; die Mail-Benachrichtigung an info@edv-kretzer.de laeuft ueber Zammads eigene Agenten-Benachrichtigung, nicht ueber einen eigenen E-Mail-Node. NACH DEM IMPORT: Node 'Zammad-Ticket erstellen' -> Credential 'Zammad API Token' (Header-Auth, Header-Name 'Authorization', Value 'Token token=<ZAMMAD_TOKEN>') neu zuweisen -- Credential-IDs werden beim Workflow-Import nicht mit uebernommen. Details: docs/3-apps-workloads/30020-vereinsheim-alarmmonitor.md."
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Banana-Pi-Down -> Zammad-Ticket. Uses httpRequest. Webhook trigger; 7 nodes.
Source: https://github.com/pkr-lab/capulus-core/blob/ae2de557ddbd5ad1ba827613b677acaa7d501735/argocd/apps/workloads/n8n/workflows/banana-pi-down-to-zammad.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
eek-Go v2 (Batch-Then-Review). Uses httpRequest. Webhook trigger; 75 nodes.
This workflow receives webhook requests from a content calendar and uses the X API v2 to publish text posts, threads, image/video posts, and polls, as well as delete existing posts and run a credentia
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c