{ "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: \"
...\" } }]\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 = /
[\\s\\S]*?
(\\d+):\\s*([^<]+)<\\/div>(?:[\\s\\S]*?
\\s*
([^<]*)<\\/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" } ] }