-
Notifications
You must be signed in to change notification settings - Fork 0
/
flows_center.json
1 lines (1 loc) · 58.9 KB
/
flows_center.json
1
[{"id":"55d33ac.d7aaec4","type":"tab","label":"(본사) RemoteSolution-MII-Data-Getter","disabled":false,"info":""},{"id":"83ced1dd.fa3e2","type":"tab","label":"(본사) MQTT Topic 발행 / 수동 삭제","disabled":false,"info":""},{"id":"80afcf60.5d6f1","type":"tab","label":"(본사) 테스트결과 수신","disabled":false,"info":"1. Reference : \n - MODEL LIST\n - ALRAM RULE\n - CPK RULE\n \n2. Calculaton :\n - CPK per INSPECTION ITEM\n - ALRAM per INSPECTION ITEM\n - ALRAM per CHANNEL OF TEST MACHINE\n\n3. Output :\n - ORIGINAL + CPK TO MSSQL\n - ALRAM TO MSSQL\n - ALRAM TO MQTT"},{"id":"eec507bd.98d0c8","type":"tab","label":"CPK and Alram Calculation","disabled":false,"info":""},{"id":"1eb07d0d.798353","type":"tab","label":"(본사) MQTT Topics Logging","disabled":true,"info":""},{"id":"f1fdecbb.73494","type":"subflow","name":"Insert Model Data","info":"","in":[{"x":60,"y":60,"wires":[{"id":"4829a067.a9354"}]}],"out":[{"x":1100,"y":60,"wires":[{"id":"1090375f.dfdae9","port":0}]}]},{"id":"b4aed5e2.8925e8","type":"subflow","name":"Insert Plan Data","info":"","in":[{"x":800,"y":260,"wires":[{"id":"90cc5027.52a4e"}]}],"out":[{"x":1860,"y":260,"wires":[{"id":"5712475d.126c08","port":0}]}]},{"id":"b0cf8635.7f4c78","type":"mqtt-broker","z":"","name":"localMQTTBroker","broker":"localhost","port":"1883","clientid":"main","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"e2ccc07d.64fb5","type":"influxdb","z":"","hostname":"localhost","port":"8086","protocol":"http","database":"thingspin","name":"","usetls":false,"tls":""},{"id":"bc96548e.f1a348","type":"MSSQL-CN","z":"","name":"지사 서버(가정)","server":"219.251.4.237","encyption":true,"database":"thingspin-v0"},{"id":"eb3120e1.46088","type":"sqldbsdatabase","z":"","host":"localhost","port":"3306","db":"thingspin","dialect":"mysql"},{"id":"4de311e8.460af","type":"MySQLdatabase","z":"","host":"localhost","port":"3306","db":"thingspin","tz":""},{"id":"8fd034e1.6a9df8","type":"OPCUA-IIoT-Connector","z":"","discoveryUrl":"","endpoint":"opc.tcp://localhost:55388/","keepSessionAlive":true,"loginEnabled":false,"securityPolicy":"None","securityMode":"NONE","name":"LOCAL DEMO SERVER","showErrors":false,"publicCertificateFile":"","privateKeyFile":"","defaultSecureTokenLifetime":"60000","endpointMustExist":false,"autoSelectRightEndpoint":false,"strategyMaxRetry":"","strategyInitialDelay":"","strategyMaxDelay":"","strategyRandomisationFactor":"","requestedSessionTimeout":""},{"id":"a68367a3.7a4868","type":"sqldbsdatabase","z":"","host":"222.103.90.24","port":"1433","db":"POPLM","dialect":"mssql"},{"id":"4a32a9f5.5882b8","type":"MSSQL-CN","z":"","name":"Remote Solution MII Database","server":"222.103.90.24","encyption":false,"database":"POPLM"},{"id":"1b4ec9a7.f485e6","type":"mqtt-broker","z":"","name":"MQTT(CENTER) Broker","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"2","birthRetain":"true","birthPayload":""},{"id":"62088376.ebf75c","type":"influxdb","z":"","hostname":"localhost","port":"8086","protocol":"http","database":"thingspin","name":"rms-center-influxdb","usetls":false,"tls":""},{"id":"a719dc91.d52c9","type":"mqtt-broker","z":"","name":"Local MQTT Broker","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"fd263ee.e8bc3c","type":"influxdb","z":"","hostname":"219.251.4.237","port":"8086","protocol":"http","database":"thingspin","name":"rms-branch-influxdb","usetls":false,"tls":""},{"id":"acb8f135.ad19d","type":"influxdb","z":"","hostname":"localhost","port":"8086","protocol":"http","database":"thingspin","name":"rms-branch-influxdb","usetls":false,"tls":""},{"id":"1a1a1360.3853bd","type":"mqtt-broker","z":"","name":"MQTT(RMS BRANCH)","broker":"192.168.0.34","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"f47c3a7c.c6df78","type":"influxdb","z":"","hostname":"219.251.4.231","port":"8086","protocol":"http","database":"thingspin","name":"iotdb-influxdb","usetls":false,"tls":""},{"id":"ba643048.5e9b1","type":"influxdb","z":"","hostname":"localhost","port":"8086","protocol":"http","database":"thingspin","name":"rms-branch-influxdb","usetls":false,"tls":""},{"id":"1f57b0be.94997f","type":"mqtt-broker","z":"","name":"Local MQTT Broker","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"6ee9bc3c.30a894","type":"mqtt in","z":"1eb07d0d.798353","name":"Main Broker Recv","topic":"#","qos":"0","broker":"b0cf8635.7f4c78","x":110,"y":120,"wires":[["7c93f19c.87d53","2af0a035.52ddc"]]},{"id":"b309b6c.f222748","type":"sqldbs","z":"1eb07d0d.798353","mydb":"eb3120e1.46088","querytype":"Insert","name":"","x":220,"y":360,"wires":[["3bc9ae3.a401352"]]},{"id":"3bc9ae3.a401352","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":470,"y":360,"wires":[]},{"id":"b943ca40.fa4bd8","type":"template","z":"1eb07d0d.798353","name":"Query Template","field":"topic","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"insert into t_mqtt_log (CONTENTS) values (\n '{{{payload}}}'\n)","output":"str","x":240,"y":280,"wires":[["b309b6c.f222748","1af4127d.f3ccce"]]},{"id":"7c93f19c.87d53","type":"function","z":"1eb07d0d.798353","name":"data preprocessing","func":"var result = {\n payload: JSON.stringify(msg)\n};\n\nreturn result;","outputs":1,"noerr":0,"x":250,"y":200,"wires":[["b943ca40.fa4bd8","7d8ed8e9.4e84a8"]]},{"id":"2af0a035.52ddc","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":470,"y":120,"wires":[]},{"id":"7d8ed8e9.4e84a8","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":470,"y":200,"wires":[]},{"id":"1af4127d.f3ccce","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":470,"y":280,"wires":[]},{"id":"331e4ef7.04ff12","type":"comment","z":"1eb07d0d.798353","name":"본사 Broker : 219.251.4.236:1883","info":"","x":150,"y":60,"wires":[]},{"id":"79a9bbcf.9e2664","type":"mysql","z":"55d33ac.d7aaec4","mydb":"4de311e8.460af","name":"TS-DB","x":450,"y":160,"wires":[["97321026.6506e"]]},{"id":"3c4fae10.c35482","type":"function","z":"55d33ac.d7aaec4","name":"[SQL] Get Last Date ","func":"msg.topic = \"select DATE_FORMAT(plan_date, '%Y%m%d') as lastdate from t_product_plan order by plan_date DESC limit 1;\";\nreturn msg;","outputs":1,"noerr":0,"x":280,"y":160,"wires":[["79a9bbcf.9e2664"]]},{"id":"a0ff79be.964798","type":"inject","z":"55d33ac.d7aaec4","name":"Repeat 1Hour","topic":"thingspin","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":80,"wires":[["3c4fae10.c35482"]]},{"id":"97321026.6506e","type":"switch","z":"55d33ac.d7aaec4","name":"is Data Empty","property":"payload.length","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":600,"y":160,"wires":[["43dd20d5.c1089","eaa950a1.3fd3e"],["64d06ee2.2f6e6","69291f22.a486d"]]},{"id":"4829a067.a9354","type":"MSSQL","z":"f1fdecbb.73494","mssqlCN":"4a32a9f5.5882b8","name":"[SQL] Get Model List","query":"{{{payload}}}","outField":"payload","x":240,"y":60,"wires":[["24df2ef7.3e9d12","5300d5ce.0abe2c"]]},{"id":"24df2ef7.3e9d12","type":"template","z":"f1fdecbb.73494","name":"Make Insert SQL","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{#payload}}\n('{{MODEL}}','{{MODEL_DIS}}'),\n{{/payload}}","output":"str","x":490,"y":60,"wires":[["8052d4c8.90a308"]]},{"id":"1090375f.dfdae9","type":"mysql","z":"f1fdecbb.73494","mydb":"4de311e8.460af","name":"thingspin","x":950,"y":60,"wires":[[]]},{"id":"8052d4c8.90a308","type":"function","z":"f1fdecbb.73494","name":"Data Function ","func":"var insert_front = \"insert into t_model (MODEL_ID, DESCRIPTION) values \"\nvar insert_end = \" on duplicate key update MODEL_ID=MODEL_ID, DESCRIPTION=DESCRIPTION;\"\nvar content = msg.payload;\nvar insert_content = content.slice(0,-2);\n\nmsg.topic = insert_front + insert_content + insert_end;\nreturn msg;","outputs":1,"noerr":0,"x":720,"y":60,"wires":[["1090375f.dfdae9"]]},{"id":"eadc72fe.1b93e","type":"template","z":"b4aed5e2.8925e8","name":"Make Insert SQL","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{#payload}}\n('{{REGDATE}}', '{{PLANT}}', '{{MODEL}}', {{QUANTITY}}),\n{{/payload}}","output":"str","x":1230,"y":260,"wires":[["6424a250.813bfc"]]},{"id":"6424a250.813bfc","type":"function","z":"b4aed5e2.8925e8","name":"Data Function ","func":"var insert_front = \"insert into t_product_plan (plan_date, plant_id, model_id, amount) values \";\nvar insert_end = \" on duplicate key update plan_date=plan_date, plant_id=plant_id, model_id=model_id, amount=amount;\";\nvar insert_content = msg.payload.slice(0,-2);\nmsg.topic = insert_front + insert_content + insert_end;\nreturn msg;","outputs":1,"noerr":0,"x":1460,"y":260,"wires":[["5712475d.126c08"]]},{"id":"90cc5027.52a4e","type":"MSSQL","z":"b4aed5e2.8925e8","mssqlCN":"4a32a9f5.5882b8","name":"[SQL] Get Plan List","query":"","outField":"payload","x":990,"y":260,"wires":[["eadc72fe.1b93e"]]},{"id":"5712475d.126c08","type":"mysql","z":"b4aed5e2.8925e8","mydb":"4de311e8.460af","name":"","x":1690,"y":260,"wires":[[]]},{"id":"a91551cd.44ed9","type":"subflow:f1fdecbb.73494","z":"55d33ac.d7aaec4","name":"Insert All Model Data","x":1120,"y":120,"wires":[["45057157.33693"]]},{"id":"814d43d9.834cb","type":"subflow:b4aed5e2.8925e8","z":"55d33ac.d7aaec4","name":"Insert All Plan Data","x":1590,"y":120,"wires":[[]]},{"id":"64d06ee2.2f6e6","type":"function","z":"55d33ac.d7aaec4","name":"Last Date After Model Insert Query Make","func":"flow.set(\"lastdate\",msg.payload[0].lastdate);\nvar query = \"select distinct A.MATERIAL as MODEL, A.MATERIAL_TEXT as MODEL_DIS From Product_Order_Header A inner join Material_Master B on A.MATERIAL = B.MATERIAL where B.MATL_TYPE = 'FERT' and A.MATERIAL NOT LIKE 'KRB%' AND A.MATERIAL NOT LIKE 'KRC%' and A.START_DATE >= \";\nvar lastdate = msg.payload[0].lastdate;\n//var last = \" group by MATERIAL, MATERIAL_TEXT\";\nnode.log(lastdate);\n//msg.payload = query + lastdate + last\nmsg.payload = query + lastdate\nreturn msg;","outputs":1,"noerr":0,"x":920,"y":180,"wires":[["7be77ce.9df3284"]]},{"id":"43dd20d5.c1089","type":"function","z":"55d33ac.d7aaec4","name":"All Model Insert Query Make","func":"msg.payload = \"select distinct A.MATERIAL as MODEL, A.MATERIAL_TEXT as MODEL_DIS From Product_Order_Header A inner join Material_Master B on A.MATERIAL = B.MATERIAL where B.MATL_TYPE = 'FERT' and A.MATERIAL NOT LIKE 'KRB%' AND A.MATERIAL NOT LIKE 'KRC%';\"\nreturn msg;","outputs":1,"noerr":0,"x":880,"y":120,"wires":[["a91551cd.44ed9"]]},{"id":"7be77ce.9df3284","type":"subflow:f1fdecbb.73494","z":"55d33ac.d7aaec4","name":"Insert All Model Data","x":1200,"y":180,"wires":[["6b655bc2.161d74","1555ab60.902065"]]},{"id":"1555ab60.902065","type":"function","z":"55d33ac.d7aaec4","name":"Last Date After Plan Insert Query Make","func":"var query = \"SELECT A.START_DATE AS REGDATE,A.PRODUCTION_PLANT AS PLANT,A.MATERIAL AS MODEL,CONVERT(INT, cast(SUM(A.TARGET_QUANTITY) as decimal(10,0))) AS QUANTITY FROM Product_Order_Header A INNER JOIN Product_Order_Item B ON A.ORDER_NUMBER = B.ORDER_NUMBER INNER JOIN Product_Order_Operation C ON A.ORDER_NUMBER = C.ORDER_NUMBER INNER JOIN Material_Master D ON A.MATERIAL = D.MATERIAL WHERE D.MATL_TYPE = 'FERT' AND A.MATERIAL NOT LIKE 'KRB%' AND A.MATERIAL NOT LIKE 'KRC%' and A.START_DATE >= \";\nvar lastdate = flow.get(\"lastdate\");\nvar last = \"GROUP BY A.START_DATE,A.PRODUCTION_PLANT, A.MATERIAL ORDER BY A.START_DATE ASC;\";\nnode.log(lastdate);\nmsg.payload = query + lastdate + last\nreturn msg;","outputs":1,"noerr":0,"x":1500,"y":180,"wires":[["8f4dea41.61c098"]]},{"id":"45057157.33693","type":"function","z":"55d33ac.d7aaec4","name":"All Plan Insert Query Make","func":"msg.payload = \"SELECT A.START_DATE AS REGDATE,A.PRODUCTION_PLANT AS PLANT,A.MATERIAL AS MODEL,CONVERT(INT, cast(SUM(A.TARGET_QUANTITY) as decimal(10,0))) AS QUANTITY FROM Product_Order_Header A INNER JOIN Product_Order_Item B ON A.ORDER_NUMBER = B.ORDER_NUMBER INNER JOIN Product_Order_Operation C ON A.ORDER_NUMBER = C.ORDER_NUMBER INNER JOIN Material_Master D ON A.MATERIAL = D.MATERIAL WHERE D.MATL_TYPE = 'FERT' AND A.MATERIAL NOT LIKE 'KRB%' AND A.MATERIAL NOT LIKE 'KRC%' GROUP BY A.START_DATE,A.PRODUCTION_PLANT, A.MATERIAL ORDER BY A.START_DATE ASC;\"\nreturn msg;","outputs":1,"noerr":0,"x":1360,"y":120,"wires":[["814d43d9.834cb"]]},{"id":"8f4dea41.61c098","type":"subflow:b4aed5e2.8925e8","z":"55d33ac.d7aaec4","name":"Insert All Plan Data","x":1770,"y":180,"wires":[["4c40e0e7.2e4c8"]]},{"id":"6b655bc2.161d74","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1410,"y":220,"wires":[]},{"id":"4c40e0e7.2e4c8","type":"debug","z":"55d33ac.d7aaec4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1950,"y":180,"wires":[]},{"id":"69291f22.a486d","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":220,"wires":[]},{"id":"eaa950a1.3fd3e","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":80,"wires":[]},{"id":"1bdfcb60.4fed05","type":"inject","z":"55d33ac.d7aaec4","name":"","topic":"thingspin","payload":"","payloadType":"date","repeat":"43200","crontab":"","once":true,"onceDelay":0.1,"x":140,"y":340,"wires":[["2b081724.492dd8","d403ea76.149ff8"]]},{"id":"2b081724.492dd8","type":"function","z":"55d33ac.d7aaec4","name":"[SQL] Get Model Data","func":"msg.topic = \"select MODEL_ID, DESCRIPTION from t_model WHERE MODEL_ID <> '*' AND MODEL_ID NOT LIKE 'KRB%' AND MODEL_ID NOT LIKE 'KRC%' LIMIT 50000;\"\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":340,"wires":[["7c80d02a.4581d"]]},{"id":"c8fb8820.cea1c8","type":"json","z":"55d33ac.d7aaec4","name":"","property":"payload","action":"","pretty":false,"x":790,"y":340,"wires":[["4713fe4e.0860e","ea833d60.ec957"]]},{"id":"4713fe4e.0860e","type":"function","z":"55d33ac.d7aaec4","name":"Topic add","func":"msg.topic = \"THINGSPIN/MODELS\";\nmsg.retain = true;\nmsg.qos = 2;\n\nreturn msg;","outputs":1,"noerr":0,"x":960,"y":340,"wires":[["cd7d3beb.1b8f98","a01bda7a.553948"]]},{"id":"cd7d3beb.1b8f98","type":"mqtt out","z":"55d33ac.d7aaec4","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":1530,"y":340,"wires":[]},{"id":"7c80d02a.4581d","type":"mysql","z":"55d33ac.d7aaec4","mydb":"4de311e8.460af","name":"thingspin","x":620,"y":340,"wires":[["c8fb8820.cea1c8"]]},{"id":"5300d5ce.0abe2c","type":"json","z":"f1fdecbb.73494","name":"","property":"payload","action":"","pretty":false,"x":450,"y":140,"wires":[["865d7534.f247a8"]]},{"id":"865d7534.f247a8","type":"function","z":"f1fdecbb.73494","name":"Topic add","func":"msg.topic = \"THINGSPIN/MODELS\"\nreturn msg;","outputs":1,"noerr":0,"x":620,"y":140,"wires":[["81f8475e.b99cd8","d995a827.65ca58"]]},{"id":"81f8475e.b99cd8","type":"mqtt out","z":"f1fdecbb.73494","name":"","topic":"","qos":"","retain":"","broker":"b0cf8635.7f4c78","x":800,"y":140,"wires":[]},{"id":"d995a827.65ca58","type":"debug","z":"f1fdecbb.73494","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":810,"y":200,"wires":[]},{"id":"29cb4081.f279","type":"mqtt in","z":"80afcf60.5d6f1","name":"KR/+/INSPT/+/+ __","topic":"KR/+/INSPT/+/+","qos":"0","broker":"1b4ec9a7.f485e6","x":130,"y":1000,"wires":[["6b44f6e2.c03a08","20d93e2d.a697f2"]]},{"id":"11cb5807.9872f8","type":"mqtt in","z":"80afcf60.5d6f1","name":"INSPPROP/#","topic":"INSPPROP/#","qos":"2","broker":"1b4ec9a7.f485e6","x":110,"y":560,"wires":[["3c284eca.67f382"]]},{"id":"e2e4380e.eee788","type":"debug","z":"80afcf60.5d6f1","name":"LOG: 검사항목","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":900,"y":620,"wires":[]},{"id":"646c8354.a2f02c","type":"mqtt in","z":"80afcf60.5d6f1","name":"ACTINADV/#","topic":"ACTINADV/#","qos":"2","broker":"1b4ec9a7.f485e6","x":110,"y":777,"wires":[["70f0accf.ac6674"]]},{"id":"3fa888f1.bdc168","type":"debug","z":"80afcf60.5d6f1","name":"LOG: 조치 룰","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":890,"y":840,"wires":[]},{"id":"6b44f6e2.c03a08","type":"json","z":"80afcf60.5d6f1","name":"","property":"payload","action":"","pretty":false,"x":330,"y":1020,"wires":[["dbeb56f.40ceaa8"]]},{"id":"19f83026.726d4","type":"mqtt in","z":"80afcf60.5d6f1","name":"KR/+/INSPTDEV/+/+","topic":"KR/+/INSPTDEV/+/+","qos":"0","broker":"1b4ec9a7.f485e6","x":130,"y":1060,"wires":[["6b44f6e2.c03a08"]]},{"id":"e049c05b.5cb73","type":"function","z":"80afcf60.5d6f1","name":"Store in Global","func":"var token = msg.topic.split('/');\n\nfor ( var t in token ) {\n if(token[t] == \"INSPPROP\") {\n msg.payload.ID = parseInt(token[parseInt(t)+1]);\n break;\n }\n}\n\nif ((\"ID\" in msg.payload) !== true) {\n return;\n}\n\nvar prop = msg.payload;\n\nvar map = global.get(\"INSPPROP\");\n\nif (!map) {\n map = new Map();\n}\n\nmap.set(prop.ID, prop);\n\nglobal.set(\"INSPPROP\", map);\n\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":557,"wires":[["e2e4380e.eee788"]]},{"id":"66d90738.a07bc8","type":"json","z":"80afcf60.5d6f1","name":"","property":"payload","action":"","pretty":false,"x":510,"y":557,"wires":[["e049c05b.5cb73"]]},{"id":"ed5718c7.6413c8","type":"inject","z":"80afcf60.5d6f1","name":"","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":260,"wires":[["7840f1d4.2dea4"]]},{"id":"7840f1d4.2dea4","type":"function","z":"80afcf60.5d6f1","name":"YYYYMMDD","func":"Date.prototype.yyyymmdd = function() {\n var mm = this.getMonth() + 1; // getMonth() is zero-based\n var dd = this.getDate();\n\n return [this.getFullYear(),\n (mm>9 ? '' : '0') + mm,\n (dd>9 ? '' : '0') + dd\n ].join('');\n};\n\nvar date = new Date();\ndate.yyyymmdd();\n\n//global.set(\"YYYYMMDD\", date.yyyymmdd());\nglobal.set(\"YYYYMMDD\", \"20180101\");\n\nreturn;","outputs":1,"noerr":0,"x":350,"y":260,"wires":[[]]},{"id":"66be55a5.f867dc","type":"inject","z":"80afcf60.5d6f1","name":"reset globals","topic":"thingspin","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":120,"wires":[["550b48a9.4209f8"]]},{"id":"550b48a9.4209f8","type":"function","z":"80afcf60.5d6f1","name":"reset globals","func":"global.set(\"INSPPROP\", null);\nglobal.set(\"ACTINADV\", null);\nglobal.set(\"INSPEYE\",null);\n\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":120,"wires":[["6727ccde.6d0e24"]]},{"id":"d54a7bac.ee9168","type":"comment","z":"80afcf60.5d6f1","name":"[검사항목리스트를 FLOW 컨텍스트에 저장_________]","info":"","x":210,"y":497,"wires":[]},{"id":"5e0e8dae.5f6e64","type":"comment","z":"80afcf60.5d6f1","name":"[저장소 이름을 구분하기 위해 YYYYMMDD를 생성___]","info":"","x":210,"y":200,"wires":[]},{"id":"c742d47c.fdb088","type":"comment","z":"80afcf60.5d6f1","name":"[관리자용 내부변수 초기화______________________]","info":"","x":210,"y":60,"wires":[]},{"id":"badc6235.b78da","type":"comment","z":"80afcf60.5d6f1","name":"[사전조치 항목: 연속불량 알림 계산 룰, CPK 계속 룰을 FLOW 컨텍스트에 저장]","info":"","x":290,"y":717,"wires":[]},{"id":"6c603d12.2f3e14","type":"comment","z":"80afcf60.5d6f1","name":"[시험결과를 받아 DB 포맷으로 변경 ___________________________________]","info":"","x":287.83331298828125,"y":955.6666450500488,"wires":[]},{"id":"84f1864e.fa99e8","type":"json","z":"80afcf60.5d6f1","name":"","property":"payload","action":"","pretty":false,"x":490,"y":777,"wires":[["6d4becb3.f583c4"]]},{"id":"6d4becb3.f583c4","type":"function","z":"80afcf60.5d6f1","name":"Store in Global","func":"var token = msg.topic.split('/');\n\nfor ( var t in token ) {\n if(token[t] == \"ACTINADV\") {\n msg.payload.ID = parseInt(token[parseInt(t)+1]);\n break;\n }\n}\n\nif ((\"ID\" in msg.payload) !== true) {\n return;\n}\n\nvar prop = msg.payload;\n\nvar map = global.get(\"ACTINADV\");\n\nif (!map) {\n map = new Map();\n}\n\nmap.set(prop.ID, prop);\n\nglobal.set(\"ACTINADV\", map);\n\nreturn msg;","outputs":1,"noerr":0,"x":660,"y":777,"wires":[["3fa888f1.bdc168"]]},{"id":"dbeb56f.40ceaa8","type":"function","z":"80afcf60.5d6f1","name":"RECORDS","func":"//=========================================================\nvar YYYYMMDD = global.get(\"YYYYMMDD\");\nvar inspprop = global.get(\"INSPPROP\");\n\nif (!YYYYMMDD) {\n return;\n}\n\nvar mesINSP = `inspection.summary-${YYYYMMDD}`;\nvar mesDETL = `inspection.detail-${YYYYMMDD}`;\n\n//=========================================================\nvar details = msg.payload.details;\ndelete msg.payload.details;\n\nvar tocken = msg.topic.split(\"/\");\nmsg.payload.pcID = tocken[3];\nmsg.payload.channel = parseInt(tocken[4]);\n\nvar inspection = msg.payload;\n\nif(!inspection.prodModel)\n{\n return null;\n}\nif(!inspection.serial_number)\n{\n inspection.serial_number = \"\";\n}\n//=========================================================\n\ninspection = {\n measurement: mesINSP,\n tags: {\n branch: tocken[0],\n process: tocken[1],\n facility: inspection.pcID,\n channel: inspection.channel,\n model: inspection.prodModel,\n pass: inspection.pass\n },\n fields: {\n tuid: msg._msgid,\n serial: inspection.serial_number,\n stime: inspection.startTime,\n etime: inspection.endTime\n } \n};\n\n//=========================================================\nvar transaction = details.map(\n function(point) {\n var inm = \"\";\n var i = inspprop.get(point.iid);\n if (!i) {\n inm = point.iid + \"\";\n } else {\n inm = i.NAME;\n }\n if(point.min === undefined || point.min === null) {\n point.min = 0;\n } else {\n point.min = parseFloat(point.min);\n }\n if(point.max === undefined || point.max === null) {\n point.max = 1.0;\n } else {\n point.max = parseFloat(point.max);\n }\n \n if(point.val === undefined || point.val === null) {\n point.val = 0;\n point.isNum = false;\n }else {\n point.val = parseFloat(point.val);\n }\n \n if(point.pass === undefined || point.pass === null) {\n point.pass = true;\n }\n \n return {\n measurement: mesDETL,\n tags : {\n branch: tocken[0],\n process: tocken[1], \n facility: msg.payload.pcID,\n channel: msg.payload.channel,\n model: msg.payload.prodModel,\n pass: point.pass, \n iid: point.iid,\n inm: inm\n },\n fields: {\n tuid: msg._msgid,\n val: point.val,\n min: point.min,\n max: point.max\n }\n };\n }\n);\n\ntransaction.unshift(inspection);\n\n//=========================================================\nmsg.payload = transaction;\n\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":1020,"wires":[["9648ae0c.cc75f","30a2df3a.f9cea"]]},{"id":"9648ae0c.cc75f","type":"link out","z":"80afcf60.5d6f1","name":"inspection-results-out","links":["3bf38af5.832ce6"],"x":995,"y":1020,"wires":[]},{"id":"91d10a0d.328cd8","type":"comment","z":"80afcf60.5d6f1","name":"To CPK 계산","info":"","x":850,"y":1020,"wires":[]},{"id":"6727ccde.6d0e24","type":"link out","z":"80afcf60.5d6f1","name":"reset-out","links":["bf10f15e.6ece7","c57d14f5.7358b8"],"x":995,"y":120,"wires":[]},{"id":"1d222873.e8fc18","type":"mqtt out","z":"83ced1dd.fa3e2","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":910,"y":580,"wires":[]},{"id":"827a4a9f.b092f8","type":"function","z":"83ced1dd.fa3e2","name":"clear actinadv topic all","func":"var all = [];\n\nvar rule = global.get(\"ACTINADV\");\nrule.forEach( (r) => {\n all.push({\n topic: `ACTINADV/${r.ID}`,\n payload: null\n });\n});\n\nreturn [all];","outputs":1,"noerr":0,"x":320,"y":580,"wires":[["bd97999d.2dba48","1d222873.e8fc18"]]},{"id":"bd97999d.2dba48","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1150,"y":580,"wires":[]},{"id":"9eb64424.13df68","type":"inject","z":"83ced1dd.fa3e2","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":580,"wires":[["827a4a9f.b092f8"]]},{"id":"4d32e751.a46a38","type":"mysql","z":"83ced1dd.fa3e2","mydb":"4de311e8.460af","name":"MYSQL (RMS CENTER)","x":670,"y":60,"wires":[["7d0319b1.8a3198","7c1b157.076daec"]]},{"id":"2b3aa816.cabbd8","type":"inject","z":"83ced1dd.fa3e2","name":"","topic":"","payload":"","payloadType":"date","repeat":"43200","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":60,"wires":[["fc6b22f2.cbaf1"]]},{"id":"fc6b22f2.cbaf1","type":"function","z":"83ced1dd.fa3e2","name":"QUERY ALL INSPECTION PROPERTIES","func":"msg.topic = \"SELECT * FROM t_inspection_property WHERE IDX <> 0 AND IP_TYPE=1;\";\n\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":60,"wires":[["4d32e751.a46a38"]]},{"id":"7d0319b1.8a3198","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":60,"wires":[]},{"id":"5ccf63e4.670adc","type":"mysql","z":"83ced1dd.fa3e2","mydb":"4de311e8.460af","name":"MYSQL (RMS CENTER)","x":690,"y":400,"wires":[["916239f7.54cdc8","f9d2c8fb.d24638"]]},{"id":"4444f5f0.b7ea8c","type":"inject","z":"83ced1dd.fa3e2","name":"","topic":"","payload":"","payloadType":"date","repeat":"43200","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":400,"wires":[["3ca5356b.9c9a3a"]]},{"id":"3ca5356b.9c9a3a","type":"function","z":"83ced1dd.fa3e2","name":"QUERY ALL ARAM RULES","func":"msg.topic = \"SELECT * FROM t_action_in_advance;\";\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":400,"wires":[["5ccf63e4.670adc"]]},{"id":"916239f7.54cdc8","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1150,"y":400,"wires":[]},{"id":"75abbafd.d8f4e4","type":"link in","z":"83ced1dd.fa3e2","name":"","links":["f9d2c8fb.d24638"],"x":75,"y":460,"wires":[["2523cc20.66e8c4"]]},{"id":"f9d2c8fb.d24638","type":"link out","z":"83ced1dd.fa3e2","name":"records-actinadv-raw-out","links":["75abbafd.d8f4e4"],"x":875,"y":400,"wires":[]},{"id":"2523cc20.66e8c4","type":"function","z":"83ced1dd.fa3e2","name":"pre-process for json build","func":"let {payload} = msg;\n\npayload = payload.map ( (row) => {\n row.rule = JSON.parse(row.JSON_DATA);\n delete row.JSON_DATA;\n return row;\n});\n\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":460,"wires":[["3ec5f538.178c7a"]]},{"id":"cc958d7b.511cf","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1150,"y":460,"wires":[]},{"id":"3ec5f538.178c7a","type":"function","z":"83ced1dd.fa3e2","name":"build topic for mqtt","func":"const {payload} = msg;\nlet all = payload.map ( (row) => {\n\n var a = {\n topic: `ACTINADV/${row.ID}`,\n payload: {\n ID: row.ID,\n INSPPROP_ID: row.rule.INSPPROP_ID,\n }\n };\n\n if(\"CONT_FAIL\" in row.rule) {\n a.payload.CONT_FAIL = row.rule.CONT_FAIL;\n }\n \n if(\"CPK\" in row.rule) {\n a.payload.CPK = row.rule.CPK;\n }\n \n if(\"MODELS\" in row.rule) {\n a.payload.MODELS = row.rule.MODELS;\n }\n\n return a;\n});\n\nreturn [all];","outputs":1,"noerr":0,"x":670,"y":460,"wires":[["cc958d7b.511cf","d1ff701e.2263f"]]},{"id":"d1ff701e.2263f","type":"mqtt out","z":"83ced1dd.fa3e2","name":"center.ACTINADV","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":950,"y":460,"wires":[]},{"id":"ef15f2a8.3178b","type":"comment","z":"83ced1dd.fa3e2","name":"[ 주기적 발행 : 알람 룰 _______________]","info":"","x":180,"y":340,"wires":[]},{"id":"855db367.825f2","type":"comment","z":"83ced1dd.fa3e2","name":"[관리자용 : 알람 룰 클리어__________________]","info":"","x":200,"y":520,"wires":[]},{"id":"a74c8076.43ea7","type":"comment","z":"83ced1dd.fa3e2","name":"[주기적 발행 : 검사항목 _______________]","info":"","x":180,"y":20,"wires":[]},{"id":"7c1b157.076daec","type":"link out","z":"83ced1dd.fa3e2","name":"records-inspprop-raw-out","links":["82d74d03.73568"],"x":875,"y":60,"wires":[]},{"id":"82d74d03.73568","type":"link in","z":"83ced1dd.fa3e2","name":"","links":["7c1b157.076daec"],"x":55,"y":120,"wires":[["d21ed8d2.aff098"]]},{"id":"d21ed8d2.aff098","type":"function","z":"83ced1dd.fa3e2","name":"build topic for mqtt","func":"let {payload} = msg;\nlet all = payload.map ( (row) => {\n\n var a = {\n topic: \"INSPPROP/\" + row.IDX,\n payload: {}\n };\n \n a.payload = Object.assign(a.payload, row);\n\n return a;\n});\n\nreturn [all];","outputs":1,"noerr":0,"x":290,"y":120,"wires":[["21a3b33c.7c207c","e67db9ce.57a868"]]},{"id":"e67db9ce.57a868","type":"mqtt out","z":"83ced1dd.fa3e2","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":910,"y":120,"wires":[]},{"id":"21a3b33c.7c207c","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":120,"wires":[]},{"id":"66025bb6.ce7094","type":"mqtt out","z":"83ced1dd.fa3e2","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":910,"y":720,"wires":[]},{"id":"9efb2468.c94598","type":"function","z":"83ced1dd.fa3e2","name":"clear INSPPROP topic all","func":"var all = [];\n\nvar rule = global.get(\"INSPPROP\");\nrule.forEach( (r) => {\n all.push({\n topic: `INSPPROP/${r.ID}`,\n payload: null\n });\n});\n\nreturn [all];","outputs":1,"noerr":0,"x":330,"y":720,"wires":[["3a9c95f2.9faa6a","66025bb6.ce7094"]]},{"id":"3a9c95f2.9faa6a","type":"debug","z":"83ced1dd.fa3e2","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1150,"y":720,"wires":[]},{"id":"d868328f.e5113","type":"inject","z":"83ced1dd.fa3e2","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":720,"wires":[["9efb2468.c94598"]]},{"id":"6a18dfe9.555e","type":"comment","z":"83ced1dd.fa3e2","name":"[관리자용 : 검사항목 클리어_________________]","info":"","x":200,"y":660,"wires":[]},{"id":"70f0accf.ac6674","type":"function","z":"80afcf60.5d6f1","name":"removed ?","func":"var add = null;\nvar del = null;\n\nif (msg.payload === \"\") {\n del = msg;\n} else {\n add = msg;\n}\n\nreturn [add, del];","outputs":2,"noerr":0,"x":310,"y":777,"wires":[["84f1864e.fa99e8"],["ae75b466.e0c428"]]},{"id":"ae75b466.e0c428","type":"function","z":"80afcf60.5d6f1","name":"del","func":"var token = msg.topic.split('/');\n\nfor ( var t in token ) {\n if(token[t] == \"ACTINADV\") {\n msg.ID = parseInt(token[parseInt(t)+1]);\n break;\n }\n}\n\nif ((\"ID\" in msg) !== true) {\n return;\n}\n\nvar map = global.get(\"ACTINADV\");\n\nif (!map) {\n map = new Map();\n}\n\nmap.delete(msg.ID);\n\nglobal.set(\"ACTINADV\", map);\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":837,"wires":[["3fa888f1.bdc168"]]},{"id":"3c284eca.67f382","type":"function","z":"80afcf60.5d6f1","name":"removed ?","func":"var add = null;\nvar del = null;\n\nif (msg.payload === \"\") {\n del = msg;\n} else {\n add = msg;\n}\n\nreturn [add, del];","outputs":2,"noerr":0,"x":350,"y":560,"wires":[["66d90738.a07bc8"],["b64ab383.9db7a","2d78c634.fdf4fa"]]},{"id":"b64ab383.9db7a","type":"function","z":"80afcf60.5d6f1","name":"del","func":"var token = msg.topic.split('/');\n\nfor ( var t in token ) {\n if(token[t] == \"INSPPROP\") {\n msg.ID = parseInt(token[parseInt(t)+1]);\n break;\n }\n}\n\nif ((\"ID\" in msg) !== true) {\n return;\n}\n\nvar map = global.get(\"INSPPROP\");\n\nif (!map) {\n map = new Map();\n}\n\nmap.delete(msg.ID);\n\nglobal.set(\"INSPPROP\", map);\n\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":617,"wires":[["e2e4380e.eee788"]]},{"id":"d403ea76.149ff8","type":"function","z":"55d33ac.d7aaec4","name":"[SQL] Get PRODUCTION PLAN After NOW Data","func":"msg.topic = \"SELECT * FROM t_product_plan WHERE PLAN_DATE = CURDATE();\"\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":420,"wires":[["144606da.269249"]]},{"id":"144606da.269249","type":"mysql","z":"55d33ac.d7aaec4","mydb":"4de311e8.460af","name":"","x":800,"y":420,"wires":[["eed2150b.4e59c8"]]},{"id":"eed2150b.4e59c8","type":"json","z":"55d33ac.d7aaec4","name":"","property":"payload","action":"","pretty":false,"x":960,"y":420,"wires":[["b1fac004.b4abc"]]},{"id":"b1fac004.b4abc","type":"function","z":"55d33ac.d7aaec4","name":"THINGSPIN/PRODUCTION/PLAN/KR","func":"msg.topic = \"THINGSPIN/PRODUCTION/PLAN/KR\"\nreturn msg;","outputs":1,"noerr":0,"x":1260,"y":420,"wires":[["a56aa547.1e9928","c16463c3.3741a"]]},{"id":"a56aa547.1e9928","type":"mqtt out","z":"55d33ac.d7aaec4","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":1530,"y":420,"wires":[]},{"id":"fd6b1e1e.a5677","type":"mqtt out","z":"55d33ac.d7aaec4","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":890,"y":740,"wires":[]},{"id":"5c74dd2e.752454","type":"function","z":"55d33ac.d7aaec4","name":"clear THINGSPIN/PRODUCTION/PLAN/KR topic all","func":"var all = [{\n topic: \"THINGSPIN/PRODUCTION/PLAN/KR\",\n payload: null\n}];\nreturn [all];","outputs":1,"noerr":0,"x":390,"y":740,"wires":[["9396f20e.e3e62","fd6b1e1e.a5677"]]},{"id":"9396f20e.e3e62","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":740,"wires":[]},{"id":"58cc9dba.b21cb4","type":"inject","z":"55d33ac.d7aaec4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":740,"wires":[["5c74dd2e.752454"]]},{"id":"2046a641.9f84ca","type":"comment","z":"55d33ac.d7aaec4","name":"[관리자용 : 생산계획 클리어_________________]","info":"","x":200,"y":700,"wires":[]},{"id":"c16463c3.3741a","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1670,"y":420,"wires":[]},{"id":"a01bda7a.553948","type":"debug","z":"55d33ac.d7aaec4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1670,"y":340,"wires":[]},{"id":"ea833d60.ec957","type":"debug","z":"55d33ac.d7aaec4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":950,"y":380,"wires":[]},{"id":"a28b0a4d.84db58","type":"mqtt out","z":"55d33ac.d7aaec4","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":890,"y":580,"wires":[]},{"id":"b3c43db0.78149","type":"function","z":"55d33ac.d7aaec4","name":"clear THINGSPIN/MODELS topic all","func":"var all = [{\n topic: \"THINGSPIN/MODELS\",\n retain: true,\n qos: 2,\n payload: null\n}];\nreturn [all];","outputs":1,"noerr":0,"x":350,"y":580,"wires":[["c9c0525c.457d6","a28b0a4d.84db58"]]},{"id":"c9c0525c.457d6","type":"debug","z":"55d33ac.d7aaec4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":580,"wires":[]},{"id":"8424b02d.481e4","type":"inject","z":"55d33ac.d7aaec4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":580,"wires":[["b3c43db0.78149"]]},{"id":"5ebd4ecb.a7ac5","type":"comment","z":"55d33ac.d7aaec4","name":"[관리자용 : 모델정보 클리어________________]","info":"","x":200,"y":540,"wires":[]},{"id":"f5b2f81e.227918","type":"comment","z":"55d33ac.d7aaec4","name":"[주기적 실행 : DB 배치 - 생산계획 다운로드____]","info":"","x":200,"y":40,"wires":[]},{"id":"e20f909a.bc729","type":"comment","z":"55d33ac.d7aaec4","name":"[주기적 실행 : 모델정보 및 오늘의 생산계획 발행]","info":"","x":200,"y":300,"wires":[]},{"id":"754da047.8437c","type":"inject","z":"55d33ac.d7aaec4","name":"Manual Publish","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":400,"wires":[["d403ea76.149ff8","2b081724.492dd8"]]},{"id":"c06bde6.389802","type":"mqtt in","z":"1eb07d0d.798353","name":"+/THINGSPIN/EMERGENCY/ALERT","topic":"+/THINGSPIN/EMERGENCY/ALERT/#","qos":"2","broker":"b0cf8635.7f4c78","x":190,"y":480,"wires":[["f6df4b50.1656d8"]]},{"id":"672dd7db.ccf7d8","type":"mqtt in","z":"1eb07d0d.798353","name":"+/THINGSPIN/EMERGENCY/LINESTOP","topic":"+/THINGSPIN/EMERGENCY/LINESTOP","qos":"0","broker":"b0cf8635.7f4c78","x":200,"y":540,"wires":[["100b719b.03d58e"]]},{"id":"f6df4b50.1656d8","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":490,"y":480,"wires":[]},{"id":"100b719b.03d58e","type":"debug","z":"1eb07d0d.798353","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":490,"y":540,"wires":[]},{"id":"765c5292.e0c9dc","type":"config","z":"80afcf60.5d6f1","name":"init globals","properties":[{"p":"INSPPROP","pt":"global","to":"null","tot":"json"},{"p":"ACTINADV","pt":"global","to":"null","tot":"json"}],"active":true,"x":130,"y":160,"wires":[]},{"id":"d9573ceb.1e4c8","type":"comment","z":"eec507bd.98d0c8","name":"[ 플로우 변수 초기화 ______________________]","info":"","x":200,"y":20,"wires":[]},{"id":"3bf38af5.832ce6","type":"link in","z":"eec507bd.98d0c8","name":"inspection-result-receive","links":["9648ae0c.cc75f"],"x":52.00003528594971,"y":360.00000762939453,"wires":[["122fc89d.952d37"]]},{"id":"122fc89d.952d37","type":"function","z":"eec507bd.98d0c8","name":"CEP","func":"var sa = global.get(\"stats-analysis\");\nvar sm = global.get(\"statistical-methods\");\nvar cepT = flow.get(\"cepTABLE\");\nif (!cepT) {\n node.warn(\"CEP context (cepT) being intialized...\");\n cepT = new Map();\n flow.set(\"cepTABLE\", cepT);\n}\n\nvar head = msg.payload.shift();\nvar keyCH = `${head.tags.facility}:${head.tags.channel}`;\nvar keyMD = `${keyCH}:${head.tags.model}`;\n\nfunction __cpk(spec, v) {\n const m = sa.mean(v);\n let sigma = sa.stdev(v);\n \n if(sigma === 0 || v.length <= 2) {\n let c = {\n cpk: (spec.usl + spec.lsl) / 2,\n cp: (spec.usl + spec.lsl) / 2\n };\n \n return c;\n }\n \n const u = (spec.usl - m) / (3*sigma);\n\n let cpk;\n if (!spec.lsl || !spec.usl || spec.lsl === 0 || spec.usl === 0) {\n cpk = { \n cpk: u,\n cp: u/2\n }\n } else {\n var l = (m - spec.lsl) / (3*sigma);\n cpk = {\n cpk: sm.min([l, u]),\n cp: (spec.usl - spec.lsl) / (6*sigma)\n }\n }\n \n if(!cpk.cp) cpk.cp = m;\n if(!cpk.cpk) cpk.cpk = m;\n \n return cpk;\n}\n\nfunction _cpk(cep, k, so) {\n \n var saved = cep.get(k);\n\n var val = saved.map( (s) => {\n return s.fields.val;\n });\n\n if (val.length <= 1) {\n val.push(so.fields.val);\n }\n \n var spec = {\n lsl: so.fields.min,\n usl: so.fields.max,\n };\n\n var c = __cpk(spec, val);\n \n so.fields.cp = c.cp;\n so.fields.cpk = c.cpk;\n so.fields.usl = spec.usl;\n so.fields.lsl = spec.lsl;\n \n return so;\n}\n\nfunction _store(cep, so) {\n var key = `${so.tags.iid}:${keyCH}`;\n \n so.key = key;\n so.tags.fireCNF = false;\n so.tags.fireCPK = false;\n \n so.fields.acc = (so.tags.pass === true) ? 0.0 : 1.0;\n so.fields.acum = 1.0;\n \n var isin = cep.has(key);\n if(!isin) {\n cep.set(key, [so]);\n } else {\n var p = cep.get(key);\n so.fields.acc = (so.tags.pass === true) ? 0.0 : parseInt(p[0].fields.acc) + 1.0;\n so.fields.acum = parseInt(p[0].fields.acum) + 1.0;\n\n if( p.length > 50 ) { // queue limit !\n p.pop();\n }\n \n p.unshift(so);\n cep.set(key, p);\n }\n\n flow.set(\"cepTABLE\", cep);\n\n return {key:key, so:so};\n}\n\nfunction _convAlert(str) {\n let retVal;\n switch(str) {\n case \"안함\": retVal = 0; break;\n case \"알람\": retVal = 1; break;\n case \"라인정지\": retVal = 2; break;\n default:\n retVal = null;\n }\n return retVal;\n}\n\n//===========================================================================\n// GET CPK\n//===========================================================================\nvar proc = msg.payload.map( (so) => {\n var kso = _store(cepT, so);\n return _cpk(cepT, kso.key, kso.so);\n});\n\n//===========================================================================\n// GET ALRAM\n//===========================================================================\nlet undefinedAlarm = [];\nfunction _alram(cep, rule, head, sos) {\n const hits = [];\n rule.forEach( (r) => {\n const targets = sos.filter ( (so) => {\n return (r.INSPPROP_ID === 0 || r.INSPPROP_ID === so.tags.iid);\n });\n \n const cf = r.CONT_FAIL;\n const cpk = r.CPK;\n\n // 연속 뷸량 검출 || CPK 위반 검출\n if (cf || cpk) {\n const cmax = parseInt(cf.COUNT);\n\n targets.map( (so) => {\n let _so = Object.assign({}, so);\n _so.fields.cmax = cmax; \n //node.warn(\"test:\" + cmax + \" with:\" +so.fields.acc + \" IN: \" + so.tags.facility + \":\" + so.tags.channel + \" : \" + so.fields.inm + \": \" + so.tags.model + \": \" + so.tags.pass);\n\n if(cpk) {\n if( (_so.fields.cpk < cpk.LSL) || (_so.fields.cpk > cpk.USL) ) {\n const alertNum = _convAlert(cpk.ACTION);\n if ( alertNum === 2 ) {\n _so.rule = r;\n }\n \n if( _so.fields.acc >= cmax) {\n _so.tags.alert = alertNum;\n }\n\n _so.output = 2;\n _so.fields.lsl_min = cpk.LSL;\n _so.fields.usl_max = cpk.USL; \n _so.tags.fireCPK = true;\n \n if (alertNum === null) {\n undefinedAlarm.push(_so);\n } else {\n hits.push(_so);\n }\n }\n }\n \n if(cf) {\n if( _so.fields.acc >= cmax) {\n const alertNum = _convAlert(cf.ACTION);\n if ( alertNum === 2 ) {\n _so.rule = r;\n }\n\n _so.tags.alert = alertNum;\n _so.tags.fireCNF = true;\n \n _so.output = 1;\n if (alertNum === null) {\n undefinedAlarm.push(_so);\n } else {\n hits.push(_so);\n }\n \n let p = cep.get(_so.key);\n let s = p.shift();\n s.fields.acc = 0; // accumulator clear\n p.unshift(s);\n cep.set(_so.key, p);\n }\n }\n })\n }\n });\n \n return hits;\n}\nlet ruleT = global.get(\"ACTINADV\");\nif (!ruleT) {\n node.error(\"A CEP (CPK calculation and monitoring & Continuos failure detection rule is not yet set!\");\n ruleT = new Map();\n global.set(\"ACTINADV\", ruleT);\n}\nlet alram = _alram(cepT, ruleT, head, proc);\n\n//===========================================================================\n// MAIN RETURN\n//===========================================================================\n\nproc.unshift(head);\nmsg.payload = proc;\n\ndelete alram.key;\n\nvar a = {\n legth: alram.length,\n payload: alram,\n};\n\nreturn [\n msg, \n (a.legth === 0) ? null : a, \n (undefinedAlarm.length === 0) ? null : undefinedAlarm\n];\n","outputs":3,"noerr":0,"x":167.00003814697266,"y":364.00000953674316,"wires":[["24df0f41.161","688f3ffc.ed94f"],["f18714a6.9f7d88"],[]]},{"id":"449a6eec.34122","type":"link in","z":"eec507bd.98d0c8","name":"reset-cpk-flow-in","links":["49682169.6a632"],"x":65,"y":70,"wires":[["5d2fb79.4335748"]]},{"id":"5d2fb79.4335748","type":"function","z":"eec507bd.98d0c8","name":"reset flow","func":"flow.set(\"cepTABLE\", null);\n\nmsg.payload = \"flow context reset!\";\n\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":70,"wires":[["f4aae66a.c17478"]]},{"id":"26c43149.dad20e","type":"inject","z":"eec507bd.98d0c8","name":"reset-flow","topic":"air\\SQLEXPRESS","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":109,"wires":[["5d2fb79.4335748"]]},{"id":"2adf800b.72521","type":"comment","z":"eec507bd.98d0c8","name":"[시험결과 연속불량과 CPK 계산_____________]","info":"","x":209,"y":231.0000057220459,"wires":[]},{"id":"f18714a6.9f7d88","type":"function","z":"eec507bd.98d0c8","name":"알람 (경고, 라인정지)","func":"//=========================================================\nconst YYYYMMDD = global.get(\"YYYYMMDD\");\n\nif (!YYYYMMDD) {\n return;\n}\n\nvar linestop = [];\nvar alerts = [];\nmsg.payload.map((a) => {\n if( a.tags.alert === 2 ) { // 라인정지\n linestop.push(a);\n alerts.push(a);\n } else if ( a.tags.alert === 1 ) {\n alerts.push(a);\n }\n\n switch (a.output) {\n case 1: a.measurement = `alram.continuous.failures.detail-${YYYYMMDD}`; break;\n case 2: a.measurement = `alram.cpk.detail-${YYYYMMDD}`; break;\n default:\n // node.warn(`unknown Output ${a.output}`);\n // node.warn(a);\n }\n\n delete a.key;\n delete a.output;\n});\n\nreturn [msg, alerts, linestop];","outputs":3,"noerr":0,"x":424.00012588500977,"y":409.0000114440918,"wires":[["986d6f17.f1cd"],["9814016.5a433"],["2aef7257.b019ae"]]},{"id":"f4aae66a.c17478","type":"debug","z":"eec507bd.98d0c8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":738.1666870117188,"y":71.66667175292969,"wires":[]},{"id":"9814016.5a433","type":"link out","z":"eec507bd.98d0c8","name":"out-alerts","links":["1a717e9e.b59561"],"x":601.1667652130127,"y":408.6666793823242,"wires":[]},{"id":"2aef7257.b019ae","type":"link out","z":"eec507bd.98d0c8","name":"out-linestop","links":["315ccfe.ec3bc3"],"x":601.166880607605,"y":476.6666793823242,"wires":[]},{"id":"986d6f17.f1cd","type":"influxdb batch","z":"eec507bd.98d0c8","influxdb":"62088376.ebf75c","precision":"ms","retentionPolicy":"","name":"","x":676.0002174377441,"y":344.0000705718994,"wires":[]},{"id":"1a717e9e.b59561","type":"link in","z":"eec507bd.98d0c8","name":"","links":["9814016.5a433"],"x":52.16670227050781,"y":632.3333702087402,"wires":[["37ca5e99.62d232","e832f1b8.0e9fe"]]},{"id":"315ccfe.ec3bc3","type":"link in","z":"eec507bd.98d0c8","name":"","links":["2aef7257.b019ae"],"x":55.166704177856445,"y":819.3333501815796,"wires":[["e74abe4d.21e17","490d4f89.f1ced"]]},{"id":"d2a2ea36.221768","type":"comment","z":"eec507bd.98d0c8","name":"[ 경고 발행 ______ ______________________]","info":"","x":206.00003051757812,"y":573.0000162124634,"wires":[]},{"id":"993e0933.8cc358","type":"comment","z":"eec507bd.98d0c8","name":"[ 라인정지 발행 __________________________]","info":"","x":205.00003814697266,"y":759.0000162124634,"wires":[]},{"id":"37ca5e99.62d232","type":"function","z":"eec507bd.98d0c8","name":"THINGSPIN/EMERGENCY/ALERT","func":"msg.topic = \"THINGSPIN/EMERGENCY/ALERT\";\nmsg.payload = {\n tags: msg.tags, \n fields: msg.fields,\n};\ndelete msg.tags;\ndelete msg.fields;\ndelete msg.measurement;\n\nreturn msg;","outputs":1,"noerr":0,"x":305.00003814697266,"y":631.0000419616699,"wires":[["186d90d9.255a6f","66ca32e6.a3d03c"]]},{"id":"e74abe4d.21e17","type":"function","z":"eec507bd.98d0c8","name":"THINGSPIN/EMERGENCY/LINESTOP","func":"msg.topic = \"THINGSPIN/EMERGENCY/LINESTOP\";\nmsg.payload = {\n tags: msg.tags, \n fields: msg.fields,\n rule: msg.rule,\n};\ndelete msg.tags;\ndelete msg.fields;\ndelete msg.measurement;\n\nreturn msg;","outputs":1,"noerr":0,"x":319.00003814697266,"y":819.000018119812,"wires":[["a86e1be.27c0fe8","1e00e082.6b417f"]]},{"id":"186d90d9.255a6f","type":"mqtt out","z":"eec507bd.98d0c8","name":"THINGSPIN/EMERGENCY/ALERT","topic":"THINGSPIN/EMERGENCY/ALERT","qos":"0","retain":"true","broker":"1f57b0be.94997f","x":858.0000534057617,"y":628.0000410079956,"wires":[]},{"id":"a86e1be.27c0fe8","type":"mqtt out","z":"eec507bd.98d0c8","name":"THINGSPIN/EMERGENCY/LINESTOP","topic":"THINGSPIN/EMERGENCY/LINESTOP","qos":"0","retain":"false","broker":"1f57b0be.94997f","x":867.0000534057617,"y":816.0000190734863,"wires":[]},{"id":"66ca32e6.a3d03c","type":"debug","z":"eec507bd.98d0c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1102.000057220459,"y":626.0000410079956,"wires":[]},{"id":"1e00e082.6b417f","type":"debug","z":"eec507bd.98d0c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1100.000057220459,"y":815.000018119812,"wires":[]},{"id":"e5c5554f.4d9008","type":"comment","z":"eec507bd.98d0c8","name":"[ 경고]","info":"","x":676.0002212524414,"y":408.00000762939453,"wires":[]},{"id":"482b8703.e32ba8","type":"comment","z":"eec507bd.98d0c8","name":"[ 라인정지]","info":"","x":687.0000991821289,"y":476.00001430511475,"wires":[]},{"id":"f611f52.2f69d08","type":"comment","z":"eec507bd.98d0c8","name":"[ 모든 계산된 결과 레코드]","info":"","x":646.000171661377,"y":307.0000686645508,"wires":[]},{"id":"77d5f05f.dff95","type":"comment","z":"eec507bd.98d0c8","name":"[ 모든 위반 레코드]","info":"","x":888.0002326965332,"y":343.00000953674316,"wires":[]},{"id":"a65c478b.7c9318","type":"config","z":"eec507bd.98d0c8","name":"init flow","properties":[{"p":"cepTABLE","pt":"flow","to":"null","tot":"json"}],"active":true,"x":108.5,"y":154,"wires":[]},{"id":"e832f1b8.0e9fe","type":"function","z":"eec507bd.98d0c8","name":"set alert-yyyymmdd InfluxDB","func":"let YYYYMMDD = global.get(\"YYYYMMDD\");\n\nif (!YYYYMMDD) {\n YYYYMMDD = \"20180101\";\n}\n\nmsg.payload = [{\n measurement: `alert-${YYYYMMDD}`,\n tags: msg.tags,\n fields: msg.fields,\n}]\n\ndelete msg.tags;\ndelete msg.fields;\n\nreturn msg;","outputs":1,"noerr":0,"x":278.5000305175781,"y":689.000020980835,"wires":[["f00e0ca7.51d42","bbd3e670.a9f848"]]},{"id":"f00e0ca7.51d42","type":"debug","z":"eec507bd.98d0c8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1104.0000305175781,"y":691.000020980835,"wires":[]},{"id":"490d4f89.f1ced","type":"function","z":"eec507bd.98d0c8","name":"set linestop-yyyymmdd InfluxDB","func":"let YYYYMMDD = global.get(\"YYYYMMDD\");\n\nif (!YYYYMMDD) {\n YYYYMMDD = \"20180101\";\n}\n\nmsg.payload = [{\n measurement: `linestop-${YYYYMMDD}`,\n tags: msg.tags,\n fields: msg.fields,\n}]\n\nreturn msg;","outputs":1,"noerr":0,"x":297.0000305175781,"y":893.0000162124634,"wires":[["c9f02ae9.ed0b98","7b4f26c8.854068"]]},{"id":"c9f02ae9.ed0b98","type":"debug","z":"eec507bd.98d0c8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1101.5000305175781,"y":889.0000162124634,"wires":[]},{"id":"bbd3e670.a9f848","type":"influxdb batch","z":"eec507bd.98d0c8","influxdb":"62088376.ebf75c","precision":"ms","retentionPolicy":"","name":"","x":805.0000991821289,"y":690.000020980835,"wires":[]},{"id":"7b4f26c8.854068","type":"influxdb batch","z":"eec507bd.98d0c8","influxdb":"62088376.ebf75c","precision":"ms","retentionPolicy":"","name":"","x":809.0000305175781,"y":891.0000162124634,"wires":[]},{"id":"24df0f41.161","type":"influxdb batch","z":"eec507bd.98d0c8","influxdb":"62088376.ebf75c","precision":"ms","retentionPolicy":"","name":"","x":412.00004959106445,"y":308.00000762939453,"wires":[]},{"id":"2d78c634.fdf4fa","type":"debug","z":"80afcf60.5d6f1","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":530,"y":660,"wires":[]},{"id":"30a2df3a.f9cea","type":"debug","z":"80afcf60.5d6f1","name":"RECORDS","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":850,"y":1080,"wires":[]},{"id":"20d93e2d.a697f2","type":"debug","z":"80afcf60.5d6f1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":350,"y":1080,"wires":[]},{"id":"688f3ffc.ed94f","type":"debug","z":"eec507bd.98d0c8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":380,"y":360,"wires":[]},{"id":"1a3d6a92.65fb75","type":"mysql","z":"83ced1dd.fa3e2","mydb":"4de311e8.460af","name":"MYSQL (RMS CENTER)","x":670,"y":220,"wires":[["87a873a4.a3c9b","940e6e76.d1921"]]},{"id":"8fa00fd9.6e55","type":"inject","z":"83ced1dd.fa3e2","name":"","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":220,"wires":[["44e51199.86723"]]},{"id":"44e51199.86723","type":"function","z":"83ced1dd.fa3e2","name":"QUERY ALL INSPECTION PROPERTIES","func":"msg.topic = \"SELECT IDX, NAME FROM t_inspection_property WHERE IDX <> 0 AND IP_TYPE=2;\";\n\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":220,"wires":[["1a3d6a92.65fb75"]]},{"id":"87a873a4.a3c9b","type":"debug","z":"83ced1dd.fa3e2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":220,"wires":[]},{"id":"7279d86c.0b1118","type":"comment","z":"83ced1dd.fa3e2","name":"[주기적 발행 : 육안검사항목 _______________]","info":"","x":200,"y":180,"wires":[]},{"id":"940e6e76.d1921","type":"link out","z":"83ced1dd.fa3e2","name":"records-inspprop-raw-out","links":["e2a0e47c.b9fbf8"],"x":875,"y":220,"wires":[]},{"id":"e2a0e47c.b9fbf8","type":"link in","z":"83ced1dd.fa3e2","name":"","links":["940e6e76.d1921"],"x":55,"y":280,"wires":[["5f0d2a59.759524"]]},{"id":"5f0d2a59.759524","type":"function","z":"83ced1dd.fa3e2","name":"build topic for mqtt","func":"let {payload} = msg;\nlet all = payload.map ( (row) => {\n\n var a = {\n topic: \"EYEINSPR/\" + row.IDX,\n payload: {}\n };\n \n a.payload = Object.assign(a.payload, row);\n\n return a;\n});\n\nreturn [all];","outputs":1,"noerr":0,"x":290,"y":280,"wires":[["1d196250.80652e","a235bc44.8a18e"]]},{"id":"a235bc44.8a18e","type":"mqtt out","z":"83ced1dd.fa3e2","name":"","topic":"","qos":"2","retain":"true","broker":"1b4ec9a7.f485e6","x":910,"y":280,"wires":[]},{"id":"1d196250.80652e","type":"debug","z":"83ced1dd.fa3e2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1130,"y":280,"wires":[]},{"id":"8c6ec8f1.379908","type":"mqtt in","z":"80afcf60.5d6f1","name":"KR/EYEINSPT/#","topic":"KR/EYEINSPT/#","qos":"0","broker":"1b4ec9a7.f485e6","x":120,"y":1180,"wires":[["c9c5cfe5.514e4","519b641.4b04b9c"]]},{"id":"c9c5cfe5.514e4","type":"json","z":"80afcf60.5d6f1","name":"","property":"payload","action":"","pretty":false,"x":330,"y":1180,"wires":[["77b7901.d970c7"]]},{"id":"77b7901.d970c7","type":"function","z":"80afcf60.5d6f1","name":"RECORDS","func":"//=========================================================\nvar YYYYMMDD = global.get(\"YYYYMMDD\");\nvar inspectionEye = global.get(\"INSPEYE\");\n\n\nif (!YYYYMMDD) {\n return;\n}\n\nvar mesINSP = `inspection.eye-${YYYYMMDD}`;\n\n//=========================================================\n\nvar tocken = msg.topic.split(\"/\");\nmsg.payload.pcID = tocken[2];\n\nvar inspection = msg.payload;\n\n//=========================================================\n\nif(inspection.prodModel === undefined || inspection.prodModel === null)\n{\n return null;\n}\nif(inspection.quantity === undefined || inspection.quantity === null)\n{\n inspection.quantity = 1;\n}\n//=========================================================\n\ninspection = [{\n measurement: mesINSP,\n tags: {\n prodModel: inspection.prodModel,\n idx: inspectionEye.get(inspection.IDX),\n facility: msg.payload.pcID\n },\n fields: {\n stime: inspection.stime,\n quantity: inspection.quantity\n } \n}];\n\nmsg.payload = inspection;\n\nreturn msg;","outputs":1,"noerr":0,"x":540,"y":1180,"wires":[["63b60c8c.9a3f54","2e11ae1c.5a2fb2"]]},{"id":"63b60c8c.9a3f54","type":"influxdb batch","z":"80afcf60.5d6f1","influxdb":"62088376.ebf75c","precision":"ms","retentionPolicy":"","name":"","x":830,"y":1180,"wires":[]},{"id":"519b641.4b04b9c","type":"debug","z":"80afcf60.5d6f1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":350,"y":1220,"wires":[]},{"id":"2e11ae1c.5a2fb2","type":"debug","z":"80afcf60.5d6f1","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":810,"y":1220,"wires":[]},{"id":"5f6d8c68.30b824","type":"comment","z":"80afcf60.5d6f1","name":"[불량입력 항목을 FLOW 컨텍스트에 저장]","info":"","x":183,"y":334,"wires":[]},{"id":"6a60d123.4da76","type":"mqtt in","z":"80afcf60.5d6f1","name":"EYEINSPR/#","topic":"EYEINSPR/#","qos":"2","broker":"1b4ec9a7.f485e6","x":110,"y":380,"wires":[["2198c358.c5dbac"]]},{"id":"2198c358.c5dbac","type":"json","z":"80afcf60.5d6f1","name":"","property":"payload","action":"","pretty":false,"x":330,"y":380,"wires":[["c03a01f7.8c842"]]},{"id":"c03a01f7.8c842","type":"function","z":"80afcf60.5d6f1","name":"Store in Global","func":"var inspectionEye = global.get(\"INSPEYE\");\nif (inspectionEye === undefined || inspectionEye === null)\n{\n inspectionEye = new Map();\n global.set(\"INSPEYE\",inspectionEye);\n}\n\nif(inspectionEye.has(msg.payload.IDX) === false)\n{\n inspectionEye.set(msg.payload.IDX, msg.payload.NAME);\n \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":560,"y":380,"wires":[["510c601c.fc7a"]]},{"id":"510c601c.fc7a","type":"debug","z":"80afcf60.5d6f1","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":380,"wires":[]}]