UNPKG

@ifp-software/node-red-contrib-oee-ai-connector

Version:

Easily connect your production machines to oee.ai – The Industry 4.0 solution for OEE optimization.

454 lines 13.3 kB
[ { "id": "ef7ed1565e0a7ef0", "type": "subflow", "name": "Get measurements from MIP", "info": "", "category": "", "in": [ { "x": 40, "y": 260, "wires": [ { "id": "108202ccd244fdf8" } ] } ], "out": [ { "x": 1080, "y": 260, "wires": [ { "id": "076cd0e938ce4b8e", "port": 0 } ] } ], "env": [], "meta": {}, "color": "#DDAA99" }, { "id": "46eda8b884c10357", "type": "http request", "z": "ef7ed1565e0a7ef0", "name": "service call to MIP", "method": "POST", "ret": "obj", "paytoqs": "ignore", "url": "", "tls": "", "persist": true, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 390, "y": 260, "wires": [ [ "408eb7a7b8d6e3fc" ] ] }, { "id": "108202ccd244fdf8", "type": "function", "z": "ef7ed1565e0a7ef0", "name": "build request", "func": "let mip_params = { \n \"params\": [{\n \"acronym\": \"resource.id\",\n \"value\": [], \n \"operator\": \"IN\" \n }], \n \"columns\": [\n \"resource.id\", \n \"resource.act.yield.primary\", \n \"resource.act.scrap.primary\", \n \"resource.act.status\", \n \"resource.act.status.text\"], \n \"languageKey\": msg.languageKey\n }\n\nObject.keys(msg.mapping).forEach(function (machine) {\n mip_params.params[0].value.push(machine)\n});\nmsg.payload = mip_params\n\nmsg.url = msg.baseUrl + \"/data/BOResource/list?X-Access-Id=\" + msg.xAccessId\n\nconst jsessionid = flow.get(\"jsessionid\")\n\nlet basic_encrypted = \"Basic \" + new Buffer(msg.user + ':' + msg.password).toString('base64')\n\nif (jsessionid) {\n msg.headers = {\n \"Content-Type\": \"application/json\",\n \"Cookie\": `JSESSIONID=${jsessionid}`\n }\n} else {\n msg.headers = {\n \"Content-Type\": \"application/json\",\n \"Authorization\": basic_encrypted,\n };\n}\n\n\nreturn msg;", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 190, "y": 260, "wires": [ [ "46eda8b884c10357" ] ] }, { "id": "076cd0e938ce4b8e", "type": "change", "z": "ef7ed1565e0a7ef0", "name": "save JSESSION", "rules": [ { "t": "set", "p": "jsessionid", "pt": "flow", "to": "responseCookies.JSESSIONID.value", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 920, "y": 260, "wires": [ [] ] }, { "id": "408eb7a7b8d6e3fc", "type": "switch", "z": "ef7ed1565e0a7ef0", "name": "Check if invalid", "property": "statusCode", "propertyType": "msg", "rules": [ { "t": "eq", "v": "401", "vt": "str" }, { "t": "else" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 660, "y": 260, "wires": [ [ "f3287043eac46441" ], [ "076cd0e938ce4b8e" ] ] }, { "id": "f3287043eac46441", "type": "change", "z": "ef7ed1565e0a7ef0", "name": "Delete JSESSION", "rules": [ { "t": "delete", "p": "jsessionid", "pt": "flow" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 930, "y": 180, "wires": [ [ "108202ccd244fdf8" ] ] }, { "id": "c4d4bb86a22d2cde", "type": "subflow", "name": "construct mqtt payloads", "info": "", "category": "", "in": [ { "x": 80, "y": 120, "wires": [ { "id": "98e4970825473105" } ] } ], "out": [ { "x": 1260, "y": 160, "wires": [ { "id": "b06833068ba12ef6", "port": 0 }, { "id": "e6605acd490a769a", "port": 0 } ] } ], "env": [], "meta": {}, "color": "#DDAA99" }, { "id": "2e4e8fa039385ba6", "type": "split", "z": "c4d4bb86a22d2cde", "name": "split machines", "splt": "\\n", "spltType": "str", "arraySplt": 1, "arraySpltType": "len", "stream": false, "addname": "", "x": 440, "y": 120, "wires": [ [ "32c4989b783c5713" ] ] }, { "id": "98e4970825473105", "type": "change", "z": "c4d4bb86a22d2cde", "name": "delete meta data", "rules": [ { "t": "delete", "p": "payload[0]", "pt": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 250, "y": 120, "wires": [ [ "2e4e8fa039385ba6" ] ] }, { "id": "b06833068ba12ef6", "type": "function", "z": "c4d4bb86a22d2cde", "name": "construct mqtt payload for units", "func": "let mip_machine_id = msg.payload.data[4]\nmsg.topic = \"oee/sensor/\" + msg.mapping[mip_machine_id].units_sensor + \"/measurement\"\nlet from_iso = new Date(msg.timestamp - 30 * 1000 ).toISOString()\nlet to_iso = new Date(msg.timestamp).toISOString()\nmsg.payload = {\n \"data\": [\n {\n \"attributes\": {\n \"from\": from_iso, // ISO 8601 timestamp in UTC\n \"to\": to_iso, // ISO 8601 timestamp in UTC\n \"count\": msg.units // resource.act.yield.primary\n }\n }\n ]\n}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 970, "y": 120, "wires": [ [] ] }, { "id": "e6605acd490a769a", "type": "function", "z": "c4d4bb86a22d2cde", "name": "construct mqtt payload for rejects", "func": "let mip_machine_id = msg.payload.data[4]\nmsg.topic = \"oee/sensor/\" + msg.mapping[mip_machine_id].rejects_sensor + \"/measurement\"\nlet from_iso = new Date(msg.timestamp - 30 * 1000).toISOString()\nlet to_iso = new Date(msg.timestamp).toISOString()\nmsg.payload = {\n \"data\": [\n {\n \"attributes\": {\n \"from\": from_iso, // ISO 8601 timestamp in UTC\n \"to\": to_iso, // ISO 8601 timestamp in UTC\n \"count\": msg.rejects // resource.act.scrap.primary\n }\n }\n ]\n}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 980, "y": 180, "wires": [ [] ] }, { "id": "32c4989b783c5713", "type": "function", "z": "c4d4bb86a22d2cde", "name": "calculate units and rejects", "func": "let machine_data = global.get(\"machine_data\");\nlet mip_machine_id = msg.payload.data[4];\nlet old_units = 0\nlet old_rejects = 0\n\nif (machine_data) {\n if (machine_data[mip_machine_id]){\n old_units = machine_data[mip_machine_id].units\n old_rejects = machine_data[mip_machine_id].rejects\n\n machine_data[mip_machine_id].units = msg.payload.data[3]\n machine_data[mip_machine_id].rejects = msg.payload.data[0]\n }else{\n machine_data[mip_machine_id] = {\n \"units\": msg.payload.data[3],\n \"rejects\": msg.payload.data[0]\n }\n }\n} else {\n machine_data = {}\n machine_data[mip_machine_id] = {\n \"units\": msg.payload.data[3],\n \"rejects\": msg.payload.data[0]\n }\n}\n\nglobal.set(\"machine_data\", machine_data)\n\n\nmsg.units = msg.payload.data[3] - old_units\nmsg.rejects = msg.payload.data[0] - old_rejects\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 670, "y": 120, "wires": [ [ "e6605acd490a769a", "b06833068ba12ef6" ] ] }, { "id": "2a077db9246dcceb", "type": "tab", "label": "MIP send measurements", "disabled": false, "info": "", "env": [] }, { "id": "c990b9ec389ff9b4", "type": "inject", "z": "2a077db9246dcceb", "name": "Every 30 seconds", "props": [ { "p": "timestamp", "v": "", "vt": "date" } ], "repeat": "30", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 190, "y": 280, "wires": [ [ "788e3bf5faff49e9" ] ] }, { "id": "d7014c3e3c66e815", "type": "mqtt out", "z": "2a077db9246dcceb", "name": "send measurements", "topic": "", "qos": "2", "retain": "true", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "", "x": 1160, "y": 280, "wires": [] }, { "id": "ef3c93c5b0dc33fb", "type": "comment", "z": "2a077db9246dcceb", "name": "^^ configure authentication", "info": "", "x": 1180, "y": 340, "wires": [] }, { "id": "341f1e1c657eeeef", "type": "subflow:c4d4bb86a22d2cde", "z": "2a077db9246dcceb", "name": "", "x": 910, "y": 280, "wires": [ [ "d7014c3e3c66e815" ] ] }, { "id": "788e3bf5faff49e9", "type": "change", "z": "2a077db9246dcceb", "name": "set settings", "rules": [ { "t": "set", "p": "mapping", "pt": "msg", "to": "{\"$RESSOURCE_ID\":{\"units_sensor\":\"$SENSOR_ID\",\"rejects_sensor\":\"$SENSOR_ID\"}}", "tot": "json" }, { "t": "set", "p": "baseUrl", "pt": "msg", "to": "", "tot": "str" }, { "t": "set", "p": "xAccessId", "pt": "msg", "to": "", "tot": "str" }, { "t": "set", "p": "user", "pt": "msg", "to": "", "tot": "str" }, { "t": "set", "p": "password", "pt": "msg", "to": "", "tot": "str" }, { "t": "set", "p": "languageKey", "pt": "msg", "to": "en", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 390, "y": 280, "wires": [ [ "a3271926fd3191e9" ] ] }, { "id": "fedf83a6e2a95cc9", "type": "comment", "z": "2a077db9246dcceb", "name": "^^ configure settings", "info": "", "x": 420, "y": 340, "wires": [] }, { "id": "a3271926fd3191e9", "type": "subflow:ef7ed1565e0a7ef0", "z": "2a077db9246dcceb", "name": "", "x": 640, "y": 280, "wires": [ [ "341f1e1c657eeeef" ] ] } ]