Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [
- {
- "id": "1701a0.212bae61",
- "type": "tab",
- "label": "core",
- "disabled": false,
- "info": ""
- },
- {
- "id": "dc52cc05.e78c1",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.rpc",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 109.00003051757812,
- "y": 168.00000190734863,
- "wires": [
- [
- "4d9adedb.b0b6e"
- ]
- ]
- },
- {
- "id": "86794597.ab6358",
- "type": "jsonrpc-call",
- "z": "1701a0.212bae61",
- "name": "",
- "method": "",
- "client": "36ca1673.3376ea",
- "x": 418.0000305175781,
- "y": 184,
- "wires": [
- [
- "948aa258.1d622",
- "77cb98d7.0bf1e8"
- ]
- ]
- },
- {
- "id": "3c61c551.51b97a",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 142.00003051757812,
- "y": 241,
- "wires": [
- [
- "6a1448a8.d39a58"
- ]
- ]
- },
- {
- "id": "6a1448a8.d39a58",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "msg.method = \"kua\";\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "x": 274.0000305175781,
- "y": 241,
- "wires": [
- [
- "86794597.ab6358"
- ]
- ]
- },
- {
- "id": "948aa258.1d622",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 632.0000305175781,
- "y": 186,
- "wires": []
- },
- {
- "id": "4d9adedb.b0b6e",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "msg.method = msg.method;\nmsg.payload = msg.payload;\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "x": 250.00003051757812,
- "y": 174,
- "wires": [
- [
- "86794597.ab6358"
- ]
- ]
- },
- {
- "id": "77cb98d7.0bf1e8",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 625.0000381469727,
- "y": 258.00000381469727,
- "wires": []
- },
- {
- "id": "c2bbad49.8fce7",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "call rpc in JS",
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 254.00006675720215,
- "y": 362.00000286102295,
- "wires": [
- [
- "464d70c2.7cc82"
- ]
- ]
- },
- {
- "id": "464d70c2.7cc82",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "(async () => {\n const af = global.get('actionflows');\n \n const getWindowPosition = async (name) => {\n const resMsg = await af.invoke('core.rpc', {\n method: \"window.getPosition\",\n payload: [name],\n });\n return resMsg.payload.position;\n };\n /*\n resMsg = await af.invoke('core.rpc', {\n method: \"window.getPosition\",\n payload: [\"loft-bedroom\"],\n });*/\n node.send({\n payload: `Stav okna ${await getWindowPosition('loft-bedroom')}`\n });\n})();\n",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "x": 414.00008392333984,
- "y": 361.99999046325684,
- "wires": [
- [
- "df0446b8.06ae58"
- ]
- ]
- },
- {
- "id": "df0446b8.06ae58",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "x": 582.000114440918,
- "y": 363.99999046325684,
- "wires": []
- },
- {
- "id": "fe075d44.64aa",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "rpc via actionsflows",
- "info": "(async () => {\n const af = global.get('actionflows');\n \n resMsg = await af.invoke('rpc', {\n method: \"window.getPosition\",\n payload: [\"loft-bedroom\"],\n });\n node.send(resMsg);\n})();\n",
- "x": 126.00003051757812,
- "y": 105,
- "wires": []
- },
- {
- "id": "9012924d.79775",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test rpc call",
- "info": "",
- "x": 227.00006866455078,
- "y": 316.9999895095825,
- "wires": []
- },
- {
- "id": "cc6ba16c.ba465",
- "type": "tail",
- "z": "1701a0.212bae61",
- "d": true,
- "name": "",
- "filetype": "text",
- "split": "[\\r]{0,1}\\n",
- "filename": "/home/gibo/.node-red/nodered.log",
- "inputs": 0,
- "x": 1264.9999694824219,
- "y": 237.00004959106445,
- "wires": [
- [
- "7eddee49.b2b8d"
- ]
- ]
- },
- {
- "id": "7eddee49.b2b8d",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 1555.799976348877,
- "y": 254.00005912780762,
- "wires": []
- },
- {
- "id": "d34d5c7b.ad36d",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "tail log",
- "info": "",
- "x": 1124.8000030517578,
- "y": 179.00003337860107,
- "wires": []
- },
- {
- "id": "564d3f68.5d431",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.db.query",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 127.00001525878906,
- "y": 620.0000257492065,
- "wires": [
- [
- "82b19538.31eb68"
- ]
- ]
- },
- {
- "id": "82b19538.31eb68",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "databases list",
- "func": "const databases = {\n 'smarthouse': 0,\n 'xxx': 1,\n};\n\nmsg.topic = msg.query;\nmsg.payload = msg.values;\n\nconst selectedDatabase = databases[msg.database];\n\nconst res = [];\nfor (const outputNumber of new Set(Object.values(databases))) {\n res.push(selectedDatabase === outputNumber ? msg : null);\n}\n\nreturn res;",
- "outputs": 3,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 352.0000228881836,
- "y": 623.0000247955322,
- "wires": [
- [
- "492b7203.2464fc"
- ],
- [],
- []
- ]
- },
- {
- "id": "e6677b6.2708f88",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 805.0000267028809,
- "y": 643.0000267028809,
- "wires": []
- },
- {
- "id": "492b7203.2464fc",
- "type": "mysql",
- "z": "1701a0.212bae61",
- "mydb": "76a2023f.8c254c",
- "name": "",
- "x": 589.0000228881836,
- "y": 603.0000257492065,
- "wires": [
- [
- "e6677b6.2708f88"
- ]
- ]
- },
- {
- "id": "f7748054.51ff6",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "db query via actionflows",
- "info": "",
- "x": 139.80001831054688,
- "y": 532.0000152587891,
- "wires": []
- },
- {
- "id": "db217951.75efa8",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "test",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 194.00003051757812,
- "y": 775.0000457763672,
- "wires": [
- [
- "3ca93c76.094874"
- ]
- ]
- },
- {
- "id": "fd527c9.2ad4f8",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 574.0000381469727,
- "y": 776.0000448226929,
- "wires": []
- },
- {
- "id": "3ca93c76.094874",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "const af = global.get('actionflows');\n\nconst resMsg = await af.invoke('core.db.query', {\n database: 'smarthouse',\n query: \"SELECT * FROM radio_station\",\n values: [],\n});\n\nreturn resMsg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 372.0000343322754,
- "y": 782.0000467300415,
- "wires": [
- [
- "fd527c9.2ad4f8"
- ]
- ]
- },
- {
- "id": "fae73554750aae18",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.npm.require",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 154,
- "y": 1012.0000152587891,
- "wires": [
- [
- "cf8613806abbaad4"
- ]
- ]
- },
- {
- "id": "cf8613806abbaad4",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "const moduleName = msg.payload.module;\n//node.warn(moduleName);\n\nif (msg.payload.cached !== true) {\n const cacheKey = global.get('require')(\"path\").resolve(moduleName);\n node.warn(\"Remove from require cache\");\n \n // odstranit z cache\n delete global.get('require').cache[cacheKey];\n}\n\nconst mod = global.get('require')(moduleName);\n\n//node.warn(mod);\n\nmsg.payload = mod;\n\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 362.00000762939453,
- "y": 1012.0000324249268,
- "wires": [
- [
- "6ba1b30a2bda7e67"
- ]
- ]
- },
- {
- "id": "0ac4b279ed200deb",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "require",
- "info": "",
- "x": 97.80001831054688,
- "y": 929.0000152587891,
- "wires": []
- },
- {
- "id": "6ba1b30a2bda7e67",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 549.0000076293945,
- "y": 1017.0000324249268,
- "wires": []
- },
- {
- "id": "b814d00e3ff56199",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 228.0000228881836,
- "y": 1104.9999752044678,
- "wires": [
- [
- "f82ab7016c2e1cd6"
- ]
- ]
- },
- {
- "id": "f82ab7016c2e1cd6",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "require test",
- "func": "\nconst af = global.get('actionflows');\n\nconst batterySocPredictionEngine = (await af.invoke('core.npm.require', {payload: {\n module: '/home/gibo/dev/misc/pv/battery_soc_prediction/engine',\n}})).payload;\n\nnode.warn(batterySocPredictionEngine)\n",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 433.0000228881836,
- "y": 1111.9999732971191,
- "wires": [
- []
- ]
- },
- {
- "id": "11435707ad5f8b4a",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "rdns",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 139.00003051757812,
- "y": 1343.4001550674438,
- "wires": [
- [
- "f96995170da63cfd"
- ]
- ]
- },
- {
- "id": "15212355ac8771c0",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 1050.0001373291016,
- "y": 1403.400200843811,
- "wires": []
- },
- {
- "id": "a65e007551310504",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "rdns",
- "info": "",
- "x": 109.00003051757812,
- "y": 1274.4001531600952,
- "wires": []
- },
- {
- "id": "2a70b1b3c0d28675",
- "type": "exec",
- "z": "1701a0.212bae61",
- "command": "host",
- "addpay": "payload",
- "append": "",
- "useSpawn": "false",
- "timer": "",
- "winHide": false,
- "oldrc": false,
- "name": "",
- "x": 545.0000534057617,
- "y": 1324.4003133773804,
- "wires": [
- [
- "b5fc5eb91f956558"
- ],
- [],
- []
- ]
- },
- {
- "id": "e0958720beffd280",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "192.168.1.530",
- "payloadType": "str",
- "x": 193.00003051757812,
- "y": 1410.80020236969,
- "wires": [
- [
- "f96995170da63cfd"
- ]
- ]
- },
- {
- "id": "07a78a1b984453fa",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 1",
- "func": "return msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 888.0001831054688,
- "y": 1351.8002157211304,
- "wires": [
- [
- "15212355ac8771c0",
- "6f665c5d1f60360f"
- ]
- ]
- },
- {
- "id": "8c9fdf9b82fd9e97",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "192.168.1.53",
- "payloadType": "str",
- "x": 193.00003051757812,
- "y": 1449.8001794815063,
- "wires": [
- [
- "f96995170da63cfd"
- ]
- ]
- },
- {
- "id": "6f665c5d1f60360f",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 2",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 1040.000135421753,
- "y": 1320.600079536438,
- "wires": []
- },
- {
- "id": "b6b7b286ee400cfe",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "Events",
- "info": "",
- "x": 105.20009994506836,
- "y": 1840.1998567581177,
- "wires": []
- },
- {
- "id": "3adf467b89fa2175",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 16",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "true",
- "targetType": "full",
- "statusVal": "",
- "statusType": "auto",
- "x": 424.2001266479492,
- "y": 1936.1999831199646,
- "wires": []
- },
- {
- "id": "4de3dc413c2e28fa",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "event test1",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- },
- {
- "p": "req",
- "v": "{\"headers\":{\"x-forwarded-for\":\"192.168.1.150\",\"user-agent\":\"test-browser\"}}",
- "vt": "json"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "{\"event\":\"test1\",\"hostname\":\"smarthouse-controller-test\",\"whatever\":\"some value\"}",
- "payloadType": "json",
- "x": 267.2001304626465,
- "y": 2139.1997027397156,
- "wires": [
- [
- "60ab4fa0b242af59"
- ]
- ]
- },
- {
- "id": "1ed0a31091c0e916",
- "type": "sub",
- "z": "1701a0.212bae61",
- "name": "core.onEvent",
- "topic": "core.onEvent",
- "x": 265.2000961303711,
- "y": 2211.1997051239014,
- "wires": [
- [
- "2695547be526d5ae"
- ]
- ]
- },
- {
- "id": "5dba9ec86bebf04c",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test pub/sub",
- "info": "",
- "x": 225.2000617980957,
- "y": 2102.199701309204,
- "wires": []
- },
- {
- "id": "2695547be526d5ae",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 17",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 438.2000961303711,
- "y": 2208.1997051239014,
- "wires": []
- },
- {
- "id": "ed413e8b3fc6a9eb",
- "type": "sub",
- "z": "1701a0.212bae61",
- "name": "core.onEvent/smarthouse-controller-test",
- "topic": "core.onEvent/smarthouse-controller-test",
- "x": 353.2000732421875,
- "y": 2248.1996173858643,
- "wires": [
- [
- "61c83c27abc6bd80"
- ]
- ]
- },
- {
- "id": "61c83c27abc6bd80",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 18",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 600.2001266479492,
- "y": 2248.1997051239014,
- "wires": []
- },
- {
- "id": "0dee66451735a7ca",
- "type": "sub",
- "z": "1701a0.212bae61",
- "name": "core.onEvent/smarthouse-controller-test/test1",
- "topic": "core.onEvent/smarthouse-controller-test/test1",
- "x": 366.2000732421875,
- "y": 2286.1996173858643,
- "wires": [
- [
- "3391adc015b6a8d8"
- ]
- ]
- },
- {
- "id": "3391adc015b6a8d8",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 19",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 640.2001266479492,
- "y": 2284.1997051239014,
- "wires": []
- },
- {
- "id": "d81871d2db0e359d",
- "type": "sub",
- "z": "1701a0.212bae61",
- "name": "core.onEvent/smarthouse-controller-test/test2",
- "topic": "core.onEvent/smarthouse-controller-test/test2",
- "x": 366.2000732421875,
- "y": 2323.1996173858643,
- "wires": [
- [
- "3c1a0e64a8c7ac5d"
- ]
- ]
- },
- {
- "id": "3c1a0e64a8c7ac5d",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "debug 20",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 640.2001266479492,
- "y": 2321.1997051239014,
- "wires": []
- },
- {
- "id": "e7e3b7c733934777",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "event test2",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- },
- {
- "p": "req",
- "v": "{\"headers\":{\"x-forwarded-for\":\"192.168.1.150\",\"user-agent\":\"test-browser\"}}",
- "vt": "json"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "{\"event\":\"test2\",\"hostname\":\"smarthouse-controller-test\",\"whatever\":\"some value\"}",
- "payloadType": "json",
- "x": 269.20009994506836,
- "y": 2173.1996154785156,
- "wires": [
- [
- "60ab4fa0b242af59"
- ]
- ]
- },
- {
- "id": "eda1cd9c3423df9a",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "send to coreserver and publish",
- "func": "const af = global.get('actionflows');\n\n// vytahnout o jakou udalost jde a jeji atributy\nconst {event, ...eventAttributes} = msg.payload;\n\nif (!event) return;\n\n// vytahnout ip adresu kdo to poslal\nconst clientIp = msg.req.headers['x-forwarded-for'] || msg.req.connection.remoteAddress;\n//node.warn(clientIp);\n\n// zjistit reverzni dns zaznam\nconst resMsg_rdns = await af.invoke('rdns', {payload: clientIp});\nconst remoteAddressHost = resMsg_rdns.payload[0];\n//node.warn(resMsg_rdns);\n//return;\n\n\n// odeslat do coreserveru\nconst clientAttributes = {\n remoteAddress: {\n ip: clientIp,\n host: remoteAddressHost,\n },\n userAgent: msg.req.headers['user-agent'],\n};\nconst resMsg_notify = await af.invoke('core.rpc', {\n method: 'notification.notify',\n payload: [event, eventAttributes, clientAttributes],\n});\n//node.warn(resMsg_notify);\n\n\n// publish\n// odeslat event v nekolika podobach\n// core.onEvent\n// core.onEvent/hostname\n// core.onEvent/real-hostname-from-rdns\n// core.onEvent/hostname/event\n// core.onEvent/real-hostname-from-rdns/event\n\n// posbirat varianty\nconst eventVariants = [];\n\n// odeslat jako obecnou udalost\neventVariants.push(\"core.onEvent\");\n\nfor (const hostname of [msg.payload.hostname, remoteAddressHost]) {\n const eventParts = [\"core.onEvent\"];\n\n if (hostname) {\n eventParts.push(hostname);\n }\n\n eventParts.push(event);\n\n for (let i = 1; i <= eventParts.length; ++i) {\n const eventVariant = eventParts.slice(0, i).join(\"/\");\n if (!eventVariants.includes(eventVariant)) {\n eventVariants.push(eventVariant);\n }\n }\n}\n\n// odeslat vsechny varianty\nfor (const eventVariant of eventVariants) {\n const eventMsg = {\n topic: eventVariant,\n payload: {\n ...msg.payload,\n _: {\n client: clientAttributes,\n },\n },\n };\n //node.warn(eventMsg);\n const resMsg_publish = await af.invoke('publish', eventMsg);\n}",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 500.20018768310547,
- "y": 2030.1997413635254,
- "wires": [
- []
- ]
- },
- {
- "id": "562ad48dd8fa3f91",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "event test1",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- },
- {
- "p": "req",
- "v": "{\"headers\":{\"x-forwarded-for\":\"192.168.1.150\",\"user-agent\":\"test-browser\"}}",
- "vt": "json"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "{\"event\":\"test1\",\"hostname\":\"smarthouse-controller-test\",\"whatever\":\"some value\"}",
- "payloadType": "json",
- "x": 233.20012283325195,
- "y": 2033.1997413635254,
- "wires": [
- [
- "eda1cd9c3423df9a"
- ]
- ]
- },
- {
- "id": "be0cc16cf0fc21f0",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "test",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 208.20005798339844,
- "y": 1561.2000350952148,
- "wires": [
- [
- "aea3d19f9c6bcba2"
- ]
- ]
- },
- {
- "id": "aea3d19f9c6bcba2",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "const af = global.get('actionflows');\n\nconst resMsg = await af.invoke('rdns', { payload: \"192.168.1.150\" });\n\nreturn resMsg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 386.2000617980957,
- "y": 1568.2000360488892,
- "wires": [
- [
- "bf634883d51a1f51"
- ]
- ]
- },
- {
- "id": "bf634883d51a1f51",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": false,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 588.200065612793,
- "y": 1562.2000341415405,
- "wires": []
- },
- {
- "id": "4db0f36a2ab8025a",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.raiseEvent",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 233.20008087158203,
- "y": 1972.199984073639,
- "wires": [
- [
- "3adf467b89fa2175",
- "eda1cd9c3423df9a",
- "c6a4f82c78c91533"
- ]
- ]
- },
- {
- "id": "c6a4f82c78c91533",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 427.2002487182617,
- "y": 1979.199984073639,
- "wires": []
- },
- {
- "id": "60ab4fa0b242af59",
- "type": "actionflows",
- "z": "1701a0.212bae61",
- "info": "Describe your action API here.",
- "untilproptype": "num",
- "proptype": "msg",
- "name": "core.raiseEvent",
- "prop": "loop",
- "untilprop": 0,
- "until": "gt",
- "loop": "none",
- "scope": "global",
- "perf": false,
- "seq": false,
- "x": 458.2002754211426,
- "y": 2151.1997022628784,
- "wires": [
- []
- ]
- },
- {
- "id": "7d2eb2e80ca14650",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "process",
- "info": "",
- "x": 207.20006561279297,
- "y": 1889.1999821662903,
- "wires": []
- },
- {
- "id": "ab6adde9e972fe0d",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "publish",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 174.20005798339844,
- "y": 1744.1999588012695,
- "wires": [
- [
- "97f578b595232d19"
- ]
- ]
- },
- {
- "id": "97f578b595232d19",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "return msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 346.20006561279297,
- "y": 1747.200038909912,
- "wires": [
- [
- "3c40152c60cf0012",
- "b9dbb2e9b2d7a374"
- ]
- ]
- },
- {
- "id": "020b0adad2493ca6",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "publish",
- "info": "",
- "x": 109.00007247924805,
- "y": 1689.2000370025635,
- "wires": []
- },
- {
- "id": "3c40152c60cf0012",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 526.2001571655273,
- "y": 1760.2000379562378,
- "wires": []
- },
- {
- "id": "b9dbb2e9b2d7a374",
- "type": "pub",
- "z": "1701a0.212bae61",
- "name": "",
- "topic": "",
- "message": "",
- "x": 520.2000350952148,
- "y": 1719.2000370025635,
- "wires": []
- },
- {
- "id": "dd1985b2c3c19e44",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "graphize",
- "func": "const rows = msg.payload;\n\nif (rows.length == 0) {\n return [];\n}\n\n// pokusime se najit v prvni radce, ktery sloupec je ten s datumem\nconst firstRow = rows[0];\n// const columnNames = Object.keys(firstRow);\nconst columnNamesMap = new Map();\nfor (const row of rows) {\n for (const columnName in row) {\n columnNamesMap.set(columnName, null);\n }\n}\nconst columnNames = [...columnNamesMap.keys()];\n// node.warn(columnNames);\n\nlet dateColumnName = null;\nfor (const columnName of columnNames) {\n const val = firstRow[columnName];\n if (columnName == 'date') {\n dateColumnName = columnName;\n break;\n }else if (columnName == 'timestamp') {\n dateColumnName = columnName;\n break;\n } else if (typeof val === 'string' && !isNaN(Date.parse(val))) {\n dateColumnName = columnName;\n break;\n } else if (typeof val === 'number' && val >= 946684800000 && val <= 4102444800000) {\n dateColumnName = columnName;\n break;\n }\n}\n//node.warn(dateColumnName);\n\nif (dateColumnName === null) {\n node.error(\"Unable to recognize date column\");\n return [];\n}\n\nconst firstRowDate = firstRow[dateColumnName];\n// prevest na timestamp\nif (typeof firstRowDate === 'string' && !isNaN(Date.parse(firstRowDate))) {\n for (const row of rows) {\n row[dateColumnName] = Date.parse(row[dateColumnName]);\n }\n}\n\nconst seriesNames = [];\nfor (const columnName of columnNames) {\n if (columnName !== dateColumnName) {\n seriesNames.push(columnName);\n }\n}\n\nconst seriesData = [];\nfor (const serieName of seriesNames) {\n let data = [];\n\n for (const row of rows) {\n if (dateColumnName in row) {\n data.push({\n x: row[dateColumnName],\n y: row[serieName],\n });\n }\n }\n\n seriesData.push(data);\n}\n\n\nmsg.payload = [\n {\n \"series\": seriesNames,\n \"data\": seriesData,\n \"labels\": [\"\"]\n }\n]\n\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 497.2000045776367,
- "y": 2507.199867248535,
- "wires": [
- [
- "5c157950e238dfb0"
- ]
- ]
- },
- {
- "id": "80c642d757d18206",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "Dashboard utils",
- "info": "",
- "x": 177.20000839233398,
- "y": 2435.1998653411865,
- "wires": []
- },
- {
- "id": "ce6fb6cfd3385f9b",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.dashboard.graphize",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 279.1999969482422,
- "y": 2506.199951171875,
- "wires": [
- [
- "dd1985b2c3c19e44"
- ]
- ]
- },
- {
- "id": "5c157950e238dfb0",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 733.2000350952148,
- "y": 2508.199867248535,
- "wires": []
- },
- {
- "id": "adf3e932b79f5f3e",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "test",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 234.19997787475586,
- "y": 2621.1999502182007,
- "wires": [
- [
- "e6b03731ae6e9708"
- ]
- ]
- },
- {
- "id": "7d867d765bd6bbd4",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": true,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 847.2000389099121,
- "y": 2630.199869155884,
- "wires": []
- },
- {
- "id": "e6b03731ae6e9708",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "",
- "func": "msg.payload = [\n {\n \"xdate\": \"2022-12-31T23:00:00.000Z\",\n \"imported_kwh\": 29.35,\n \"exported_kwh\": 1.13\n },\n {\n \"xdate\": \"2023-01-01T23:00:00.000Z\",\n \"imported_kwh\": 55.46,\n \"exported_kwh\": 2.21\n },\n {\n \"xdate\": \"2023-01-02T23:00:00.000Z\",\n \"imported_kwh\": 80.53,\n \"exported_kwh\": 2.6\n },\n];\n\nreturn msg;\n",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 412.1999816894531,
- "y": 2628.199951171875,
- "wires": [
- [
- "bc384afe885770b1"
- ]
- ]
- },
- {
- "id": "bc384afe885770b1",
- "type": "actionflows",
- "z": "1701a0.212bae61",
- "info": "Describe your action API here.",
- "untilproptype": "num",
- "proptype": "msg",
- "name": "core.dashboard.graphize",
- "prop": "loop",
- "untilprop": 0,
- "until": "gt",
- "loop": "none",
- "scope": "global",
- "perf": false,
- "seq": false,
- "x": 631.2000312805176,
- "y": 2631.199870109558,
- "wires": [
- [
- "7d867d765bd6bbd4"
- ]
- ]
- },
- {
- "id": "e3bffbff9e2d3090",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "DNS cache",
- "info": "",
- "x": 1128.199951171875,
- "y": 584.2000122070312,
- "wires": []
- },
- {
- "id": "71159e444cc2566e",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "patch dns.lookup",
- "func": "// funkce nahradi vestavenou funkci dns.lookup, tak aby vsechny sitove requesty\n// mohli vyuzivat dns cache a jeden pozadavek neblokoval ostatni napr. v momente, kdy\n// vypadne internet a nelze resolvit verejne domeny, ale vnitrni domeny na lokalni siti by\n// resolvit sly. Nefunkcnosti interetu by bylo ale zablokovani vsechno.\n\nlet originalLookup = flow.get(\"dns-originalLookup\");\nif (!originalLookup) {\n originalLookup = dns.lookup;\n flow.set(\"dns-originalLookup\", originalLookup);\n}\n\nlet cache = flow.get(\"dns-cache\");\nif (!cache) {\n cache = new Map();\n flow.set(\"dns-cache\", cache);\n}\n\n// @ts-ignore\ndns.lookup = function (domain, family, callback) {\n //node.warn(`DNS Lookup for: ${domain}`);\n\n if (cache.has(domain)) {\n const cachedResult = cache.get(domain);\n if (cachedResult[0] === null) {\n callback(...cachedResult);\n }\n }else {\n originalLookup(domain, family, (...result) => {\n cache.set(domain, result);\n callback(...result);\n });\n }\n};\n\n",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [
- {
- "var": "dns",
- "module": "dns"
- }
- ],
- "x": 1456.200050354004,
- "y": 644.2000370025635,
- "wires": [
- []
- ]
- },
- {
- "id": "ba2e12c10bfac604",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": true,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 1227.2000427246094,
- "y": 644.2000370025635,
- "wires": [
- [
- "71159e444cc2566e"
- ]
- ]
- },
- {
- "id": "f96995170da63cfd",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 42",
- "func": "msg.ip = msg.payload;\n\nconst cache = flow.get(\"rdns-cache\");\nif (cache && cache.has(msg.ip)) {\n msg.payload = cache.get(msg.ip);\n return [null, msg];\n}else {\n return [msg, null];\n}\n\n",
- "outputs": 2,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 377.20003509521484,
- "y": 1354.2001180648804,
- "wires": [
- [
- "2a70b1b3c0d28675"
- ],
- [
- "c3b5d0f22d608734"
- ]
- ]
- },
- {
- "id": "b5fc5eb91f956558",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 43",
- "func": "const match = msg.payload.trim().match(/.*pointer (.+?)\\.?$/);\n//node.warn(match);\nif (match) {\n const hostname = match[1];\n msg.payload = [hostname];\n}else {\n msg.payload = [];\n}\n\nlet cache = flow.get(\"rdns-cache\");\nif (!cache) {\n cache = new Map();\n flow.set(\"rdns-cache\", cache);\n}\ncache.set(msg.ip, msg.payload);\n\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 718.2001914978027,
- "y": 1306.2001180648804,
- "wires": [
- [
- "07a78a1b984453fa"
- ]
- ]
- },
- {
- "id": "c3b5d0f22d608734",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 44",
- "func": "\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 582.200065612793,
- "y": 1391.2001190185547,
- "wires": [
- [
- "07a78a1b984453fa"
- ]
- ]
- },
- {
- "id": "52493f9c1ebdeb7c",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.prometheus.query",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 221.2000274658203,
- "y": 2841.199951171875,
- "wires": [
- [
- "47823b1d51969111"
- ]
- ]
- },
- {
- "id": "5b6dd088c1df14bc",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "query prometheus",
- "info": "",
- "x": 186.00003051757812,
- "y": 2763.199869155884,
- "wires": []
- },
- {
- "id": "20ba8d984f349233",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 685.2000694274902,
- "y": 2845.1998710632324,
- "wires": []
- },
- {
- "id": "47823b1d51969111",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 53",
- "func": "const prom = new prometheusQuery.PrometheusDriver({\n endpoint: \"http://vs-monitoring-prometheus-test:9090/\",\n baseURL: \"/api/v1\" // default value\n});\n\nconst query = msg.payload;\nconst res = await prom.instantQuery(query);\n\nmsg.payload = res.result;\n\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [
- {
- "var": "prometheusQuery",
- "module": "prometheus-query"
- }
- ],
- "x": 478.20003509521484,
- "y": 2843.1998710632324,
- "wires": [
- [
- "20ba8d984f349233"
- ]
- ]
- },
- {
- "id": "ad54a324eb907ae9",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "humanize",
- "info": "",
- "x": 154.2000389099121,
- "y": 3072.199872970581,
- "wires": []
- },
- {
- "id": "a04b02b8d992a42c",
- "type": "actionflows_in",
- "z": "1701a0.212bae61",
- "name": "core.humanize",
- "priority": "50",
- "links": [],
- "scope": "global",
- "x": 192.4000244140625,
- "y": 3130.200033187866,
- "wires": [
- [
- "fbc8e50b81b20225"
- ]
- ]
- },
- {
- "id": "fbc8e50b81b20225",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 54",
- "func": "const type = msg.payload.type;\nlet humanizedValue = '';\n\nif (type == \"timeDelta\") {\n const value = msg.payload.value;\n if (value < 60) {\n humanizedValue = `${Math.round(value)}s`;\n } else if (value < 3600) {\n humanizedValue = `${Math.round(value / 60)}m`;\n } else if (value < 3600 * 24) {\n humanizedValue = `${Math.round(value / 3600)}h`;\n } else {\n humanizedValue = `${Math.round(value / (3600 * 24))}d`;\n }\n}else {\n node.warn(`Unknown type ${type} for humanization`);\n return;\n}\n\nmsg.payload = humanizedValue;\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [
- {
- "var": "prometheusQuery",
- "module": "prometheus-query"
- }
- ],
- "x": 403.40001678466797,
- "y": 3129.199872970581,
- "wires": [
- [
- "c1e798de62ae6019"
- ]
- ]
- },
- {
- "id": "c1e798de62ae6019",
- "type": "actionflows_out",
- "z": "1701a0.212bae61",
- "name": "action out",
- "links": [],
- "x": 609.4000816345215,
- "y": 3128.1998739242554,
- "wires": []
- },
- {
- "id": "e95f83f6a8b66716",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": true,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 1232.199951171875,
- "y": 717.2000122070312,
- "wires": [
- [
- "b539551d98fd2e4d"
- ]
- ]
- },
- {
- "id": "b539551d98fd2e4d",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "clear dns cache",
- "func": "let cache = flow.get(\"dns-cache\");\ncache.clear();",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [
- {
- "var": "dns",
- "module": "dns"
- }
- ],
- "x": 1451.1999588012695,
- "y": 717.2000122070312,
- "wires": [
- []
- ]
- },
- {
- "id": "27650506d3d80146",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test db query",
- "info": "",
- "x": 182.20001220703125,
- "y": 724.2000274658203,
- "wires": []
- },
- {
- "id": "67930b18cd366dd1",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test require",
- "info": "",
- "x": 209.1999969482422,
- "y": 1061.199966430664,
- "wires": []
- },
- {
- "id": "376a2b9d68d789f7",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test rdns",
- "info": "",
- "x": 191.20000648498535,
- "y": 1512.2000350952148,
- "wires": []
- },
- {
- "id": "e5a6e24ba45026e6",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test graphize",
- "info": "",
- "x": 228.20000076293945,
- "y": 2580.199867248535,
- "wires": []
- },
- {
- "id": "b21773b01f468c38",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 71",
- "func": "const af = global.get('actionflows');\n\nconst lastActivityBefore = (await af.invoke('core.humanize', {\n payload: {\n type: 'timeDelta',\n value: 7,\n },\n})).payload;\n\nmsg.payload = lastActivityBefore;\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 393.20003509521484,
- "y": 3243.199951171875,
- "wires": [
- [
- "5e48a8d6481937b3"
- ]
- ]
- },
- {
- "id": "6afd6e48a239b4ba",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "test",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 237.2000503540039,
- "y": 3243.199951171875,
- "wires": [
- [
- "b21773b01f468c38"
- ]
- ]
- },
- {
- "id": "5e48a8d6481937b3",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": true,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 583.2002182006836,
- "y": 3247.199998855591,
- "wires": []
- },
- {
- "id": "8dbadab04347ae79",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test humanize",
- "info": "",
- "x": 245.2000503540039,
- "y": 3200.199951171875,
- "wires": []
- },
- {
- "id": "7284c7d9535da8a2",
- "type": "function",
- "z": "1701a0.212bae61",
- "name": "function 72",
- "func": "const af = global.get('actionflows');\n\n// vycist zaznamy o uspesnosti ping\nconst res = (await af.invoke('core.prometheus.query', {\n payload: 'probe_success{job=\"blackbox-ping\"}',\n})).payload;\n\nmsg.payload = res;\nreturn msg;",
- "outputs": 1,
- "noerr": 0,
- "initialize": "",
- "finalize": "",
- "libs": [],
- "x": 397.2000312805176,
- "y": 2945.1999950408936,
- "wires": [
- [
- "a2f2164db6be20a7"
- ]
- ]
- },
- {
- "id": "b8f5b8b05c41a035",
- "type": "inject",
- "z": "1701a0.212bae61",
- "name": "test",
- "props": [
- {
- "p": "payload"
- },
- {
- "p": "topic",
- "vt": "str"
- }
- ],
- "repeat": "",
- "crontab": "",
- "once": false,
- "onceDelay": 0.1,
- "topic": "",
- "payload": "",
- "payloadType": "date",
- "x": 253.20004653930664,
- "y": 2946.1999950408936,
- "wires": [
- [
- "7284c7d9535da8a2"
- ]
- ]
- },
- {
- "id": "a2f2164db6be20a7",
- "type": "debug",
- "z": "1701a0.212bae61",
- "name": "",
- "active": true,
- "tosidebar": true,
- "console": false,
- "tostatus": false,
- "complete": "false",
- "statusVal": "",
- "statusType": "auto",
- "x": 599.2002143859863,
- "y": 2950.2000427246094,
- "wires": []
- },
- {
- "id": "528db290d3fdf7d9",
- "type": "comment",
- "z": "1701a0.212bae61",
- "name": "test prometheus",
- "info": "",
- "x": 257.2000503540039,
- "y": 2902.1999473571777,
- "wires": []
- },
- {
- "id": "36ca1673.3376ea",
- "type": "jsonrpc-client",
- "name": "smarthouse-core",
- "host": "vs-smarthouse",
- "port": "2004",
- "connection": "http"
- },
- {
- "id": "76a2023f.8c254c",
- "type": "MySQLdatabase",
- "name": "",
- "host": "mysql.smarthouse.vp.ip.kyrian.cz",
- "port": "3306",
- "db": "smarthouse",
- "tz": "",
- "charset": ""
- }
- ]
Advertisement
Add Comment
Please, Sign In to add comment