-
Notifications
You must be signed in to change notification settings - Fork 1
/
flows.json
1 lines (1 loc) · 28.8 KB
/
flows.json
1
[{"id":"b830962c.d8ca28","type":"tab","label":"ebusd","disabled":false,"info":""},{"id":"fdcf5ef4.578018","type":"tab","label":"sdm630","disabled":false,"info":""},{"id":"9e57d57.c910fa8","type":"tab","label":"volkszaehler","disabled":false,"info":""},{"id":"d4907414.d9f7e8","type":"tab","label":"badewanne","disabled":false,"info":""},{"id":"cea00169.50bf88","type":"subflow","name":"Log","info":"","in":[{"x":50,"y":30,"wires":[{"id":"1d0e0beb.77d204"}]}],"out":[{"x":560,"y":250,"wires":[{"id":"2f19db2c.06de34","port":0}]}],"status":{"x":560,"y":310,"wires":[{"id":"2f19db2c.06de34","port":1}]}},{"id":"8e69b0b0.66c858","type":"subflow","name":"HcStarts","info":"","in":[{"x":50,"y":100,"wires":[{"id":"1bd9f9f.e87d686"}]}],"out":[{"x":440,"y":270,"wires":[{"id":"699aa5d6.c4b9e4","port":0}]}]},{"id":"30d50c1c.6fdb4c","type":"subflow","name":"Push","info":"","in":[{"x":50,"y":30,"wires":[{"id":"94d84f37.d1ca2"}]}],"out":[{"x":530,"y":210,"wires":[{"id":"52f3aaa6.ef20c4","port":0}]}],"status":{"x":530,"y":260,"wires":[{"id":"52f3aaa6.ef20c4","port":1}]}},{"id":"a0fe625a.b10d","type":"subflow","name":"SetMode","info":"","in":[{"x":50,"y":30,"wires":[{"id":"6dc67c4c.c39d3c"}]}],"out":[]},{"id":"4a184b82.8c2c8c","type":"mqtt-broker","z":"","broker":"nas.fritz.box","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""},{"id":"8292dd52.c65958","type":"ui_base","theme":{"name":"theme-light","lightTheme":{"default":"#0094CE","baseColor":"#0094CE","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":true,"reset":false},"darkTheme":{"default":"#097479","baseColor":"#097479","baseFont":"Helvetica Neue","edited":false},"customTheme":{"name":"","default":"#4B7930","baseColor":"#4B7930","baseFont":"Helvetica Neue"},"themeState":{"base-color":{"default":"#0094CE","value":"#0094CE","edited":false},"page-titlebar-backgroundColor":{"value":"#0094CE","edited":false},"page-backgroundColor":{"value":"#fafafa","edited":false},"page-sidebar-backgroundColor":{"value":"#ffffff","edited":false},"group-textColor":{"value":"#1bbfff","edited":false},"group-borderColor":{"value":"#ffffff","edited":false},"group-backgroundColor":{"value":"#ffffff","edited":false},"widget-textColor":{"value":"#111111","edited":false},"widget-backgroundColor":{"value":"#0094ce","edited":false},"widget-borderColor":{"value":"#ffffff","edited":false},"base-font":{"value":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"}},"angularTheme":{"primary":"indigo","accents":"blue","warn":"red","background":"grey"}},"site":{"name":"Home","hideToolbar":"false","allowSwipe":"false","dateFormat":"DD/MM/YYYY","sizes":{"sx":48,"sy":48,"gx":6,"gy":6,"cx":6,"cy":6,"px":0,"py":0}}},{"id":"2e54dc7c.160fac","type":"ui_tab","z":"","name":"Heizung","icon":"dashboard","order":1},{"id":"cd081c84.5bacb","type":"ui_group","z":"","name":"Betriebsstunden","tab":"2e54dc7c.160fac","disp":true,"width":"6"},{"id":"d2c61125.face98","type":"ui_group","z":"","name":"Temperaturen","tab":"2e54dc7c.160fac","disp":true,"width":"6"},{"id":"5d10f9cf.61fcd8","type":"ui_group","z":"","name":"Außentemperatur","tab":"2e54dc7c.160fac","disp":true,"width":"6"},{"id":"ddc27fd0.92f3e","type":"ui_tab","z":"","name":"Badewanne","icon":"dashboard","order":2},{"id":"1e177578.7996fb","type":"ui_group","z":"","name":"Badewanne","tab":"ddc27fd0.92f3e","order":1,"disp":true,"width":"6","collapse":false},{"id":"f0723594.b6834","type":"middleware","z":"","middleware":"http://server.fritz.box:8080"},{"id":"d49457d1.dab6a","type":"function","z":"b830962c.d8ca28","name":"Detect Changes","func":"var values = flow.get(\"values\") || {}, \n timestamps = flow.get(\"timestamps\") || {}, \n oldValue = values[msg.topic],\n oldTimestamp = timestamps[msg.topic],\n skip;\n\nmsg.old = {\n timestamp: oldTimestamp,\n value: oldValue\n}\n\nskip = \n oldValue !== undefined &&\n (Math.abs(msg.payload - oldValue) < 0.5) &&\n oldTimestamp !== undefined &&\n (Math.abs(Date.now() - oldTimestamp) < 60 * 1e3);\n\nif (skip)\n return null;\n\n/*\nnode.warn(\"-- \" + msg.topic + \" --\\n\" + \n \"val: \"+msg.payload +\"\\n\"+ \n \"old: \"+oldValue +\"\\n\"+ \n \"tsp: \"+(Date.now())+\"\\n\"+\n \"old: \"+oldTimestamp+\"\\n\"+\n (skip? \"true\":\"false\")\n);\n*/\n\nvalues[msg.topic] = msg.payload;\nflow.set(\"values\", values);\n\ntimestamps[msg.topic] = Date.now();\nflow.set(\"timestamps\", timestamps);\n\nreturn msg;","outputs":1,"noerr":0,"x":140,"y":590,"wires":[["c0645de9.32685"]]},{"id":"d5ae0548.01173","type":"http request","z":"cea00169.50bf88","name":"Send","method":"POST","ret":"txt","url":"","tls":"","x":270,"y":170,"wires":[["2f19db2c.06de34"]]},{"id":"1d0e0beb.77d204","type":"function","z":"cea00169.50bf88","name":"Payload","func":"// check if numeric value\nvar isNumeric = !isNaN(parseFloat(msg.payload)) && isFinite(msg.payload);\n\nif (!isNumeric) {\n return null;\n}\n\n// prepare json array\nmsg.payload = JSON.stringify([\n [Date.now(), msg.payload]\n]);\n\nreturn msg;","outputs":1,"noerr":0,"x":170,"y":30,"wires":[["109bf821.91c918"]]},{"id":"2f19db2c.06de34","type":"function","z":"cea00169.50bf88","name":"Remove HTTP 200","func":"if (msg.statusCode == 200)\n return [null, null];\n\nvar error = {\n payload: \"HTTP \" + msg.statusCode + \" \" + msg.payload,\n};\n\nreturn [msg, error];","outputs":2,"noerr":0,"x":410,"y":250,"wires":[[],[]]},{"id":"d924f1a0.37d77","type":"mqtt in","z":"b830962c.d8ca28","name":"","topic":"ebusd/bai/+","qos":"2","broker":"4a184b82.8c2c8c","x":100,"y":170,"wires":[["64b5691f.7a6de8"]]},{"id":"37549c70.9e68a4","type":"mqtt in","z":"b830962c.d8ca28","name":"","topic":"ebusd/700/+","qos":"2","broker":"4a184b82.8c2c8c","x":100,"y":220,"wires":[["64b5691f.7a6de8"]]},{"id":"64b5691f.7a6de8","type":"function","z":"b830962c.d8ca28","name":"Topic","func":"// topic\nvar topic = msg.topic.split(\"/\");\nmsg.topic = topic[topic.length-1].replace('.', '');\n\n// payload\nif (msg.payload == \"off\")\n msg.payload = 0;\nelse if (msg.payload == \"on\")\n msg.payload = 100;\n\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":170,"wires":[["fc49a0ac.0de92"]]},{"id":"e6387476.6bf878","type":"debug","z":"b830962c.d8ca28","name":"","active":false,"console":"false","complete":"true","x":530,"y":590,"wires":[]},{"id":"c2a7d3ad.a9172","type":"function","z":"b830962c.d8ca28","name":"Decode","func":"// -- SetMode --\nif (msg.topic == \"SetMode\") {\n var setmode = msg.payload.split(';');\n return {\n topic: \"EbusFlowTempDesired\",\n payload: 0+setmode[1]\n }\n}\n\n// -- HcStarts --\n\nif (msg.topic == \"HcStarts\") {\n flow.set(\"HcStarts\", +msg.payload);\n return null;\n}\n\nif (msg.topic == \"HcUnderHundredStarts\") {\n var hcstarts = +flow.get(\"HcStarts\");\n if (!hcstarts)\n return null;\n var totalStarts = hcstarts + parseInt(msg.payload)\n return {\n \"topic\": \"HcStarts\",\n \"payload\": totalStarts\n };\n}\n\n// -- Status01 --\n\nif (msg.topic !== \"Status01\")\n return msg;\n\nvar registers = ['HeatingFlowTemp', 'HeatingReturnTemp', 'OutsideTemp', null, null, 'VentState'];\nvar values = msg.payload.split(';');\nvar result = [];\n\nregisters.forEach(function(reg, i) {\n if (!reg)\n return;\n \n var value = values[i];\n \n if (reg == \"VentState\") {\n var hcvent = 0, hwcvent = 0;\n switch (value) {\n case \"on\":\n hcvent = 100;\n break;\n case \"4\":\n hwcvent = 100;\n break;\n }\n result.push({\n topic: \"HcVent\",\n payload: hcvent\n }, {\n topic: \"HwcVent\",\n payload: hwcvent\n });\n return;\n }\n \n result.push({\n topic: reg,\n payload: value\n });\n});\n\nreturn [result];","outputs":1,"noerr":0,"x":120,"y":390,"wires":[["414802f.08133fc","bb3296f9.19bf6","a091a2f7.7b8908","46b8a248.e6d01c"]]},{"id":"1bd9f9f.e87d686","type":"switch","z":"8e69b0b0.66c858","name":"HcStarts Type","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"HcStarts","vt":"str"},{"t":"eq","v":"HcUnderHundredStarts","vt":"str"}],"checkall":"true","outputs":2,"x":210,"y":100,"wires":[["c174a15a.0d3d9"],["699aa5d6.c4b9e4"]]},{"id":"54ac0b91.a85c2c","type":"mqtt out","z":"8e69b0b0.66c858","name":"HcUnderHundredStarts","topic":"ebusd/bai/HcUnderHundredStarts/get","qos":"","retain":"","broker":"4a184b82.8c2c8c","x":524,"y":235,"wires":[]},{"id":"c174a15a.0d3d9","type":"function","z":"8e69b0b0.66c858","name":"Store HcStarts","func":"global.set(\"HcStarts\", parseInt(msg.payload));\nreturn msg;","outputs":1,"noerr":0,"x":329,"y":171,"wires":[["54ac0b91.a85c2c"]]},{"id":"699aa5d6.c4b9e4","type":"function","z":"8e69b0b0.66c858","name":"Add HcUnderHundredStarts","func":"var hcStarts = parseInt(global.get(\"HcStarts\"));\n\nif (hcStarts) {\n msg.payload = hcStarts + parseInt(msg.payload);\n msg.topic = \"HcStarts\";\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":241,"y":271,"wires":[[]]},{"id":"46b8a248.e6d01c","type":"switch","z":"b830962c.d8ca28","name":"UI","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"HcHours","vt":"str"},{"t":"eq","v":"HcStarts","vt":"str"},{"t":"eq","v":"HeatingFlowTemp","vt":"str"},{"t":"eq","v":"Hc1FlowTemp","vt":"str"},{"t":"eq","v":"Hc2FlowTemp","vt":"str"},{"t":"eq","v":"OutsideTemp","vt":"str"},{"t":"eq","v":"HwcStorageTemp","vt":"str"},{"t":"eq","v":"HwcTempDesired","vt":"str"}],"checkall":"false","repair":false,"outputs":8,"x":120,"y":770,"wires":[["b50d6ece.27c9"],["46eb3afc.872a6c"],["748c464a.3af8e8"],["748c464a.3af8e8"],["748c464a.3af8e8"],["3bdc302c.4211e8"],["a445109b.a3551"],["fee56479.6f336"]]},{"id":"b50d6ece.27c9","type":"ui_text","z":"b830962c.d8ca28","group":"cd081c84.5bacb","order":2,"width":0,"height":0,"name":"HcHours","label":"HcHours","format":"{{msg.payload}}","layout":"row-spread","x":344,"y":685,"wires":[]},{"id":"46eb3afc.872a6c","type":"ui_text","z":"b830962c.d8ca28","group":"cd081c84.5bacb","order":1,"width":0,"height":0,"name":"HcStarts","label":"HcStarts","format":"{{msg.payload}}","layout":"row-spread","x":344,"y":725,"wires":[]},{"id":"748c464a.3af8e8","type":"ui_chart","z":"b830962c.d8ca28","name":"Temp","group":"d2c61125.face98","order":0,"width":0,"height":0,"label":"","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"12","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1F77B4","#AEC7E8","#FF7F0E","#2CA02C","#98DF8A","#D62728","#FF9896","#9467BD","#C5B0D5"],"useOldStyle":true,"x":334,"y":765,"wires":[[],[]]},{"id":"3bdc302c.4211e8","type":"ui_gauge","z":"b830962c.d8ca28","name":"OutsideTemp","group":"5d10f9cf.61fcd8","order":0,"width":0,"height":0,"gtype":"gage","title":"","label":"°C","format":"{{value|number:1}}","min":"-10","max":"35","colors":["#00B500","#E6E600","#CA3838"],"seg1":"","seg2":"","x":354,"y":805,"wires":[]},{"id":"ead43caa.356f88","type":"http request","z":"30d50c1c.6fdb4c","name":"Send to Push","method":"POST","ret":"txt","url":"http://server.fritz.box:5582","tls":"","x":280,"y":130,"wires":[["52f3aaa6.ef20c4"]]},{"id":"94d84f37.d1ca2","type":"function","z":"30d50c1c.6fdb4c","name":"Payload","func":"var uuid = msg.uuid;\nvar value = +msg.payload;\nvar time = Date.now();\n\nmsg.headers = {\n \"Content-type\" : \"application/json\"\n}\n\nvar json = {\n data: [{\n uuid: uuid,\n tuples: [\n [time, value]\n ]\n }]\n}\n\nmsg.payload = JSON.stringify(json);\n\nreturn msg;","outputs":1,"noerr":0,"x":194.5,"y":73.00000762939453,"wires":[["ead43caa.356f88"]]},{"id":"ce52f050.9c67a8","type":"subflow:30d50c1c.6fdb4c","z":"b830962c.d8ca28","name":"","x":360,"y":510,"wires":[["597f5b93.5c174c"]]},{"id":"1fd27844.5f8e18","type":"inject","z":"fdcf5ef4.578018","name":"","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":true,"x":120,"y":80,"wires":[["cd2c5940.da04b8"]]},{"id":"cd2c5940.da04b8","type":"http request","z":"fdcf5ef4.578018","name":"SDM API","method":"GET","ret":"txt","url":"http://uv.fritz.box/minuteavg","tls":"","x":270,"y":80,"wires":[["6fe6cf9a.bf3c68"]]},{"id":"d86cb220.0ff2c8","type":"debug","z":"fdcf5ef4.578018","name":"","active":false,"console":"false","complete":"true","x":520,"y":330,"wires":[]},{"id":"6fe6cf9a.bf3c68","type":"json","z":"fdcf5ef4.578018","name":"","pretty":true,"x":400,"y":80,"wires":[["e6fd7fde.40e358"]]},{"id":"e6fd7fde.40e358","type":"function","z":"fdcf5ef4.578018","name":"Extract","func":"var res = [],\n sdm = 'SDM630(full).';\n\n// Leistungen\n\nvar bezug = 0, einspeisung = 0, erzeugung = 0;\n\nfor (var i=1; i<=3; i++) {\n res.push({\n topic: sdm + \"Meter1.L\" + i,\n payload: msg.payload[0].Power[\"L\"+i]\n });\n if (i <= 2) res.push({\n topic: sdm + \"Meter2.L\" + i,\n payload: msg.payload[1].Power[\"L\"+i]\n });\n \n var value = msg.payload[0].Power[\"L\"+i];\n if (value > 0)\n bezug += value;\n else\n einspeisung -= value;\n erzeugung -= msg.payload[1].Power[\"L\"+i];\n}\n\nres.push({\n topic: sdm + \"Erzeugung\",\n payload: erzeugung\n});\nres.push({\n topic: sdm + \"Bezug\",\n payload: bezug\n});\nres.push({\n topic: sdm + \"Einspeisung\",\n payload: einspeisung\n});\n\nreturn [res];\n","outputs":1,"noerr":0,"x":530,"y":80,"wires":[["560bef02.2b49d8"]]},{"id":"ed270bc6.c53cc8","type":"function","z":"fdcf5ef4.578018","name":"Delta","func":"if (!msg.topic)\n return msg;\n\nvar values = flow.get(\"values\") || {}, \n timestamps = flow.get(\"timestamps\") || {}, \n oldValue = values[msg.topic],\n oldTimestamp = timestamps[msg.topic],\n skip;\n\n// at least 1 minute, even if value change\nif (\n oldTimestamp !== undefined && \n (Math.abs(Date.now() - oldTimestamp) < 1*60 * 1e3) &&\n msg.skip !== false\n)\n return null;\n\nif (\n (oldValue !== undefined && (Math.abs(msg.payload - oldValue) < 0.001)) &&\n (oldTimestamp !== undefined && (Math.abs(Date.now() - oldTimestamp) < 10*60 * 1e3)) &&\n msg.skip !== false\n) {\n return null;\n}\n\nvalues[msg.topic] = msg.payload;\nflow.set(\"values\", values);\n\ntimestamps[msg.topic] = Date.now();\nflow.set(\"timestamps\", timestamps);\n\nreturn msg;","outputs":1,"noerr":0,"x":110,"y":330,"wires":[["13036347.b4bd05"]]},{"id":"212809ae.5262fe","type":"subflow:30d50c1c.6fdb4c","z":"fdcf5ef4.578018","x":360,"y":240,"wires":[["fd737e52.02acf8"]]},{"id":"52f3aaa6.ef20c4","type":"function","z":"30d50c1c.6fdb4c","name":"Remove HTTP 200","func":"if (msg.statusCode == 200)\n return [null, null];\n\nvar error = {\n payload: \"HTTP \" + msg.statusCode + \" \" + msg.payload,\n};\n\nreturn [msg, error];","outputs":2,"noerr":0,"x":360.3888854980469,"y":196.44444274902344,"wires":[[],[]]},{"id":"b048a36b.1eb06","type":"comment","z":"fdcf5ef4.578018","name":"SDM Logging","info":"Collect 2 SDM360 meters","x":90,"y":30,"wires":[]},{"id":"597f5b93.5c174c","type":"debug","z":"b830962c.d8ca28","name":"","active":false,"tosidebar":true,"console":false,"complete":"true","x":530,"y":510,"wires":[]},{"id":"bfbb51aa.b99f28","type":"mqtt out","z":"b830962c.d8ca28","name":"ebusd get","topic":"","qos":"","retain":"","broker":"4a184b82.8c2c8c","x":540,"y":960,"wires":[]},{"id":"6a2e31f2.c6b41","type":"function","z":"b830962c.d8ca28","name":"Generate Topics","func":"var registers = {\n'700': [\n\t'SystemFlowTemp', // Status01\n\t'Hc1ActualFlowTempDesired',\n\t'Hc1FlowTemp',\n\t'Hc1MixerMovement',\n\t'Hc1PumpStatus',\n\t'Hc2ActualFlowTempDesired',\n\t'Hc2FlowTemp',\n\t'Hc2MixerMovement',\n\t'Hc2PumpStatus',\n\t'HwcStorageTemp',\n\t'HwcTempDesired'\n],\n'bai': [\n\t'CirPump',\n\t'FlowTempDesired',\n\t'HcHours',\n\t'HwcHours',\n\t'ModulationTempDesired',\n\t// 'Statenumber',\n\t// 'TargetFanSpeed',\n\t// 'TargetFanSpeedOutput',\n\t'PrimaryCircuitFlowrate',\n\t//'FlowsetHcMax',\n\t'ReturnRegulation',\n\t'ExtFlowTempDesiredMin',\n\t\"PumpPower\",\n\t\"PumpPowerDesired\"\n],\n'vr_70': [\n 'SensorData'\n]};\n\nvar result = [];\n\nfor (var circuit in registers) {\n\tregisters[circuit].forEach(function(reg) {\n\t\tresult.push({\n\t\t topic: \"ebusd/\"+circuit+\"/\"+reg+\"/get\",\n\t\t payload: 1\n\t\t});\n\t});\n}\n\nreturn [result];\n","outputs":1,"noerr":0,"x":320,"y":960,"wires":[["bfbb51aa.b99f28","88c094c0.dc7f"]]},{"id":"86a391ff.7a545","type":"inject","z":"b830962c.d8ca28","name":"Trigger","topic":"","payload":"","payloadType":"date","repeat":"30","crontab":"","once":true,"x":120,"y":960,"wires":[["6a2e31f2.c6b41"]]},{"id":"88c094c0.dc7f","type":"debug","z":"b830962c.d8ca28","name":"poll","active":false,"console":"false","complete":"true","x":530,"y":1050,"wires":[]},{"id":"ca80f961.a04ed","type":"inject","z":"b830962c.d8ca28","name":"Slow Trigger","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"onceDelay":"","x":140,"y":1050,"wires":[["f7e569b1.42c078"]]},{"id":"bce7d813.634ea8","type":"comment","z":"b830962c.d8ca28","name":"Poll MQTT","info":"","x":84,"y":895,"wires":[]},{"id":"960317ec.61fda","type":"comment","z":"b830962c.d8ca28","name":"Receive ebusd via MQTT","info":"","x":130,"y":40,"wires":[]},{"id":"1e2231d5.16bdc6","type":"comment","z":"b830962c.d8ca28","name":"Connect Volkszähler","info":"","x":120,"y":490,"wires":[]},{"id":"fd737e52.02acf8","type":"debug","z":"fdcf5ef4.578018","name":"","active":true,"console":"false","complete":"true","x":520,"y":240,"wires":[]},{"id":"d994c85d.a70b4","type":"comment","z":"8e69b0b0.66c858","name":"Combine HcStarts registers","info":"","x":140,"y":40,"wires":[]},{"id":"90942410.58ba2","type":"comment","z":"fdcf5ef4.578018","name":"Connect Volkszähler","info":"","x":110,"y":170,"wires":[]},{"id":"1d8f055f.550693","type":"debug","z":"b830962c.d8ca28","name":"","active":false,"console":"false","complete":"true","x":650,"y":170,"wires":[]},{"id":"414802f.08133fc","type":"function","z":"b830962c.d8ca28","name":"Mixer","func":"// allow only Mixer messages below 100\n\nif (msg.topic.match(/Hc.MixerMovement/)) {\n if (Math.abs(+msg.payload) < 50) {\n var date = new Date();\n var hour = date.getHours();\n var min = date.getMinutes();\n var sec = date.getSeconds();\n \n hour = (hour < 10 ? \"0\" : \"\") + hour;\n min = (min < 10 ? \"0\" : \"\") + min;\n sec = (sec < 10 ? \"0\" : \"\") + sec;\n \n return {\n topic: \"[alert] Heating mixer\",\n payload: \n msg.topic + \" stuck or dead.\\n\"+\n \"Last observed: \" + hour +\":\"+ min +\":\"+ sec\n };\n }\n}\n\nreturn null;","outputs":1,"noerr":0,"x":310,"y":390,"wires":[["50067b7a.c853bc"]]},{"id":"62161bc9.00563c","type":"e-mail","z":"b830962c.d8ca28","server":"smtp.gmail.com","port":"465","secure":true,"name":"cpuidle@gmail.com","dname":"Alert","x":656,"y":395,"wires":[]},{"id":"50067b7a.c853bc","type":"trigger","z":"b830962c.d8ca28","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"30","extend":true,"units":"min","reset":"","name":"30min","x":476,"y":395,"wires":[["62161bc9.00563c"]]},{"id":"209a3cda.706cec","type":"trigger","z":"b830962c.d8ca28","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"5","extend":true,"units":"min","reset":"","name":"5min","x":476,"y":335,"wires":[["62161bc9.00563c"]]},{"id":"7254ca8f.c1b184","type":"comment","z":"b830962c.d8ca28","name":"Alerting","info":"## ebusd/mqtt input\n\nMonitors if any messages are received from MQTT.\n\n## Hc2MixerMovement\n\nMonitors if Hc2MixerMovement is seen below 100, \ni.e. the mixer is not stuck.\n","x":660,"y":300,"wires":[]},{"id":"bb3296f9.19bf6","type":"function","z":"b830962c.d8ca28","name":"ebusd","func":"var date = new Date();\nvar hour = date.getHours();\nvar min = date.getMinutes();\nvar sec = date.getSeconds();\n\nhour = (hour < 10 ? \"0\" : \"\") + hour;\nmin = (min < 10 ? \"0\" : \"\") + min;\nsec = (sec < 10 ? \"0\" : \"\") + sec;\n\nreturn {\n topic: \"[alert] ebusd\",\n payload: \n \"No message received for 5min. Ebusd or MQTT dead.\\n\"+\n \"Last observed: \" + hour +\":\"+ min +\":\"+ sec\n};\n","outputs":1,"noerr":0,"x":316,"y":335,"wires":[["209a3cda.706cec"]]},{"id":"f7e569b1.42c078","type":"function","z":"b830962c.d8ca28","name":"Generate Topics","func":"var registers = [\n \"HcHours\", \"HcStarts\", \"HcUnderHundredStarts\",\n \"PrEnergySumHc1\", \"PrEnergySumHwc1\"\n], result = [];\n\nregisters.forEach(function(reg) {\n\tresult.push({\n\t topic: \"ebusd/bai/\"+reg+\"/get\",\n\t payload: 1\n\t});\n});\n\n\nreturn [result];","outputs":1,"noerr":0,"x":320,"y":1050,"wires":[["bfbb51aa.b99f28","88c094c0.dc7f"]]},{"id":"479507ae.9bee58","type":"mqtt in","z":"b830962c.d8ca28","name":"","topic":"ebusd/vr_70/SensorData","qos":"2","broker":"4a184b82.8c2c8c","x":140,"y":110,"wires":[["a11f8f8c.77cc78"]]},{"id":"a11f8f8c.77cc78","type":"function","z":"b830962c.d8ca28","name":"Split","func":"// S1 = SystemFlowTemp\n// S5 = Hc1FlowTemp\n// S6 = Hc2FlowTemp\n\nvar registers = ['S1', null, null, null, 'S5', 'S6'];\nvar values = msg.payload.split(';');\nvar result = [];\n\nregisters.forEach(function(reg, i) {\n if (!reg)\n return;\n \n result.push({\n topic: reg,\n payload: values[i]\n });\n});\n\nreturn [result];","outputs":1,"noerr":0,"x":340,"y":110,"wires":[["fc49a0ac.0de92"]]},{"id":"9903afda.ce3ec8","type":"inject","z":"b830962c.d8ca28","name":"Initial","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":"10","x":140,"y":340,"wires":[["bb3296f9.19bf6"]]},{"id":"e6c2bc9d.6f27d","type":"mqtt in","z":"fdcf5ef4.578018","name":"","topic":"Xsdm630/#","qos":"2","broker":"4a184b82.8c2c8c","x":110,"y":440,"wires":[["a6eb58cf.b095d8"]]},{"id":"a6eb58cf.b095d8","type":"function","z":"fdcf5ef4.578018","name":"Extract","func":"var readings = global.get(\"sdm\") || {};\n\nvar m, re = new RegExp('^sdm630/(.+?)/(.+)$');\nif ((m = re.exec(msg.topic)) !== null) {\n var meter = m[1], reg = m[2];\n \n readings[meter] = readings[meter] || {};\n readings[meter][reg] = parseFloat(msg.payload);\n \n msg.payload = readings;\n global.set(\"sdm\", readings);\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":440,"wires":[["a41c7a6.c3c7408"]]},{"id":"a41c7a6.c3c7408","type":"debug","z":"fdcf5ef4.578018","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":490,"y":440,"wires":[]},{"id":"a445109b.a3551","type":"ui_gauge","z":"b830962c.d8ca28","name":"","group":"1e177578.7996fb","order":1,"width":0,"height":0,"gtype":"gage","title":"HwcStorageTemp","label":"°C","format":"{{value}}","min":"20","max":"65","colors":["#CA3838","#E6E600","#00B500"],"seg1":"45","seg2":"50","x":370,"y":850,"wires":[]},{"id":"fee56479.6f336","type":"ui_text","z":"b830962c.d8ca28","group":"1e177578.7996fb","order":4,"width":0,"height":0,"name":"","label":"HwcTempDesired","format":"{{msg.payload | number:1}}°C","layout":"row-spread","x":370,"y":890,"wires":[]},{"id":"6dc67c4c.c39d3c","type":"function","z":"a0fe625a.b10d","name":"SetMode","func":"return null;\n\n// cache\nif ([\"Hc1ActualFlowTempDesired\", \"Hc2ActualFlowTempDesired\", \"SetMode\"].indexOf(msg.topic) >= 0) {\n // remember values\n flow.set(msg.topic, msg.payload);\n\n // log\n node.send({\n \"topic\": \"nodered/setmode/\" + msg.topic,\n \"payload\": msg.payload\n })\n}\n\n// exit unless SetMode\nif (msg.topic !== \"SetMode\") {\n return null;\n}\n\nvar setmode = msg.payload.split(\";\");\n\nif (setmode[0] !== \"auto\" || setmode[4] !== \"0\" || setmode[6] !== \"0\")\n return null;\n\nvar hcMax = Math.max(\n 0+flow.get(\"Hc1ActualFlowTempDesired\"),\n 0+flow.get(\"Hc2ActualFlowTempDesired\")\n);\n\n// log\nnode.send({\n \"topic\": \"nodered/setmode/hcmax\",\n \"payload\": hcMax\n});\n\nif (hcMax <= 0)\n return null;\n\nif (setmode[0] == \"auto\")\n setmode[0] = \"0\";\n\nif (0+setmode[1] <= hcMax)\n return null;\n\nsetmode[1] = (hcMax + 1.0).toFixed(1);\nmode = setmode.join(\";\");\n\n// log\nnode.send({\n \"topic\": \"nodered/setmode/mode\",\n \"payload\": mode\n});\n\n// mqtt\nmsg = {\n \"topic\": \"ebusd/bai/SetModeOverride/set\",\n \"payload\": mode\n}\n/*\n// ebusctl\nmsg = {\n \"topic\": \"exec\",\n \"payload\": \"-s nas.fritz.box w -c bai -s 10 SetModeOverride '\" + mode + \"'\"\n}\n*/\nreturn msg;","outputs":1,"noerr":0,"x":210,"y":30,"wires":[["bf7bfdec.7452d8"]]},{"id":"fc49a0ac.0de92","type":"function","z":"b830962c.d8ca28","name":"Filter","func":"if ([\"Mode\", \"DateTime\"].indexOf(msg.topic) >= 0)\n return null;\n\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":170,"wires":[["c2a7d3ad.a9172","1d8f055f.550693","68506bc7.95442c"]]},{"id":"68506bc7.95442c","type":"subflow:a0fe625a.b10d","z":"b830962c.d8ca28","name":"","x":660,"y":110,"wires":[]},{"id":"bf7bfdec.7452d8","type":"mqtt out","z":"a0fe625a.b10d","name":"","topic":"","qos":"","retain":"","broker":"4a184b82.8c2c8c","x":400,"y":30,"wires":[]},{"id":"a091a2f7.7b8908","type":"uuid","z":"b830962c.d8ca28","name":"","middleware":"f0723594.b6834","x":110,"y":530,"wires":[["d49457d1.dab6a","ce52f050.9c67a8"],["77d698fe.e3035"]]},{"id":"560bef02.2b49d8","type":"uuid","z":"fdcf5ef4.578018","name":"","middleware":"f0723594.b6834","x":110,"y":240,"wires":[["212809ae.5262fe","ed270bc6.c53cc8"],[]]},{"id":"4f1be7fe.a5ad1","type":"inject","z":"9e57d57.c910fa8","name":"","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":true,"x":130,"y":100,"wires":[["133d309a.6afa17"]]},{"id":"e1b5f15c.574db8","type":"debug","z":"9e57d57.c910fa8","name":"","active":true,"console":"false","complete":"payload","x":530,"y":100,"wires":[]},{"id":"63ec648f.27899c","type":"comment","z":"9e57d57.c910fa8","name":"Update Volkszähler Channels","info":"","x":140,"y":40,"wires":[]},{"id":"133d309a.6afa17","type":"public","z":"9e57d57.c910fa8","name":"","middleware":"f0723594.b6834","x":330,"y":100,"wires":[["e1b5f15c.574db8"]]},{"id":"48e83b78.091e54","type":"comment","z":"d4907414.d9f7e8","name":"Badewanne","info":"","x":100,"y":40,"wires":[]},{"id":"8ba531e0.4fc47","type":"ui_button","z":"d4907414.d9f7e8","name":"","group":"1e177578.7996fb","order":2,"width":0,"height":0,"passthru":false,"label":"Heizen","color":"","bgcolor":"red","icon":"","payload":"60","payloadType":"str","topic":"HwcTempDesired","x":120,"y":100,"wires":[["9e05e01f.0deae","5497fb27.5da15c","2d33490b.a60bfe"]]},{"id":"9e05e01f.0deae","type":"trigger","z":"d4907414.d9f7e8","op1":"","op2":"55","op1type":"str","op2type":"str","duration":"30","extend":true,"units":"min","reset":"","bytopic":"all","name":"Reset after 30min","x":160,"y":200,"wires":[["5b62e86d.f89898","2d33490b.a60bfe"]]},{"id":"1e7fa69.ce81259","type":"mqtt out","z":"d4907414.d9f7e8","name":"Get Temp","topic":"ebusd/700/HwcTempDesired/get","qos":"1","retain":"","broker":"4a184b82.8c2c8c","x":370,"y":260,"wires":[]},{"id":"5497fb27.5da15c","type":"mqtt out","z":"d4907414.d9f7e8","name":"Set (60°C)","topic":"ebusd/700/HwcTempDesired/set","qos":"2","retain":"","broker":"4a184b82.8c2c8c","x":370,"y":100,"wires":[]},{"id":"2d33490b.a60bfe","type":"trigger","z":"d4907414.d9f7e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"250","extend":false,"units":"ms","reset":"","bytopic":"all","name":"refresh","x":200,"y":260,"wires":[["1e7fa69.ce81259"]]},{"id":"5b62e86d.f89898","type":"mqtt out","z":"d4907414.d9f7e8","name":"Set (55°C)","topic":"ebusd/700/HwcTempDesired/set","qos":"2","retain":"","broker":"4a184b82.8c2c8c","x":370,"y":200,"wires":[]},{"id":"a011bf62.ee914","type":"ui_button","z":"d4907414.d9f7e8","name":"Normal","group":"1e177578.7996fb","order":3,"width":0,"height":0,"passthru":false,"label":"Normal","color":"","bgcolor":"","icon":"","payload":"55","payloadType":"str","topic":"","x":130,"y":150,"wires":[["5b62e86d.f89898"]]},{"id":"13036347.b4bd05","type":"uri","z":"fdcf5ef4.578018","name":"","middleware":"f0723594.b6834","context":"data","format":"json","x":250,"y":330,"wires":[["cf71ff24.1316a"]]},{"id":"cf71ff24.1316a","type":"subflow:cea00169.50bf88","z":"fdcf5ef4.578018","name":"","x":390,"y":330,"wires":[["d86cb220.0ff2c8"]]},{"id":"c0645de9.32685","type":"subflow:cea00169.50bf88","z":"b830962c.d8ca28","name":"","x":360,"y":590,"wires":[["e6387476.6bf878"]]},{"id":"109bf821.91c918","type":"uri","z":"cea00169.50bf88","name":"","middleware":"f0723594.b6834","context":"data","format":"json","x":210,"y":100,"wires":[["d5ae0548.01173"]]},{"id":"7833e1d.14bffa","type":"comment","z":"b830962c.d8ca28","name":"Update UI","info":"","x":90,"y":670,"wires":[]},{"id":"77d698fe.e3035","type":"debug","z":"b830962c.d8ca28","name":"not found","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":540,"y":550,"wires":[]}]