@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.
811 lines (810 loc) • 21.4 kB
JSON
[
{
"id": "e4de7c01e09a776f",
"type": "subflow",
"name": "Post shift",
"info": "",
"category": "",
"in": [
{
"x": 200,
"y": 400,
"wires": [
{
"id": "a49b15b920a72364"
}
]
}
],
"out": [],
"env": [],
"meta": {},
"color": "#DDAA99"
},
{
"id": "a49b15b920a72364",
"type": "function",
"z": "e4de7c01e09a776f",
"name": "Formatting json payload",
"func": "msg.headers = {\n \"Authorization\": \"Bearer \" + msg.bearerToken,\n \"Content-Type\": \"application/vnd.api+json\"\n};\n\nmsg.payload = {\n \"data\": {\n \"type\": \"shifts\",\n \"attributes\": {\n \"name\": msg.shiftName,\n \"rrule\": msg.rrule,\n \"duration\": msg.duration,\n \"mode\": msg.mode,\n \"color\": msg.color\n },\n \"relationships\": {\n \"schedule\": {\n \"data\": {\n \"type\": \"schedules\",\n \"id\": msg.schedule\n }\n }\n }\n }\n};\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 410,
"y": 400,
"wires": [
[
"90b0febb18e8d827"
]
]
},
{
"id": "90b0febb18e8d827",
"type": "http request",
"z": "e4de7c01e09a776f",
"name": "POST shift",
"method": "POST",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://api.oee.ai/shifts",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 610,
"y": 400,
"wires": [
[
"e3a52c265232f222"
]
]
},
{
"id": "e3a52c265232f222",
"type": "change",
"z": "e4de7c01e09a776f",
"name": "Delete response header",
"rules": [
{
"t": "delete",
"p": "headers",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 830,
"y": 400,
"wires": [
[
"41debf62367c281b"
]
]
},
{
"id": "41debf62367c281b",
"type": "debug",
"z": "e4de7c01e09a776f",
"name": "Response from oee.ai",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1080,
"y": 400,
"wires": []
},
{
"id": "fd9e8ae80b46227a",
"type": "subflow",
"name": "Send shifts to oee.ai",
"info": "",
"category": "",
"in": [
{
"x": 20,
"y": 80,
"wires": [
{
"id": "7e6da3c796a23dc8"
}
]
}
],
"out": [],
"env": [],
"meta": {},
"color": "#DDAA99"
},
{
"id": "8632f17598829578",
"type": "subflow:e4de7c01e09a776f",
"z": "fd9e8ae80b46227a",
"name": "",
"x": 840,
"y": 80,
"wires": []
},
{
"id": "0e5877e09b93e4ad",
"type": "change",
"z": "fd9e8ae80b46227a",
"name": "Mapping shift attributes",
"rules": [
{
"t": "set",
"p": "shiftName",
"pt": "msg",
"to": "payload.shiftName",
"tot": "msg"
},
{
"t": "set",
"p": "rrule",
"pt": "msg",
"to": "payload.rrule",
"tot": "msg"
},
{
"t": "set",
"p": "duration",
"pt": "msg",
"to": "payload.duration",
"tot": "msg"
},
{
"t": "set",
"p": "mode",
"pt": "msg",
"to": "payload.mode",
"tot": "msg"
},
{
"t": "set",
"p": "color",
"pt": "msg",
"to": "msg.payload.color",
"tot": "msg"
},
{
"t": "set",
"p": "schedule",
"pt": "msg",
"to": "scheduleId",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 630,
"y": 80,
"wires": [
[
"8632f17598829578"
]
]
},
{
"id": "fc7521805a23e0f7",
"type": "split",
"z": "fd9e8ae80b46227a",
"name": "Split shifts",
"splt": "\\n",
"spltType": "str",
"arraySplt": 1,
"arraySpltType": "len",
"stream": false,
"addname": "",
"x": 410,
"y": 80,
"wires": [
[
"0e5877e09b93e4ad"
]
]
},
{
"id": "7e6da3c796a23dc8",
"type": "change",
"z": "fd9e8ae80b46227a",
"name": "Set payload to shiftsData",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "shiftsData",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 190,
"y": 80,
"wires": [
[
"fc7521805a23e0f7"
]
]
},
{
"id": "dd9318a3a7c749d0",
"type": "subflow",
"name": "Patch schedule",
"info": "",
"category": "",
"in": [
{
"x": 140,
"y": 320,
"wires": [
{
"id": "198e50541822ebc7"
}
]
}
],
"out": [
{
"x": 1720,
"y": 320,
"wires": [
{
"id": "2b194f788ed9a0f2",
"port": 0
}
]
}
],
"env": [],
"meta": {},
"color": "#DDAA99"
},
{
"id": "b00ba5b4bd2d5157",
"type": "http request",
"z": "dd9318a3a7c749d0",
"name": "Get existing schedule",
"method": "GET",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://api.oee.ai/production-orders?filter[locations]={{{location}}}",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 560,
"y": 320,
"wires": [
[
"bfae403982c9a1e0"
]
]
},
{
"id": "edac0e4a9396652f",
"type": "function",
"z": "dd9318a3a7c749d0",
"name": "Formatting json payload",
"func": "msg.headers = {\n \"Content-Type\": \"application/vnd.api+json\",\n \"Authorization\": \"Bearer \" + msg.bearerToken\n};\n\nmsg.method = \"PATCH\";\n\nmsg.payload = {\n \"data\": {\n \"id\": msg.oldScheduleId,\n \"type\": \"schedules\",\n \"attributes\": {\n \"name\": msg.scheduleName,\n \"end-based\": msg[\"end-based\"]\n },\n \"relationships\": {\n \"location\": {\n \"data\": {\n \"type\": \"locations\",\n \"id\": msg.location\n }\n }\n }\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1310,
"y": 320,
"wires": [
[
"2b194f788ed9a0f2"
]
]
},
{
"id": "2b194f788ed9a0f2",
"type": "http request",
"z": "dd9318a3a7c749d0",
"name": "Patch production order",
"method": "use",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://api.oee.ai/schedules/{{{oldScheduleId}}}",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 1560,
"y": 320,
"wires": [
[]
]
},
{
"id": "bfae403982c9a1e0",
"type": "change",
"z": "dd9318a3a7c749d0",
"name": "Delete response header",
"rules": [
{
"t": "delete",
"p": "headers",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 810,
"y": 320,
"wires": [
[
"b91181d482d3d869"
]
]
},
{
"id": "198e50541822ebc7",
"type": "function",
"z": "dd9318a3a7c749d0",
"name": "Set Authorization header",
"func": "msg.headers = {\n Authorization: 'Bearer ' + msg.bearerToken,\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 310,
"y": 320,
"wires": [
[
"b00ba5b4bd2d5157"
]
]
},
{
"id": "b91181d482d3d869",
"type": "function",
"z": "dd9318a3a7c749d0",
"name": "Find correct schedule",
"func": "let match = msg.payload.data.find((schedule) => {\n return schedule.attributes.name === msg.scheduleName;\n});\n\nmsg.oldScheduleId = match.id;\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1060,
"y": 320,
"wires": [
[
"edac0e4a9396652f"
]
]
},
{
"id": "3ef6e3cb08fd4645",
"type": "subflow",
"name": "Post schedule",
"info": "",
"category": "",
"in": [
{
"x": 360,
"y": 280,
"wires": [
{
"id": "16f20561eeb96ab6"
}
]
}
],
"out": [
{
"x": 1160,
"y": 280,
"wires": [
{
"id": "db876e05e8954483",
"port": 0
}
]
}
],
"env": [],
"meta": {},
"color": "#DDAA99"
},
{
"id": "16f20561eeb96ab6",
"type": "function",
"z": "3ef6e3cb08fd4645",
"name": "Formatting json payload",
"func": "msg.headers = {\n \"Authorization\": \"Bearer \" + msg.bearerToken,\n \"Content-Type\": \"application/vnd.api+json\"\n};\n\nmsg.payload = {\n \"data\": {\n \"type\": \"schedules\",\n \"attributes\": {\n \"name\": msg.scheduleName,\n \"end-based\": msg[\"end-based\"]\n },\n \"relationships\": {\n \"location\": {\n \"data\": {\n \"type\": \"locations\",\n \"id\": msg.location\n }\n }\n }\n }\n};\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 530,
"y": 280,
"wires": [
[
"8b789b3c687e3db2"
]
]
},
{
"id": "8b789b3c687e3db2",
"type": "http request",
"z": "3ef6e3cb08fd4645",
"name": "POST schedule",
"method": "POST",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://api.oee.ai/schedules",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 760,
"y": 280,
"wires": [
[
"db876e05e8954483"
]
]
},
{
"id": "db876e05e8954483",
"type": "change",
"z": "3ef6e3cb08fd4645",
"name": "Delete response header",
"rules": [
{
"t": "delete",
"p": "headers",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 990,
"y": 280,
"wires": [
[]
]
},
{
"id": "96e5bd1b60b318b2",
"type": "subflow",
"name": "Send schedules to oee.ai",
"info": "",
"category": "",
"in": [
{
"x": 480,
"y": 340,
"wires": [
{
"id": "15ad974df513bfef"
}
]
}
],
"out": [
{
"x": 1580,
"y": 340,
"wires": [
{
"id": "9ce0601df1e13c43",
"port": 0
}
]
}
],
"env": [],
"meta": {},
"color": "#DDAA99"
},
{
"id": "daf88fda59f965b3",
"type": "switch",
"z": "96e5bd1b60b318b2",
"name": "Check if schedule already exists",
"property": "statusCode",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "422",
"vt": "num"
},
{
"t": "else"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 870,
"y": 340,
"wires": [
[
"bc73d729c9e96211"
],
[
"a6b9c3d06b7fdf8c",
"9ce0601df1e13c43"
]
]
},
{
"id": "15ad974df513bfef",
"type": "subflow:3ef6e3cb08fd4645",
"z": "96e5bd1b60b318b2",
"name": "",
"x": 610,
"y": 340,
"wires": [
[
"daf88fda59f965b3"
]
]
},
{
"id": "bc73d729c9e96211",
"type": "subflow:dd9318a3a7c749d0",
"z": "96e5bd1b60b318b2",
"name": "",
"x": 1120,
"y": 280,
"wires": [
[
"a6b9c3d06b7fdf8c",
"9ce0601df1e13c43"
]
]
},
{
"id": "a6b9c3d06b7fdf8c",
"type": "debug",
"z": "96e5bd1b60b318b2",
"name": "Respons from oee.ai",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1420,
"y": 300,
"wires": []
},
{
"id": "9ce0601df1e13c43",
"type": "change",
"z": "96e5bd1b60b318b2",
"name": "Save schedule id",
"rules": [
{
"t": "set",
"p": "scheduleId",
"pt": "msg",
"to": "payload.data.id",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1410,
"y": 340,
"wires": [
[]
]
},
{
"id": "9e66472980aab6f0",
"type": "tab",
"label": "Synchronizing shifts",
"disabled": false,
"info": "",
"env": []
},
{
"id": "4f808fcdb8794d55",
"type": "comment",
"z": "9e66472980aab6f0",
"name": "Replace the Data input with your source and data transformation",
"info": "",
"x": 370,
"y": 180,
"wires": []
},
{
"id": "aaa22de052f7f128",
"type": "inject",
"z": "9e66472980aab6f0",
"name": "Data Input",
"props": [],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 200,
"y": 220,
"wires": [
[
"2e6915a91e7f4466"
]
]
},
{
"id": "167466639d86460a",
"type": "change",
"z": "9e66472980aab6f0",
"name": "Mapping schedule attributes",
"rules": [
{
"t": "set",
"p": "scheduleName",
"pt": "msg",
"to": "Q1 schedule",
"tot": "str"
},
{
"t": "set",
"p": "end-based",
"pt": "msg",
"to": "false",
"tot": "bool"
},
{
"t": "set",
"p": "location",
"pt": "msg",
"to": "",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1100,
"y": 220,
"wires": [
[
"5c8f83a28d8986f3"
]
]
},
{
"id": "7fae43045599e197",
"type": "comment",
"z": "9e66472980aab6f0",
"name": "^^ set schedule attributes",
"info": "Format your message to the data model of oee.ai\nThen map your message values to the predefined\nmessage values in the change node",
"x": 1090,
"y": 260,
"wires": []
},
{
"id": "6ab2cecafd2430ea",
"type": "comment",
"z": "9e66472980aab6f0",
"name": "^^ enter your oee.ai API token",
"info": "You can find your API Token on oee.ai",
"x": 800,
"y": 260,
"wires": []
},
{
"id": "aa7a250d8a9016fa",
"type": "change",
"z": "9e66472980aab6f0",
"name": "Set API Token",
"rules": [
{
"t": "set",
"p": "bearerToken",
"pt": "msg",
"to": "",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 760,
"y": 220,
"wires": [
[
"167466639d86460a"
]
]
},
{
"id": "2e6915a91e7f4466",
"type": "function",
"z": "9e66472980aab6f0",
"name": "Build shifts attributes array",
"func": "msg.shiftsData = [\n { \n \"shiftName\": \"Morning shift\", \n \"rrule\": \"DTSTART:20210331T060000Z\\nRRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR,SA,SU;INTERVAL=1\", \n \"duration\": \"08:00\", \n \"mode\": \"work\", \n \"color\": \"azure\" \n }, \n { \n \"shiftName\": \"Late shift\", \n \"rrule\": \"DTSTART: 20210331T140000Z\\nRRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR,SA,SU;INTERVAL=1\", \n \"duration\": \"08:00\",\n \"mode\": \"work\", \n \"color\": \"azure\" \n }, \n { \n \"shiftName\": \"Night shift\", \n \"rrule\": \"DTSTART:20211012T220000Z\\nRRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR,SA,SU;INTERVAL=1\",\n \"duration\": \"08:00\", \n \"mode\": \"work\", \n \"color\": \"azure\" \n }\n]\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 500,
"y": 220,
"wires": [
[
"aa7a250d8a9016fa"
]
]
},
{
"id": "5c8f83a28d8986f3",
"type": "subflow:96e5bd1b60b318b2",
"z": "9e66472980aab6f0",
"name": "",
"x": 1370,
"y": 220,
"wires": [
[
"9f59e0e470ee9951"
]
]
},
{
"id": "9f59e0e470ee9951",
"type": "subflow:fd9e8ae80b46227a",
"z": "9e66472980aab6f0",
"name": "",
"x": 1620,
"y": 220,
"wires": []
},
{
"id": "b6ab43b651bf9892",
"type": "comment",
"z": "9e66472980aab6f0",
"name": "^^ array of shifts in this format",
"info": "",
"x": 510,
"y": 260,
"wires": []
}
]