diff --git a/workflow/Heizung/CMI Canbus.json b/workflow/Heizung/CMI Canbus.json deleted file mode 100644 index 8b42968..0000000 --- a/workflow/Heizung/CMI Canbus.json +++ /dev/null @@ -1,273 +0,0 @@ -{ - "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" - } - ] -} \ No newline at end of file