[{"id":"b613be0a.b3ae5","type":"tab","label":"NETIO AN49d","disabled":false,"info":""},{"id":"86367659.8c85b8","type":"inject","z":"b613be0a.b3ae5","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":40,"wires":[["bcf2964d.13ea38"]]},{"id":"bcf2964d.13ea38","type":"http request","z":"b613be0a.b3ae5","name":"","method":"GET","ret":"txt","url":"http://netio-4all.netio-products.com:8080/netio.xml","tls":"","x":290,"y":40,"wires":[["9010cfa.8c49b3"]]},{"id":"db3f09c4.1caa28","type":"catch","z":"b613be0a.b3ae5","name":"","scope":["bcf2964d.13ea38"],"x":390,"y":100,"wires":[["a150f262.13956"]]},{"id":"4ab5c05b.a6224","type":"function","z":"b613be0a.b3ae5","name":"main logic","func":"//set parameters\nvar total_duration = 82;\nvar min_difference = 45;\nvar max_difference = 55;\nvar post_trigger_waiting = 5;\n//------------------------------------------------------------------------------- \n\n// load flow variables\nvar energy = msg.payload[\"set:Root\"].Outputs[0].Output[0].Energy[0];\nflow.set(\"last_energy_value\", energy); \nvar segment_array = flow.get(\"segment_array\") || []; \nvar coffees = flow.get(\"coffees\") || 0; \nvar last_coffee_time = flow.get(\"last_coffee_time\") || \"00:00\";\nvar failed_segment_counter = flow.get(\"failed_segment_counter\") || 0;\nvar failed_segment_sequence = flow.get(\"failed_segment_sequence\") || true;\n\n// \nif(segment_array.length < total_duration) // fill segment_array with same amount of items as total_duration parameter\n{ \n segment_array.push(energy);\n} \nelse \n{ \n current_segment_difference = segment_array[total_duration - 1] - segment_array[0];\n \n // check if current segment is within parameters\n if(current_segment_difference >= min_difference && current_segment_difference <= max_difference) \n { \n if(failed_segment_counter >= post_trigger_waiting) \n { \n failed_segment_sequence = false; \n failed_segment_counter = 0; \n coffees += 1; \n } \n \n } \n else \n { \n if(failed_segment_sequence === true) \n { \n failed_segment_counter += 1; \n } \n } \n \n segment_array.shift(); // remove first item from array\n segment_array.push(energy); // add last energy value into array\n}\n\n// save parameters as flow variables\nflow.set(\"total_duration\", total_duration);\nflow.set(\"min_difference\", min_difference);\nflow.set(\"max_difference\", max_difference);\nflow.set(\"post_trigger_waiting\", post_trigger_waiting);\n\n// return message and save values in case coffee was counted\nif(coffees > flow.get(\"coffees\"))\n{\n // get time of coffee\n var date = new Date(); \n var hour = date.getHours(); \n hour = (hour < 10 ? \"0\" : \"\") + hour;\n var min = date.getMinutes(); \n min = (min < 10 ? \"0\" : \"\") + min; \n var sec = date.getSeconds(); \n sec = (sec < 10 ? \"0\" : \"\") + sec; \n last_coffee_time = hour + \":\" + min + \":\" + sec; \n \n flow.set(\"segment_array\", segment_array);\n flow.set(\"coffees\", coffees);\n flow.set(\"last_coffee_time\", last_coffee_time);\n flow.set(\"failed_segment_sequence\", failed_segment_sequence);\n flow.set(\"failed_segment_counter\", failed_segment_counter);\n \n // set message as msg.payload \n var message = \"Total number of coffees: \" + coffees + \"\\nLast coffee: \" + last_coffee_time;\n msg.payload = message\n return msg;\n}\n\n// save values in case coffee was not counted\nflow.set(\"segment_array\", segment_array);\nflow.set(\"failed_segment_sequence\", failed_segment_sequence);\nflow.set(\"failed_segment_counter\", failed_segment_counter);","outputs":1,"noerr":0,"x":560,"y":40,"wires":[["9e11beec.4be05"]]},{"id":"a150f262.13956","type":"function","z":"b613be0a.b3ae5","name":"request timeout","func":"//set parameters\nvar total_duration = flow.get(\"total_duration\")\nvar min_difference = flow.get(\"min_difference\")\nvar max_difference = flow.get(\"max_difference\")\nvar post_trigger_waiting = flow.get(\"post_trigger_waiting\")\n//------------------------------------------------------------------------------- \n\n// load flow variables\nvar energy = flow.get(\"last_energy_value\") // load last saved energy value\nflow.set(\"last_energy_value\", energy); \nvar segment_array = flow.get(\"segment_array\") || []; \nvar coffees = flow.get(\"coffees\") || 0; \nvar last_coffee_time = flow.get(\"last_coffee_time\") || \"00:00\";\nvar failed_segment_counter = flow.get(\"failed_segment_counter\") || 0;\nvar failed_segment_sequence = flow.get(\"failed_segment_sequence\") || true;\n\n// \nif(segment_array.length < total_duration) // fill segment_array with same amount of items as total_duration parameter\n{ \n segment_array.push(energy);\n} \nelse \n{ \n current_segment_difference = segment_array[total_duration - 1] - segment_array[0];\n \n // check if current segment is within parameters\n if(current_segment_difference >= min_difference && current_segment_difference <= max_difference) \n { \n if(failed_segment_counter >= post_trigger_waiting) \n { \n failed_segment_sequence = false; \n failed_segment_counter = 0; \n coffees += 1; \n } \n \n } \n else \n { \n if(failed_segment_sequence === true) \n { \n failed_segment_counter += 1; \n } \n } \n \n segment_array.shift(); // remove first item from array\n segment_array.push(energy); // add last energy value into array\n}\n\n// return message and save values in case coffee was counted\nif(coffees > flow.get(\"coffees\"))\n{\n // get time of coffee\n var date = new Date(); \n var hour = date.getHours(); \n hour = (hour < 10 ? \"0\" : \"\") + hour;\n var min = date.getMinutes(); \n min = (min < 10 ? \"0\" : \"\") + min; \n var sec = date.getSeconds(); \n sec = (sec < 10 ? \"0\" : \"\") + sec; \n last_coffee_time = hour + \":\" + min + \":\" + sec; \n \n flow.set(\"segment_array\", segment_array);\n flow.set(\"coffees\", coffees);\n flow.set(\"last_coffee_time\", last_coffee_time);\n flow.set(\"failed_segment_sequence\", failed_segment_sequence);\n flow.set(\"failed_segment_counter\", failed_segment_counter);\n \n // set message as msg.payload \n var message = \"Total number of coffees: \" + coffees + \"\\nLast coffee: \" + last_coffee_time;\n msg.payload = message\n return msg;\n}\n\n// save values in case coffee was not counted\nflow.set(\"segment_array\", segment_array);\nflow.set(\"failed_segment_sequence\", failed_segment_sequence);\nflow.set(\"failed_segment_counter\", failed_segment_counter);","outputs":1,"noerr":0,"x":540,"y":100,"wires":[["ebda2da9.4b231"]]},{"id":"9e11beec.4be05","type":"debug","z":"b613be0a.b3ae5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":40,"wires":[]},{"id":"ebda2da9.4b231","type":"debug","z":"b613be0a.b3ae5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":100,"wires":[]},{"id":"9010cfa.8c49b3","type":"xml","z":"b613be0a.b3ae5","name":"","property":"payload","attr":"","chr":"","x":430,"y":40,"wires":[["4ab5c05b.a6224"]]}]