Dateien nach "workflow/n8n/workflows" hochladen
This commit is contained in:
273
workflow/n8n/workflows/CMI Canbus.json
Normal file
273
workflow/n8n/workflows/CMI Canbus.json
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
{
|
||||||
|
"name": "CMI Canbus",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"rule": {
|
||||||
|
"interval": [
|
||||||
|
{
|
||||||
|
"field": "minutes"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.scheduleTrigger",
|
||||||
|
"typeVersion": 1.2,
|
||||||
|
"position": [
|
||||||
|
-672,
|
||||||
|
288
|
||||||
|
],
|
||||||
|
"id": "dcd1c622-b477-485f-8d04-ea672a82ad4d",
|
||||||
|
"name": "Schedule Trigger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"url": "http://192.168.2.186/INCLUDE/devpagex.cgi?pagex2=01025800&_=1759560490401",
|
||||||
|
"authentication": "genericCredentialType",
|
||||||
|
"genericAuthType": "httpBasicAuth",
|
||||||
|
"sendQuery": true,
|
||||||
|
"queryParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "admin",
|
||||||
|
"value": "admin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
-448,
|
||||||
|
288
|
||||||
|
],
|
||||||
|
"id": "a6b369cd-d21d-4da7-8480-30e1f30f824b",
|
||||||
|
"name": "get Data from CMI Interface local",
|
||||||
|
"credentials": {
|
||||||
|
"httpBasicAuth": {
|
||||||
|
"id": "iJkXePPAceSyENTx",
|
||||||
|
"name": "CMI CAN Bus local"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"jsCode": "// INPUT: items = [{ json: { data: \"<div class=...>...\" } }]\n// OUTPUT: [{ json: { flat, units, items } }]\n\nfunction parseValue(raw) {\n if (!raw) return { value: null, unit: null, state: null, on: null };\n const t = raw.trim().replace(/ /g, ' ');\n if (/^(AUS|OFF|EIN|ON)$/i.test(t)) {\n return { value: null, unit: null, state: t.toUpperCase(), on: /^(EIN|ON)$/i.test(t) };\n }\n const m = t.match(/-?\\d+(?:[.,]\\d+)?/);\n const value = m ? parseFloat(m[0].replace(',', '.')) : null;\n const unit = m ? t.replace(m[0], '').trim() : null;\n return { value, unit: unit || null, state: null, on: null };\n}\n\nfunction toKey(label) {\n return label\n .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n .replace(/ä/g,'ae').replace(/ö/g,'oe').replace(/ü/g,'ue')\n .replace(/Ä/g,'Ae').replace(/Ö/g,'Oe').replace(/Ü/g,'Ue')\n .replace(/ß/g,'ss')\n .replace(/[^A-Za-z0-9]+/g,'_')\n .replace(/^_+|_+$/g,'');\n}\n\n// 1) HTML aus allen Eingangs-Items zusammenführen (meist ist es nur eines)\nconst html = items.map(i => i.json?.data ?? i.json?.body ?? i.json?.html ?? '').join('\\n');\n\n// 2) BOXEN parsen\nconst re = /<div class=\"BOX BOX_IN\">[\\s\\S]*?<div class=\"bez\">(\\d+):\\s*([^<]+)<\\/div>(?:[\\s\\S]*?<div class=\"val\">\\s*<div>([^<]*)<\\/div>\\s*<\\/div>)?/g;\n\nconst parsed = [];\nfor (const m of html.matchAll(re)) {\n const index = Number(m[1]);\n const label = m[2].trim();\n const raw = (m[3] ?? '').trim() || null;\n const { value, unit, state, on } = parseValue(raw);\n const key = `${String(index).padStart(2,'0')}_${toKey(label)}`;\n parsed.push({ index, label, key, raw, value, unit, state, on });\n}\n\n// 3) Kompaktes Objekt + Einheiten-Mapping bauen\nconst flat = {};\nconst units = {};\nfor (const p of parsed) {\n flat[p.key] = (p.value ?? p.state ?? p.raw ?? null);\n if (p.unit) units[p.key] = p.unit;\n}\n\n// 4) Ein einziges Ergebnis-Item zurückgeben\nreturn [{ json: { flat, units, items: parsed } }];\n"
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.code",
|
||||||
|
"typeVersion": 2,
|
||||||
|
"position": [
|
||||||
|
-224,
|
||||||
|
288
|
||||||
|
],
|
||||||
|
"id": "509329e8-02f5-473f-a09c-f334bc441340",
|
||||||
|
"name": "transfer data to readable format"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"url": "http://192.168.2.68:8093/v1/state/0_userdata.0.haus.heizung.pelletheizung.hot_water_temperature",
|
||||||
|
"sendQuery": true,
|
||||||
|
"queryParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $('transfer data to readable format').item.json.flat['08_unbenutzt']"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sendHeaders": true,
|
||||||
|
"headerParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $('transfer data to readable format').item.json.flat['08_unbenutzt'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
0,
|
||||||
|
384
|
||||||
|
],
|
||||||
|
"id": "ee3b68e3-7b85-41c8-9a2d-276e8bb8da17",
|
||||||
|
"name": "set Warmwasser Temperatur"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"url": "http://192.168.2.68:8093/v1/state/0_userdata.0.haus.heizung.pelletheizung.heating_circuit_temperature",
|
||||||
|
"sendQuery": true,
|
||||||
|
"queryParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $('transfer data to readable format').item.json.flat['03_unbenutzt'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sendHeaders": true,
|
||||||
|
"headerParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $('transfer data to readable format').item.json.flat['03_unbenutzt'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
0,
|
||||||
|
576
|
||||||
|
],
|
||||||
|
"id": "5b95f25f-a896-46ef-a455-cb915a76b388",
|
||||||
|
"name": "set Heizkreis Temperatur"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"url": "http://192.168.2.68:8093/v1/state/0_userdata.0.haus.heizung.pelletheizung.heat_pump_consumption",
|
||||||
|
"sendQuery": true,
|
||||||
|
"queryParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $json.flat['16_Stromzahler_WP'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sendHeaders": true,
|
||||||
|
"headerParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $json.flat['16_Stromzahler_WP'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
0,
|
||||||
|
192
|
||||||
|
],
|
||||||
|
"id": "52d65947-58f8-423d-a746-ba108d74dd06",
|
||||||
|
"name": "set Verbrauch Waermepumpe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"url": "http://192.168.2.68:8093/v1/state/0_userdata.0.haus.heizung.outer_temperature",
|
||||||
|
"sendQuery": true,
|
||||||
|
"queryParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $json.flat['06_T_Aussen'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sendHeaders": true,
|
||||||
|
"headerParameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"value": "={{ $json.flat['06_T_Aussen'] }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.httpRequest",
|
||||||
|
"typeVersion": 4.2,
|
||||||
|
"position": [
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"id": "e895b3a4-620c-4623-9267-6cab2d353f50",
|
||||||
|
"name": "set outer temperature"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pinData": {},
|
||||||
|
"connections": {
|
||||||
|
"Schedule Trigger": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "get Data from CMI Interface local",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"get Data from CMI Interface local": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "transfer data to readable format",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"transfer data to readable format": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "set Warmwasser Temperatur",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "set Verbrauch Waermepumpe",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "set Heizkreis Temperatur",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "set outer temperature",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"settings": {
|
||||||
|
"executionOrder": "v1",
|
||||||
|
"timeSavedMode": "fixed",
|
||||||
|
"callerPolicy": "workflowsFromSameOwner",
|
||||||
|
"availableInMCP": false
|
||||||
|
},
|
||||||
|
"versionId": "ff580cc5-a6c7-49be-8ac9-7a607d4537ed",
|
||||||
|
"meta": {
|
||||||
|
"instanceId": "3cc6c4256e2bbdec1b3708c49dc3889c7266357f3e239651c157c2de760e6c65"
|
||||||
|
},
|
||||||
|
"id": "ygJYiiFM97WiWeY5",
|
||||||
|
"tags": [
|
||||||
|
{
|
||||||
|
"updatedAt": "2025-12-20T20:03:34.739Z",
|
||||||
|
"createdAt": "2025-12-20T20:03:34.739Z",
|
||||||
|
"id": "i5rtQijMRj2sx5Zj",
|
||||||
|
"name": "Heizung"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"updatedAt": "2025-12-20T19:56:59.512Z",
|
||||||
|
"createdAt": "2025-12-20T19:56:59.512Z",
|
||||||
|
"id": "9G8OthZJpXo6BPbV",
|
||||||
|
"name": "Smart Home"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user