Industrial Automation using the Node-RED and raspberry pi
This is the flows of Industrial Automation using the Node-RED and raspberry pi project. We have implemented Industrial Automation based on Node-RED and Raspberry pi using Node-RED Dashboard. We have implemented the device in a wood processing factory. The device was installed to control the wood dryer chamber. For more details about this project, please watch the video documentation: https://youtu.be/Tg_MPyfzhts
For more details, visit: https://www.programmingboss.com/2020/11/industrial-automation-based-on-node-red-and-raspberryPi.html
As Node-RED is an IoT tool and Raspberry pi can be used as a controller and processor, we can deploy Node-RED and Raspberry pi to collect data from sensors. Based on the sensor data and user-defined data from the Node-RED dashboard, we can control the dryer fan, heater, spray, and flap to dehumidify. We have used the Arduino Ethernet shield to collect sensor data. After collecting data, Arduino will send data to Raspberry Pi through the MQTT protocol.
[{"id":"7f549965.023648","type":"tab","label":"User Input DB","disabled":false,"info":""},{"id":"f0cb8caa.729308","type":"comment","z":"7f549965.023648","name":"User Input","info":"","x":80,"y":20,"wires":[]},{"id":"1687e1fe.5d87ae","type":"mysql","z":"7f549965.023648","mydb":"c4a47a80.35354","name":"","x":670,"y":620,"wires":[["7ffa8296.ccac24","6a284f5a.573208"]]},{"id":"7ffa8296.ccac24","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":870,"y":560,"wires":[]},{"id":"6a284f5a.573208","type":"function","z":"7f549965.023648","name":"addRow @ end","func":"const set_sequence_ui = global.get(\"sequence/set\");\nconst set_temp_ui = global.get(\"temperature/set\");\nconst set_hum_ui = global.get(\"humidity/set\");\nconst set_time_ui = global.get(\"time/set\");\n//var numberOfRows = \"1\";\n//flow.set(\"lastId\",numberOfRows);\nvar id=flow.get(\"lastId\") || 0;\n++id;\nmsg.payload={\n command:\"addRow\",\n arguments: [\n [\n {\n \"id\":id,\n \"Sequence No\": set_sequence_ui,\n \"Set Temp\": set_temp_ui,\n \"Set Hum\": set_hum_ui,\n \"Set Time\": set_time_ui\n }\n ],\n false\n ],\n returnPromise: true\n}\nflow.set(\"lastId\",id);\nreturn msg;\n\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":880,"y":660,"wires":[["bea02fbf.5724c8"]],"info":"# addRow([row],onTop)\n\n`onTop=false`\n\nadds a new Row on top of the table"},{"id":"bea02fbf.5724c8","type":"ui_table","z":"7f549965.023648","group":"9f56af9e.065a88","name":"","order":1,"width":7,"height":6,"columns":[{"field":"S.No","title":"S.No","width":"","align":"center","formatter":"rownum","formatterParams":{"target":"_blank"}},{"field":"Set Temp","title":"S.Temp","width":"","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"Set Hum","title":"S.Hum","width":"","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"Set Time","title":"S.Time","width":"","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":1090,"y":620,"wires":[["b3aebc27.d361e"]]},{"id":"20a8d32f.0bb1fc","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":230,"y":540,"wires":[]},{"id":"427e9dbe.23822c","type":"ui_numeric","z":"7f549965.023648","name":"","label":"Sequence No","tooltip":"","group":"982b11fd.235eb","order":1,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"","format":"{{value}}","min":0,"max":"20","step":1,"x":240,"y":80,"wires":[["fd33e615.0ea778","63ae234a.b976fc"]]},{"id":"fd33e615.0ea778","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":330,"y":20,"wires":[]},{"id":"d5663665.e34b3","type":"ui_numeric","z":"7f549965.023648","name":"","label":"Set Temperature","tooltip":"","group":"982b11fd.235eb","order":2,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"","format":"{{value}}","min":"20","max":"85","step":"5","x":240,"y":200,"wires":[["e116fc6a.ee145","f5a4b898.e8acc8"]]},{"id":"e116fc6a.ee145","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":330,"y":140,"wires":[]},{"id":"5bcf4e96.99949","type":"ui_numeric","z":"7f549965.023648","name":"","label":"Set Humidity","tooltip":"","group":"982b11fd.235eb","order":3,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"","format":"{{value}}","min":"20","max":"90","step":"5","x":230,"y":320,"wires":[["aecefd5b.bfdf5","794fed1c.43c29c"]]},{"id":"aecefd5b.bfdf5","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":330,"y":260,"wires":[]},{"id":"a8847c24.ad3de8","type":"ui_numeric","z":"7f549965.023648","name":"","label":"Set Time","tooltip":"","group":"982b11fd.235eb","order":4,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"","format":"{{value}}","min":0,"max":"60","step":1,"x":220,"y":460,"wires":[["a83ff8be.42cc8","6b8cd10.3079bb"]]},{"id":"a83ff8be.42cc8","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":330,"y":400,"wires":[]},{"id":"db2f1f5.c908c6","type":"ui_button","z":"7f549965.023648","name":"","group":"982b11fd.235eb","order":5,"width":0,"height":0,"passthru":false,"label":"Submit","tooltip":"init table by passing the hole table array (default way)","color":"","bgcolor":"","icon":"","payload":"","payloadType":"num","topic":"","x":220,"y":620,"wires":[["20a8d32f.0bb1fc","1d6acd88.2f6e62","265331aa.e43afe"]]},{"id":"6b8cd10.3079bb","type":"function","z":"7f549965.023648","name":"Time","func":"var Set_time= {\"payload\":msg.payload};\n\n//flow.set('order_id', O_rderID);\n//msg.topic='Set_Temp'\n\nreturn Set_time;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":430,"y":460,"wires":[["783e8e3a.c05e58"]]},{"id":"f5a4b898.e8acc8","type":"function","z":"7f549965.023648","name":"Temp","func":"var Set_temp= {\"payload\":msg.payload};\n\n//flow.set('order_id', O_rderID);\n//msg.topic='Set_Temp'\n\nreturn Set_temp;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":430,"y":200,"wires":[["47e88158.540418"]]},{"id":"794fed1c.43c29c","type":"function","z":"7f549965.023648","name":"Hum","func":"var Set_hum = {\"payload\":msg.payload};\n\n//flow.set('order_id', O_rderID);\n//msg.topic='Set_Temp'\n\nreturn Set_hum;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":430,"y":320,"wires":[["51bb9b85.3c6064"]]},{"id":"47e88158.540418","type":"change","z":"7f549965.023648","name":"SetTemperature","rules":[{"t":"set","p":"temperature/set","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":200,"wires":[[]]},{"id":"51bb9b85.3c6064","type":"change","z":"7f549965.023648","name":"SetHumidity","rules":[{"t":"set","p":"humidity/set","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":320,"wires":[[]]},{"id":"783e8e3a.c05e58","type":"change","z":"7f549965.023648","name":"SetTime","rules":[{"t":"set","p":"time/set","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":460,"wires":[[]]},{"id":"63ae234a.b976fc","type":"function","z":"7f549965.023648","name":"Sequence","func":"var Set_seq= {\"payload\":msg.payload};\n\n//flow.set('order_id', O_rderID);\n//msg.topic='Set_Temp'\n\nreturn Set_seq;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":440,"y":80,"wires":[["8fd32ec6.8b0ed8"]]},{"id":"8fd32ec6.8b0ed8","type":"change","z":"7f549965.023648","name":"SetSequence","rules":[{"t":"set","p":"sequence/set","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":80,"wires":[["d31e30fc.b01828"]]},{"id":"d31e30fc.b01828","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":690,"y":20,"wires":[]},{"id":"a09f3f62.7082f","type":"function","z":"7f549965.023648","name":"","func":"const set_tempmm = global.get(\"Auto/Manual_switch\") || 0;\nmsg.payload =set_tempmm ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1200,"y":100,"wires":[["6098e8e5.116d5"]]},{"id":"4fbeabf0.0b971c","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1030,"y":100,"wires":[["a09f3f62.7082f"]]},{"id":"6098e8e5.116d5","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1390,"y":100,"wires":[]},{"id":"1d6acd88.2f6e62","type":"function","z":"7f549965.023648","name":"BFIDC_Dryer_1_input","func":"const set_sequence = global.get(\"sequence/set\");\nconst set_temp = global.get(\"temperature/set\");\nconst set_hum = global.get(\"humidity/set\");\nconst set_time = global.get(\"time/set\");\n\nvar newMsg = {\n \"topic\": \"INSERT INTO BFIDC_Dryer_1 (`id`,`Set_Temperature`,`Set_Humidity`,`Set_Time`) VALUES ( \" + set_sequence + \",\" + set_temp + \", \" + set_hum + \",\" + set_time + \")\"\n }\n\nreturn newMsg;\n//INSERT INTO `processed_input`(`order_id`, `total_small_size`, ` total_medium_size`, ` total_large_size`, ` total_xl_size`, `small_card_qty`, `medium_card_qty`, `large_card_qty`, `xl_card_qty`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n//INSERT INTO `operator_input`(`order_id`, `buyer_name`, `color`, `small_size`, `medium_size`, `large_size`, `xl_size`, `no_of_ply`, `bundle_size`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n// user: amirul ... pass: dryer1 ... name bfidc","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":620,"wires":[["1687e1fe.5d87ae"]]},{"id":"4e862fe7.239cd8","type":"function","z":"7f549965.023648","name":"BFIDC_Dryer_1_input","func":"\nvar newMsg = {\n \"topic\": \"truncate table bfidc.BFIDC_Dryer_1\"\n }\n\nreturn newMsg;\n//INSERT INTO `processed_input`(`order_id`, `total_small_size`, ` total_medium_size`, ` total_large_size`, ` total_xl_size`, `small_card_qty`, `medium_card_qty`, `large_card_qty`, `xl_card_qty`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n//INSERT INTO `operator_input`(`order_id`, `buyer_name`, `color`, `small_size`, `medium_size`, `large_size`, `xl_size`, `no_of_ply`, `bundle_size`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":760,"y":940,"wires":[["467bddaf.c934d4"]]},{"id":"467bddaf.c934d4","type":"mysql","z":"7f549965.023648","mydb":"c4a47a80.35354","name":"","x":950,"y":940,"wires":[[]]},{"id":"ee955b6c.404e48","type":"function","z":"7f549965.023648","name":"select sequence data from DB","func":"//var numberOfRows = msg.payload;\n//flow.set(\"lastId\",numberOfRows);\nvar idq=flow.get(\"lastIdQuery\") || 0;\nconst overrideAM = global.get(\"Auto/Manual_switch\");\n//var id=0;\n++idq;\nif (overrideAM !== 1){\n\nvar newMsg = {\n \"topic\": \"select id, Set_Temperature, Set_Humidity, Set_Time from bfidc.BFIDC_Dryer_1 where id = \"+idq+\"\"\n //\"topic\": \"select MAX(energyKWH) - MIN(energyKWH) as 'range' from dreamhome.tbl_energy_data where date(Process_DateTime) = CURDATE()\"\n }\nflow.set(\"lastIdQuery\",idq);\nreturn newMsg;\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":510,"y":1200,"wires":[["d3863271.0d8778"]]},{"id":"d3863271.0d8778","type":"mysql","z":"7f549965.023648","mydb":"c4a47a80.35354","name":"","x":750,"y":1200,"wires":[["2d35bd82.8833f2","e7fab828.46253","7ca88a2d.c36d94","7b946016.dd35b8","a731017.09fb58","2bb864cb.ef81ec"]]},{"id":"2d35bd82.8833f2","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":790,"y":1120,"wires":[]},{"id":"94a28c3e.a71ba8","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":1180,"wires":[["ee955b6c.404e48"]]},{"id":"a7e5d542.79f458","type":"ui_button","z":"7f549965.023648","name":"","group":"4a160fd4.647de8","order":5,"width":0,"height":0,"passthru":true,"label":"Start Process","tooltip":"init table by passing the hole table array (default way)","color":"","bgcolor":"","icon":"","payload":"1","payloadType":"str","topic":"reset/table","x":240,"y":1280,"wires":[["ee955b6c.404e48","6b67cd92.795bfc","c357d0a1.4e5de"]]},{"id":"b3aebc27.d361e","type":"function","z":"7f549965.023648","name":"table recorder","func":"var status = {fill:\"red\",shape:\"ring\",text:\"an error occured\"};\nvar success = (msg.topic && msg.topic===\"success\") || false;\nvar tableData = flow.get(\"tableData\");\nif (tableData === undefined) {\n tableData = [];\n flow.set(\"tableData\",tableData);\n}\n\n// find the index for a row in tableData for a given index (id)\nfunction checkIndex(id) {\n let matchRow=-1\n tableData.forEach(function (row,index){\n if (row.id === id){\n matchRow=index;\n return matchRow;\n }\n })\n return matchRow;\n}\n\n// flat merge one row \nfunction mergeRow(dest,source) {\n Object.keys(source).forEach(function(key) {\n dest[key]=source[key];\n })\n}\n\n//merge or add one or many rows into tableData \nfunction mergeData(newData,toTop) {\n newData.forEach(function (item,index) {\n node.warn([\"findIndex\",item]);\n let row=checkIndex(item.id);\n if (row<0) { // row do not existst in tableData\n if (toTop) {\n tableData.push(item);\n //status.text+=\"newRow @ top\";\n } else {\n tableData.unshift(item);\n //status.text+=\"newRow @ bottom\";\n }\n return;\n } else { // row exists so update\n mergeRow(tableData[row],item);\n status.text+=\"row updated\";\n return;\n }\n if (status.text!==\"\") node.status(status);\n });\n}\n\nswitch (typeof msg.payload){\n case \"string\":\n node.warn([\"[table recorder] \",(typeof msg.payload),msg.payload]);\n switch (msg.payload){\n case \"change\":\n status={fill:\"green\",shape:\"dot\",text:\"Table Restored \"+tableData.length+\" rows\"};\n msg.payload=tableData;\n break;\n }\n break;\n case \"object\":\n node.warn([\"[table recorder] \",(typeof msg.payload),msg.payload]);\n if (Array.isArray(msg.payload)) { // replace all tableData\n status={fill:\"green\",shape:\"dot\",text:\"table replaced \"+msg.payload.length+\" rows\"};\n tableData=RED.util.cloneMessage(msg.payload); \n } else {\n switch (msg.payload.command) { // clearData does not return a promise!\n case \"clearData\":\n status={fill:\"green\",shape:\"dot\",text:\"clearData: done\"};\n tableData=[];\n flow.set(\"lastId\",0);\n break; \n }\n }\n break;\n default: // likely a msg fom a ui-table command or callback\n if (msg.hasOwnProperty(\"topic\")&&\n msg.hasOwnProperty(\"ui_control\") && \n msg.ui_control.hasOwnProperty(\"callback\") &&\n msg.hasOwnProperty(\"return\")) { // message originates from a ui-table callback\n if (success) {\n switch(msg.return.command) {\n case \"addRow\":\n status.text=\"addRow: \";\n mergeData(msg.return.arguments[0],msg.return.arguments[1]);\n status.shape=\"dot\";\n break;\n case \"updateOrAddData\":\n status.text=\"updateOrAddData: \";\n mergeData(msg.return.arguments[0]);\n break;\n case \"deleteRow\":\n let row=checkIndex(msg.return.arguments[0]);\n tableData.splice(row,1);\n status.shape=\"dot\";\n status.text=\"deleteRow: \"+row+\" deleted\";\n break;\n default:\n status={fill:\"yellow\",shape:\"dot\",text:msg.return.command + \" unknown!\"};\n break; \n }\n } else {\n status.text=msg.topic+\" \"+msg.error;\n }\n }\n break;\n}\nif (success) status.fill=\"green\";\nflow.set(\"tableData\",tableData);\nnode.status(status);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1500,"y":700,"wires":[["bea02fbf.5724c8"]],"icon":"font-awesome/fa-database","info":"# simple ui-table handler\n## abstract\nUsing ui-table with commands offer the hole flexibilty of tabulator. The table can be manipulated down to cell level.\nAs the ui-table node only passes the commands to tabulator and receives promises back the node does not hold the table data. If the data should be available after refresh, tab change, new connections the flow is responsible to cache the data and all the manipulations.\nThis node takes care of most simple data manipulation commands and holds a copy of the data in `flow.context.tabledata`\n\n## details\n\n### row index (id)\n\nTo identify a [row a index](http://tabulator.info/docs/4.5/data#overview) column has to be defined. This colum defaults to `id` but can be changed by specifing a **field** by using `msg.ui_control`. In this example the row index is a simple counter adding up by one if a new line is added.\n\n### addRow command\n\n[details @ tabulator addRow docs](http://tabulator.info/docs/4.5/update#alter-add)\n\nYou can add a row by sending the `addRow` command. You can decide if the row adds on the top or at the bottom of table.\n\n### addOrUpdate command\n\n[details @ tabulator addOrUpdate docs](http://tabulator.info/docs/4.5/update#alter-update)\n\nTo update data the best way is to use the `addOrUpdate` command. If the row indetified by the index is not exeisting a new row will be added automatically\n\n### deleteRow command\n\n[details @ tabulator deleteRow docs](http://tabulator.info/docs/4.5/update#row)\n\nDelete one or more rows (passing an array always results in \"row not found error\"! I think there is an issue in tabulator)\n\n### clearData\n\n[details @ tabulator clearData docs](http://tabulator.info/docs/4.5/update#alter-empty)\n\nunfortunately this command (currently) do not send a promise back! So we have to pass it directly to the table handler"},{"id":"ee43b563.d990f","type":"ui_ui_control","z":"7f549965.023648","name":"","events":"all","x":1225,"y":700,"wires":[["b3aebc27.d361e"]]},{"id":"3b3ed959.b01fee","type":"inject","z":"7f549965.023648","name":"change","props":[{"p":"payload","v":"change","vt":"str"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"change","payloadType":"str","x":1230,"y":840,"wires":[["b3aebc27.d361e"]]},{"id":"9325f57f.407788","type":"ui_button","z":"7f549965.023648","name":"","group":"4a160fd4.647de8","order":7,"width":0,"height":0,"passthru":false,"label":"refresh (change)","tooltip":"Same as ui-control sending a change message","color":"","bgcolor":"","icon":"","payload":"change","payloadType":"str","topic":"","x":1240,"y":800,"wires":[["b3aebc27.d361e"]]},{"id":"e53886bd.ce6938","type":"ui_text","z":"7f549965.023648","group":"4a160fd4.647de8","order":8,"width":0,"height":0,"name":"","label":"status","format":"{{status.text}}","layout":"col-center","x":1370,"y":880,"wires":[]},{"id":"8a56de6a.60ac28","type":"status","z":"7f549965.023648","name":"","scope":["b3aebc27.d361e"],"x":1209,"y":880,"wires":[["e53886bd.ce6938"]]},{"id":"1c95f81.f296908","type":"function","z":"7f549965.023648","name":"clearData","func":"\nmsg.payload={\n command:\"clearData\",\n arguments: [],\n returnPromise: true\n}\nreturn msg;","outputs":1,"noerr":0,"x":980,"y":760,"wires":[["e489b5ad.36edf","ee43b563.d990f","b3aebc27.d361e"]],"info":"# clear data\n\nunfortunately this command (currently) do not send a promise back! So we have to pass it directly to the table handler"},{"id":"29f60f04.7999a","type":"inject","z":"7f549965.023648","name":"clear","props":[{"p":"payload","v":"","vt":"date"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":749,"y":794,"wires":[["1c95f81.f296908"]]},{"id":"e489b5ad.36edf","type":"debug","z":"7f549965.023648","name":"clearData","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":980,"y":811,"wires":[]},{"id":"397c73e6.eeec34","type":"ui_button","z":"7f549965.023648","name":"","group":"4a160fd4.647de8","order":6,"width":0,"height":0,"passthru":false,"label":"Reset Table","tooltip":"clear all table data","color":"white","bgcolor":"red","icon":"","payload":"1","payloadType":"str","topic":"","x":769,"y":760,"wires":[["1c95f81.f296908","4e862fe7.239cd8","dd0f4579.988678","3eb2371.df04bc8"]]},{"id":"e7fab828.46253","type":"function","z":"7f549965.023648","name":"","func":"if (msg.payload.length === 0){\n flow.set(\"lastIdQuery\",0);\n //flow.set(\"Auto/Manual_switch\",1);\n msg.payload = 1;\n return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":920,"y":1380,"wires":[["dad5aaf8.0bf258","e46b0bca.15ba18","dd6393fa.11cc4","8bcfe203.3e135","1aeac7cb.7a12a"]]},{"id":"dad5aaf8.0bf258","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":990,"y":1320,"wires":[]},{"id":"e46b0bca.15ba18","type":"switch","z":"7f549965.023648","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"resetDone","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":770,"y":1320,"wires":[["465a201a.e15138"]]},{"id":"7ca88a2d.c36d94","type":"function","z":"7f549965.023648","name":"idProcess","func":"var id_process = (msg.payload[0].id);\nmsg.payload = id_process\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1000,"y":1100,"wires":[["b1425322.b26718","74be0941.c9085","5b3bd95.2d34fa8"]]},{"id":"b1425322.b26718","type":"debug","z":"7f549965.023648","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1150,"y":760,"wires":[]},{"id":"2bb864cb.ef81ec","type":"function","z":"7f549965.023648","name":"timeProcess","func":"var time_process = (msg.payload[0].Set_Time);\nmsg.payload = time_process\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1010,"y":1280,"wires":[["e39a65b7.99e33"]]},{"id":"a731017.09fb58","type":"function","z":"7f549965.023648","name":"humProcess","func":"var hum_process = (msg.payload[0].id);\nmsg.payload = hum_process\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1010,"y":1220,"wires":[["444dfaa5.aa962c"]]},{"id":"7b946016.dd35b8","type":"function","z":"7f549965.023648","name":"temProcess","func":"var temp_process = (msg.payload[0].Set_Temperature);\nmsg.payload = temp_process\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1010,"y":1160,"wires":[["f33fdee9.29d988"]]},{"id":"74be0941.c9085","type":"ui_text","z":"7f549965.023648","group":"4a160fd4.647de8","order":4,"width":0,"height":0,"name":"","label":"Running Process","format":"{{msg.payload}}","layout":"row-spread","x":950,"y":1020,"wires":[]},{"id":"5b3bd95.2d34fa8","type":"change","z":"7f549965.023648","name":"id/operation","rules":[{"t":"set","p":"id/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1210,"y":1100,"wires":[[]]},{"id":"f33fdee9.29d988","type":"change","z":"7f549965.023648","name":"temp/operation","rules":[{"t":"set","p":"temp/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1220,"y":1160,"wires":[[]]},{"id":"444dfaa5.aa962c","type":"change","z":"7f549965.023648","name":"hum/operation","rules":[{"t":"set","p":"hum/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1220,"y":1220,"wires":[[]]},{"id":"e39a65b7.99e33","type":"change","z":"7f549965.023648","name":"time/operation","rules":[{"t":"set","p":"time/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1220,"y":1280,"wires":[[]]},{"id":"d2f97f22.3214e8","type":"gate","z":"7f549965.023648","name":"gate","controlTopic":"control","defaultState":"closed","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","persist":false,"x":570,"y":1640,"wires":[["db1d034f.d85128"]]},{"id":"db1d034f.d85128","type":"counter","z":"7f549965.023648","name":"","init":"0","step":"1","lower":null,"upper":null,"mode":"increment","outputs":2,"x":718.499906539917,"y":1639.4167966842651,"wires":[["9727793f.630d58","e5dae6c0.f6fbb","d17abb2a.a864f"],["9f82f967.ba4db"]]},{"id":"9727793f.630d58","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":900,"y":1700,"wires":[]},{"id":"6453ba8b.b52f64","type":"inject","z":"7f549965.023648","name":"Reset","props":[{"p":"payload","v":"0","vt":"str"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":false,"topic":"","payload":"0","payloadType":"str","x":210,"y":1460,"wires":[["6b67cd92.795bfc"]]},{"id":"6b67cd92.795bfc","type":"function","z":"7f549965.023648","name":"Reset Counter","func":"msg.reset=msg.payload\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":1460,"wires":[["db1d034f.d85128"]]},{"id":"59f7ed81.c1f3e4","type":"function","z":"7f549965.023648","name":"compareTime","func":"const set_time_go = global.get(\"time/operation\");\nconst run_time_go = global.get(\"Run_Time/operation\");\n//const override_go = global.get(\"Auto/Manual_switch\");\nconst override_go = global.get(\"Auto/Manual_switch\") || 0;\nconst fanAMCount = global.get(\"AutoManual_fan\");\n//var x = flow.get('Set_Time');\n//var y = flow.get('Run_Time');\n//(override != 1 && timer_status === \"open\")\nvar Set_Time_go = Number(set_time_go); //convert to a number\nvar Run_TimeN_go = Number(run_time_go); //convert to a number\n \n var count = Set_Time_go*60*60;\n if(override_go !== 1 && fanAMCount !== 1 && count > Run_TimeN_go){\n msg.payload = \"open\";\n msg.topic = \"control\"\n return [msg, null];\n }\n else if (override_go !== 1 && fanAMCount !== 1 && count < Run_TimeN_go)\n {\n msg.payload = \"close\";\n msg.topic = \"control\"\n return [null, msg];\n}\n else if (override_go !== 0) //&& z < Run_TimeN)\n {\n msg.payload = \"close\";\n msg.topic = \"control\"\n return [null, msg];\n}\n else if (fanAMCount !== 0) //&& z < Run_TimeN)\n {\n msg.payload = \"close\";\n msg.topic = \"control\"\n return [null, msg];\n}\n//return msg;Set_Time","outputs":2,"noerr":0,"initialize":"","finalize":"","x":340,"y":1640,"wires":[["d2f97f22.3214e8","dbe545ee.396b38"],["d2f97f22.3214e8","7fd9570a.6ceb3"]]},{"id":"e5dae6c0.f6fbb","type":"function","z":"7f549965.023648","name":"setPayload","func":"var Run_TimeSet= {\"payload\":msg.payload};\nreturn Run_TimeSet;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":892.5000076293945,"y":1633.7499980926514,"wires":[["742593c.dc7996c"]]},{"id":"4afd49d1.0c69d8","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1280,"y":1640,"wires":[]},{"id":"4cd6c23.fc680bc","type":"inject","z":"7f549965.023648","name":"input","props":[{"p":"payload","v":"1","vt":"num"},{"p":"topic","v":"","vt":"string"}],"repeat":"1","crontab":"","once":false,"topic":"","payload":"1","payloadType":"num","x":170,"y":1640,"wires":[["59f7ed81.c1f3e4"]]},{"id":"d0d0d80a.34f9b","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":400,"y":1500,"wires":[]},{"id":"9ea8ca40.d187e8","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":580,"y":1720,"wires":[]},{"id":"d17abb2a.a864f","type":"function","z":"7f549965.023648","name":"[s] to [hh:mm:ss]","func":"// Message from preceeding node is in seconds - should be less than 24 hours (86400 seconds).\nvar time = (new Date(msg.payload * 1000)).toUTCString().match(/(\\d\\d:\\d\\d:\\d\\d)/)[0];\n// Pass on the string to the next node, what ever that may be. (groov Data Store for example).\nmsg.payload = time;\nreturn msg;","outputs":1,"noerr":0,"x":892.8571586608887,"y":1580.8927869796753,"wires":[["d45b348e.4854a"]]},{"id":"d45b348e.4854a","type":"ui_text","z":"7f549965.023648","group":"4a160fd4.647de8","order":3,"width":0,"height":0,"name":"","label":"Running Time","format":"{{msg.payload}}","layout":"row-spread","x":1106.7144203186035,"y":1580.257938861847,"wires":[]},{"id":"742593c.dc7996c","type":"change","z":"7f549965.023648","name":"SetRun_Time","rules":[{"t":"set","p":"Run_Time/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1080,"y":1640,"wires":[["4afd49d1.0c69d8","cd61c86d.b17a6"]]},{"id":"7fd9570a.6ceb3","type":"change","z":"7f549965.023648","name":"SetTimeReset","rules":[{"t":"set","p":"reset/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":1720,"wires":[["9ea8ca40.d187e8"]]},{"id":"dbe545ee.396b38","type":"change","z":"7f549965.023648","name":"SetTimeReset","rules":[{"t":"set","p":"reset/operation","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":1580,"wires":[["d0d0d80a.34f9b"]]},{"id":"9f82f967.ba4db","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":840,"y":1780,"wires":[]},{"id":"cd61c86d.b17a6","type":"function","z":"7f549965.023648","name":"compareTime","func":"const set_time = global.get(\"time/operation\");\nconst run_time = global.get(\"Run_Time/operation\");\nconst overrideM = global.get(\"Auto/Manual_switch\");\n//var x = flow.get('Set_Time');\n//var y = flow.get('Run_Time');\n//(override != 1 && timer_status === \"open\")\nvar Set_Time = Number(set_time); //convert to a number\nvar Run_TimeN = Number(run_time); //convert to a number\n \n var z = Set_Time*60*60;\n if(overrideM !== 1 && z > Run_TimeN){\n msg.payload = \"open\";\n //msg.topic = \"control\"\n return [msg, null];\n }\n else if (overrideM !== 1 && z === Run_TimeN)\n {\n msg.payload = \"close\";\n //msg.topic = \"control\"\n return [null, msg];\n}\n//return msg;Set_Time","outputs":2,"noerr":0,"initialize":"","finalize":"","x":1220,"y":1720,"wires":[["607c80d5.2c1c68"],["20055bf4.d1547c","1827cd07.74a233"]]},{"id":"607c80d5.2c1c68","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1500,"y":1680,"wires":[]},{"id":"20055bf4.d1547c","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1480,"y":1780,"wires":[]},{"id":"1827cd07.74a233","type":"function","z":"7f549965.023648","name":"","func":"if (msg.payload === \"close\"){\n msg.payload = \"1\";\n return msg;\n \n}\n//return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1210,"y":1820,"wires":[["f21ef486.19d1f8","54142ae5.b74e7c"]]},{"id":"f21ef486.19d1f8","type":"debug","z":"7f549965.023648","name":"Current Payload","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1380,"y":1860,"wires":[]},{"id":"54142ae5.b74e7c","type":"link out","z":"7f549965.023648","name":"restart","links":["a5ddaf69.de95a8"],"x":1215,"y":1880,"wires":[]},{"id":"a5ddaf69.de95a8","type":"link in","z":"7f549965.023648","name":"","links":["54142ae5.b74e7c","8228ab0c.98f1f8"],"x":75,"y":1260,"wires":[["de63a2f6.692db"]]},{"id":"c357d0a1.4e5de","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":540,"y":1340,"wires":[]},{"id":"de63a2f6.692db","type":"delay","z":"7f549965.023648","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":170,"y":1380,"wires":[["a7e5d542.79f458","96ede1e.28e66a"]]},{"id":"96ede1e.28e66a","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":430,"y":1400,"wires":[]},{"id":"b3d80197.6edd88","type":"debug","z":"7f549965.023648","name":"heater","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":610,"y":2080,"wires":[]},{"id":"b4d77f39.63c6e8","type":"debug","z":"7f549965.023648","name":"flap_close","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":620,"y":2400,"wires":[]},{"id":"4c21cf8a.b0d6e8","type":"debug","z":"7f549965.023648","name":"flap_open","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":620,"y":2300,"wires":[]},{"id":"79a22a14.ba7e44","type":"debug","z":"7f549965.023648","name":"spray","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":610,"y":2200,"wires":[]},{"id":"75c2a08b.c3554","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"2","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"1","payloadType":"str","x":190,"y":2240,"wires":[["11b3d18c.d75966"]]},{"id":"6ad84a9.99e17b4","type":"change","z":"7f549965.023648","name":"HeaterState","rules":[{"t":"set","p":"heaterState","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":2040,"wires":[[]]},{"id":"3b040cc1.3cfce4","type":"change","z":"7f549965.023648","name":"SprayState","rules":[{"t":"set","p":"sprayState","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":2160,"wires":[[]]},{"id":"6854c9c2.16aed8","type":"change","z":"7f549965.023648","name":"FlapOpenState","rules":[{"t":"set","p":"flap_openState","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":2260,"wires":[[]]},{"id":"cb1c06b7.4874b","type":"change","z":"7f549965.023648","name":"FlapCloseState","rules":[{"t":"set","p":"flap_closeState","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":2360,"wires":[[]]},{"id":"465a201a.e15138","type":"debug","z":"7f549965.023648","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":750,"y":1420,"wires":[]},{"id":"dd6393fa.11cc4","type":"change","z":"7f549965.023648","name":"Auto/Manual var","rules":[{"t":"set","p":"Auto/Manual_switch","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1200,"y":1400,"wires":[[]]},{"id":"8bcfe203.3e135","type":"change","z":"7f549965.023648","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"Finished","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1270,"y":1360,"wires":[["74be0941.c9085"]]},{"id":"a950093e.a439b","type":"change","z":"7f549965.023648","name":"mode/change","rules":[{"t":"set","p":"mode/change","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1540,"y":1360,"wires":[[]]},{"id":"1aeac7cb.7a12a","type":"change","z":"7f549965.023648","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"Manual","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1240,"y":1320,"wires":[["a950093e.a439b"]]},{"id":"11b3d18c.d75966","type":"function","z":"7f549965.023648","name":"","func":"const set_temp = global.get(\"temperature/set\");\nconst set_hum = global.get(\"humidity/set\");\nconst set_time = global.get(\"time/set\");\nconst live_temp = global.get(\"temperature/live\");\nconst live_hum = global.get(\"humidity/live\");\nconst timer_status = global.get(\"reset/operation\");\n\nconst override = global.get(\"Auto/Manual_switch\") || 0;\nconst fanAM = global.get(\"AutoManual_fan\") || 0;\n\nvar getSetTemp = Number(set_temp);\nvar getSetHum = Number(set_hum);\nvar getLiveTemp = Number(live_temp);\nvar getLiveHum = Number(live_hum);\n\n\n\nvar getSetTempMax = getSetTemp + 5;\nvar getSetHumMax = getSetHum + 5;\nvar getLiveTempMax = getLiveTemp + 7;\nvar getLiveHumMax = getLiveHum + 10;\n\nvar on = 0;\nvar off = 1;\n\n\nvar heater = 1;\nvar spray = 1;\nvar flapO = 1;\nvar falpC = 1;\nvar modeO = 0;\n\nif (override != 1 && fanAM != 1 && timer_status === \"open\") {\n \n //Mode 1\n if(getLiveTemp+2 < getSetTemp && getLiveHum+2 < getSetHum){\n \n heater = { payload:on, topic:\"heater_on\" };\n spray = { payload:on, topic:\"spray_on\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:on, topic:\"flap_close_on\" };\n modeO = { payload:1, topic:\"Mode_01\" };\n \n }\n \n //Mode 2\n else if(getLiveTemp+2 < getSetTemp && (getLiveHum > getSetHum && getLiveHum < getSetHumMax)){\n \n heater = { payload:on, topic:\"heater_on\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:on, topic:\"flap_close_on\" };\n modeO = { payload:2, topic:\"Mode_02\" };\n \n }\n \n //Mode 3\n else if(getLiveTemp >= getSetTemp && getLiveHum+2 <= getSetHum){\n \n heater = { payload:off, topic:\"heater_off\" };\n spray = { payload:on, topic:\"spray_on\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:on, topic:\"flap_close_on\" };\n modeO = { payload:3, topic:\"Mode_03\" };\n \n }\n \n //Mode 4\n else if((getLiveHum > getSetHum && getLiveHum < getSetHumMax) && getLiveTemp > getSetTemp){\n \n //x >= min && x <= max\n \n heater = { payload:off, topic:\"heater_off\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:on, topic:\"flap_open_on\" };\n modeO = { payload:4, topic:\"Mode_04\" };\n \n }\n \n //Mode 5\n else if(getLiveHum > getSetHumMax+5 && getLiveTemp > getSetTemp+3){\n\n heater = { payload:off, topic:\"heater_off\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:on, topic:\"flap_open_on\" };\n falpC = { payload:off, topic:\"flap_close_off\" };\n modeO = { payload:5, topic:\"Mode_05\" };\n \n } \n \n //Mode 50\n else if(getLiveHum > getSetHumMax+7 && getLiveTemp <= getSetTemp+1){\n\n heater = { payload:on, topic:\"heater_on\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:on, topic:\"flap_open_on\" };\n falpC = { payload:off, topic:\"flap_close_off\" };\n modeO = { payload:50, topic:\"Mode_050\" };\n \n } \n \n else if(getLiveHum > getSetHumMax+2 && getLiveTemp < getSetTemp){\n\n heater = { payload:on, topic:\"heater_on\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:on, topic:\"flap_close_on\" };\n modeO = { payload:6, topic:\"Mode_06\" };\n \n } \n //Mode 6\n// else {\n// heater = { payload:off, topic:\"heater_off\" };\n// spray = { payload:off, topic:\"spray_off\" };\n// flapO = { payload:off, topic:\"flap_open_on\" };\n// falpC = { payload:on, topic:\"flap_close_off\" };\n// modeO = { payload:6, topic:\"Mode_06\" };\n \n// }\n \n \nreturn [heater, spray, flapO, falpC, modeO] ;\n}\nelse if(override != 1 && timer_status === \"close\"){\n heater = { payload:off, topic:\"heater_off\" };\n spray = { payload:off, topic:\"spray_off\" };\n flapO = { payload:off, topic:\"flap_open_off\" };\n falpC = { payload:off, topic:\"flap_close_on\" };\n modeO = { payload:7, topic:\"Mode_07\" };\n return [heater, spray, flapO, falpC, modeO] ;\n }\n\n","outputs":5,"noerr":0,"initialize":"","finalize":"","x":400,"y":2240,"wires":[["6ad84a9.99e17b4","b3d80197.6edd88"],["3b040cc1.3cfce4","79a22a14.ba7e44"],["6854c9c2.16aed8","4c21cf8a.b0d6e8"],["cb1c06b7.4874b","b4d77f39.63c6e8"],["f815134a.3f2898"]]},{"id":"dd0f4579.988678","type":"function","z":"7f549965.023648","name":"","func":"if (msg.payload === \"1\"){\nflow.set(\"lastIdQuery\",0);\nreturn newMsg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":430,"y":880,"wires":[[]]},{"id":"3eb2371.df04bc8","type":"debug","z":"7f549965.023648","name":"clearData","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":980,"y":860,"wires":[]},{"id":"60fe2761.4ee2f8","type":"ui_switch","z":"7f549965.023648","name":"","label":"Heater","tooltip":"","group":"b4026b89.8cfd5","order":2,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"heater","style":"","onvalue":"0","onvalueType":"str","onicon":"","oncolor":"","offvalue":"1","offvalueType":"str","officon":"","offcolor":"","x":470,"y":2620,"wires":[["138f52fc.ec2c45","21b458c8.1978a8"]]},{"id":"21b458c8.1978a8","type":"function","z":"7f549965.023648","name":"","func":"const Temp_topic = msg.topic;\nconst Temp_payload = msg.payload;\nconst overrideManual = global.get(\"Auto/Manual_switch\") || 0;\n//const fanstate = global.get(\"FanState\");\nif (overrideManual !== 0) {\n if (Temp_topic === \"heater\" && Temp_payload === \"0\") {\n msg.payload = 0;\n global.set(\"heaterState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"heater\" && Temp_payload === \"1\") {\n msg.payload = 1;\n global.set(\"heaterState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"spray\" && Temp_payload === \"0\") {\n msg.payload = 0;\n global.set(\"sprayState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"spray\" && Temp_payload === \"1\") {\n msg.payload = 1;\n global.set(\"sprayState\", msg.payload);\n return msg;\n// } else if(Temp_topic === \"fancw\" && Temp_payload === \"0\") {\n// msg.payload = 0;\n// global.set(\"fancwState\", msg.payload);\n// return msg;\n// } else if(Temp_topic === \"fancw\" && Temp_payload === \"1\") {\n// msg.payload = 1;\n// global.set(\"fancwState\", msg.payload);\n// return msg;\n// } else if(Temp_topic === \"fanccw\" && Temp_payload === \"0\") {\n// msg.payload = 0;\n// global.set(\"fanccwState\", msg.payload);\n// return msg; \n// } else if(Temp_topic === \"fanccw\" && Temp_payload === \"1\") {\n// msg.payload = 1;\n// global.set(\"fanccwState\", msg.payload);\n// return msg; \n } else if(Temp_topic === \"flap/open\" && Temp_payload === \"0\") {\n msg.payload = 0;\n global.set(\"flap_openState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"flap/open\" && Temp_payload === \"1\") {\n msg.payload = 1;\n global.set(\"flap_openState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"flap/close\" && Temp_payload === \"0\") {\n msg.payload = 0;\n global.set(\"flap_closeState\", msg.payload);\n return msg;\n } else if(Temp_topic === \"flap/close\" && Temp_payload === \"1\") {\n msg.payload = 1;\n global.set(\"flap_closeState\", msg.payload);\n return msg;\n } else {\n return null;\n }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":690,"y":2620,"wires":[["94db4bba.e9a758"]]},{"id":"138f52fc.ec2c45","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":550,"y":2540,"wires":[]},{"id":"94db4bba.e9a758","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":810,"y":2560,"wires":[]},{"id":"1134b6d.5be8ec9","type":"ui_switch","z":"7f549965.023648","name":"","label":"Spray","tooltip":"","group":"b4026b89.8cfd5","order":3,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"spray","style":"","onvalue":"0","onvalueType":"str","onicon":"","oncolor":"","offvalue":"1","offvalueType":"str","officon":"","offcolor":"","x":470,"y":2700,"wires":[["21b458c8.1978a8"]]},{"id":"92eb93df.c8b5e","type":"ui_switch","z":"7f549965.023648","name":"","label":"Flap_open","tooltip":"","group":"b4026b89.8cfd5","order":5,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"flap/open","style":"","onvalue":"0","onvalueType":"str","onicon":"","oncolor":"","offvalue":"1","offvalueType":"str","officon":"","offcolor":"","x":470,"y":2800,"wires":[["21b458c8.1978a8"]]},{"id":"3e564075.52b62","type":"ui_switch","z":"7f549965.023648","name":"","label":"Flap_close","tooltip":"","group":"b4026b89.8cfd5","order":4,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"flap/close","style":"","onvalue":"0","onvalueType":"str","onicon":"","oncolor":"","offvalue":"1","offvalueType":"str","officon":"","offcolor":"","x":490,"y":2900,"wires":[["21b458c8.1978a8"]]},{"id":"3cb04750.5cdd38","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"1","payloadType":"str","x":290,"y":2620,"wires":[["60fe2761.4ee2f8","1134b6d.5be8ec9","92eb93df.c8b5e","3e564075.52b62","3bfb6319.d51c04"]]},{"id":"3bfb6319.d51c04","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":370,"y":2540,"wires":[]},{"id":"d6ebd569.efaee","type":"function","z":"7f549965.023648","name":"Heater","func":"const heater = global.get(\"heaterState\");\nvar heaterS = heater.toString();\nmsg.payload =heaterS ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":290,"y":2680,"wires":[["60fe2761.4ee2f8"]]},{"id":"20a2ace9.bc6be4","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"2","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":230,"y":2720,"wires":[["d6ebd569.efaee","9427a733.c23fb8","e65a0e52.85e428","9627444.4bb6e38"]]},{"id":"9427a733.c23fb8","type":"function","z":"7f549965.023648","name":"Spray","func":"const spray = global.get(\"sprayState\");\nvar sprayS = spray.toString();\nmsg.payload =sprayS ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":270,"y":2780,"wires":[["1134b6d.5be8ec9"]]},{"id":"e65a0e52.85e428","type":"function","z":"7f549965.023648","name":"Flap Close","func":"const flapC = global.get(\"flap_closeState\");\nvar flapCS = flapC.toString();\nmsg.payload =flapCS ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":290,"y":2900,"wires":[["3e564075.52b62"]]},{"id":"9627444.4bb6e38","type":"function","z":"7f549965.023648","name":"Flap Open","func":"const flapO = global.get(\"flap_openState\");\nvar flapOS = flapO.toString();\nmsg.payload =flapOS ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":290,"y":2840,"wires":[["92eb93df.c8b5e"]]},{"id":"63f85b3.a297324","type":"function","z":"7f549965.023648","name":"","func":"const h = global.get(\"reset/operation\") || 0;\nmsg.payload =h ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1060,"y":2760,"wires":[["3c902110.c79316"]]},{"id":"dee357e0.e9aa7","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":890,"y":2760,"wires":[["63f85b3.a297324"]]},{"id":"3c902110.c79316","type":"debug","z":"7f549965.023648","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1250,"y":2760,"wires":[]},{"id":"ec84e6f6.ec1d78","type":"mysql","z":"7f549965.023648","mydb":"c4a47a80.35354","name":"","x":810,"y":500,"wires":[[]]},{"id":"265331aa.e43afe","type":"function","z":"7f549965.023648","name":"BFIDC_Dryer_1_idata_nput","func":"const set_sequence = global.get(\"sequence/set\");\nconst set_temp = global.get(\"temperature/set\");\nconst set_hum = global.get(\"humidity/set\");\nconst set_time = global.get(\"time/set\");\n\nvar newMsg = {\n \"topic\": \"INSERT INTO bfidc.BFIDC_Dryer_1_data (`id`,`Set_Temperature`,`Set_Humidity`,`Set_Time`) VALUES ( \" + set_sequence + \",\" + set_temp + \", \" + set_hum + \",\" + set_time + \")\"\n }\n\nreturn newMsg;\n//INSERT INTO `processed_input`(`order_id`, `total_small_size`, ` total_medium_size`, ` total_large_size`, ` total_xl_size`, `small_card_qty`, `medium_card_qty`, `large_card_qty`, `xl_card_qty`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n//INSERT INTO `operator_input`(`order_id`, `buyer_name`, `color`, `small_size`, `medium_size`, `large_size`, `xl_size`, `no_of_ply`, `bundle_size`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9])\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":520,"wires":[["ec84e6f6.ec1d78"]]},{"id":"ac83afd9.081d8","type":"inject","z":"7f549965.023648","name":"input","repeat":"1","crontab":"","once":false,"topic":"","payload":"1","payloadType":"num","x":670,"y":1480,"wires":[["d2f97f22.3214e8"]]},{"id":"188d701b.0f0698","type":"inject","z":"7f549965.023648","name":"Start","props":[{"p":"payload","v":"open","vt":"str"},{"p":"topic","v":"control","vt":"string"}],"repeat":"","crontab":"","once":false,"topic":"control","payload":"open","payloadType":"str","x":671.2500057220459,"y":1518.7499995231628,"wires":[["d2f97f22.3214e8"]]},{"id":"4f21d4dd.9913e4","type":"inject","z":"7f549965.023648","name":"Stop","repeat":"","crontab":"","once":false,"topic":"control","payload":"close","payloadType":"str","x":673.000057220459,"y":1561.5000987052917,"wires":[["d2f97f22.3214e8"]]},{"id":"caa0b6fe.6cf8d","type":"comment","z":"7f549965.023648","name":"Erase all data by using clearData command","info":"","x":852,"y":709,"wires":[]},{"id":"f9b57f19.b2f08","type":"inject","z":"7f549965.023648","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":700,"wires":[[]]},{"id":"a2f2c253.a61048","type":"inject","z":"7f549965.023648","name":"auto/manual","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"0.5","topic":"","payload":"0","payloadType":"str","x":110,"y":140,"wires":[["427e9dbe.23822c","d5663665.e34b3","5bcf4e96.99949","a8847c24.ad3de8"]]},{"id":"f815134a.3f2898","type":"debug","z":"7f549965.023648","name":"Mode","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":610,"y":2460,"wires":[]},{"id":"c4a47a80.35354","type":"MySQLdatabase","name":"BFIDC","host":"localhost","port":"3306","db":"bfidc","tz":""},{"id":"9f56af9e.065a88","type":"ui_group","name":"Sequence Table","tab":"6e79199b.0159e","order":3,"disp":true,"width":7,"collapse":true},{"id":"982b11fd.235eb","type":"ui_group","name":"User Input","tab":"6e79199b.0159e","order":2,"disp":true,"width":5,"collapse":true},{"id":"4a160fd4.647de8","type":"ui_group","name":"Admin","tab":"6e79199b.0159e","order":4,"disp":true,"width":5,"collapse":true},{"id":"b4026b89.8cfd5","type":"ui_group","name":"Machine Operation","tab":"6e79199b.0159e","order":5,"disp":true,"width":"5","collapse":true},{"id":"6e79199b.0159e","type":"ui_tab","name":"Dryer one","icon":"fa-table","order":4,"disabled":false,"hidden":false}]