[{"id":"27cb94a2.7259bc","type":"tab","label":"NETIO AN49c","disabled":false,"info":""},{"id":"4e39cd81.98a8d4","type":"inject","z":"27cb94a2.7259bc","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":40,"wires":[["33546faa.a628c"]]},{"id":"33546faa.a628c","type":"http request","z":"27cb94a2.7259bc","name":"","method":"GET","ret":"txt","url":"http://192.168.101.31/netio.json","tls":"","x":290,"y":40,"wires":[["4eb63a68.6897a4"]]},{"id":"4eb63a68.6897a4","type":"json","z":"27cb94a2.7259bc","name":"","property":"payload","action":"","pretty":false,"x":430,"y":40,"wires":[["95fce278.a56ae"]]},{"id":"e7573f35.8350f","type":"catch","z":"27cb94a2.7259bc","name":"","scope":["33546faa.a628c"],"x":390,"y":100,"wires":[["d589100.d990ef"]]},{"id":"95fce278.a56ae","type":"function","z":"27cb94a2.7259bc","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.Outputs[0].Energy; \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 // convert message to buffer and buffer to msg.payload\n var first_line = \"Coffees: \" + coffees;\n var second_line = \"Last: \" + last_coffee_time;\n var buf1 = Buffer.from([0xFE, 0x01]);\n var buf2 = Buffer.from(first_line);\n var buf3 = Buffer.from([0xFE, 0xC0]);\n var buf4 = Buffer.from(second_line);\n var complete_message = Buffer.concat([buf1, buf2, buf3, buf4]);\n msg.payload = complete_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":[["be58de4e.3b685"]]},{"id":"d589100.d990ef","type":"function","z":"27cb94a2.7259bc","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 // convert message to buffer and buffer to msg.payload\n var first_line = \"Coffees: \" + coffees;\n var second_line = \"Last: \" + last_coffee_time;\n var buf1 = Buffer.from([0xFE, 0x01]);\n var buf2 = Buffer.from(first_line);\n var buf3 = Buffer.from([0xFE, 0xC0]);\n var buf4 = Buffer.from(second_line);\n var complete_message = Buffer.concat([buf1, buf2, buf3, buf4]);\n msg.payload = complete_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":[["45e75fee.88aa8"]]},{"id":"be58de4e.3b685","type":"debug","z":"27cb94a2.7259bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":40,"wires":[]},{"id":"45e75fee.88aa8","type":"debug","z":"27cb94a2.7259bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":100,"wires":[]}]