Advertisement
Guest User

Untitled

a guest
May 26th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 49.68 KB | None | 0 0
  1. [{"id":"12b56808.550298","type":"subflow","name":"Automatic Verifier","info":"","category":"","in":[{"x":60,"y":60,"wires":[{"id":"a4ac539d.659a4"}]}],"out":[{"x":1000,"y":240,"wires":[{"id":"6ce87221.eefb5c","port":0},{"id":"21c3b68c.0c336a","port":0}]}]},{"id":"46df7611.b94488","type":"file in","z":"12b56808.550298","name":"Read File","filename":"C:\\OSGiMachineLearningModule\\CSVData.csv","format":"utf8","chunk":false,"sendError":true,"x":200,"y":100,"wires":[["c71e7782.2b4008"]]},{"id":"a4ac539d.659a4","type":"function","z":"12b56808.550298","name":"Get Location of File","func":"msg.filename = global.get(\"LocationFile\")\nreturn msg;","outputs":1,"noerr":0,"x":230,"y":60,"wires":[["46df7611.b94488"]]},{"id":"a34b0882.cd6d28","type":"function","z":"12b56808.550298","name":"Prepare data","func":"\n\n//Maximum -- Last position\nvar max = msg.payload[msg.payload.length - 1].daily_steps;\n\n\n//Current\nvar current = msg.payload[msg.payload.length - 1].daily_steps - msg.payload[0].daily_steps;\n\n\n//Convert the Week\nvar dayOfWeek = new Date(msg.payload[0].date).getDay();\ndayOfWeek = isNaN(dayOfWeek) ? null : ['Sunday', 'Monday', 'Tuesday',\n'Wednesday', 'Thursday', 'Friday', 'Saturday'][dayOfWeek];\ndayOfWeek = ['Sunday', 'Monday', 'Tuesday',\n'Wednesday', 'Thursday', 'Friday', 'Saturday'].indexOf(dayOfWeek);\n\n//Get Hour to input\nvar hour = new Date(msg.payload[0].date).getHours();\n\n//Get Minutes\nvar minutes = new Date(msg.payload[0].date).getMinutes();\nif(minutes < 30){\n minute = 0;\n}else{\n minute = 30;\n}\n\n//Get Standard Deviation/Variation\nvar avg = current/msg.payload.length;\nvar variancia = 0;\nfor (var i = 0; i < msg.payload.length; i++) {\n variancia += (avg - msg.payload[i].daily_steps) * (avg - msg.payload[i].daily_steps);\n}\nvariancia = variancia/msg.payload.length;\n\nvar desvio = Math.sqrt(variancia);\n\n\nmsg.payload = [[hour, minute, desvio, variancia, current, max]];\n\nreturn msg;","outputs":1,"noerr":0,"x":210,"y":180,"wires":[["6ce87221.eefb5c","21c3b68c.0c336a"]]},{"id":"c71e7782.2b4008","type":"csv","z":"12b56808.550298","name":"Convert To CSV","sep":",","hdrin":true,"hdrout":"","multi":"mult","ret":"\\n","temp":"","skip":"0","x":220,"y":140,"wires":[["a34b0882.cd6d28"]]},{"id":"21c3b68c.0c336a","type":"predictor","z":"12b56808.550298","name":"DecisionTree Predictor","modelPath":"C:\\OSGiMachineLearningModule\\models","modelName":"dtc.b","x":420,"y":280,"wires":[["5d860b77.59ec24"],["eb96d9b6.05d9b8"]]},{"id":"5d860b77.59ec24","type":"debug","z":"12b56808.550298","name":"Result","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":850,"y":173,"wires":[]},{"id":"6ce87221.eefb5c","type":"predictor","z":"12b56808.550298","name":"RandomForest Predictor","modelPath":"C:\\OSGiMachineLearningModule\\models","modelName":"rfc.b","x":430,"y":180,"wires":[["5d860b77.59ec24"],["eb96d9b6.05d9b8"]]},{"id":"eb96d9b6.05d9b8","type":"debug","z":"12b56808.550298","name":"Error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":855,"y":287,"wires":[]},{"id":"bdb4bd75.7a18","type":"subflow","name":"Send","info":"","category":"","in":[{"x":50,"y":30,"wires":[{"id":"cb6a3d81.70d43"}]}],"out":[]},{"id":"e062fece.57cab","type":"tcp request","z":"bdb4bd75.7a18","server":"","port":"","out":"immed","splitc":" ","name":"","x":490,"y":40,"wires":[["cf7dff5f.c5633"]]},{"id":"cb6a3d81.70d43","type":"switch","z":"bdb4bd75.7a18","name":"Send?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":180,"y":60,"wires":[["4a8226c3.cb5e48"],["2a359958.915046"]]},{"id":"4a8226c3.cb5e48","type":"function","z":"bdb4bd75.7a18","name":"Get IP & PORT","func":"msg.host = global.get(\"IPAddress\");\nmsg.port = global.get(\"PortNumber\");\nmsg.payload = \"sendInfo\";\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":40,"wires":[["e062fece.57cab"]]},{"id":"2a359958.915046","type":"function","z":"bdb4bd75.7a18","name":"No Need to send; Debugging","func":"msg.payload = \"No need to send\";\n\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":80,"wires":[["cf7dff5f.c5633"]]},{"id":"cf7dff5f.c5633","type":"debug","z":"bdb4bd75.7a18","name":"A Debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":650,"y":80,"wires":[]},{"id":"3c0c071e.3522b8","type":"subflow","name":"Manual Testing","info":"","category":"","in":[{"x":40,"y":60,"wires":[{"id":"5f515c76.437e44"}]}],"out":[{"x":780,"y":53,"wires":[{"id":"94b17ee4.5e237","port":0}]}]},{"id":"94b17ee4.5e237","type":"predictor","z":"3c0c071e.3522b8","name":"decision tree classifier predictor","modelPath":"D:\\Mestrado CM\\SaveStuffHere\\models","modelName":"dtc.b","x":430,"y":60,"wires":[["65480635.8e9258"],["1acb4682.f50aa9"]]},{"id":"1acb4682.f50aa9","type":"debug","z":"3c0c071e.3522b8","name":"error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":870,"y":120,"wires":[]},{"id":"45e08197.f01d1","type":"function","z":"3c0c071e.3522b8","name":"testValue","func":"return {\n payload: [[23,30,3,0,1000]]\n};\n\n//manda os parametros, não tão certos","outputs":1,"noerr":0,"x":180,"y":60,"wires":[["94b17ee4.5e237"]]},{"id":"206088ff.766048","type":"predictor","z":"3c0c071e.3522b8","name":"random forest classifier predictor","modelPath":"C:\\OSGiMachineLearningModule\\models","modelName":"rfc.b","x":430,"y":140,"wires":[["65480635.8e9258"],["1acb4682.f50aa9"]]},{"id":"5f515c76.437e44","type":"function","z":"3c0c071e.3522b8","name":"testValue","func":"return {\n payload: [[23,30,3,0,0,0,1000]]\n};","outputs":1,"noerr":0,"x":180,"y":140,"wires":[["206088ff.766048"]]},{"id":"65480635.8e9258","type":"debug","z":"3c0c071e.3522b8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":100,"wires":[]},{"id":"7662bdf6.cd5724","type":"subflow","name":"Decision Tree","info":"","category":"","in":[{"x":40,"y":40,"wires":[{"id":"17509716.e9ad29"}]}],"out":[]},{"id":"1560d85f.dddd38","type":"debug","z":"7662bdf6.cd5724","name":"error","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":390,"y":120,"wires":[]},{"id":"b0751181.0b7ae","type":"predictor","z":"7662bdf6.cd5724","name":"DecisionTree Predictor","modelPath":"C:\\OSGiMachineLearningModule\\models","modelName":"dtc.b","x":480,"y":433,"wires":[["7485af28.51d3e"],["77313afd.cc96d4"]]},{"id":"e92031d.a6213d","type":"decision tree classifier","z":"7662bdf6.cd5724","name":"DecisionTree trainer","savePath":"C:\\OSGiMachineLearningModule\\models","saveName":"dtc.b","maxDepth":"","criterion":"gini","splitter":"best","x":200,"y":200,"wires":[["1a365ac1.296175","13a680fb.16ddff"],["1560d85f.dddd38"]]},{"id":"7485af28.51d3e","type":"assessment","z":"7662bdf6.cd5724","name":"Assess by Accuracy","score":"accuracy_score","x":753,"y":340,"wires":[["eb619d20.00c8f"],["77313afd.cc96d4"]]},{"id":"1a365ac1.296175","type":"load dataset","z":"7662bdf6.cd5724","name":"Load Dataset - Testing","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset","datasetName":"","partition":"test.csv","input":false,"output":true,"x":220,"y":340,"wires":[["7485af28.51d3e"],["77313afd.cc96d4"]]},{"id":"13a680fb.16ddff","type":"load dataset","z":"7662bdf6.cd5724","name":"Loading Dataset - Testing","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset","datasetName":"","partition":"test.csv","input":true,"output":false,"x":230,"y":440,"wires":[["b0751181.0b7ae"],["77313afd.cc96d4"]]},{"id":"77313afd.cc96d4","type":"debug","z":"7662bdf6.cd5724","name":"Some Error Occured","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1042,"y":440,"wires":[]},{"id":"eb619d20.00c8f","type":"debug","z":"7662bdf6.cd5724","name":"Resut of the Assessment","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1050,"y":334,"wires":[]},{"id":"17509716.e9ad29","type":"load dataset","z":"7662bdf6.cd5724","name":"Load Dataset - Training","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset\\","datasetName":"","partition":"train.csv","input":true,"output":true,"x":210,"y":40,"wires":[["e92031d.a6213d"],["1560d85f.dddd38"]]},{"id":"25fd84c1.1ee81c","type":"subflow","name":"Random Forest","info":"","category":"","in":[{"x":60,"y":40,"wires":[{"id":"c308487e.af7088"}]}],"out":[]},{"id":"c308487e.af7088","type":"load dataset","z":"25fd84c1.1ee81c","name":"Load Dataset - Training","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset\\","datasetName":"","partition":"train.csv","input":true,"output":true,"x":230,"y":40,"wires":[["32f6a3ce.2936cc"],["2d07126d.38b42e"]]},{"id":"32f6a3ce.2936cc","type":"random forest classifier","z":"25fd84c1.1ee81c","name":"RandomForest Trainer","savePath":"C:\\OSGiMachineLearningModule\\models","saveName":"rfc.b","criterion":"gini","numTrees":"","maxDepth":"","x":240,"y":180,"wires":[["6feb5f1b.2048b","52a89b81.496004"],["2d07126d.38b42e"]]},{"id":"1faebddd.80ae72","type":"predictor","z":"25fd84c1.1ee81c","name":"RandomForest Predictor","modelPath":"C:\\OSGiMachineLearningModule\\models","modelName":"rfc.b","x":490,"y":440,"wires":[["fd0d89a0.adf4a8"],["56ba5cd8.9c5394"]]},{"id":"fd0d89a0.adf4a8","type":"assessment","z":"25fd84c1.1ee81c","name":"Assess by Accuracy","score":"accuracy_score","x":774,"y":359,"wires":[["4d8f9e93.ed281"],["56ba5cd8.9c5394"]]},{"id":"6feb5f1b.2048b","type":"load dataset","z":"25fd84c1.1ee81c","name":"Load Dataset - Testing","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset","datasetName":"","partition":"test.csv","input":false,"output":true,"x":260,"y":366,"wires":[["fd0d89a0.adf4a8"],["56ba5cd8.9c5394"]]},{"id":"52a89b81.496004","type":"load dataset","z":"25fd84c1.1ee81c","name":"Load Dataset - Testing","datasetFolder":"C:\\OSGiMachineLearningModule\\sedentarismDataset","datasetName":"","partition":"test.csv","input":true,"output":false,"x":240,"y":466,"wires":[["1faebddd.80ae72"],["56ba5cd8.9c5394"]]},{"id":"56ba5cd8.9c5394","type":"debug","z":"25fd84c1.1ee81c","name":"Some Error Occured","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1048,"y":467,"wires":[]},{"id":"4d8f9e93.ed281","type":"debug","z":"25fd84c1.1ee81c","name":"Resut of the Assessment","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1050,"y":353,"wires":[]},{"id":"2d07126d.38b42e","type":"debug","z":"25fd84c1.1ee81c","name":"Error","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":430,"y":120,"wires":[]},{"id":"6052da03.021aa4","type":"subflow","name":"Machine Learning","info":"","category":"","in":[{"x":39,"y":55.00000286102295,"wires":[{"id":"2aa47495.2eebcc"}]}],"out":[]},{"id":"2aa47495.2eebcc","type":"subflow:25fd84c1.1ee81c","z":"6052da03.021aa4","name":"","x":221.18402862548828,"y":55.7257022857666,"wires":[]},{"id":"791976fd.fb0e38","type":"subflow:7662bdf6.cd5724","z":"6052da03.021aa4","name":"","x":222.18055725097656,"y":158.76041412353516,"wires":[]},{"id":"cf2aa061.f9b7","type":"subflow","name":"Functions_Inicializer","info":"","category":"","in":[{"x":60,"y":40,"wires":[{"id":"2a77f4f4.6b46bc"}]}],"out":[{"x":400,"y":200,"wires":[{"id":"300340f9.0e7dc","port":0}]}]},{"id":"2a77f4f4.6b46bc","type":"function","z":"cf2aa061.f9b7","name":"DetermineNumberSleepTime","func":"global.set('determineNumberSleepTime', function(msg, day) {\n if(msg === undefined || day === undefined){\n global.set('determineNumberSleepTimeResponse', null);\n return;\n }\n if(msg.arrayHoursAux === undefined || msg.finalArray === undefined){\n global.set('determineNumberSleepTimeResponse', null);\n return;\n }\n \n var hoursSeemsToSleep = [];\n var counterHours = 0.0;\n var hourGoneToBed = \"\";\n var hourGotOutBed = \"\";\n \n //Trying to find the number of hours he was inactive.\n //Might require to handle...\n for(var hours in msg.finalArray){\n if (msg.finalArray[hours][day][0] !== undefined){\n if (msg.finalArray[hours][day][0] <= global.get(\"SleepingMinimum\")) {\n hoursSeemsToSleep.push(hours);\n }\n }\n }\n \n //Is there a link between the 23:30 and the 00:00?\n if (hoursSeemsToSleep.includes(msg.arrayHoursAux[msg.arrayHoursAux.length - 1]) && \n hoursSeemsToSleep.includes(msg.arrayHoursAux[0])){\n //There is. Lets make a loop...\n for (counterHours in msg.arrayHoursAux){\n if(hoursSeemsToSleep.includes(msg.arrayHoursAux[msg.arrayHoursAux.length - counterHours - 1])){\n //Lets check if he appears to be sleeping a lot. Restricting the sleeping timer from 21:30\n if(msg.arrayHoursAux[msg.arrayHoursAux.length - counterHours - 1] !== global.get(\"minimumHour\")){\n hourGoneToBed = msg.arrayHoursAux[msg.arrayHoursAux.length - counterHours - 1] \n }else{\n break;\n }\n }else{\n //Since it starts at 0.\n break;\n }\n }\n }\n \n var hoursIterative = 0;\n for(var init in msg.arrayHoursAux){\n if(msg.arrayHoursAux[init] == hoursSeemsToSleep[hoursIterative] && hoursSeemsToSleep[hoursIterative] !== global.get(\"maximumHour\")){\n //It has slept through the moment\n hoursIterative++;\n counterHours++\n hourGotOutBed = msg.arrayHoursAux[init]\n }else{\n if(counterHours === 0){\n //ignore\n }else{\n //Is hourGoneToBed not defined?\n if (hourGoneToBed === \"\"){\n //It means that we don't have the link between 00:00 and 23:30.\n hourGoneToBed = msg.arrayHoursAux[init - hoursIterative]\n }\n break; \n }\n }\n }\n var result = [hourGoneToBed, hourGotOutBed, counterHours/2];\n global.set('determineNumberSleepTimeResponse', result);\n})\n\n/* Original function\nfunction determineNumberSleepTime(day){\n var hoursSeemsToSleep = [];\n \n var i = 0;\n var hourGoneToBed = \"\";\n var hourGotOutBed = \"\";\n \n //Trying to find the number of hours he was inactive.\n //Might require to handle...\n for(var hours in msg.finalArray){\n if (msg.finalArray[hours][day] !== undefined){\n if (msg.finalArray[hours][day] <= global.get(\"SleepingMinimum\")) {\n hoursSeemsToSleep.push(hours);\n }\n }\n }\n \n //Is there a link between the 23:30 and the 00:00?\n if (hoursSeemsToSleep.includes(msg.arrayHoursAux[msg.arrayHoursAux.length - 1]) && \n hoursSeemsToSleep.includes(msg.arrayHoursAux[0])){\n //There is. Lets make a loop...\n for (i in msg.arrayHoursAux){\n if(hoursSeemsToSleep.includes(msg.arrayHoursAux[msg.arrayHoursAux.length - i - 1])){\n hourGoneToBed = msg.arrayHoursAux[msg.arrayHoursAux.length - i - 1]\n }else{\n //Since it starts at 0.\n break;\n }\n }\n }\n \n var hoursIterative = 0;\n for(var init in msg.arrayHoursAux){\n if(msg.arrayHoursAux[init] == hoursSeemsToSleep[hoursIterative]){\n //It has slept through the moment\n hoursIterative++;\n i++\n hourGotOutBed = msg.arrayHoursAux[init]\n }else{\n if(i === 0){\n //ignore\n }else{\n //Is hourGoneToBed not defined?\n if (hourGoneToBed === \"\"){\n //It means that we don't have the link between 00:00 and 23:30.\n hourGoneToBed = msg.arrayHoursAux[init - hoursIterative]\n }\n break; \n }\n }\n }\n \n return [hourGoneToBed, hourGotOutBed, i];\n}*/\n\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":240,"y":40,"wires":[["5e7bcb2e.6b61c4"]]},{"id":"e2e8b563.2954e8","type":"function","z":"cf2aa061.f9b7","name":"DetermineIfIsSedentary","func":"//Function that verifies if on that moment the individual is being sedentary.\nglobal.set(\"determineIfIsSedentary\", function(msg, bedTime, upTime, valueTime, value) {\n \n var returnValue = 0;\n //Is it below the required steps to classify the 30 mins as \"sedentary\"?\n if (value <= global.get(\"StepsMinimum\")){\n //Is it on Sleep time?\n global.get(\"isBetweenHours\")(msg, bedTime, upTime, valueTime);\n if(global.get(\"isBetweenHoursResponse\")){\n returnValue = false\n }else{\n returnValue = true\n }\n }else{\n returnValue = false\n }\n \n global.set(\"determineIfIsSedentaryResponse\", returnValue);\n})\n/*function determineIfIsSedentary(bedTime, upTime, value){\n //Is it below the required steps to classify the 30 mins as \"sedentary\"?\n if (value <= global.get(\"StepsMinimum\")){\n //Is it on Sleep time?\n if(isBetween(bedTime, upTime, valueTime)){\n return false\n }\n return true\n }\n return false\n}*/\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":230,"y":120,"wires":[["1267ed5e.d732a3"]]},{"id":"5e7bcb2e.6b61c4","type":"function","z":"cf2aa061.f9b7","name":"IsBetweenHours","func":"//Function that will return true or false depending if the time given is between the minimum or maximum.\nglobal.set('isBetweenHours', function(msg, minimum, maximum, valueTime) {\n var returnValue = false;\n\n if (msg === undefined || minimum === undefined || maximum === undefined || valueTime === undefined){\n global.set('isBetweenHoursResponse', null);\n return;\n }\n \n if (msg.finalArray === undefined){\n global.set('isBetweenHoursResponse', null);\n return;\n }\n \n //Do they exist?\n if (msg.finalArray[minimum][0] === undefined || msg.finalArray[maximum][0] === undefined || msg.finalArray[valueTime][0] === undefined){\n global.set('isBetweenHoursResponse', null);\n return;\n }\n \n //Remove duplicates from the list\n var keys = [];\n for (let key in msg.finalArray){\n if (key in keys){\n }else{\n keys.push(key)\n }\n }\n \n //Find element and its position\n var minumumPosition = keys.indexOf(minimum);\n var maximumPosition = keys.indexOf(maximum);\n var valuePosition = keys.indexOf(valueTime);\n \n \n //Over or equal to 00:00\n if (minumumPosition < maximumPosition) {\n if (minumumPosition <= valuePosition && valuePosition <= maximumPosition){\n returnValue = true\n }else{\n returnValue = false\n }\n }\n //Under 23:30\n else{\n if(minumumPosition <= valuePosition){\n //Absolute true. 23:00 <= 23:30, and its always between bed and up, which is always upper than 00:00.\n returnValue = true\n }else{\n if(maximumPosition >= valuePosition){\n //Absolute true. If its lower than the max position, its always lower than 23:30.\n returnValue = true\n }else{\n returnValue = false\n }\n }\n }\n\n global.set('isBetweenHoursResponse', returnValue);\n})\n/* Original Function\n//Function to ajust medium of sleep parameters.\nfunction isBetweenHours(minimum, maximum, valueTime){\n \n //Do they exist?\n if (msg.finalArray[minimum] === undefined || msg.finalArray[maximum] === undefined || msg.finalArray[valueTime] === undefined){\n return null;\n }\n \n //Remove duplicates from the list\n var keys = [];\n for (let key in msg.finalArray){\n if (key in keys){\n }else{\n keys.push(key)\n }\n }\n \n //Find element and its position\n var minumumPosition = keys.indexOf(minimum); node.warn(minumumPosition);\n var maximumPosition = keys.indexOf(maximum); node.warn(maximumPosition);\n var valuePosition = keys.indexOf(valueTime); node.warn(valuePosition);\n \n \n //Over or equal to 00:00\n if (minumumPosition < maximumPosition) {\n if (minumumPosition <= valuePosition && valuePosition <= maximumPosition){\n return true\n }\n return false\n }\n //Under 23:30\n else{\n if(minumumPosition <= valuePosition){\n //Absolute true. 23:00 <= 23:30, and its always between bed and up, which is always upper than 00:00.\n return true\n }else{\n if(maximumPosition >= valuePosition){\n //Absolute true. If its lower than the max position, its always lower than 23:30.\n return true\n }else{\n return false\n }\n }\n }\n} */\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":200,"y":80,"wires":[["e2e8b563.2954e8"]]},{"id":"1267ed5e.d732a3","type":"function","z":"cf2aa061.f9b7","name":"GetDayOfWeek","func":"//Function that verifies if on that moment the individual is being sedentary.\nglobal.set(\"getDayOfWeek\", function(date) {\n \n var dayOfWeek = new Date(date).getDay();\n //node.warn(dayOfWeek)\n dayOfWeek = isNaN(dayOfWeek) ? null : ['Sunday', 'Monday', 'Tuesday',\n 'Wednesday', 'Thursday', 'Friday', 'Saturday'][dayOfWeek];\n global.set(\"getDayOfWeekResponse\", dayOfWeek);\n})\n/*\n// Accepts a Date object or date string that is recognized by the Date.parse() method\nfunction getDayOfWeek(date) {\n var dayOfWeek = new Date(date).getDay(); \n return isNaN(dayOfWeek) ? null : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][dayOfWeek];\n}\n*/\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":200,"y":160,"wires":[["300340f9.0e7dc"]]},{"id":"300340f9.0e7dc","type":"function","z":"cf2aa061.f9b7","name":"GetDayOfWeekNumerical","func":"//Function that verifies if on that moment the individual is being sedentary.\nglobal.set(\"getDayOfWeekNumerical\", function(string) {\n \n var dayOfWeek = ['Sunday', 'Monday', 'Tuesday',\n 'Wednesday', 'Thursday', 'Friday', 'Saturday'].indexOf(string);\n global.set(\"getDayOfWeekNumericalResponse\", dayOfWeek);\n})\nreturn msg;\n\n","outputs":1,"noerr":0,"x":230,"y":200,"wires":[[]]},{"id":"4346b09e.d0af2","type":"subflow","name":"Assign Rest of variables from TextFile","info":"","category":"","in":[{"x":50,"y":40,"wires":[{"id":"f6c1bfa9.5344a"}]}],"out":[{"x":380,"y":440,"wires":[{"id":"4c80aff.71cc35","port":0}]}]},{"id":"f6c1bfa9.5344a","type":"function","z":"4346b09e.d0af2","name":"MinimumValueForIgnore","func":"global.set(\"IgnoreValue\",msg.ArrayOfDefaults[0]);\n\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":40,"wires":[["53eceb2b.090154"]]},{"id":"53eceb2b.090154","type":"function","z":"4346b09e.d0af2","name":"NumberOfDaysTraining","func":"global.set(\"TrainingDays\",msg.ArrayOfDefaults[1]);\n\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":80,"wires":[["306f2f2b.53e32"]]},{"id":"306f2f2b.53e32","type":"function","z":"4346b09e.d0af2","name":"SleepingMinimum","func":"global.set(\"SleepingMinimum\",msg.ArrayOfDefaults[2]);\n\nreturn msg;","outputs":1,"noerr":0,"x":230,"y":120,"wires":[["d69b3d6a.5af6"]]},{"id":"d69b3d6a.5af6","type":"function","z":"4346b09e.d0af2","name":"MinimumStepsPer30Mins","func":"global.set(\"StepsMinimum\",msg.ArrayOfDefaults[3]);\n//5000/(48-16).roof()\n\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":160,"wires":[["95c6a4e6.cfc528"]]},{"id":"95c6a4e6.cfc528","type":"function","z":"4346b09e.d0af2","name":"SedentaryDay","func":"global.set(\"SedentaryDay\",msg.ArrayOfDefaults[4]);\n\nreturn msg;","outputs":1,"noerr":0,"x":220,"y":200,"wires":[["56d6202b.c05a3"]]},{"id":"56d6202b.c05a3","type":"function","z":"4346b09e.d0af2","name":"MinumumOfSedentary","func":"global.set(\"minumumSedentary\",msg.ArrayOfDefaults[5]);\n\nreturn msg;","outputs":1,"noerr":0,"x":240,"y":240,"wires":[["9d9c68bd.7b7f68"]]},{"id":"9d9c68bd.7b7f68","type":"function","z":"4346b09e.d0af2","name":"MaximumHourForSleep","func":"global.set(\"maximumHour\",msg.ArrayOfDefaults[6]);\n\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":280,"wires":[["a5f230dd.ca496"]]},{"id":"a5f230dd.ca496","type":"function","z":"4346b09e.d0af2","name":"MinimumHourForSleep","func":"global.set(\"minimumHour\",msg.ArrayOfDefaults[7]);\n\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":320,"wires":[["76d4fd58.c4d914"]]},{"id":"de014dcd.00121","type":"function","z":"4346b09e.d0af2","name":"PortNumber & IP","func":"global.set(\"PortNumber\",msg.ArrayOfDefaults[8]);\nglobal.set(\"IPAddress\", msg.payload.internalIPv4);\nreturn msg;","outputs":1,"noerr":0,"x":230,"y":400,"wires":[["4c80aff.71cc35"]]},{"id":"4c80aff.71cc35","type":"function","z":"4346b09e.d0af2","name":"LocationFile","func":"global.set(\"LocationFile\",msg.ArrayOfDefaults[9]);\n\nreturn msg;","outputs":1,"noerr":0,"x":210,"y":440,"wires":[[]]},{"id":"76d4fd58.c4d914","type":"ip","z":"4346b09e.d0af2","name":"Get current IP4","https":false,"timeout":"5000","internalIPv4":true,"internalIPv6":false,"publicIPv4":false,"publicIPv6":false,"x":220,"y":360,"wires":[["de014dcd.00121"]]},{"id":"1edf7db0.313a72","type":"subflow","name":"CheckFile","info":"","category":"","in":[{"x":100,"y":60,"wires":[{"id":"d9dd6157.a9826"}]}],"out":[{"x":860,"y":211,"wires":[{"id":"2024a3f8.67a2bc","port":2}]}]},{"id":"d9dd6157.a9826","type":"file in","z":"1edf7db0.313a72","name":"Read File","filename":"C:\\OSGiMachineLearningModule\\FileUsedForConfigsNode-Red.txt","format":"utf8","chunk":false,"sendError":true,"x":420,"y":60,"wires":[["b73e3030.b8b8e"]]},{"id":"b73e3030.b8b8e","type":"switch","z":"1edf7db0.313a72","name":"Does the file exist?","property":"error","propertyType":"msg","rules":[{"t":"nnull"},{"t":"null"}],"checkall":"true","repair":false,"outputs":2,"x":250,"y":120,"wires":[["ba0cd671.afae68"],["61ebfbdd.6035e4"]]},{"id":"35867ab7.94b296","type":"file","z":"1edf7db0.313a72","name":"Write File with Defaults","filename":"C:\\OSGiMachineLearningModule\\FileUsedForConfigsNode-Red.txt","appendNewline":false,"createDir":true,"overwriteFile":"true","x":720,"y":114,"wires":[["d9dd6157.a9826"]]},{"id":"ba0cd671.afae68","type":"function","z":"1edf7db0.313a72","name":"Write","func":"msg.payload = \"MinimumValueForIgnore -- 10\\n\" + \n\"NumberOfDaysTraining -- 3\\n\" + \n\"SleepingMinumum -- 1\\n\" + \n\"MinimumStepsPer30Mins -- 160\\n\" + \n\"SedentaryDay -- 5000\\n\" +\n\"MinimumOfSedentary -- 16\\n\" + \n\"SocketPort -- 9876\\n\" +\n\"MaximumHourForSleep -- 09:00\\n\" +\n\"MinimumHourForSleep -- 22:00\\n\" + \n\"LocationData -- C:\\\\OSGiMachineLearningModule\\\\CSVData.csv\"\n\nmsg.error = null;\n\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":114,"wires":[["35867ab7.94b296"]]},{"id":"61ebfbdd.6035e4","type":"function","z":"1edf7db0.313a72","name":"Determine if its needed a Reset","func":"var stringToCheck = msg.payload;\n\n//Do they exist in the file?\nif(stringToCheck.indexOf(\"MinimumValueForIgnore\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"NumberOfDaysTraining\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"SleepingMinumum\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"MinimumStepsPer30Mins\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"SedentaryDay\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"MinimumOfSedentary\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"MaximumHourForSleep\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"MinimumHourForSleep\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"SocketPort\") == -1){\n msg.NeedsReset = 0;\n}else if(stringToCheck.indexOf(\"LocationData\") == -1){\n msg.NeedsReset = 0;\n}else{\n //They all exist.\n msg.NeedsReset = 1;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":200,"wires":[["2024a3f8.67a2bc"]]},{"id":"2024a3f8.67a2bc","type":"switch","z":"1edf7db0.313a72","name":"Does it need a Reset?","property":"NeedsReset","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":600,"y":200,"wires":[["ba0cd671.afae68"],["226a2ec8.2841d2"],[]]},{"id":"226a2ec8.2841d2","type":"function","z":"1edf7db0.313a72","name":"Determine if its needed a Reset Part 2","func":"var arrayOfValues = msg.payload.split(\"\\n\");\n\nmsg.NeedsReset = 2;\n\nfor(var i = 0; i < arrayOfValues.length; i++){\n //If its empty\n if(arrayOfValues[i].split(\" -- \")[1] === \"\" || arrayOfValues[i].split(\" -- \")[1] === undefined){\n msg.NeedsReset = 1;\n return msg;\n }else{\n //Lets see if the values are on the correct place. Se não existisse, dava -1!\n if(arrayOfValues[i].split(\" -- \")[0].indexOf(\"MinimumValueForIgnore\") !== -1 || \n arrayOfValues[i].split(\" -- \")[0].indexOf(\"NumberOfDaysTraining\") !== -1 || \n arrayOfValues[i].split(\" -- \")[0].indexOf(\"SleepingMinumum\") !== -1 ||\n arrayOfValues[i].split(\" -- \")[0].indexOf(\"MinimumStepsPer30Mins\") !== -1 ||\n arrayOfValues[i].split(\" -- \")[0].indexOf(\"SedentaryDay\") !== -1 ||\n arrayOfValues[i].split(\" -- \")[0].indexOf(\"MinimumOfSedentary\") !== -1 ||\n arrayOfValues[i].split(\" -- \")[0].indexOf(\"SocketPort\") !== -1){\n //Are these values a number? If not, it requires a reset.\n if(isNaN(arrayOfValues[i].split(\" -- \")[1])){\n msg.NeedsReset = 0;\n return msg;\n }\n }else if (arrayOfValues[i].split(\" -- \")[0].indexOf(\"MaximumHourForSleep\") !== -1 || \n arrayOfValues[i].split(\" -- \")[0].indexOf(\"MinimumHourForSleep\") !== -1 ){\n \n //Is this possible of doing? Are we on the correct format?\n if (arrayOfValues[i].split(\" -- \")[1].split(\":\")[1] === \"\" || \n arrayOfValues[i].split(\" -- \")[1].split(\":\")[1] === undefined){\n msg.NeedsReset = 0;\n return msg;\n \n //This is the Hours part. Are these two numbers, splitted by \":\", a number?\n }else if(isNaN(arrayOfValues[i].split(\" -- \")[1].split(\":\")[0]) || isNaN(arrayOfValues[i].split(\" -- \")[1].split(\":\")[1])){\n msg.NeedsReset = 0;\n return msg;\n \n //Are these numbers between 0 and 23, for hours and 00 or 30 in numbers?\n }else if(parseInt(arrayOfValues[i].split(\" -- \")[1].split(\":\")[0]) < 0 || \n parseInt(arrayOfValues[i].split(\" -- \")[1].split(\":\")[0]) > 23 || \n (parseInt(arrayOfValues[i].split(\" -- \")[1].split(\":\")[1]) !== 0 && \n parseInt(arrayOfValues[i].split(\" -- \")[1].split(\":\")[1]) !== 30) ){\n msg.NeedsReset = 0;\n return msg;\n }\n }else if(arrayOfValues[i].split(\" -- \")[0].indexOf(\"LocationData\") !== -1){\n msg.filename = arrayOfValues[i].split(\" -- \")[1];\n }\n }\n}\n\nmsg.ArrayOfDefaults = new Array();\nfor(var j = 0; j < arrayOfValues.length; j++){\n msg.ArrayOfDefaults.push(arrayOfValues[j].split(\" -- \")[1]);\n}\n\nreturn msg; ","outputs":1,"noerr":0,"x":450,"y":280,"wires":[["2024a3f8.67a2bc"]]},{"id":"d9140c0c.49b4a","type":"subflow","name":"Variables_Inicializer","info":"","category":"","in":[{"x":60,"y":60,"wires":[{"id":"daa97bb1.f545d8"}]}],"out":[{"x":480,"y":140,"wires":[{"id":"375d23bf.33aa1c","port":0}]}]},{"id":"daa97bb1.f545d8","type":"function","z":"d9140c0c.49b4a","name":"Aggregate=30","func":"global.set(\"aggregateVariable\",30);\n\nreturn msg;","outputs":1,"noerr":0,"x":200,"y":60,"wires":[["32c1af94.d24bb"]]},{"id":"32c1af94.d24bb","type":"subflow:1edf7db0.313a72","z":"d9140c0c.49b4a","name":"","x":180,"y":100,"wires":[["375d23bf.33aa1c"]]},{"id":"375d23bf.33aa1c","type":"subflow:4346b09e.d0af2","z":"d9140c0c.49b4a","name":"","x":270,"y":140,"wires":[[]]},{"id":"e125a4d6.5af398","type":"subflow","name":"Inicializer","info":"","category":"","in":[{"x":80,"y":80,"wires":[{"id":"fe3c55f7.4379d8"}]}],"out":[{"x":400,"y":120,"wires":[{"id":"6e64b14e.9ce26","port":0}]}]},{"id":"fe3c55f7.4379d8","type":"subflow:d9140c0c.49b4a","z":"e125a4d6.5af398","name":"","x":230,"y":80,"wires":[["6e64b14e.9ce26"]]},{"id":"6e64b14e.9ce26","type":"subflow:cf2aa061.f9b7","z":"e125a4d6.5af398","name":"","x":240,"y":120,"wires":[[]]},{"id":"81d7ee8d.72b8b","type":"subflow","name":"Database Creating","info":"","category":"","in":[{"x":40,"y":40,"wires":[{"id":"5805a191.62149"}]}],"out":[{"x":320,"y":40,"wires":[{"id":"5805a191.62149","port":0}]}]},{"id":"5805a191.62149","type":"create dataset","z":"81d7ee8d.72b8b","name":"Create Dataset","path":"C:\\OSGiMachineLearningModule\\output.csv","saveFolder":"C:\\OSGiMachineLearningModule","saveName":"sedentarismDataset","input":"0,1,2,3,4,5,6","output":"7","trainingPartition":"","shuffle":true,"seed":"","x":180,"y":40,"wires":[[]]},{"id":"aff7cfdd.fcba4","type":"subflow","name":"Before","info":"","category":"","in":[{"x":80,"y":40,"wires":[{"id":"e9d6885e.427528"}]}],"out":[{"x":380,"y":200,"wires":[{"id":"a6e14f8a.4248b","port":0}]}]},{"id":"9ec56f51.aa03e","type":"csv","z":"aff7cfdd.fcba4","name":"Convert into CSV","sep":",","hdrin":true,"hdrout":"","multi":"mult","ret":"\\n","temp":"","skip":"0","x":230,"y":80,"wires":[["8bc363fa.15bb2"]]},{"id":"e9d6885e.427528","type":"file in","z":"aff7cfdd.fcba4","name":"Retreive the inicial database","filename":"C:\\OSGiMachineLearningModule\\inicial.csv","format":"utf8","chunk":false,"sendError":false,"x":260,"y":40,"wires":[["9ec56f51.aa03e"]]},{"id":"8bc363fa.15bb2","type":"function","z":"aff7cfdd.fcba4","name":"Aggregate Array","func":"\n//Start the original Array\nvar arrayHours = startArray();\n\nvar mapDaySteps = {};\n//Map the original Array\nfor (i = 0; i<=47; i++){\n mapDaySteps[\"\" + arrayHours[i]] = Array();\n}\n//Populate Data from the CSV.\nmapDaySteps = populateMap();\n\nmsg.finalArray = mapDaySteps;\nreturn msg;\n\n//Function that is starting the array, by creating positions, with the tags \"Hours:Mins\", from 30 to 30 mins. \nfunction startArray(){\n var mins = 0;\n var whileLoop = true;\n \n arrayHoursAux = Array();\n \n do{\n var hours = Math.floor(mins / 60); \n //Remove the hours (Minutes can only range between 0 and 59)\n var minutes = mins - hours * 60;\n var key = hours + \":\" + minutes;\n \n //If the 1st position is between 0 and 9, lets present it like 01, 02...\n if (key.substring(0, key.indexOf(\":\")).length == 1){\n key = \"0\" + key.substring(0, key.indexOf(\":\")) + \":\" + key.substring(key.indexOf(\":\") + 1, key.length);\n }\n \n //If the 2nd position is between 0 and 9, lets then present it like 01, 02...\n if (key.substring(key.indexOf(\":\") + 1, key.length).length == 1){\n key = key.substring(0, key.indexOf(\":\")) + \":0\" + key.substring(key.indexOf(\":\") + 1, key.length);\n }\n \n arrayHoursAux.push(key);\n \n //1410 since there are 1440 minutes on each day, but it starts on 0.\n if(mins == 1410){\n whileLoop = false;\n }else{\n mins+=30;\n }\n }while(whileLoop);\n \n msg.arrayHoursAux = arrayHoursAux;\n return arrayHoursAux;\n}\n\n//Function that is populating the Map, with the variables that came from the Database.\nfunction populateMap(){\n var auxArray = Array();\n var day = 0;\n var hourPosition = 0;\n \n //Run over all the payload (CSV Data)\n for(i = 0; i<msg.payload.length; i++) {\n //Did we analyze 30 records?\n if (auxArray.length == 30) {\n //We did. Lets create a new Array, so that we can store the Steps and the DayOfWeek\n mapDaySteps[\"\" + arrayHours[hourPosition]].push(Array());\n \n //Push the Steps\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(auxArray.reduce((a,b) => a + b, 0))\n \n //Call the global function GetDayOfWeek, which will convert the date into Tuesday, and so on.\n //Same thing; But for making sure, ill add .split(\"T\")[0]\n global.get(\"getDayOfWeek\")(msg.payload[i-1][\"Timestamp\"].split(\"T\")[0])\n \n //Push the DayOfWeek\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(global.get(\"getDayOfWeekResponse\"))\n \n //Standard Deviation/Variation\n var avg = 0;\n for (var v = 0;v < auxArray.length; v++) {\n avg += auxArray[v];\n }\n avg = avg/auxArray.length;\n var varianca = 0;\n for (var w = 0; w < auxArray.length; w++) {\n varianca += (avg - auxArray[w]) * (avg - auxArray[w]);\n }\n varianca = varianca/auxArray.length;\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(Math.sqrt(varianca)); //DESVIO PADRÃO\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(varianca); //VARIANCIA\n \n //We just created a position; Its time to add this, so that the next 30 minutes are recorded and placed on the next position.\n hourPosition = hourPosition + 1;\n //Has 24Hours passed? (24 * 2 (30 mins iteration!) = 48)\n if (hourPosition == 48){\n //We are in a new day. Lets reset the position of the hours and increment a new day\n hourPosition = 0;\n day = day + 1;\n }\n \n //Lets reset the auxiliaryArray, that is keeping all of the records\n auxArray.length = 0;\n //And add the current step.\n auxArray.push(msg.payload[i].Steps);\n }else{\n //We Still didn't analyzed 30 records. Lets keep adding them.\n auxArray.push(msg.payload[i].Steps);\n }\n }\n \n //We finished the iteration. But, did we clear the AuxArray?\n if (auxArray.length !== 0){\n //Ok, lets add it to the array, the same way we did before.\n mapDaySteps[\"\" + arrayHours[hourPosition]].push(Array());\n \n //Push the Steps\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(auxArray.reduce((a,b) => a + b, 0))\n \n //Call the global function GetDayOfWeek, which will convert the date into Tuesday, and so on.\n //Same thing; But for making sure, ill add .split(\"T\")[0]\n //May not be completely accurate; but since the I ends at the last position, we still need to go to the previous position and insert the date\n global.get(\"getDayOfWeek\")(msg.payload[i-1][\"Timestamp\"].split(\"T\")[0])\n \n //Push the DayOfWeek\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(global.get(\"getDayOfWeekResponse\"))\n \n //Standard Deviation/Variation\n var avg = 0;\n for (var v = 0;v < auxArray.length; v++) {\n avg += auxArray[v];\n }\n avg = avg/auxArray.length;\n var varianca = 0;\n for (var w = 0; w < auxArray.length; w++) {\n varianca += (avg - auxArray[w]) * (avg - auxArray[w]);\n }\n varianca = varianca/auxArray.length;\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(Math.sqrt(varianca));\n mapDaySteps[\"\" + arrayHours[hourPosition]][day].push(varianca);\n \n auxArray.length = 0;\n }\n \n return mapDaySteps;\n}\n","outputs":1,"noerr":0,"x":220,"y":120,"wires":[["8df58b42.216d88"]]},{"id":"a6e14f8a.4248b","type":"file","z":"aff7cfdd.fcba4","name":"Write the output","filename":"C:\\OSGiMachineLearningModule\\output.csv","appendNewline":true,"createDir":false,"overwriteFile":"true","x":220,"y":200,"wires":[[]]},{"id":"8df58b42.216d88","type":"function","z":"aff7cfdd.fcba4","name":"Convert To CSV","func":"\n//Current\n //Hour, Min, Dayweek, DevioPadrão, Variancia, StepsThat30Mins, TotalSteps, ActingSedentary\n\n//Variable that will be used to output to the CSV.\n //CPos0 = Hour, between 00:00 & 23:30 [Splitted into Hour and Minute, on Integers]\n //CPos1 = Day_Week, Integer\n //CPos2 = Steps, from that hour, int\n //CPos3 = Steps, Up to that date, from the day, int\n //CPos4 = ReachedGoal, Boolean, From Pos3\n //CPos5 = NumberOfSeedentaryHitsBy30Minutes, Int\n //CPos? = (Not yet, but)IfWasSedentaryYesterday, Bool, check more often if he is being sedentary, for example cut one more;\n //CPos? = (Not yet, but) Outside/Inside Temperature\n //CPos? = (Not yet, but) Distance?\n //CPos6 = IsSleeping, True or False - Check by hours and the steps -- Re-Check, might be a overkill\n //__TEST__ CPos7 = STEPS MISSING TO REACH GOAL\n //CPosLast = ShouldBeWarned - Acting Sedendary\nvar dataCSV = \"\";\n\n//!Do a chunk of data, when analysing the data of sedentarism! \n//Example - 6 continuous hours of innactivity - Sendentary behavior\n\n//Variable that will accupulate all things that are used here. \n //VPos0 = TotalSteps (Int)\n //VPos1 = DayWeek (String)\n //VPos2 = hoursOfSleep (Int)\n //VPos3 = StartSleep (Int, will range from 0 - 47)\n //VPos4 = EndSleep (Int, will range from 0 - 47)\n //VPos5 = NumberOfSendentary30Minutes (Int)\n //VPos6 = HadSedentaryDay (Int, 0 or 1)\n //VPos7 = WasSedentary (0, 1) [If it has more than _SomethingToBeDecided_ NumberOfSedetary30Minutes in the same day]\nvar mapDayStepsRecords = {};\n//Map the original Array\nfor(var i in msg.finalArray[\"00:00\"]){\n mapDayStepsRecords[\"Day\" + i] = {}\n}\n\nvar sleepTimeArray = []\nvar sedentaryCounter;\n\n\nfor (var innerSize in msg.finalArray[\"00:00\"]){\n sedentaryCounter = 0;\n \n //Get VPos3, VPos4 & VPos2\n global.get('determineNumberSleepTime')(msg, innerSize);\n sleepTimeArray = global.get('determineNumberSleepTimeResponse')\n\n for (var outerSize in msg.finalArray){\n //Did we start the position?\n if (mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] === undefined){\n mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] = (msg.finalArray[outerSize][innerSize][0])\n mapDayStepsRecords[\"Day\" + innerSize][\"DayWeek\"] = 0 \n mapDayStepsRecords[\"Day\" + innerSize][\"HoursOfSleep\"] = 0 \n mapDayStepsRecords[\"Day\" + innerSize][\"StartSleep\"] = 0 \n mapDayStepsRecords[\"Day\" + innerSize][\"EndSleep\"] = 0 \n mapDayStepsRecords[\"Day\" + innerSize][\"NumberOfSedentary30Minutes\"] = 0\n mapDayStepsRecords[\"Day\" + innerSize][\"HadSedentaryDay\"] = 0\n mapDayStepsRecords[\"Day\" + innerSize][\"WasSedentary\"] = 0\n }else{\n //Get VPos0\n mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] = mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] + msg.finalArray[outerSize][innerSize][0]\n }\n //Determine CPos1\n global.get(\"getDayOfWeekNumerical\")(msg.finalArray[outerSize][innerSize][1])\n \n //----TESTING ADDING THE STARDARD DEVIATION & VARIANCIA----\n //Write CPos0, CPos1, CPos2, CPos3\n dataCSV = dataCSV + parseInt(outerSize.split(\":\")[0]) + \",\" + parseInt(outerSize.split(\":\")[1]) + \",\" + global.get(\"getDayOfWeekNumericalResponse\") + \",\" + msg.finalArray[outerSize][innerSize][2] + \",\" + msg.finalArray[outerSize][innerSize][3]+\",\" + msg.finalArray[outerSize][innerSize][0] + \",\" + mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] + \",\"\n \n // Variable commented - It would decrease the accuracy of our Algorithm\n /*\n //Determine and Write CPos4\n if (mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] >= global.get(\"SedentaryDay\")){\n dataCSV = dataCSV + \"1\" + \",\"\n }\n else{\n dataCSV = dataCSV + \"0\" + \",\"\n }\n */\n \n //----TESTING----\n //Start getting VPos5 and CPos5\n global.get(\"determineIfIsSedentary\")(msg, sleepTimeArray[0], sleepTimeArray[1], outerSize, msg.finalArray[outerSize][innerSize][0])\n if(global.get(\"determineIfIsSedentaryResponse\") === true){\n sedentaryCounter = sedentaryCounter + 1\n }\n \n // Variable commented - It would decrease the accuracy of our Algorithm\n //Write CPos5\n //dataCSV = dataCSV + sedentaryCounter + \",\"\n\n //----TESTING----\n //CPOS7\n //in case he exceeds the minimum to not e sedentary\n /*\n var missingSteps = 0\n if(mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] < 5000){\n missingSteps = 5000 - mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"]\n }\n dataCSV = dataCSV + missingSteps +\",\"\n */\n \n //Determine and Write CPosFinal\n if (sedentaryCounter >= global.get(\"minumumSedentary\") && mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] <= global.get(\"SedentaryDay\")){\n dataCSV = dataCSV + \"true\"\n }else{\n dataCSV = dataCSV + \"false\"\n }\n \n dataCSV = dataCSV + \"\\n\"\n }\n \n //Write VPos3, VPos4, VPos2\n mapDayStepsRecords[\"Day\" + innerSize][\"StartSleep\"] = sleepTimeArray[0]\n mapDayStepsRecords[\"Day\" + innerSize][\"EndSleep\"] = sleepTimeArray[1]\n mapDayStepsRecords[\"Day\" + innerSize][\"HoursOfSleep\"] = sleepTimeArray[2]\n \n //Write VPos1\n mapDayStepsRecords[\"Day\" + innerSize][\"DayWeek\"] = msg.finalArray[outerSize][innerSize][1]\n \n //Write VPos5\n mapDayStepsRecords[\"Day\" + innerSize][\"NumberOfSedentary30Minutes\"] = sedentaryCounter\n \n //Determine and Write VPos6\n if (mapDayStepsRecords[\"Day\" + innerSize][\"TotalSteps\"] <= global.get(\"SedentaryDay\")) {\n mapDayStepsRecords[\"Day\" + innerSize][\"HadSedentaryDay\"] = false;\n }else{\n mapDayStepsRecords[\"Day\" + innerSize][\"HadSedentaryDay\"] = true;\n }\n \n //Determine if he is sedentary or not by checking if steps. If he is sleeping, then just put 2 or smth else\n if (mapDayStepsRecords[\"Day\" + innerSize][\"NumberOfSedentary30Minutes\"] >= global.get(\"minumumSedentary\")){\n mapDayStepsRecords[\"Day\" + innerSize][\"WasSedentary\"] = false\n }else{\n mapDayStepsRecords[\"Day\" + innerSize][\"WasSedentary\"] = true\n }\n}\nmsg.totalFinalArray = mapDayStepsRecords;\nmsg.dataFormatedForCSV = dataCSV;\nmsg.payload = msg.dataFormatedForCSV;\nreturn msg;","outputs":1,"noerr":0,"x":220,"y":160,"wires":[["a6e14f8a.4248b"]]},{"id":"df8e7a96.386d78","type":"function","z":"aff7cfdd.fcba4","name":"Add history to entry","func":"var entriesArray = msg.payload.split(\"\\n\")\nnode.warn(msg.payload)\nnode.warn(entriesArray)\nvar historicalEntry = \"\";\nvar cleanEntry = \"\";\n\nfor (var entry in entriesArray)\n{\n var auxCleanEntry = entriesArray[entry].split(\",\");\n \n auxCleanEntry.pop();\n \n for (i = 0; i < auxCleanEntry.length; i++)\n {\n cleanEntry = cleanEntry + auxCleanEntry[i] + \",\";\n }\n //get past registries first - need new csv\n var arrayPast3 = new Array();\n \n //need to bundle 3 past registries\n switch (entry)\n {\n case 0:\n historicalEntry = \"22,30,0,0,0,0,0,23,0,0,0,0,0,0,23,30,0,0,0,0,0\" + cleanEntry + \"\\n\"\n break;\n case 1:\n historicalEntry = \"23,0,0,0,0,0,0,23,30,0,0,0,0,0\" + arrayPast3[arrayPast3.length - 1] + cleanEntry + \"\\n\"\n break;\n case 2:\n historicalEntry = \"23,30,0,0,0,0,0\" + arrayPast3[arrayPast3.length - 2] + arrayPast3[arrayPast3.length - 1]+ cleanEntry + \"\\n\"\n break;\n default:\n historicalEntry = arrayPast3[arrayPast3.length - 3] + arrayPast3[arrayPast3.length - 2] + arrayPast3[arrayPast3.length - 1] + cleanEntry + \"\\n\"\n break;\n \n }\n \n //cleanEntry = cleanEntry + \"\\n\";\n //node.warn(cleanEntry);\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":210,"y":260,"wires":[[]]},{"id":"c8cec4d2.a50418","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"42495cd3.78d204","type":"subflow:aff7cfdd.fcba4","z":"c8cec4d2.a50418","name":"","x":430,"y":180,"wires":[["8aed708b.18943"]]},{"id":"8aed708b.18943","type":"subflow:81d7ee8d.72b8b","z":"c8cec4d2.a50418","name":"","x":590,"y":180,"wires":[["a89c92a9.715e"]]},{"id":"76fd617d.3b554","type":"subflow:e125a4d6.5af398","z":"c8cec4d2.a50418","name":"","x":300,"y":180,"wires":[["42495cd3.78d204"]]},{"id":"a89c92a9.715e","type":"subflow:6052da03.021aa4","z":"c8cec4d2.a50418","name":"","x":790,"y":180,"wires":[]},{"id":"7456a954.fa1488","type":"inject","z":"c8cec4d2.a50418","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":180,"wires":[["76fd617d.3b554"]]},{"id":"4ae1e92d.0c9768","type":"subflow:3c0c071e.3522b8","z":"c8cec4d2.a50418","name":"Manual Testing (Random Forest)","x":480,"y":300,"wires":[["78fa550.66b4aac","c222d6bb.73f068"]]},{"id":"8822e76d.a34dc8","type":"inject","z":"c8cec4d2.a50418","name":"Repeater, 30 mins","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"*/30 0-23 * * *","once":false,"onceDelay":"0.1","x":190,"y":360,"wires":[["7b79bf5e.056f8"]]},{"id":"179b77ab.9895d8","type":"inject","z":"c8cec4d2.a50418","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":280,"wires":[["4ae1e92d.0c9768"]]},{"id":"c222d6bb.73f068","type":"subflow:bdb4bd75.7a18","z":"c8cec4d2.a50418","name":"","x":770,"y":360,"wires":[]},{"id":"7b79bf5e.056f8","type":"subflow:12b56808.550298","z":"c8cec4d2.a50418","name":"","x":430,"y":360,"wires":[["c222d6bb.73f068"]]},{"id":"78fa550.66b4aac","type":"debug","z":"c8cec4d2.a50418","name":"worked","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":740,"y":260,"wires":[]}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement