diff --git a/flow.json b/flow.json index 5e7275f..c03bfee 100644 --- a/flow.json +++ b/flow.json @@ -78,7 +78,7 @@ "id": "6acae0b0.a184", "type": "ui_group", "z": "", - "name": "Calibration (Specific Gravity)", + "name": "Specific Gravity Calibration", "tab": "75f710f5.16d2e", "order": 2, "disp": true, @@ -291,7 +291,7 @@ "id": "c12bcb12.dbd0d8", "type": "ui_group", "z": "", - "name": "Calibration (Temperature)", + "name": "Temperature Calibration", "tab": "75f710f5.16d2e", "order": 4, "disp": true, @@ -561,8 +561,8 @@ "crontab": "", "once": true, "onceDelay": "0.1", - "x": 410, - "y": 240, + "x": 490, + "y": 260, "wires": [ [ "c0f36d.ab686c9", @@ -579,8 +579,8 @@ "property": "payload", "action": "", "pretty": false, - "x": 730, - "y": 100, + "x": 810, + "y": 120, "wires": [ [ "d504d607.384f48" @@ -596,8 +596,8 @@ "ret": "obj", "url": "", "tls": "", - "x": 3620, - "y": 140, + "x": 3700, + "y": 160, "wires": [ [ "6cbfa171.d2106", @@ -697,8 +697,8 @@ "from": "", "to": "", "reg": false, - "x": 1090, - "y": 100, + "x": 1170, + "y": 120, "wires": [ [ "7c18d8fe.188168" @@ -723,8 +723,8 @@ "checkall": "true", "repair": false, "outputs": 1, - "x": 970, - "y": 100, + "x": 1050, + "y": 120, "wires": [ [ "7f2f1fbf.e1098" @@ -746,8 +746,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 4015, - "y": 509, + "x": 4095, + "y": 529, "wires": [ [ "6040e73e.fa2088", @@ -763,8 +763,8 @@ "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar beerArray = msg.payload.split(\",\");\nif (beerArray[1] === undefined){\n beerArray[1] = true;\n flow.set(color + \"-URL\",\"\");\n}\nflow.set(color + \"-Beer\",beerArray);\n//node.warn(beerArray);\n\nif (beerArray[1] === true){\n msg.payload = beerArray[0];\n msg.topic = \"Beer name set for \" + color;\n} else {\n msg.payload = beerArray[0] + \",\" + beerArray[1];\n msg.topic = \"[Beer name],[cloud ID] set for \" + color;\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 4237, - "y": 508, + "x": 4317, + "y": 528, "wires": [ [ "2f84bf9f.847b6" @@ -779,8 +779,8 @@ "func": "//get color-mac combo\nvar IDbyMAC = flow.get('IDbyMAC')||false;\nif (IDbyMAC) {\nmsg.payload.Color = msg.payload.Color + \":\" + msg.payload.mac;\nmsg.payload.displayColor = msg.payload.Color.split(\":\");\nmsg.payload.IDbyMAC = true;\n} else {\n msg.payload.displayColor = [msg.payload.Color];\n msg.payload.IDbyMAC = false;\n}\n//set beer name and local name status\nvar beerArray = flow.get(msg.payload.Color + \"-Beer\")||[\"Untitled\",true];\nmsg.payload.Beer = beerArray;\n//set dropdown options\nvar options = flow.get('options')||[];\nvar color = msg.payload.Color;\nif (options.indexOf(color) === -1){ //check if Tilt color has been seen\n options.push(color);\n options.sort();\n //node.warn(options);\n flow.set('options',options);\n node.send([null, {'payload': options}]);\n}\n//set SG cal points\nvar actualSGArray = flow.get('actualSGpoints-' + msg.payload.Color)||[];\nvar uncalSGArray = flow.get('uncalSGpoints-' + msg.payload.Color)||[];\nmsg.payload.actualSGPoints = actualSGArray.toString();\nmsg.payload.unCalSGPoints = uncalSGArray.toString();\n//set Temp cal points\nvar actualTempArray = flow.get('actualTemppoints-' + msg.payload.Color)||[];\nvar uncalTempArray = flow.get('uncalTemppoints-' + msg.payload.Color)||[];\nmsg.payload.actualTempPoints = actualTempArray.toString();\nmsg.payload.unCalTempPoints = uncalTempArray.toString();\n//add timeStamp parameter\nmsg.payload.timeStamp = Date.now();\nvar date = new Date();\n//add Timepoint parameter\nvar timeZone = date.getTimezoneOffset()/24/60;\nmsg.payload.formatteddate = date.toLocaleString();\nmsg.payload.Timepoint = msg.payload.timeStamp / 1000 / 60 / 60 / 24 + 25569 - timeZone;\n//add SG parameter, account for extra precision if needed\nmsg.payload.fermunits = flow.get('fermdisplayUnits')||'';\nif (msg.payload.minor > 2000){\nmsg.payload.SG = msg.payload.minor / 10000;\nmsg.payload.major /= 10;\nmsg.payload.hd = true;\n}else{\nmsg.payload.SG = msg.payload.minor / 1000;\nmsg.payload.hd = false;\n}\n//add Temp parameter\nmsg.payload.Temp = msg.payload.major;\nmsg.payload.tempunits = flow.get('displayUnits')||\"°F\";\n//Google Sheet URL for displaying link in display\nmsg.payload.doclongurl = flow.get(msg.payload.Color + '-URL')||\"\";\nmsg.topic = msg.payload.Color;\nmsg.filename = \"/home/pi/\" + msg.payload.Color + \".json\";\n//get custom cloud URL if default cloud URL set to undefined\nmsg.payload.customcloudURL = flow.get('cloudURL-' + msg.payload.Color);\n//set global cloud settings\nmsg.payload.defaultcloudURL = flow.get('cloudURL')||['https://script.google.com/macros/s/AKfycbwNXh6rEWoULd0vxWxDylG_PJwQwe0dn5hdtSkuC4k3D9AXBSA/exec',true];\nmsg.payload.logCloudDataCheck = flow.get('logCloudDataCheck')||true;\nmsg.payload.logLocalDataCheck = flow.get('logLocalDataCheck');\nmsg.payload.localloggingInterval = flow.get('localloggingInterval')||15;\nmsg.payload.loggingInterval = flow.get('loggingInterval')||15;\nmsg.payload.minRSSI = flow.get('minRSSI');\nmsg.payload.alphaSG = flow.get('alphaSG');\nmsg.payload.alphaTemp = flow.get('alphaTemp');\nmsg.payload.numberSamples = flow.get('numberSamples');\nmsg.payload.smoothSwitch = flow.get('smoothSwitch');\nreturn [ msg, null ];", "outputs": 2, "noerr": 0, - "x": 1240, - "y": 120, + "x": 1320, + "y": 140, "wires": [ [ "b90d01ad.44d08", @@ -805,8 +805,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 120, + "x": 2830, + "y": 140, "wires": [ [ "394a5d3d.92fa72", @@ -828,8 +828,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 280, + "x": 2830, + "y": 300, "wires": [ [ "1ee5d27c.fa4e8e", @@ -849,8 +849,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 430, - "y": 20, + "x": 510, + "y": 40, "wires": [ [ "9d251f5a.10bdc" @@ -876,8 +876,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 120, + "x": 2070, + "y": 140, "wires": [ [ "5006138a.18932c" @@ -895,8 +895,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2160, - "y": 120, + "x": 2240, + "y": 140, "wires": [ [ "9628a72.af07d58" @@ -916,8 +916,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 320, + "x": 2830, + "y": 340, "wires": [ [ "1ee5d27c.fa4e8e", @@ -1062,8 +1062,8 @@ "checkall": "false", "repair": false, "outputs": 25, - "x": 1760, - "y": 340, + "x": 1840, + "y": 360, "wires": [ [ "64f10179.474c9" @@ -1161,8 +1161,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 280, + "x": 2070, + "y": 300, "wires": [ [] ] @@ -1186,8 +1186,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 360, + "x": 2070, + "y": 380, "wires": [ [] ] @@ -1211,8 +1211,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 320, + "x": 2070, + "y": 340, "wires": [ [] ] @@ -1228,8 +1228,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2160, - "y": 280, + "x": 2240, + "y": 300, "wires": [ [ "97228e52.47232" @@ -1247,8 +1247,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2160, - "y": 320, + "x": 2240, + "y": 340, "wires": [ [ "87e70118.323b3" @@ -1274,8 +1274,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 120, + "x": 2430, + "y": 140, "wires": [ [ "14d297fb.15dbc8" @@ -1290,8 +1290,8 @@ "func": "//this function block requires msg.payload.SG, msg.payload.Temp, msg.payload.actualSGPoints, msg.payload.actualTempPoints(a comma separated string of the actual values), msg.payload.unCalSGPoints, and msg.payload.unCalTempPoints (a comma separated string of the measured raw values)\nfunction linearInterpolation (x, x0, y0, x1, y1) {\n var a = (y1 - y0) / (x1 - x0);\n var b = -a * x0 + y0;\n return a * x + b;\n}\n//calculate calibrated SG by linear interpolation of calibration points\nvar actualSGPoints = [];\nvar unCalSGPoints = [];\nvar unCalSGPointsTemp = [];\nvar SG = msg.payload.SG;\nactualSGPoints = msg.payload.actualSGPoints.split(\",\");\nunCalSGPoints = msg.payload.unCalSGPoints.split(\",\");\nunCalSGPointsTemp = msg.payload.unCalSGPoints.split(\",\");\n//ensure uncal value always between two numbers\nunCalSGPointsTemp.push(-0.001, SG, Number.MAX_VALUE);\nunCalSGPoints.push(-0.001, Number.MAX_VALUE);\nactualSGPoints.push(-0.001, Number.MAX_VALUE);\nunCalSGPointsTemp.sort(function(a, b){return a-b;});\nunCalSGPoints.sort(function(a, b){return a-b;});\nactualSGPoints.sort(function(a, b){return a-b;});\nvar indexSG = unCalSGPointsTemp.indexOf(SG);\nvar calSG = linearInterpolation (Number(SG), Number(unCalSGPoints[indexSG-1]), Number(actualSGPoints[indexSG-1]), Number(unCalSGPoints[indexSG]), Number(actualSGPoints[indexSG]));\nmsg.payload.uncalSG = SG;\nmsg.payload.uncalPlato = 1111.14 * msg.payload.uncalSG - 630.272 * msg.payload.uncalSG * msg.payload.uncalSG + 135.997 * msg.payload.uncalSG * msg.payload.uncalSG * msg.payload.uncalSG - 616.868;\nmsg.payload.uncalBrix = (((182.4601 * msg.payload.uncalSG - 775.6821) * msg.payload.uncalSG + 1262.7794) * msg.payload.uncalSG - 669.5622);\nmsg.payload.SG = calSG;\nmsg.payload.Plato = 1111.14 * msg.payload.SG - 630.272 * msg.payload.SG * msg.payload.SG + 135.997 * msg.payload.SG * msg.payload.SG * msg.payload.SG - 616.868;\nmsg.payload.Brix = (((182.4601 * msg.payload.SG - 775.6821) * msg.payload.SG + 1262.7794) * msg.payload.SG - 669.5622);\nswitch (msg.payload.fermunits){\n case \"\" : if (msg.payload.hd){msg.payload.ferm = msg.payload.SG.toFixed(4);\n msg.payload.uncalferm = msg.payload.uncalSG.toFixed(4);\n }\n if (!msg.payload.hd){msg.payload.ferm = msg.payload.SG.toFixed(3);\n msg.payload.uncalferm = msg.payload.uncalSG.toFixed(3);\n }\n break;\n case \"°P\" : if (msg.payload.hd){msg.payload.ferm = msg.payload.Plato.toFixed(2);\n msg.payload.uncalferm = msg.payload.uncalPlato.toFixed(2); \n }\n if (!msg.payload.hd){msg.payload.ferm = msg.payload.Plato.toFixed(1);\n msg.payload.uncalferm = msg.payload.uncalPlato.toFixed(1); \n }\n break;\n case \"°Bx\": if (msg.payload.hd){msg.payload.ferm = msg.payload.Brix.toFixed(2);\n msg.payload.uncalferm = msg.payload.uncalBrix.toFixed(2);\n }\n if (!msg.payload.hd){msg.payload.ferm = msg.payload.Brix.toFixed(1);\n msg.payload.uncalferm = msg.payload.uncalBrix.toFixed(1);\n }\n}\n\n//calculate calibrated Temp by linear interpolation of calibration points\nvar actualTempPoints = [];\nvar unCalTempPoints = [];\nvar unCalTempPointsTemp = [];\nvar Temp = msg.payload.Temp;\nif (msg.payload.tempunits === \"°C\"){\n Temp -= 32;\n Temp *= 0.5555;\n}\nactualTempPoints = msg.payload.actualTempPoints.split(\",\");\nunCalTempPoints = msg.payload.unCalTempPoints.split(\",\");\nunCalTempPointsTemp = msg.payload.unCalTempPoints.split(\",\");\n//ensure uncal value always between two numbers\nunCalTempPointsTemp.push(-999, Temp, Number.MAX_VALUE);\nunCalTempPoints.push(-999, Number.MAX_VALUE);\nactualTempPoints.push(-999, Number.MAX_VALUE);\nunCalTempPointsTemp.sort(function(a, b){return a-b;});\nunCalTempPoints.sort(function(a, b){return a-b;});\nactualTempPoints.sort(function(a, b){return a-b;});\n//node.warn(actualTempPoints);\nvar indexTemp = unCalTempPointsTemp.indexOf(Temp);\nvar calTemp = linearInterpolation (Number(Temp), Number(unCalTempPoints[indexTemp-1]), Number(actualTempPoints[indexTemp-1]), Number(unCalTempPoints[indexTemp]), Number(actualTempPoints[indexTemp]));\nif (Number.isNaN(calTemp)){\n calTemp = 0;\n}\nmsg.payload.uncalTemp = Temp.toFixed(1);\nmsg.payload.displayuncalTemp = Temp.toFixed(1);\nmsg.payload.displayTemp = calTemp.toFixed(1);\nif (msg.payload.tempunits === \"°C\"){\n calTemp *= 1.8;\n calTemp += 32;\n msg.payload.Temp = calTemp.toFixed(1);\n}else{\nmsg.payload.Temp = calTemp.toFixed(1);\n}\nreturn msg;", "outputs": "1", "noerr": 0, - "x": 1590, - "y": 120, + "x": 1670, + "y": 140, "wires": [ [ "c4b0f249.af093" @@ -1320,8 +1320,8 @@ ], "payload": "", "topic": "", - "x": 1490, - "y": 1040, + "x": 1570, + "y": 1060, "wires": [ [ "6aa75852.1e3068", @@ -1337,8 +1337,8 @@ "func": "var color = flow.get('colordropdownSelect')||undefined;\nif (color !== undefined){\n var beerArray = flow.get(color + \"-Beer\")||[\"\",true];\n if (beerArray[1] === true){\n msg.payload = beerArray[0];\n }\n else {\n msg.payload = beerArray;\n }\n} else {\n msg.enabled = false;\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 3000, - "y": 1140, + "x": 3080, + "y": 1160, "wires": [ [ "656f0cf9.e79cd4" @@ -1353,8 +1353,8 @@ "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar comment = msg.payload;\nflow.set(color + \"-Comment\",comment);\nflow.set('lastpost-' + color,0);\nflow.set('lastlocalpost-' + color,0);\nmsg.payload = \"Sending: \" + comment;\nmsg.topic = \"TILT | \" + color;\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2406.9999237060547, - "y": 1219.9999895095825, + "x": 2486.9999237060547, + "y": 1239.9999895095825, "wires": [ [ "8dec8962.63e398" @@ -1367,8 +1367,8 @@ "z": "a564595f.642818", "name": "Store latest and update every x seconds", "info": "Saves iBeacon scans to flow database and reads back at 1 second intervals. Allows read out to continue to display last reading even if out of range.", - "x": 2064.5, - "y": 21, + "x": 2144.5, + "y": 41, "wires": [] }, { @@ -1379,8 +1379,8 @@ "func": "var postEnabled = (flow.get('logCloudDataCheck'))||false;\nvar interval = flow.get('loggingInterval')||15;\ninterval *= 60000;\nif (postEnabled && msg.payload.Color !== undefined){\n var lastPost = flow.get('lastpost-' + msg.payload.Color)||0;\n if (msg.payload.timeStamp - lastPost > interval){\n flow.set('lastpost-' + msg.payload.Color,msg.payload.timeStamp);\n //node.warn(msg.payload.Color + ' triggered');\n //node.warn(msg.payload.timeStamp - lastPost);\n msg.payload.Comment = flow.get(msg.payload.Color + \"-Comment\")||\"\";\n msg.payload.Beer = flow.get(msg.payload.Color + \"-Beer\")||[\"Untitled\",true];\n msg.topic = msg.payload.Color;\n if (msg.payload.Beer[1] === true){\n msg.payload.Beer = msg.payload.Beer[0];\n }\n //msg.headers = {};\n //msg.headers['content-type'] = 'application/x-www-form-urlencoded; charset=utf-8';\n var payloadEncoded = encodeURI(\"Timepoint=\" + msg.payload.Timepoint + \"&Temp=\" + msg.payload.Temp + \"&SG=\" + msg.payload.SG + \"&Beer=\" + msg.payload.Beer + \"&Color=\" + msg.payload.Color + \"&Comment=\" + msg.payload.Comment);\n if (flow.get('cloudURL')[1] === true){\n var defaultCloudURL = flow.get('cloudURL')[0];\n node.send({ headers : { 'content-type' : 'application/x-www-form-urlencoded; charset=utf-8' }, url : defaultCloudURL, payload : payloadEncoded, cloudwait : 'Contacting Default Cloud URL...
(allow up to 30 seconds)' });\n }\n else{\n var cloudURLs = flow.get('cloudURL-' + msg.payload.Color)||'none';\n if (cloudURLs != 'none'){\n var cloudURLsArray = cloudURLs.split(',');\n for (var i = 0; i < cloudURLsArray.length; i++){\n node.send({ headers : { 'content-type' : 'application/x-www-form-urlencoded; charset=utf-8' }, url : cloudURLsArray[i], payload : payloadEncoded, cloudwait : 'Contacting Cloud URL ' + (i + 1) + '...
(allow up to 30 seconds)' });\n }\n }\n }\n}\n}", "outputs": 1, "noerr": 0, - "x": 3097.5, - "y": 226, + "x": 3177.5, + "y": 246, "wires": [ [ "bac24b5.6a220b8" @@ -1401,8 +1401,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 1910, - "y": 1240, + "x": 1990, + "y": 1260, "wires": [ [ "c79f0193.2a7c7" @@ -1431,8 +1431,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 2051.9999237060547, - "y": 1383.9999895095825, + "x": 2131.9999237060547, + "y": 1403.9999895095825, "wires": [ [ "bed68eaf.abdc3" @@ -1447,8 +1447,8 @@ "func": "var color = flow.get('colordropdownSelect');\nflow.set(\"cloudURL-\" + color,msg.payload);\nmsg.topic = \"Custom cloud URL set for \" + color;\nvar cloudURLs = msg.payload;\nvar cloudURLsList = cloudURLs.replace(/,/g,'
');\nmsg.payload = cloudURLsList;\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2105.500156402588, - "y": 1305.000060081482, + "x": 2185.500156402588, + "y": 1325.000060081482, "wires": [ [ "ecffbfac.2fc53" @@ -1463,8 +1463,8 @@ "func": "var color = flow.get('colordropdownSelect')||\"\";\nflow.set('logCloudDataCheck',msg.payload);\nflow.set('lastpost-' + color,0);\nmsg.topic = \"TILT | \" + color;\nif (msg.payload){\nmsg.payload = \"Logging request sent. Waiting for response.\";\n}\nelse {\n msg.payload = \"Logging disabled.\";\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2334.9999237060547, - "y": 1372.9999895095825, + "x": 2414.9999237060547, + "y": 1392.9999895095825, "wires": [ [ "8dec8962.63e398" @@ -1476,11 +1476,11 @@ "type": "function", "z": "a564595f.642818", "name": "set Pre-cal SG Value", - "func": "flow.set('uncalSGpoint',Number(msg.payload.uncalSG).toFixed(4));", + "func": "flow.set('uncalSGpoint',Number(msg.payload).toFixed(4));", "outputs": 1, "noerr": 0, - "x": 2518.4999237060547, - "y": 1430.9999895095825, + "x": 2860, + "y": 1460, "wires": [ [] ] @@ -1493,14 +1493,13 @@ "func": "flow.set('colordropdownSelect',msg.payload);\nmsg.payload = \"\";\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1970, - "y": 1140, + "x": 2050, + "y": 1160, "wires": [ [ "971574e0.783ba8", "df1c3ed0.bd3a9", - "de92b02f.5ebe1", - "5933654f.572e0c" + "de92b02f.5ebe1" ] ] }, @@ -1509,16 +1508,19 @@ "type": "function", "z": "a564595f.642818", "name": "Get Current SG", - "func": "var options = flow.get('options')||[];\nvar color = msg.payload;\nvar displayNumber = options.indexOf(color) + 1;\nmsg.payload = flow.get(\"storage-\" + displayNumber.toString());\nif (msg.payload !== undefined){\nreturn msg;\n}", - "outputs": 1, + "func": "if (msg.payload == \"disabled\") {\n context.set(\"autoUpdate\", \"disabled\");\n}\nif (msg.payload == \"enabled\") {\n context.set(\"autoUpdate\", \"enabled\");\n}\nvar autoUpdate = context.get(\"autoUpdate\")||\"enabled\";\nif (autoUpdate == \"enabled\"){\nvar options = flow.get('options')||[];\nvar color = msg.payload;\nvar displayNumber = options.indexOf(color) + 1;\nmsg.payload = flow.get(\"storage-\" + displayNumber.toString());\nif (msg.payload !== undefined){\nvar msg1 = {};\nvar msg2 = {};\nmsg1.payload = msg.payload.uncalSG.toFixed(4);\nmsg2.payload = msg.payload.SG.toFixed(4);\nreturn [msg1,msg2];\n}\n}", + "outputs": 2, "noerr": 0, - "x": 2078.4999237060547, - "y": 1470.9999895095825, + "x": 2180, + "y": 1500, "wires": [ [ - "777f1a14.1b3e44", - "ecfbe772.ba4cb8", - "713dd3f6.8af61c" + "26d12db4.df7f82", + "777f1a14.1b3e44" + ], + [ + "8756395a.c6f6e8", + "84ffe685.150d58" ] ] }, @@ -1527,15 +1529,13 @@ "type": "function", "z": "a564595f.642818", "name": "set Actual SG Value", - "func": "var value = Number(msg.payload);\nflow.set('actualSGpoint',value.toFixed(4));\nmsg.payload = flow.get('colordropdownSelect');\nreturn msg;", + "func": "var value = Number(msg.payload);\nflow.set('actualSGpoint',value.toFixed(4));\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2138.4999237060547, - "y": 1730.9999895095825, + "x": 2850, + "y": 1520, "wires": [ - [ - "6c6270ad.ae742" - ] + [] ] }, { @@ -1557,8 +1557,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 160, + "x": 2070, + "y": 180, "wires": [ [] ] @@ -1576,8 +1576,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 160, + "x": 2830, + "y": 180, "wires": [ [ "1ee5d27c.fa4e8e", @@ -1604,8 +1604,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 200, + "x": 2070, + "y": 220, "wires": [ [] ] @@ -1623,8 +1623,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 200, + "x": 2830, + "y": 220, "wires": [ [ "1ee5d27c.fa4e8e", @@ -1644,8 +1644,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 200, + "x": 2240, + "y": 220, "wires": [ [ "455abe60.6afd4" @@ -1663,8 +1663,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2160, - "y": 160, + "x": 2240, + "y": 180, "wires": [ [ "b4de88bb.e0e148" @@ -1679,8 +1679,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 120, + "x": 2610, + "y": 140, "wires": [ [ "1aee8aa4.c92885" @@ -1691,60 +1691,15 @@ "id": "6c6270ad.ae742", "type": "function", "z": "a564595f.642818", - "name": "Add SG Cal Point", - "func": "var color = msg.payload;\nvar uncalSGcalPoint = flow.get('uncalSGpoint')||0;\nvar actualSGcalPoint = flow.get('actualSGpoint')||0;\nvar uncalpointsArray = flow.get('uncalSGpoints-' + color)||[];\nvar actualpointsArray = flow.get('actualSGpoints-' + color)||[];\nuncalpointsArray.push(uncalSGcalPoint);\nuncalpointsArray.sort(function(a, b){return a-b;});\nflow.set('uncalSGpoints-' + color,uncalpointsArray);\nactualpointsArray.push(actualSGcalPoint);\nactualpointsArray.sort(function(a, b){return a-b;});\nflow.set('actualSGpoints-' + color,actualpointsArray);\nvar msg1 = {payload:uncalpointsArray.toString()};\nvar msg2 = {payload:actualpointsArray.toString()};\nreturn [msg1, msg2];", - "outputs": "2", - "noerr": 0, - "x": 2442.9999237060547, - "y": 1736.9999895095825, - "wires": [ - [ - "1be76b3b.e111e5" - ], - [ - "e29d71bb.f0e81" - ] - ] - }, - { - "id": "63c7bb7c.317274", - "type": "ui_button", - "z": "a564595f.642818", - "name": "", - "group": "6acae0b0.a184", - "order": 5, - "width": 0, - "height": 0, - "passthru": false, - "label": "Clear Calibration", - "color": "", - "bgcolor": "", - "icon": "", - "payload": "colordropdownSelect", - "payloadType": "flow", - "topic": "", - "x": 2210.9999237060547, - "y": 1856.9999895095825, - "wires": [ - [ - "e38fab7c.6f34e8" - ] - ] - }, - { - "id": "e38fab7c.6f34e8", - "type": "function", - "z": "a564595f.642818", - "name": "clear calibration", - "func": "var color = msg.payload;\nvar uncalpointsArray = flow.set('uncalSGpoints-' + color,[]);\nvar actualpointsArray = flow.set('actualSGpoints-' + color,[]);\nmsg.payload = \"\";\nreturn msg;", + "name": "Add SG Cal Points", + "func": "var color = msg.payload;\nif (msg.topic == \"clear calibration\"){\n flow.set('uncalSGpoints-' + color,[]);\n flow.set('actualSGpoints-' + color,[]);\n}else{\nvar uncalSGcalPoint = flow.get('uncalSGpoint')||0;\nvar actualSGcalPoint = flow.get('actualSGpoint')||0;\nif (msg.topic == \"calibrate in water\"){\n actualSGcalPoint = \"1.0000\";\n}\nvar uncalpointsArray = flow.get('uncalSGpoints-' + color)||[];\nvar actualpointsArray = flow.get('actualSGpoints-' + color)||[];\nuncalpointsArray.push(uncalSGcalPoint);\nuncalpointsArray.sort(function(a, b){return a-b;});\nflow.set('uncalSGpoints-' + color,uncalpointsArray);\nactualpointsArray.push(actualSGcalPoint);\nactualpointsArray.sort(function(a, b){return a-b;});\nflow.set('actualSGpoints-' + color,actualpointsArray);\n}\nmsg.topic = color;\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2422.9999237060547, - "y": 1857.9999895095825, + "x": 3030, + "y": 1760, "wires": [ [ - "1be76b3b.e111e5", - "e29d71bb.f0e81" + "3b195e06.c8f962" ] ] }, @@ -1753,17 +1708,15 @@ "type": "function", "z": "a564595f.642818", "name": "update display", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalpointsArray = flow.get('uncalSGpoints-' + color)||[];\nvar actualpointsArray = flow.get('actualSGpoints-' + color)||[];\nvar msg1 = {payload:uncalpointsArray};\nvar msg2 = {payload:actualpointsArray};\nreturn [msg1, msg2];", - "outputs": "2", + "func": "msg.topic = flow.get('colordropdownSelect')||\"\";\nreturn msg;", + "outputs": 1, "noerr": 0, - "x": 2221.9999237060547, - "y": 1793.9999895095825, + "x": 2460, + "y": 1860, "wires": [ [ - "1be76b3b.e111e5" - ], - [ - "e29d71bb.f0e81" + "3b195e06.c8f962", + "518cb266.0001dc" ] ] }, @@ -1782,8 +1735,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 3335, - "y": 183, + "x": 3415, + "y": 203, "wires": [ [ "6cbfa171.d2106", @@ -1811,8 +1764,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 160, + "x": 2430, + "y": 180, "wires": [ [ "c9e125df.66b318" @@ -1827,8 +1780,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 160, + "x": 2610, + "y": 180, "wires": [ [ "4dbe6177.1028" @@ -1854,8 +1807,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 200, + "x": 2430, + "y": 220, "wires": [ [ "3fc07c6.f563084" @@ -1870,8 +1823,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 200, + "x": 2610, + "y": 220, "wires": [ [ "7c6f1c01.297234" @@ -1897,8 +1850,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 280, + "x": 2430, + "y": 300, "wires": [ [ "a6fc7026.3943f" @@ -1913,8 +1866,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 280, + "x": 2610, + "y": 300, "wires": [ [ "79bac478.35317c" @@ -1940,8 +1893,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 320, + "x": 2430, + "y": 340, "wires": [ [ "822668cd.451b98" @@ -1956,8 +1909,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 320, + "x": 2610, + "y": 340, "wires": [ [ "e0d6a855.d4e018" @@ -1977,8 +1930,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 240, + "x": 2830, + "y": 260, "wires": [ [ "1ee5d27c.fa4e8e", @@ -2005,8 +1958,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 240, + "x": 2430, + "y": 260, "wires": [ [ "10fa6d83.b3b1b2" @@ -2021,8 +1974,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 240, + "x": 2610, + "y": 260, "wires": [ [ "dd81e411.1cdd78" @@ -2041,8 +1994,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 240, + "x": 2240, + "y": 260, "wires": [ [ "29f2062c.9eafea" @@ -2062,8 +2015,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 400, + "x": 2830, + "y": 420, "wires": [ [ "1ee5d27c.fa4e8e", @@ -2082,8 +2035,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2160, - "y": 400, + "x": 2240, + "y": 420, "wires": [ [ "49c2c87.03bfc38" @@ -2109,8 +2062,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 400, + "x": 2430, + "y": 420, "wires": [ [ "ba5663bf.b7cd6" @@ -2125,8 +2078,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 400, + "x": 2610, + "y": 420, "wires": [ [ "228b94fc.188afc" @@ -2146,8 +2099,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 360, + "x": 2830, + "y": 380, "wires": [ [ "1ee5d27c.fa4e8e", @@ -2174,8 +2127,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 360, + "x": 2430, + "y": 380, "wires": [ [ "68f079f0.789e18" @@ -2190,8 +2143,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 360, + "x": 2610, + "y": 380, "wires": [ [ "2cbc023f.86f2de" @@ -2209,8 +2162,8 @@ "repeat": "1", "crontab": "", "once": false, - "x": 2163.5, - "y": 357, + "x": 2243.5, + "y": 377, "wires": [ [ "8e49f6ea.8fa718" @@ -2230,8 +2183,8 @@ "storeOutMessages": false, "fwdInMessages": true, "templateScope": "local", - "x": 4010, - "y": 580, + "x": 4090, + "y": 600, "wires": [ [] ] @@ -2244,8 +2197,8 @@ "func": "if (msg.payload.beername !== undefined){\n if (msg.payload.beername.indexOf(\",\") > -1){\n beerArray = msg.payload.beername.split(\",\");\n //node.warn(msg.payload.beername[1]);\n flow.set(msg.payload.tiltcolor + \"-Beer\",beerArray);\n //node.warn(flow.get(msg.payload.tiltcolor + \"-Beer\"));\n flow.set(msg.payload.tiltcolor + \"-Comment\",\"\");\n if (msg.payload.doclongurl !== undefined) {\n flow.set(msg.payload.tiltcolor + \"-URL\",' | View Cloud Log');\n }\n msg.payload = beerArray;\n return msg;\n }\n}", "outputs": 1, "noerr": 0, - "x": 3895, - "y": 155, + "x": 3975, + "y": 175, "wires": [ [ "656f0cf9.e79cd4" @@ -2264,8 +2217,8 @@ "cancel": "", "topic": "", "name": "", - "x": 2607.4999237060547, - "y": 1314.9999895095825, + "x": 2687.4999237060547, + "y": 1334.9999895095825, "wires": [] }, { @@ -2287,8 +2240,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 240, + "x": 2070, + "y": 260, "wires": [ [] ] @@ -2312,8 +2265,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 400, + "x": 2070, + "y": 420, "wires": [ [] ] @@ -2332,8 +2285,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 2220, - "y": 1180, + "x": 2300, + "y": 1200, "wires": [ [ "e899ac8f.ec903" @@ -2348,8 +2301,8 @@ "func": "var color = flow.get('colordropdownSelect')||\"\";\n//delete cloud wait message\nif (msg.payload.tiltcolor === color){\n msg.cloudwait = \"\";\n msg.cloudlink = flow.get(color + \"-URL\");\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 3758, - "y": 414, + "x": 3838, + "y": 434, "wires": [ [ "7799f0b1.ee4b8", @@ -2379,8 +2332,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 1370, - "y": 1260, + "x": 1450, + "y": 1280, "wires": [ [ "d599e3c9.1ae09" @@ -2402,8 +2355,8 @@ "min": "5", "max": "60", "step": "5", - "x": 2322.9999237060547, - "y": 1408.9999895095825, + "x": 2402.9999237060547, + "y": 1428.9999895095825, "wires": [ [ "e95c8a86.0f73c8", @@ -2423,8 +2376,8 @@ "label": "Minutes:", "format": "{{msg.payload}}", "layout": "row-left", - "x": 2718.4999237060547, - "y": 1410.9999895095825, + "x": 2600, + "y": 1440, "wires": [] }, { @@ -2435,8 +2388,8 @@ "func": "flow.set('loggingInterval',msg.payload);", "outputs": 1, "noerr": 0, - "x": 2586.4999237060547, - "y": 1369.9999895095825, + "x": 2666.4999237060547, + "y": 1389.9999895095825, "wires": [ [] ] @@ -2450,8 +2403,8 @@ "appendNewline": true, "createDir": false, "overwriteFile": "false", - "x": 3469.5007934570312, - "y": 331.00007247924805, + "x": 3549.5007934570312, + "y": 351.00007247924805, "wires": [ [] ] @@ -2461,8 +2414,8 @@ "type": "http response", "z": "a564595f.642818", "name": "Show Local Data", - "x": 3480.5, - "y": 375, + "x": 3560.5, + "y": 395, "wires": [] }, { @@ -2474,8 +2427,8 @@ "method": "get", "upload": false, "swaggerDoc": "", - "x": 3080.5, - "y": 374, + "x": 3160.5, + "y": 394, "wires": [ [ "898ef56a.365648" @@ -2490,8 +2443,8 @@ "filename": "/home/pi/log.csv", "format": "", "sendError": false, - "x": 3271.5, - "y": 372, + "x": 3351.5, + "y": 392, "wires": [ [ "6af4a20b.f5f3cc" @@ -2510,8 +2463,8 @@ "label": "Minimum Minutes:", "format": "{{msg.payload}}", "layout": "row-left", - "x": 2308.4999237060547, - "y": 1590.9999895095825, + "x": 2030, + "y": 1780, "wires": [] }, { @@ -2520,17 +2473,19 @@ "z": "a564595f.642818", "name": "", "label": "Time Interval", + "tooltip": "", "group": "82607108.c5be8", "order": 2, "width": 0, "height": 0, "passthru": true, + "outs": "all", "topic": "", "min": ".1", "max": "60", "step": ".1", - "x": 2088.4999237060547, - "y": 1570.9999895095825, + "x": 1830, + "y": 1740, "wires": [ [ "2cabe65a.14f1ba", @@ -2546,8 +2501,8 @@ "func": "flow.set('localloggingInterval',msg.payload);", "outputs": 1, "noerr": 0, - "x": 2288.4999237060547, - "y": 1550.9999895095825, + "x": 2010, + "y": 1700, "wires": [ [] ] @@ -2560,8 +2515,8 @@ "func": "var postEnabled = (flow.get('logLocalDataCheck'));\nvar interval = flow.get('localloggingInterval')||15;\ninterval *= 60000;\nif (postEnabled && msg.payload.Color !== undefined){\n var lastPost = flow.get('lastlocalpost-' + msg.payload.Color)||0;\n if (msg.payload.timeStamp - lastPost > interval){\n msg.payload.Comment = flow.get(msg.payload.Color + \"-Comment\")||\"\";\n msg.payload.Beer = flow.get(msg.payload.Color + \"-Beer\")||[\"Untitled\",true];\n msg.topic = msg.payload.Color;\n var date = new Date().toLocaleString();\n date = date.replace(\",\",\" \");\n //unsigned bonus byte\n var uint8 = new Uint8Array(1);\n uint8[0] = msg.payload.tx_power;\n msg.payload.tx_power = uint8[0];\n flow.set('lastlocalpost-' + msg.payload.Color,msg.payload.timeStamp);\n msg.payload = date + \",\" + msg.payload.Timepoint + \",\" + msg.payload.Temp + \",\" + msg.payload.SG + \",\" + msg.payload.Beer[0] + \",\" + msg.payload.Color + \",\" + msg.payload.Comment + \",\" + msg.payload.rssi + \",\" + msg.payload.tx_power;\n return msg;\n}\n}", "outputs": 1, "noerr": 0, - "x": 3080, - "y": 320, + "x": 3160, + "y": 340, "wires": [ [ "dcc41bde.fc7208", @@ -2577,8 +2532,8 @@ "func": "var color = flow.get('colordropdownSelect')||\"\";\nflow.set('logLocalDataCheck',msg.payload);\nflow.set('lastlocalpost-' + color,0);\nmsg.topic = \"TILT | \" + color;\nif (msg.payload){\nmsg.payload = \"Logging to Tilt Pi enabled.\";\n}\nelse {\n msg.payload = \"Logging disabled.\"\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2507.4999237060547, - "y": 1646.9999895095825, + "x": 2550, + "y": 1700, "wires": [ [ "cd2573a4.64137" @@ -2607,8 +2562,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 2222.4999237060547, - "y": 1643.9999895095825, + "x": 2300, + "y": 1700, "wires": [ [ "2316593.5ec70a6" @@ -2627,8 +2582,8 @@ "cancel": "", "topic": "", "name": "", - "x": 2729.4999237060547, - "y": 1645.9999895095825, + "x": 2790, + "y": 1700, "wires": [] }, { @@ -2643,8 +2598,8 @@ "label": "", "format": "{{msg.payload}}", "layout": "row-left", - "x": 3852.5, - "y": 291, + "x": 3932.5, + "y": 311, "wires": [] }, { @@ -2658,8 +2613,8 @@ "timer": "5", "oldrc": false, "name": "", - "x": 3270, - "y": 260, + "x": 3350, + "y": 280, "wires": [ [ "5c5d0dab.293cc4" @@ -2679,8 +2634,8 @@ "arraySpltType": "len", "stream": false, "addname": "", - "x": 3415, - "y": 253, + "x": 3495, + "y": 273, "wires": [ [ "7317b5bb.adcf1c" @@ -2703,8 +2658,8 @@ ], "checkall": "true", "outputs": 1, - "x": 3558, - "y": 286, + "x": 3638, + "y": 306, "wires": [ [ "ae037878.ee52b8" @@ -2732,8 +2687,8 @@ "from": "", "to": "", "reg": false, - "x": 3703.5, - "y": 290, + "x": 3783.5, + "y": 310, "wires": [ [ "644a5410.3ea0bc" @@ -2749,8 +2704,8 @@ "appendNewline": true, "createDir": false, "overwriteFile": "true", - "x": 3316.5, - "y": 474, + "x": 3396.5, + "y": 494, "wires": [ [] ] @@ -2766,14 +2721,15 @@ "height": 0, "passthru": true, "label": "Delete Log", + "tooltip": "", "color": "white", - "bgcolor": "red", + "bgcolor": "#FF5733", "icon": "", "payload": "Time,Timepoint,Temp,SG,Beer,Color,Comment,RSSI,Uptime", "payloadType": "str", "topic": "", - "x": 3067.5, - "y": 477, + "x": 3147.5, + "y": 497, "wires": [ [ "dcc41bde.fc7208", @@ -2802,159 +2758,58 @@ ], "payload": "", "topic": "", - "x": 1460, - "y": 920, + "x": 1540, + "y": 980, "wires": [ [ - "6aa75852.1e3068" + "6aa75852.1e3068", + "3eb6f3c4.588d1c", + "d6de2020.56974" ] ] }, { - "id": "d9ea777.f3c9388", - "type": "ui_text_input", + "id": "f9e2fc12.8340c", + "type": "inject", "z": "a564595f.642818", - "name": "", - "label": "Enter Actual (known) point:", - "group": "6acae0b0.a184", - "order": 2, - "width": 0, - "height": 0, - "passthru": true, - "mode": "text", - "delay": "0", + "name": "Logging Interval", "topic": "", - "x": 1827.4999237060547, - "y": 1727.9999895095825, + "payload": "loggingInterval", + "payloadType": "flow", + "repeat": "15", + "crontab": "", + "once": false, + "x": 2108.4999237060547, + "y": 1450.9999895095825, "wires": [ [ - "84ffe685.150d58" + "88a2c98f.f38b08" ] ] }, { - "id": "ecfbe772.ba4cb8", - "type": "ui_text", - "z": "a564595f.642818", - "group": "6acae0b0.a184", - "order": 1, - "width": 0, - "height": 0, - "name": "", - "label": "Pre-calibrated Specific Gravity:", - "format": "{{msg.payload.uncalSG | number:4}}", - "layout": "row-spread", - "x": 2428.4999237060547, - "y": 1470.9999895095825, - "wires": [] - }, - { - "id": "9bdc1db3.4ceaa", - "type": "inject", + "id": "b13cb5ba.f355b8", + "type": "exec", "z": "a564595f.642818", - "name": "Get Color Selection", - "topic": "", - "payload": "colordropdownSelect", - "payloadType": "flow", - "repeat": "2", - "crontab": "", - "once": false, - "x": 1834.4999237060547, - "y": 1488.9999895095825, + "command": "sudo reboot", + "addpay": false, + "append": "", + "useSpawn": false, + "timer": "", + "name": "Reboot", + "x": 900, + "y": 2900, "wires": [ [ - "3eb6f3c4.588d1c", - "d6de2020.56974" - ] + "2a36a03c.47d1f" + ], + [], + [] ] }, { - "id": "1be76b3b.e111e5", - "type": "ui_text_input", - "z": "a564595f.642818", - "name": "", - "label": "Edit Pre-calibrated (Tilt) Points:", - "tooltip": "", - "group": "6acae0b0.a184", - "order": 3, - "width": 0, - "height": 0, - "passthru": false, - "mode": "text", - "delay": "0", - "topic": "", - "x": 2794.4999237060547, - "y": 1776.9999895095825, - "wires": [ - [ - "88f0f33d.110ab" - ] - ] - }, - { - "id": "e29d71bb.f0e81", - "type": "ui_text_input", - "z": "a564595f.642818", - "name": "", - "label": "Edit Actual Points:", - "group": "6acae0b0.a184", - "order": 4, - "width": 0, - "height": 0, - "passthru": false, - "mode": "text", - "delay": "0", - "topic": "", - "x": 2766.4999237060547, - "y": 1843.9999895095825, - "wires": [ - [ - "b36a946.3813e68" - ] - ] - }, - { - "id": "f9e2fc12.8340c", - "type": "inject", - "z": "a564595f.642818", - "name": "Logging Interval", - "topic": "", - "payload": "loggingInterval", - "payloadType": "flow", - "repeat": "15", - "crontab": "", - "once": false, - "x": 2028.4999237060547, - "y": 1430.9999895095825, - "wires": [ - [ - "88a2c98f.f38b08" - ] - ] - }, - { - "id": "b13cb5ba.f355b8", - "type": "exec", - "z": "a564595f.642818", - "command": "sudo reboot", - "addpay": false, - "append": "", - "useSpawn": false, - "timer": "", - "name": "Reboot", - "x": 820, - "y": 2880, - "wires": [ - [ - "2a36a03c.47d1f" - ], - [], - [] - ] - }, - { - "id": "a85e96c5.56cc58", - "type": "ui_button", + "id": "a85e96c5.56cc58", + "type": "ui_button", "z": "a564595f.642818", "name": "", "group": "7e458eda.984cd", @@ -2969,8 +2824,8 @@ "payload": "now", "payloadType": "str", "topic": "", - "x": 620, - "y": 2880, + "x": 700, + "y": 2900, "wires": [ [ "b13cb5ba.f355b8" @@ -2989,8 +2844,8 @@ "cancel": "", "topic": "", "name": "", - "x": 1070, - "y": 2860, + "x": 1150, + "y": 2880, "wires": [] }, { @@ -3001,8 +2856,8 @@ "func": "var options = [\"Africa/Harare\",\"Africa/Lusaka\",\"Africa/Johannesburg\",\"Indian/Mayotte\",\"Asia/Aden\",\"Pacific/Apia\",\"Pacific/Wallis\",\"Pacific/Efate\",\"Asia/Ho_Chi_Minh\",\"America/St_Thomas\",\"America/Tortola\",\"America/Caracas\",\"America/St_Vincent\",\"Europe/Vatican\",\"Asia/Samarkand\",\"Asia/Tashkent\",\"America/Montevideo\",\"America/Adak\",\"America/Anchorage\",\"America/Boise\",\"America/Chicago\",\"America/Denver\",\"America/Detroit\",\"America/Indiana/Indianapolis\",\"America/Indiana/Knox\",\"America/Indiana/Marengo\",\"America/Indiana/Petersburg\",\"America/Indiana/Tell_City\",\"America/Indiana/Vevay\",\"America/Indiana/Vincennes\",\"America/Indiana/Winamac\",\"America/Juneau\",\"America/Kentucky/Louisville\",\"America/Kentucky/Monticello\",\"America/Los_Angeles\",\"America/Menominee\",\"America/Metlakatla\",\"America/New_York\",\"America/Nome\",\"America/North_Dakota/Beulah\",\"America/North_Dakota/Center\",\"America/North_Dakota/New_Salem\",\"America/Phoenix\",\"America/Sitka\",\"America/Yakutat\",\"Pacific/Honolulu\",\"Pacific/Midway\",\"Pacific/Wake\",\"Africa/Kampala\",\"Europe/Kiev\",\"Europe/Uzhgorod\",\"Europe/Zaporozhye\",\"Africa/Dar_es_Salaam\",\"Asia/Taipei\",\"Pacific/Funafuti\",\"America/Port_of_Spain\",\"Europe/Istanbul\",\"Pacific/Tongatapu\",\"Africa/Tunis\",\"Asia/Ashgabat\",\"Asia/Dili\",\"Pacific/Fakaofo\",\"Asia/Dushanbe\",\"Asia/Bangkok\",\"Africa/Lome\",\"Indian/Kerguelen\",\"Africa/Ndjamena\",\"America/Grand_Turk\",\"Africa/Mbabane\",\"Asia/Damascus\",\"America/Lower_Princes\",\"America/El_Salvador\",\"Africa/Sao_Tome\",\"Africa/Juba\",\"America/Paramaribo\",\"Africa/Mogadishu\",\"Africa/Dakar\",\"Europe/San_Marino\",\"Africa/Freetown\",\"Europe/Bratislava\",\"Arctic/Longyearbyen\",\"Europe/Ljubljana\",\"Atlantic/St_Helena\",\"Asia/Singapore\",\"Europe/Stockholm\",\"Africa/Khartoum\",\"Indian/Mahe\",\"Pacific/Guadalcanal\",\"Asia/Riyadh\",\"Africa/Kigali\",\"Asia/Anadyr\",\"Asia/Barnaul\",\"Asia/Chita\",\"Asia/Irkutsk\",\"Asia/Kamchatka\",\"Asia/Khandyga\",\"Asia/Krasnoyarsk\",\"Asia/Magadan\",\"Asia/Novokuznetsk\",\"Asia/Novosibirsk\",\"Asia/Omsk\",\"Asia/Sakhalin\",\"Asia/Srednekolymsk\",\"Asia/Tomsk\",\"Asia/Ust-Nera\",\"Asia/Vladivostok\",\"Asia/Yakutsk\",\"Asia/Yekaterinburg\",\"Europe/Astrakhan\",\"Europe/Kaliningrad\",\"Europe/Kirov\",\"Europe/Moscow\",\"Europe/Samara\",\"Europe/Saratov\",\"Europe/Simferopol\",\"Europe/Ulyanovsk\",\"Europe/Volgograd\",\"Europe/Belgrade\",\"Europe/Bucharest\",\"Indian/Reunion\",\"Asia/Qatar\",\"America/Asuncion\",\"Pacific/Palau\",\"Atlantic/Azores\",\"Atlantic/Madeira\",\"Europe/Lisbon\",\"Asia/Gaza\",\"Asia/Hebron\",\"America/Puerto_Rico\",\"Pacific/Pitcairn\",\"America/Miquelon\",\"Europe/Warsaw\",\"Asia/Karachi\",\"Asia/Manila\",\"Pacific/Bougainville\",\"Pacific/Port_Moresby\",\"Pacific/Gambier\",\"Pacific/Marquesas\",\"Pacific/Tahiti\",\"America/Lima\",\"America/Panama\",\"Asia/Muscat\",\"Pacific/Auckland\",\"Pacific/Chatham\",\"Pacific/Niue\",\"Pacific/Nauru\",\"Asia/Kathmandu\",\"Europe/Oslo\",\"Europe/Amsterdam\",\"America/Managua\",\"Africa/Lagos\",\"Pacific/Norfolk\",\"Africa/Niamey\",\"Pacific/Noumea\",\"Africa/Windhoek\",\"Africa/Maputo\",\"Asia/Kuala_Lumpur\",\"Asia/Kuching\",\"America/Bahia_Banderas\",\"America/Cancun\",\"America/Chihuahua\",\"America/Hermosillo\",\"America/Matamoros\",\"America/Mazatlan\",\"America/Merida\",\"America/Mexico_City\",\"America/Monterrey\",\"America/Ojinaga\",\"America/Tijuana\",\"Africa/Blantyre\",\"Indian/Maldives\",\"Indian/Mauritius\",\"Europe/Malta\",\"America/Montserrat\",\"Africa/Nouakchott\",\"America/Martinique\",\"Pacific/Saipan\",\"Asia/Macau\",\"Asia/Choibalsan\",\"Asia/Hovd\",\"Asia/Ulaanbaatar\",\"Asia/Yangon\",\"Africa/Bamako\",\"Europe/Skopje\",\"Pacific/Kwajalein\",\"Pacific/Majuro\",\"Indian/Antananarivo\",\"America/Marigot\",\"Europe/Podgorica\",\"Europe/Chisinau\",\"Europe/Monaco\",\"Africa/Casablanca\",\"Africa/Tripoli\",\"Europe/Riga\",\"Europe/Luxembourg\",\"Europe/Vilnius\",\"Africa/Maseru\",\"Africa/Monrovia\",\"Asia/Colombo\",\"Europe/Vaduz\",\"America/St_Lucia\",\"Asia/Beirut\",\"Asia/Vientiane\",\"Asia/Almaty\",\"Asia/Aqtau\",\"Asia/Aqtobe\",\"Asia/Atyrau\",\"Asia/Oral\",\"Asia/Qyzylorda\",\"America/Cayman\",\"Asia/Kuwait\",\"Asia/Seoul\",\"Asia/Pyongyang\",\"America/St_Kitts\",\"Indian/Comoro\",\"Pacific/Enderbury\",\"Pacific/Kiritimati\",\"Pacific/Tarawa\",\"Asia/Phnom_Penh\",\"Asia/Bishkek\",\"Africa/Nairobi\",\"Asia/Tokyo\",\"Asia/Amman\",\"America/Jamaica\",\"Europe/Jersey\",\"Europe/Rome\",\"Atlantic/Reykjavik\",\"Asia/Tehran\",\"Asia/Baghdad\",\"Indian/Chagos\",\"Asia/Kolkata\",\"Europe/Isle_of_Man\",\"Asia/Jerusalem\",\"Europe/Dublin\",\"Asia/Jakarta\",\"Asia/Jayapura\",\"Asia/Makassar\",\"Asia/Pontianak\",\"Europe/Budapest\",\"America/Port-au-Prince\",\"Europe/Zagreb\",\"America/Tegucigalpa\",\"Asia/Hong_Kong\",\"America/Guyana\",\"Africa/Bissau\",\"Pacific/Guam\",\"America/Guatemala\",\"Atlantic/South_Georgia\",\"Europe/Athens\",\"Africa/Malabo\",\"America/Guadeloupe\",\"Africa/Conakry\",\"Africa/Banjul\",\"America/Danmarkshavn\",\"America/Godthab\",\"America/Scoresbysund\",\"America/Thule\",\"Europe/Gibraltar\",\"Africa/Accra\",\"Europe/Guernsey\",\"America/Cayenne\",\"Asia/Tbilisi\",\"America/Grenada\",\"Europe/London\",\"Africa/Libreville\",\"Europe/Paris\",\"Atlantic/Faroe\",\"Pacific/Chuuk\",\"Pacific/Kosrae\",\"Pacific/Pohnpei\",\"Atlantic/Stanley\",\"Pacific/Fiji\",\"Europe/Helsinki\",\"Africa/Addis_Ababa\",\"Africa/Ceuta\",\"Atlantic/Canary\",\"Europe/Madrid\",\"Africa/Asmara\",\"Africa/El_Aaiun\",\"Africa/Cairo\",\"Europe/Tallinn\",\"America/Guayaquil\",\"Pacific/Galapagos\",\"Africa/Algiers\",\"America/Santo_Domingo\",\"America/Dominica\",\"Europe/Copenhagen\",\"Africa/Djibouti\",\"Europe/Berlin\",\"Europe/Busingen\",\"Europe/Prague\",\"Asia/Famagusta\",\"Asia/Nicosia\",\"Indian/Christmas\",\"America/Curacao\",\"Atlantic/Cape_Verde\",\"America/Havana\",\"America/Costa_Rica\",\"America/Bogota\",\"Asia/Shanghai\",\"Asia/Urumqi\",\"Africa/Douala\",\"America/Punta_Arenas\",\"America/Santiago\",\"Pacific/Easter\",\"Pacific/Rarotonga\",\"Africa/Abidjan\",\"Europe/Zurich\",\"Africa/Brazzaville\",\"Africa/Bangui\",\"Africa/Kinshasa\",\"Africa/Lubumbashi\",\"Indian/Cocos\",\"America/Atikokan\",\"America/Blanc-Sablon\",\"America/Cambridge_Bay\",\"America/Creston\",\"America/Dawson\",\"America/Dawson_Creek\",\"America/Edmonton\",\"America/Fort_Nelson\",\"America/Glace_Bay\",\"America/Goose_Bay\",\"America/Halifax\",\"America/Inuvik\",\"America/Iqaluit\",\"America/Moncton\",\"America/Nipigon\",\"America/Pangnirtung\",\"America/Rainy_River\",\"America/Rankin_Inlet\",\"America/Regina\",\"America/Resolute\",\"America/St_Johns\",\"America/Swift_Current\",\"America/Thunder_Bay\",\"America/Toronto\",\"America/Vancouver\",\"America/Whitehorse\",\"America/Winnipeg\",\"America/Yellowknife\",\"America/Belize\",\"Europe/Minsk\",\"Africa/Gaborone\",\"Asia/Thimphu\",\"America/Nassau\",\"America/Araguaina\",\"America/Bahia\",\"America/Belem\",\"America/Boa_Vista\",\"America/Campo_Grande\",\"America/Cuiaba\",\"America/Eirunepe\",\"America/Fortaleza\",\"America/Maceio\",\"America/Manaus\",\"America/Noronha\",\"America/Porto_Velho\",\"America/Recife\",\"America/Rio_Branco\",\"America/Santarem\",\"America/Sao_Paulo\",\"America/Kralendijk\",\"America/La_Paz\",\"Asia/Brunei\",\"Atlantic/Bermuda\",\"America/St_Barthelemy\",\"Africa/Porto-Novo\",\"Africa/Bujumbura\",\"Asia/Bahrain\",\"Europe/Sofia\",\"Africa/Ouagadougou\",\"Europe/Brussels\",\"Asia/Dhaka\",\"America/Barbados\",\"Europe/Sarajevo\",\"Asia/Baku\",\"Europe/Mariehamn\",\"America/Aruba\",\"Antarctica/Macquarie\",\"Australia/Adelaide\",\"Australia/Brisbane\",\"Australia/Broken_Hill\",\"Australia/Currie\",\"Australia/Darwin\",\"Australia/Eucla\",\"Australia/Hobart\",\"Australia/Lindeman\",\"Australia/Lord_Howe\",\"Australia/Melbourne\",\"Australia/Perth\",\"Australia/Sydney\",\"Europe/Vienna\",\"Pacific/Pago_Pago\",\"America/Argentina/Buenos_Aires\",\"America/Argentina/Catamarca\",\"America/Argentina/Cordoba\",\"America/Argentina/Jujuy\",\"America/Argentina/La_Rioja\",\"America/Argentina/Mendoza\",\"America/Argentina/Rio_Gallegos\",\"America/Argentina/Salta\",\"America/Argentina/San_Juan\",\"America/Argentina/San_Luis\",\"America/Argentina/Tucuman\",\"America/Argentina/Ushuaia\",\"Antarctica/Casey\",\"Antarctica/Davis\",\"Antarctica/DumontDUrville\",\"Antarctica/Mawson\",\"Antarctica/McMurdo\",\"Antarctica/Palmer\",\"Antarctica/Rothera\",\"Antarctica/Syowa\",\"Antarctica/Troll\",\"Antarctica/Vostok\",\"Africa/Luanda\",\"Asia/Yerevan\",\"Europe/Tirane\",\"America/Anguilla\",\"America/Antigua\",\"Asia/Kabul\",\"Asia/Dubai\",\"Europe/Andorra\",\"Africa/Asmera\",\"Africa/Timbuktu\",\"America/Argentina/ComodRivadavia\",\"America/Atka\",\"America/Buenos_Aires\",\"America/Catamarca\",\"America/Coral_Harbour\",\"America/Cordoba\",\"America/Ensenada\",\"America/Fort_Wayne\",\"America/Indianapolis\",\"America/Jujuy\",\"America/Knox_IN\",\"America/Louisville\",\"America/Mendoza\",\"America/Montreal\",\"America/Porto_Acre\",\"America/Rosario\",\"America/Santa_Isabel\",\"America/Shiprock\",\"America/Virgin\",\"Antarctica/South_Pole\",\"Asia/Ashkhabad\",\"Asia/Calcutta\",\"Asia/Chongqing\",\"Asia/Chungking\",\"Asia/Dacca\",\"Asia/Harbin\",\"Asia/Istanbul\",\"Asia/Kashgar\",\"Asia/Katmandu\",\"Asia/Macao\",\"Asia/Rangoon\",\"Asia/Saigon\",\"Asia/Tel_Aviv\",\"Asia/Thimbu\",\"Asia/Ujung_Pandang\",\"Asia/Ulan_Bator\",\"Atlantic/Faeroe\",\"Atlantic/Jan_Mayen\",\"Australia/ACT\",\"Australia/Canberra\",\"Australia/LHI\",\"Australia/North\",\"Australia/NSW\",\"Australia/Queensland\",\"Australia/South\",\"Australia/Tasmania\",\"Australia/Victoria\",\"Australia/West\",\"Australia/Yancowinna\",\"Brazil/Acre\",\"Brazil/DeNoronha\",\"Brazil/East\",\"Brazil/West\",\"Canada/Atlantic\",\"Canada/Central\",\"Canada/East-Saskatchewan\",\"Canada/Eastern\",\"Canada/Mountain\",\"Canada/Newfoundland\",\"Canada/Pacific\",\"Canada/Saskatchewan\",\"Canada/Yukon\",\"CET\",\"Chile/Continental\",\"Chile/EasterIsland\",\"CST6CDT\",\"Cuba\",\"EET\",\"Egypt\",\"Eire\",\"EST\",\"EST5EDT\",\"Etc/GMT\",\"Etc/GMT+0\",\"Etc/GMT+1\",\"Etc/GMT+10\",\"Etc/GMT+11\",\"Etc/GMT+12\",\"Etc/GMT+2\",\"Etc/GMT+3\",\"Etc/GMT+4\",\"Etc/GMT+5\",\"Etc/GMT+6\",\"Etc/GMT+7\",\"Etc/GMT+8\",\"Etc/GMT+9\",\"Etc/GMT-0\",\"Etc/GMT-1\",\"Etc/GMT-10\",\"Etc/GMT-11\",\"Etc/GMT-12\",\"Etc/GMT-13\",\"Etc/GMT-14\",\"Etc/GMT-2\",\"Etc/GMT-3\",\"Etc/GMT-4\",\"Etc/GMT-5\",\"Etc/GMT-6\",\"Etc/GMT-7\",\"Etc/GMT-8\",\"Etc/GMT-9\",\"Etc/GMT0\",\"Etc/Greenwich\",\"Etc/UCT\",\"Etc/Universal\",\"Etc/UTC\",\"Etc/Zulu\",\"Europe/Belfast\",\"Europe/Nicosia\",\"Europe/Tiraspol\",\"GB\",\"GB-Eire\",\"GMT\",\"GMT+0\",\"GMT-0\",\"GMT0\",\"Greenwich\",\"Hongkong\",\"HST\",\"Iceland\",\"Iran\",\"Israel\",\"Jamaica\",\"Japan\",\"Kwajalein\",\"Libya\",\"MET\",\"Mexico/BajaNorte\",\"Mexico/BajaSur\",\"Mexico/General\",\"MST\",\"MST7MDT\",\"Navajo\",\"NZ\",\"NZ-CHAT\",\"Pacific/Johnston\",\"Pacific/Ponape\",\"Pacific/Samoa\",\"Pacific/Truk\",\"Pacific/Yap\",\"Poland\",\"Portugal\",\"PRC\",\"PST8PDT\",\"ROC\",\"ROK\",\"Singapore\",\"Turkey\",\"UCT\",\"Universal\",\"US/Alaska\",\"US/Aleutian\",\"US/Arizona\",\"US/Central\",\"US/East-Indiana\",\"US/Eastern\",\"US/Hawaii\",\"US/Indiana-Starke\",\"US/Michigan\",\"US/Mountain\",\"US/Pacific\",\"US/Pacific-New\",\"US/Samoa\",\"UTC\",\"W-SU\",\"WET\",\"Zulu\"];\nmsg.options = options.sort();\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1010, - "y": 2320, + "x": 1090, + "y": 2340, "wires": [ [ "9bb86c18.f0deb" @@ -3030,8 +2885,8 @@ ], "payload": "", "topic": "", - "x": 1462, - "y": 2314, + "x": 1542, + "y": 2334, "wires": [ [ "a6b43763.a12aa8", @@ -3039,27 +2894,6 @@ ] ] }, - { - "id": "f49b2576.99e1d8", - "type": "inject", - "z": "a564595f.642818", - "name": "", - "topic": "", - "payload": "", - "payloadType": "str", - "repeat": "", - "crontab": "", - "once": true, - "onceDelay": "2", - "x": 455, - "y": 2317, - "wires": [ - [ - "9fa076ac.17f568", - "a1357f50.ee57a" - ] - ] - }, { "id": "a1357f50.ee57a", "type": "file in", @@ -3068,8 +2902,8 @@ "filename": "/etc/timezone", "format": "utf8", "sendError": true, - "x": 1016, - "y": 2413, + "x": 1096, + "y": 2433, "wires": [ [ "6547f655.0621e8" @@ -3084,8 +2918,8 @@ "func": "msg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1223, - "y": 2412, + "x": 1303, + "y": 2432, "wires": [ [ "9bb86c18.f0deb" @@ -3109,8 +2943,8 @@ "payload": "tz", "payloadType": "flow", "topic": "", - "x": 1019, - "y": 2478, + "x": 1099, + "y": 2498, "wires": [ [ "c542fa3.77cb308" @@ -3128,8 +2962,8 @@ "timer": "", "oldrc": false, "name": "set timezone sym link", - "x": 1240, - "y": 2480, + "x": 1320, + "y": 2500, "wires": [ [], [], @@ -3150,8 +2984,8 @@ "cancel": "", "topic": "", "name": "", - "x": 2010, - "y": 2500, + "x": 2090, + "y": 2520, "wires": [] }, { @@ -3180,8 +3014,8 @@ "from": "", "to": "", "reg": false, - "x": 1820, - "y": 2460, + "x": 1900, + "y": 2480, "wires": [ [ "8ee3b7e3.1833a8", @@ -3201,8 +3035,8 @@ "label": "", "format": "{{msg.payload}}", "layout": "col-center", - "x": 1970, - "y": 2440, + "x": 2050, + "y": 2460, "wires": [] }, { @@ -3219,8 +3053,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 1253.4999237060547, - "y": 1392.9999895095825, + "x": 1333.4999237060547, + "y": 1412.9999895095825, "wires": [ [ "e899ac8f.ec903", @@ -3248,8 +3082,8 @@ "from": "", "to": "", "reg": false, - "x": 1632.9999237060547, - "y": 1433.9999895095825, + "x": 1712.9999237060547, + "y": 1453.9999895095825, "wires": [ [ "dc8e0ec5.550d", @@ -3268,8 +3102,8 @@ "timer": "", "oldrc": false, "name": "hostname", - "x": 720, - "y": 2600, + "x": 800, + "y": 2620, "wires": [ [ "deb9c4fc.20c098" @@ -3290,8 +3124,8 @@ "crontab": "", "once": true, "onceDelay": "10", - "x": 531, - "y": 2599.5, + "x": 611, + "y": 2619.5, "wires": [ [ "7496a044.dd719" @@ -3310,8 +3144,8 @@ "label": "Tilt Pi Local Address", "format": "{{msg.payload}}", "layout": "col-center", - "x": 1268, - "y": 2605, + "x": 1348, + "y": 2625, "wires": [] }, { @@ -3336,8 +3170,8 @@ "offvalueType": "str", "officon": "", "offcolor": "", - "x": 2314.0002632141113, - "y": 2390.0005922317505, + "x": 2394.0002632141113, + "y": 2410.0005922317505, "wires": [ [ "b58e5805.5d5928" @@ -3352,8 +3186,8 @@ "func": "if (msg.payload === \"°C\"){\nflow.set('tempUnits',[-32,0.555]);\nflow.set('displayUnits',\"°C\");\nreturn msg;\n}\nif (msg.payload === \"°F\"){\nflow.set('tempUnits',[0,1]);\nflow.set('displayUnits',\"°F\");\nreturn msg;\n}", "outputs": "1", "noerr": 0, - "x": 2567.99991607666, - "y": 2355.0002250671387, + "x": 2647.99991607666, + "y": 2375.0002250671387, "wires": [ [ "5312bf4.09fd44", @@ -3371,8 +3205,8 @@ "useSpawn": false, "timer": "", "name": "Shutdown", - "x": 810, - "y": 2820, + "x": 890, + "y": 2840, "wires": [ [ "f2bdbc36.5644d" @@ -3398,8 +3232,8 @@ "payload": "now", "payloadType": "str", "topic": "", - "x": 610, - "y": 2840, + "x": 690, + "y": 2860, "wires": [ [ "5a69b142.f96b6" @@ -3418,8 +3252,8 @@ "cancel": "", "topic": "", "name": "", - "x": 1070, - "y": 2820, + "x": 1150, + "y": 2840, "wires": [] }, { @@ -3430,8 +3264,8 @@ "func": "//prevent excessive cloud logs\nmsg.payload = '';\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1282.9999237060547, - "y": 1552.9999895095825, + "x": 1362.9999237060547, + "y": 1572.9999895095825, "wires": [ [ "1dc3fc9e.e1f193" @@ -3453,8 +3287,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 1388.9999237060547, - "y": 1462.9999895095825, + "x": 1468.9999237060547, + "y": 1482.9999895095825, "wires": [ [ "510190df.5876c" @@ -3472,8 +3306,8 @@ "timer": "", "oldrc": false, "name": "Download Update from GitHub", - "x": 1030, - "y": 2720, + "x": 1110, + "y": 2740, "wires": [ [], [], @@ -3500,8 +3334,8 @@ "payload": "", "payloadType": "str", "topic": "", - "x": 630, - "y": 2720, + "x": 710, + "y": 2740, "wires": [ [ "35b035bf.c8c96a" @@ -3516,8 +3350,8 @@ "func": "if (msg.payload.code === 0){\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 1280, - "y": 2720, + "x": 1360, + "y": 2740, "wires": [ [ "b0fab2cd.d77d4" @@ -3535,42 +3369,14 @@ "timer": "", "oldrc": false, "name": "Update App", - "x": 1450, - "y": 2720, + "x": 1530, + "y": 2740, "wires": [ [], [], [] ] }, - { - "id": "88f0f33d.110ab", - "type": "function", - "z": "a564595f.642818", - "name": "Set Uncal Calibration Array", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalArray = msg.payload.split(\",\");\nflow.set('uncalSGpoints-' + color,uncalArray);", - "outputs": 1, - "noerr": 0, - "x": 3127.9999237060547, - "y": 1773.9999895095825, - "wires": [ - [] - ] - }, - { - "id": "b36a946.3813e68", - "type": "function", - "z": "a564595f.642818", - "name": "Set Actual Calibration Array", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalArray = msg.payload.split(\",\");\nflow.set('actualSGpoints-' + color,uncalArray);", - "outputs": 1, - "noerr": 0, - "x": 3126.4999237060547, - "y": 1833.9999895095825, - "wires": [ - [] - ] - }, { "id": "640f9404.72d27c", "type": "file in", @@ -3579,8 +3385,8 @@ "filename": "", "format": "utf8", "sendError": false, - "x": 2920.5, - "y": 21, + "x": 3000.5, + "y": 41, "wires": [ [ "68ec71d.2dec29" @@ -3595,8 +3401,8 @@ "func": "flow.set('cloudURL',[\"https://script.google.com/macros/s/AKfycbwNXh6rEWoULd0vxWxDylG_PJwQwe0dn5hdtSkuC4k3D9AXBSA/exec\",true]);\nflow.set(msg.payload.Color + \"-Comment\",msg.payload.Comment);\nflow.set('logCloudDataCheck',true);\nflow.set('loggingInterval',15);\nflow.set(msg.payload.Color + \"-Beer\",msg.payload.Beer);\n//initialize local logging\nflow.set('logLocalDataCheck',true);\nflow.set('localloggingInterval',15);\nmsg2 = {};\nmsg2.payload = \"Time,Timepoint,Temp,SG,Beer,Color,Comment,RSSI,Uptime\";\n//post now\nflow.set('lastpost-' + msg.payload.Color,0);\nreturn [msg,msg2];", "outputs": "2", "noerr": 0, - "x": 3026.5, - "y": 132, + "x": 3106.5, + "y": 152, "wires": [ [ "cdf7a5f1.e44358" @@ -3617,8 +3423,8 @@ "repeat": "", "crontab": "", "once": true, - "x": 2314, - "y": 20, + "x": 2394, + "y": 40, "wires": [ [ "5006138a.18932c" @@ -3636,8 +3442,8 @@ "timer": "", "oldrc": false, "name": "Remove Config File", - "x": 3460, - "y": 27.5, + "x": 3540, + "y": 47.5, "wires": [ [], [], @@ -3652,8 +3458,8 @@ "func": "//get custom cloud URL if previously set\nvar color = flow.get('colordropdownSelect');\nif (msg.payload === true){\n flow.set(\"cloudURL\",[\"https://script.google.com/macros/s/AKfycbwNXh6rEWoULd0vxWxDylG_PJwQwe0dn5hdtSkuC4k3D9AXBSA/exec\",true]);\n msg.payload = flow.get(\"cloudURL\")[0]; \n}\nif (msg.payload === false){\n flow.set(\"cloudURL\",[\"https://script.google.com/macros/s/AKfycbwNXh6rEWoULd0vxWxDylG_PJwQwe0dn5hdtSkuC4k3D9AXBSA/exec\",false]);\n msg.payload = flow.get(\"cloudURL-\" + color)||\"Not set for \" + color;\n }\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1650, - "y": 1280, + "x": 1730, + "y": 1300, "wires": [ [ "edb75c90.8414" @@ -3672,8 +3478,8 @@ "cancel": "", "topic": "", "name": "Cloud URL Status", - "x": 2370, - "y": 1280, + "x": 2450, + "y": 1300, "wires": [] }, { @@ -3685,8 +3491,8 @@ "method": "get", "upload": false, "swaggerDoc": "", - "x": 3980, - "y": 900, + "x": 4060, + "y": 920, "wires": [ [ "dc9ecd32.25037" @@ -3702,8 +3508,8 @@ "format": "utf8", "chunk": false, "sendError": false, - "x": 4334.21842956543, - "y": 905.031304359436, + "x": 4414.21842956543, + "y": 925.031304359436, "wires": [ [ "7b788221.059a2c" @@ -3719,8 +3525,8 @@ "headers": { "Access-Control-Allow-Origin": "*" }, - "x": 4626.111217498779, - "y": 905.0694370269775, + "x": 4706.111217498779, + "y": 925.0694370269775, "wires": [] }, { @@ -3732,8 +3538,8 @@ "format": "utf8", "chunk": false, "sendError": false, - "x": 1220, - "y": 260, + "x": 1300, + "y": 280, "wires": [ [ "543d2dd7.2fe974" @@ -3746,8 +3552,8 @@ "z": "a564595f.642818", "name": "", "pretty": false, - "x": 1350, - "y": 260, + "x": 1430, + "y": 280, "wires": [ [ "a2f14292.5b0f3", @@ -3763,8 +3569,8 @@ "func": "if (msg.payload !== undefined){\nflow.set(msg.payload.Color + '-Beer',msg.payload.Beer);\nflow.set('actualSGpoints-' + msg.payload.Color,msg.payload.actualSGPoints);\nflow.set('uncalSGpoints-' + msg.payload.Color,msg.payload.unCalSGPoints);\nflow.set('actualTemppoints-' + msg.payload.Color,msg.payload.actualTempPoints);\nflow.set('uncalTemppoints-' + msg.payload.Color,msg.payload.unCalTempPoints);\n//node.warn(msg.payload.defaultCloudURL);\nflow.set('cloudURL-' + msg.payload.Color,msg.payload.customcloudURL);\n}\n//after last tilt (pink) settings restored, start scanning\nelse if (msg.filename === 0){//ls command completed\n msg.payload = \"python3 -u -m aioblescan -T\";\n return msg;\n }", "outputs": "1", "noerr": 0, - "x": 1500, - "y": 300, + "x": 1580, + "y": 320, "wires": [ [ "9d251f5a.10bdc" @@ -3779,8 +3585,8 @@ "func": "//only updates if custom Cloud URLs are in use\nvar check = flow.get('cloudURL')[1]||false;\nif (check === true){\n}else{\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 1060, - "y": 1260, + "x": 1140, + "y": 1280, "wires": [ [ "b1836d66.f976c" @@ -3799,8 +3605,8 @@ "cancel": "", "topic": "", "name": "Beer Name Status", - "x": 4475.181529998779, - "y": 507.5486431121826, + "x": 4555.181529998779, + "y": 527.5486431121826, "wires": [] }, { @@ -3812,8 +3618,8 @@ "appendNewline": false, "createDir": false, "overwriteFile": "true", - "x": 1769.0565185546875, - "y": 20, + "x": 1849.0565185546875, + "y": 40, "wires": [ [] ] @@ -3826,8 +3632,8 @@ "func": "if (msg.req.params.color === undefined){\n msg.req.params.color = \"global\";\n}\nmsg.filename = \"/home/pi/\" + msg.req.params.color;\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 4169.642906188965, - "y": 902.8828468322754, + "x": 4249.642906188965, + "y": 922.8828468322754, "wires": [ [ "bdb5caad.d3dba8" @@ -3849,8 +3655,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": true, - "x": 1520.746826171875, - "y": 32.618064880371094, + "x": 1600.746826171875, + "y": 52.618064880371094, "wires": [ [ "c6fd016d.ab4a7", @@ -3864,8 +3670,8 @@ "z": "a564595f.642818", "name": "", "pretty": false, - "x": 4472.655807495117, - "y": 904.7291736602783, + "x": 4552.655807495117, + "y": 924.7291736602783, "wires": [ [ "60f15c0d.04a0b4" @@ -3880,8 +3686,8 @@ "func": "//set default dropdown item if undefined\nmsg.options = msg.payload||[\"NONE\"];\nmsg.payload = flow.get('colordropdownSelect')||msg.options[0];\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 910, - "y": 860, + "x": 990, + "y": 880, "wires": [ [ "93d9202c.d9c1e", @@ -3890,356 +3696,133 @@ ] }, { - "id": "f0097da4.edc54", - "type": "function", - "z": "a564595f.642818", - "name": "set Actual Temp Value", - "func": "var value = Number(msg.payload);\nflow.set('actualTemppoint',value.toFixed(1));\nmsg.payload = flow.get('colordropdownSelect');\nreturn msg;", - "outputs": 1, - "noerr": 0, - "x": 2138.4999237060547, - "y": 1950.9999895095825, - "wires": [ - [ - "a9cf2c6b.4d7f9" - ] - ] - }, - { - "id": "a9cf2c6b.4d7f9", + "id": "d6de2020.56974", "type": "function", "z": "a564595f.642818", - "name": "Add Temp Cal Point", - "func": "var color = msg.payload;\nvar uncalTempcalPoint = flow.get('uncalTemppoint')||0;\nvar actualTempcalPoint = flow.get('actualTemppoint')||0;\nvar uncalpointsArray = flow.get('uncalTemppoints-' + color)||[];\nvar actualpointsArray = flow.get('actualTemppoints-' + color)||[];\nuncalpointsArray.push(uncalTempcalPoint);\nuncalpointsArray.sort(function(a, b){return a-b;});\nflow.set('uncalTemppoints-' + color,uncalpointsArray);\nactualpointsArray.push(actualTempcalPoint);\nactualpointsArray.sort(function(a, b){return a-b;});\nflow.set('actualTemppoints-' + color,actualpointsArray);\nvar msg1 = {payload:uncalpointsArray.toString()};\nvar msg2 = {payload:actualpointsArray.toString()};\nreturn [msg1, msg2];", - "outputs": "2", + "name": "Get Current Temp", + "func": "if (msg.payload == \"disabled\") {\n context.set(\"autoUpdate\", \"disabled\");\n}\nif (msg.payload == \"enabled\") {\n context.set(\"autoUpdate\", \"enabled\");\n}\nvar autoUpdate = context.get(\"autoUpdate\")||\"enabled\";\nif (autoUpdate == \"enabled\"){\nvar options = flow.get('options')||[];\nvar color = msg.payload;\nvar displayNumber = options.indexOf(color) + 1;\nmsg.payload = flow.get(\"storage-\" + displayNumber.toString());\nif (msg.payload !== undefined){\nvar msg1 = {};\nvar msg2 = {};\nmsg1.payload = Number(msg.payload.displayuncalTemp).toFixed(1);\nmsg2.payload = Number(msg.payload.displayTemp).toFixed(1);\nreturn [msg1,msg2];\n}\n}", + "outputs": 2, "noerr": 0, - "x": 2452.9999237060547, - "y": 1956.9999895095825, + "x": 2150, + "y": 1580, "wires": [ [ - "10bda9c0.3dcf66" + "67b168fa.e90078", + "ee2ae6f4.9089f8" ], [ - "d521fc1b.3653a" - ] - ] - }, - { - "id": "17e6c4c8.0d7e1b", - "type": "ui_button", - "z": "a564595f.642818", - "name": "", - "group": "c12bcb12.dbd0d8", - "order": 5, - "width": 0, - "height": 0, - "passthru": false, - "label": "Clear Calibration", - "color": "", - "bgcolor": "", - "icon": "", - "payload": "colordropdownSelect", - "payloadType": "flow", - "topic": "", - "x": 2210.9999237060547, - "y": 2076.9999895095825, - "wires": [ - [ - "721c929.10edb6c" + "1381f934.df5b27", + "37e5d681.345a7a" ] ] }, { - "id": "721c929.10edb6c", + "id": "67b168fa.e90078", "type": "function", "z": "a564595f.642818", - "name": "clear calibration", - "func": "var color = msg.payload;\nvar uncalpointsArray = flow.set('uncalTemppoints-' + color,[]);\nvar actualpointsArray = flow.set('actualTemppoints-' + color,[]);\nmsg.payload = \"\";\nreturn msg;", + "name": "set Pre-cal Temp Value", + "func": "flow.set('uncalTemppoint',Number(msg.payload).toFixed(1));", "outputs": 1, "noerr": 0, - "x": 2422.9999237060547, - "y": 2077.9999895095825, + "x": 2880, + "y": 1600, "wires": [ - [ - "10bda9c0.3dcf66", - "d521fc1b.3653a" - ] + [] ] }, { - "id": "5933654f.572e0c", + "id": "15afce7c.5604d2", "type": "function", "z": "a564595f.642818", - "name": "update display", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalpointsArray = flow.get('uncalTemppoints-' + color)||\"\";\nvar actualpointsArray = flow.get('actualTemppoints-' + color)||\"\";\nvar msg1 = {payload:uncalpointsArray};\nvar msg2 = {payload:actualpointsArray};\nreturn [msg1, msg2];", - "outputs": "2", + "name": "Change Ferm Units", + "func": "if (msg.payload === \"sg\"){\nflow.set('fermdisplayUnits',\"\");\nnode.send([{'payload':'sg'},{'payload':false},{'payload':false}]);\n}\nif (msg.payload === \"plato\"){\nflow.set('fermdisplayUnits',\"°P\");\nnode.send([{'payload':false},{'payload':'plato'},{'payload':false}]);\n}\nif (msg.payload === \"brix\"){\nflow.set('fermdisplayUnits',\"°Bx\");\nnode.send([{'payload':false},{'payload':false},{'payload':'brix'}]);\n}", + "outputs": "3", "noerr": 0, - "x": 2221.9999237060547, - "y": 2013.9999895095825, + "x": 2684, + "y": 2543.0002098083496, "wires": [ [ - "10bda9c0.3dcf66" + "d66a9036.7565" + ], + [ + "88a56bea.b66268" ], [ - "d521fc1b.3653a" + "3c18b104.de8f2e" ] ] }, { - "id": "4b7531fb.46829", - "type": "ui_text_input", + "id": "88a56bea.b66268", + "type": "ui_switch", "z": "a564595f.642818", "name": "", - "label": "Enter Actual (known) point:", - "group": "c12bcb12.dbd0d8", - "order": 2, + "label": "Plato", + "group": "b0619070.ac95d", + "order": 4, "width": 0, "height": 0, - "passthru": true, - "mode": "text", - "delay": "0", + "passthru": false, + "decouple": "true", "topic": "", - "x": 1827.4999237060547, - "y": 1947.9999895095825, + "style": "", + "onvalue": "plato", + "onvalueType": "str", + "onicon": "", + "oncolor": "", + "offvalue": "false", + "offvalueType": "bool", + "officon": "", + "offcolor": "", + "x": 2505.000690460205, + "y": 2632.5001878738403, "wires": [ [ - "f0097da4.edc54" + "15afce7c.5604d2" ] ] }, { - "id": "10bda9c0.3dcf66", - "type": "ui_text_input", + "id": "3c18b104.de8f2e", + "type": "ui_switch", "z": "a564595f.642818", "name": "", - "label": "Edit Pre-calibrated (Tilt) Points", - "tooltip": "", - "group": "c12bcb12.dbd0d8", - "order": 3, + "label": "Brix", + "group": "b0619070.ac95d", + "order": 5, "width": 0, "height": 0, "passthru": false, - "mode": "text", - "delay": "0", + "decouple": "true", "topic": "", - "x": 2794.4999237060547, - "y": 1996.9999895095825, + "style": "", + "onvalue": "brix", + "onvalueType": "str", + "onicon": "", + "oncolor": "", + "offvalue": "false", + "offvalueType": "bool", + "officon": "", + "offcolor": "", + "x": 2509.750312805176, + "y": 2719.75013923645, "wires": [ [ - "a5ca25c7.fd8c98" + "15afce7c.5604d2" ] ] }, { - "id": "d521fc1b.3653a", - "type": "ui_text_input", - "z": "a564595f.642818", - "name": "", - "label": " Edit Actual Points", - "group": "c12bcb12.dbd0d8", - "order": 4, - "width": 0, - "height": 0, - "passthru": false, - "mode": "text", - "delay": "0", - "topic": "", - "x": 2766.4999237060547, - "y": 2063.9999895095825, - "wires": [ - [ - "19ca9195.29599e" - ] - ] - }, - { - "id": "a5ca25c7.fd8c98", - "type": "function", - "z": "a564595f.642818", - "name": "Set Uncal Calibration Array", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalArray = msg.payload.split(\",\");\nflow.set('uncalTemppoints-' + color,uncalArray);", - "outputs": 1, - "noerr": 0, - "x": 3127.9999237060547, - "y": 1993.9999895095825, - "wires": [ - [] - ] - }, - { - "id": "19ca9195.29599e", - "type": "function", - "z": "a564595f.642818", - "name": "Set Actual Calibration Array", - "func": "var color = flow.get('colordropdownSelect')||\"\";\nvar uncalArray = msg.payload.split(\",\");\nflow.set('actualTemppoints-' + color,uncalArray);", - "outputs": 1, - "noerr": 0, - "x": 3126.4999237060547, - "y": 2053.9999895095825, - "wires": [ - [] - ] - }, - { - "id": "d6de2020.56974", - "type": "function", - "z": "a564595f.642818", - "name": "Get Current Temp", - "func": "var options = flow.get('options')||[];\nvar color = msg.payload;\nvar displayNumber = options.indexOf(color) + 1;\nmsg.payload = flow.get(\"storage-\" + displayNumber.toString());\nif (msg.payload !== undefined){\nreturn msg;\n}", - "outputs": 1, - "noerr": 0, - "x": 2088.4999237060547, - "y": 1510.9999895095825, - "wires": [ - [ - "854dec23.fee5f", - "67b168fa.e90078", - "675094a4.49a26c" - ] - ] - }, - { - "id": "854dec23.fee5f", - "type": "ui_text", - "z": "a564595f.642818", - "group": "c12bcb12.dbd0d8", - "order": 1, - "width": 0, - "height": 0, - "name": "", - "label": "Pre-calibrated Temperature:", - "format": "{{msg.payload.displayuncalTemp | number:1}}{{msg.payload.tempunits}}", - "layout": "row-spread", - "x": 2618.4999237060547, - "y": 1530.9999895095825, - "wires": [] - }, - { - "id": "67b168fa.e90078", - "type": "function", - "z": "a564595f.642818", - "name": "set Pre-cal Temp Value", - "func": "flow.set('uncalTemppoint',Number(msg.payload.displayuncalTemp).toFixed(1));", - "outputs": 1, - "noerr": 0, - "x": 2598.4999237060547, - "y": 1590.9999895095825, - "wires": [ - [] - ] - }, - { - "id": "15afce7c.5604d2", - "type": "function", - "z": "a564595f.642818", - "name": "Change Ferm Units", - "func": "if (msg.payload === \"sg\"){\nflow.set('fermdisplayUnits',\"\");\nnode.send([{'payload':'sg'},{'payload':false},{'payload':false}]);\n}\nif (msg.payload === \"plato\"){\nflow.set('fermdisplayUnits',\"°P\");\nnode.send([{'payload':false},{'payload':'plato'},{'payload':false}]);\n}\nif (msg.payload === \"brix\"){\nflow.set('fermdisplayUnits',\"°Bx\");\nnode.send([{'payload':false},{'payload':false},{'payload':'brix'}]);\n}", - "outputs": "3", - "noerr": 0, - "x": 2604, - "y": 2523.0002098083496, - "wires": [ - [ - "d66a9036.7565" - ], - [ - "88a56bea.b66268" - ], - [ - "3c18b104.de8f2e" - ] - ] - }, - { - "id": "88a56bea.b66268", - "type": "ui_switch", - "z": "a564595f.642818", - "name": "", - "label": "Plato", - "group": "b0619070.ac95d", - "order": 4, - "width": 0, - "height": 0, - "passthru": false, - "decouple": "true", - "topic": "", - "style": "", - "onvalue": "plato", - "onvalueType": "str", - "onicon": "", - "oncolor": "", - "offvalue": "false", - "offvalueType": "bool", - "officon": "", - "offcolor": "", - "x": 2425.000690460205, - "y": 2612.5001878738403, - "wires": [ - [ - "15afce7c.5604d2" - ] - ] - }, - { - "id": "3c18b104.de8f2e", - "type": "ui_switch", - "z": "a564595f.642818", - "name": "", - "label": "Brix", - "group": "b0619070.ac95d", - "order": 5, - "width": 0, - "height": 0, - "passthru": false, - "decouple": "true", - "topic": "", - "style": "", - "onvalue": "brix", - "onvalueType": "str", - "onicon": "", - "oncolor": "", - "offvalue": "false", - "offvalueType": "bool", - "officon": "", - "offcolor": "", - "x": 2429.750312805176, - "y": 2699.75013923645, - "wires": [ - [ - "15afce7c.5604d2" - ] - ] - }, - { - "id": "2bb152f1.d1cbee", - "type": "inject", - "z": "a564595f.642818", - "name": "Local Logging Interval", - "topic": "", - "payload": "localloggingInterval", - "payloadType": "flow", - "repeat": "15", - "crontab": "", - "once": false, - "x": 1855.295280456543, - "y": 1571.0105066299438, - "wires": [ - [ - "7b1370e2.6e8c9" - ] - ] - }, - { - "id": "c0f36d.ab686c9", - "type": "file in", + "id": "c0f36d.ab686c9", + "type": "file in", "z": "a564595f.642818", "name": "", "filename": "/home/pi/global.json", "format": "utf8", "chunk": false, "sendError": false, - "x": 580, - "y": 380, + "x": 660, + "y": 400, "wires": [ [ "aa94ced8.4cb66" @@ -4252,8 +3835,8 @@ "z": "a564595f.642818", "name": "", "pretty": false, - "x": 930, - "y": 380, + "x": 1010, + "y": 400, "wires": [ [ "59df1198.a2519" @@ -4268,8 +3851,8 @@ "func": "flow.set('logCloudDataCheck',msg.payload.logCloudDataCheck);\nnode.send([null,{'payload':msg.payload.logCloudDataCheck},null]);\nflow.set('logLocalDataCheck',msg.payload.logLocalDataCheck);\nnode.send([null,null,{'payload':msg.payload.logLocalDataCheck}]);\nflow.set('localloggingInterval',msg.payload.localloggingInterval);\nflow.set('loggingInterval',msg.payload.loggingInterval);\nflow.set('cloudURL',msg.payload.defaultcloudURL);\nnode.send([{'payload':msg.payload.defaultcloudURL[1]},null,null]);\nflow.set('fermdisplayUnits',msg.payload.fermunits);\nflow.set('displayUnits',msg.payload.tempunits);\nflow.set('minRSSI',msg.payload.minRSSI);\nflow.set('IDbyMAC',msg.payload.IDbyMAC);\nflow.set('alphaSG', msg.payload.alphaSG||100);\nflow.set('alphaTemp', msg.payload.alphaTemp||100);\nflow.set('numberSamples', msg.payload.numberSamples||0.5);\nflow.set('smoothSwitch', msg.payload.smoothSwitch||false);\n//return msg;", "outputs": "3", "noerr": 0, - "x": 1080, - "y": 380, + "x": 1160, + "y": 400, "wires": [ [ "b1836d66.f976c" @@ -4291,8 +3874,8 @@ "appendNewline": false, "createDir": false, "overwriteFile": "true", - "x": 1758.239501953125, - "y": 68.01043319702148, + "x": 1838.239501953125, + "y": 88.01043319702148, "wires": [ [] ] @@ -4306,8 +3889,8 @@ "method": "get", "upload": false, "swaggerDoc": "", - "x": 3966.9335861206055, - "y": 965.8784227371216, + "x": 4046.9335861206055, + "y": 985.8784227371216, "wires": [ [ "dc9ecd32.25037" @@ -4336,8 +3919,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 2532.688522338867, - "y": 2422.262928009033, + "x": 2612.688522338867, + "y": 2442.262928009033, "wires": [ [ "15afce7c.5604d2" @@ -4366,8 +3949,8 @@ "offvalueType": "str", "officon": "", "offcolor": "", - "x": 2320.3509521484375, - "y": 2316.010766029358, + "x": 2400.3509521484375, + "y": 2336.010766029358, "wires": [ [ "b58e5805.5d5928" @@ -4387,8 +3970,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 3100, - "y": 420, + "x": 3180, + "y": 440, "wires": [ [] ] @@ -4405,8 +3988,8 @@ "crontab": "", "once": true, "onceDelay": "2", - "x": 1910, - "y": 2360, + "x": 1990, + "y": 2380, "wires": [ [ "fd49eb70.32ff38" @@ -4425,8 +4008,8 @@ "crontab": "", "once": true, "onceDelay": "2", - "x": 2050, - "y": 2640, + "x": 2130, + "y": 2660, "wires": [ [ "3c9890f9.04d5f" @@ -4441,8 +4024,8 @@ "func": "msg.payload = flow.get(msg.payload);\nif (msg.payload === \"\"){\n msg.payload = \"sg\";\n}\nif (msg.payload === \"°P\"){\n msg.payload = \"plato\";\n}\nif (msg.payload === \"°Bx\"){\n msg.payload = \"brix\";\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2239.6248779296875, - "y": 2631.4583740234375, + "x": 2319.6248779296875, + "y": 2651.4583740234375, "wires": [ [ "88a56bea.b66268", @@ -4459,8 +4042,8 @@ "func": "var previous = context.get('watchedData-' + msg.payload.Color)||\"\";\n//changes in settings/measurements below trigger a backup\nvar current = \nmsg.payload.Beer + \nmsg.payload.unCalSGPoints +\nmsg.payload.actualSGPoints +\nmsg.payload.actualTempPoints +\nmsg.payload.unCalTempPoints +\nmsg.payload.fermunits +\nmsg.payload.tempunits +\nmsg.payload.defaultcloudURL +\nmsg.payload.customcloudURL +\nmsg.payload.logCloudDataCheck +\nmsg.payload.logLocalDataCheck +\nmsg.payload.localloggingInterval +\nmsg.payload.loggingInterval +\nmsg.payload.minRSSI +\nmsg.payload.IDbyMAC +\nmsg.payload.alphaSG +\nmsg.payload.alphaTemp +\nmsg.payload.numberSamples +\nmsg.payload.smoothSwitch;\nif (current !== previous){\n //node.warn(current);\n //node.warn(previous);\n context.set('watchedData-' + msg.payload.Color,current);\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 1314.8472900390625, - "y": 35.68404006958008, + "x": 1394.8472900390625, + "y": 55.68404006958008, "wires": [ [ "6a77b965.400cc8" @@ -4482,8 +4065,8 @@ "min": "-105", "max": "-35", "step": 1, - "x": 890, - "y": 2920, + "x": 970, + "y": 2940, "wires": [ [ "99ac3bca.7a1868" @@ -4509,8 +4092,8 @@ "from": "", "to": "", "reg": false, - "x": 1070, - "y": 2920, + "x": 1150, + "y": 2940, "wires": [ [ "3505363e.8a498a" @@ -4529,8 +4112,8 @@ "label": "Minimum RSSI in dBm", "format": "{{msg.payload}}", "layout": "row-spread", - "x": 1300, - "y": 2920, + "x": 1380, + "y": 2940, "wires": [] }, { @@ -4541,8 +4124,8 @@ "func": "var previous = context.get('data-' + msg.topic)||[];\nvar currentArray = msg.payload.split(\",\");\nvar current = currentArray[2] + currentArray[3] + currentArray[4] + currentArray[6];\nvar time = context.get('time-' + msg.topic)||Date.now();\n//node.warn(current);\n//node.warn(Date.now() - time);\nif (previous !== current || Date.now() - time > 900000 ){\n context.set('time-' + msg.topic,Date.now());\n context.set('data-' + msg.topic,current);\n //only clear comment if cloud logging not checked\n if (!flow.get('logCloudDataCheck')){\n flow.set(msg.topic + \"-Comment\",\"\");\n }\n return msg;\n}\n\n", "outputs": 1, "noerr": 0, - "x": 3280.96915435791, - "y": 318.01389932632446, + "x": 3360.96915435791, + "y": 338.01389932632446, "wires": [ [ "2f5685a6.76e34a" @@ -4556,8 +4139,8 @@ "name": "watch for USB drive", "files": "/dev", "recursive": "", - "x": 495, - "y": 3090.0626363754272, + "x": 575, + "y": 3110.0626363754272, "wires": [ [ "bc55cff6.44c8d" @@ -4581,8 +4164,8 @@ ], "checkall": "false", "outputs": 1, - "x": 686.5242309570312, - "y": 3032.2256088256836, + "x": 766.5242309570312, + "y": 3052.2256088256836, "wires": [ [ "27555620.4af91a" @@ -4600,8 +4183,8 @@ "timer": "", "oldrc": false, "name": "mount usb drive", - "x": 1215.6322784423828, - "y": 3093.7571334838867, + "x": 1295.6322784423828, + "y": 3113.7571334838867, "wires": [ [], [ @@ -4623,8 +4206,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 1813.8790435791016, - "y": 3089.706090927124, + "x": 1893.8790435791016, + "y": 3109.706090927124, "wires": [ [], [ @@ -4643,8 +4226,8 @@ "func": "var device = msg.payload;\nmsg.payload = \"sudo mount -o uid=pi,gid=pi \" + device.substring(0,8) + \"1 /mnt/usb\";\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1097.4063987731934, - "y": 3028.469259262085, + "x": 1177.4063987731934, + "y": 3048.469259262085, "wires": [ [ "32967fe2.78f" @@ -4659,8 +4242,8 @@ "scope": [ "2836e0e1.4ea9c" ], - "x": 3594.517433166504, - "y": 184.9272117614746, + "x": 3674.517433166504, + "y": 204.9272117614746, "wires": [ [ "ffdc5060.780ca" @@ -4678,8 +4261,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 1513.684310913086, - "y": 3089.6776008605957, + "x": 1593.684310913086, + "y": 3109.6776008605957, "wires": [ [], [ @@ -4698,8 +4281,8 @@ "func": "if (msg.payload.code === 0){\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 1326.4617309570312, - "y": 3194.011266708374, + "x": 1406.4617309570312, + "y": 3214.011266708374, "wires": [ [ "c10d9b6d.0b1098" @@ -4714,8 +4297,8 @@ "func": "if (msg.payload.code === 0){\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 1706.1284408569336, - "y": 3169.010994911194, + "x": 1786.1284408569336, + "y": 3189.010994911194, "wires": [ [ "c83e4803.8db528" @@ -4730,8 +4313,8 @@ "func": "node.send({'payload':'sudo chown -R pi:pi /mnt/usb'});\nnode.send({'payload':'sudo chmod -R 775 /mnt/usb'});\nnode.send({'payload':'sudo setfacl -Rdm g:pi:rwx /mnt/usb'});\nnode.send({'payload':'sudo setfacl -Rm g:pi:rwx /mnt/usb'});", "outputs": 1, "noerr": 0, - "x": 980.5173492431641, - "y": 3343.125386238098, + "x": 1060.517349243164, + "y": 3363.125386238098, "wires": [ [ "1c2730c3.d43b4f" @@ -4749,8 +4332,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 684.5208587646484, - "y": 3161.4202003479004, + "x": 764.5208587646484, + "y": 3181.4202003479004, "wires": [ [], [], @@ -4767,8 +4350,8 @@ "func": "if (msg.payload.code === 0){\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 824.0174713134766, - "y": 3255.12242603302, + "x": 904.0174713134766, + "y": 3275.12242603302, "wires": [ [ "11f93581.985a8a" @@ -4786,8 +4369,8 @@ "repeat": "", "crontab": "", "once": true, - "x": 475, - "y": 3159.0731925964355, + "x": 555, + "y": 3179.0731925964355, "wires": [ [ "34b160f1.5b1ee" @@ -4805,8 +4388,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 1329.0173301696777, - "y": 3339.1218185424805, + "x": 1409.0173301696777, + "y": 3359.1218185424805, "wires": [ [], [], @@ -4828,8 +4411,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 1178.5139389038086, - "y": 3340.732711791992, + "x": 1258.5139389038086, + "y": 3360.732711791992, "wires": [ [ "235307e4.347e18" @@ -4844,8 +4427,8 @@ "scope": [ "c0f36d.ab686c9" ], - "x": 420, - "y": 520, + "x": 500, + "y": 540, "wires": [ [ "410f235c.c1f2ac" @@ -4871,8 +4454,8 @@ "from": "", "to": "", "reg": false, - "x": 630, - "y": 520, + "x": 710, + "y": 540, "wires": [ [ "31588cca.783d84" @@ -4887,8 +4470,8 @@ "scope": [ "c0f36d.ab686c9" ], - "x": 480, - "y": 2980, + "x": 560, + "y": 3000, "wires": [ [ "6ccc73b5.86205c" @@ -4914,8 +4497,8 @@ "from": "", "to": "", "reg": false, - "x": 660, - "y": 2980, + "x": 740, + "y": 3000, "wires": [ [ "a4d1964e.cb4f78" @@ -4934,8 +4517,8 @@ "cancel": "", "topic": "", "name": "", - "x": 3967.999954223633, - "y": 206.00000953674316, + "x": 4047.999954223633, + "y": 226.00000953674316, "wires": [] }, { @@ -4949,8 +4532,8 @@ "syntax": "mustache", "template": "Alert: {{error.message}}", "output": "str", - "x": 3780.6319465637207, - "y": 196.31249809265137, + "x": 3860.6319465637207, + "y": 216.31249809265137, "wires": [ [ "34ef6654.47916a" @@ -4965,8 +4548,8 @@ "func": "var minRSSI = flow.get('minRSSI');\nif (msg.payload.rssi >= minRSSI){\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 850, - "y": 100, + "x": 930, + "y": 120, "wires": [ [ "e5652ef0.acaaf" @@ -4985,8 +4568,8 @@ "label": "Download via USB", "format": "{{msg.payload}}", "layout": "col-center", - "x": 2270.250030517578, - "y": 3036.5000343322754, + "x": 2350.250030517578, + "y": 3056.5000343322754, "wires": [] }, { @@ -5004,8 +4587,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": true, - "x": 898.5, - "y": 3019, + "x": 978.5, + "y": 3039, "wires": [ [ "c80707fb.c9ff98", @@ -5024,8 +4607,8 @@ "repeat": "30", "crontab": "", "once": true, - "x": 1794.375, - "y": 2945, + "x": 1874.375, + "y": 2965, "wires": [ [ "eef04124.0438f" @@ -5040,8 +4623,8 @@ "func": "if (msg.payload.code === 0){\n msg.payload = \"Success, remove USB drive.\";\n return msg;\n}\n", "outputs": 1, "noerr": 0, - "x": 2046.2500228881836, - "y": 3101.2500343322754, + "x": 2126.2500228881836, + "y": 3121.2500343322754, "wires": [ [ "eef04124.0438f" @@ -5056,8 +4639,8 @@ "func": "msg.payload = msg.payload.substring(0,8) + \"1 detected\";\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1353.125015258789, - "y": 2983.7500343322754, + "x": 1433.125015258789, + "y": 3003.7500343322754, "wires": [ [ "eef04124.0438f" @@ -5070,8 +4653,8 @@ "z": "a564595f.642818", "name": "", "pretty": false, - "x": 3067.5, - "y": 20, + "x": 3147.5, + "y": 40, "wires": [ [ "3c8572c8.6a4b1e", @@ -5087,8 +4670,8 @@ "func": "var ipAddress = flow.get('ipaddress')||\"http://tiltpi.local:1880/ui\";\nflow.set(msg.payload.Color + \"-Comment\",ipAddress);\nflow.set('lastpost-' + msg.payload.Color,0);", "outputs": 1, "noerr": 0, - "x": 3353, - "y": 112, + "x": 3433, + "y": 132, "wires": [ [] ] @@ -5108,8 +4691,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 3184.5, - "y": 112, + "x": 3264.5, + "y": 132, "wires": [ [ "780b4fd0.c274b" @@ -5125,8 +4708,8 @@ "8dc4fe46.fc364", "cdc2a491.47b908" ], - "x": 690, - "y": 200, + "x": 770, + "y": 220, "wires": [ [] ] @@ -5139,8 +4722,8 @@ "scope": [ "640f9404.72d27c" ], - "x": 3624, - "y": 48, + "x": 3704, + "y": 68, "wires": [ [] ] @@ -5153,8 +4736,8 @@ "func": "//check if system starting up and Tilts are in range.\nif (msg.payload === \"boot\"){\ncontext.set('startup',true);\n}else{\ncontext.set('tilt',true);\n}\n//contine startup if Tilt detected\nif (context.get('startup') && context.get('tilt')){\n//initializes settings file for each color\nvar colors = [\"red\",\"green\",\"black\",\"purple\",\"orange\",\"blue\",\"yellow\",\"pink\"];\nvar arrayLength = colors.length;\nfor (var i = 0; i < arrayLength; i++) {\n node.send({filename:\"/boot/cloud_log_\" + colors[i] + \".json\"});\n}\ncontext.set('startup',false);\n}", "outputs": 1, "noerr": 0, - "x": 2529, - "y": 20, + "x": 2609, + "y": 40, "wires": [ [ "a81ac973.c7f1a8" @@ -5176,8 +4759,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 2740, - "y": 20, + "x": 2820, + "y": 40, "wires": [ [ "640f9404.72d27c" @@ -5199,8 +4782,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 980, - "y": 300, + "x": 1060, + "y": 320, "wires": [ [ "a2f14292.5b0f3", @@ -5218,8 +4801,8 @@ "console": false, "tostatus": false, "complete": "true", - "x": 3870, - "y": 80, + "x": 3950, + "y": 100, "wires": [] }, { @@ -5237,8 +4820,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 770, - "y": 380, + "x": 850, + "y": 400, "wires": [ [ "326af4b8.42494c" @@ -5264,8 +4847,8 @@ "from": "", "to": "", "reg": false, - "x": 3247.5, - "y": 22, + "x": 3327.5, + "y": 42, "wires": [ [ "7b880cec.674314" @@ -5280,8 +4863,8 @@ "func": "msg.payload = flow.get(msg.payload);\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2132, - "y": 2364, + "x": 2212, + "y": 2384, "wires": [ [ "5312bf4.09fd44", @@ -5300,8 +4883,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 678.25, - "y": 2523.500026702881, + "x": 758.25, + "y": 2543.500026702881, "wires": [ [ "437432fd.79dbbc" @@ -5324,8 +4907,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 934.0000076293945, - "y": 2529.250026702881, + "x": 1014.0000076293945, + "y": 2549.250026702881, "wires": [ [ "f8a4aa49.743c88" @@ -5343,8 +4926,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 1280, - "y": 2560, + "x": 1360, + "y": 2580, "wires": [ [ "673f8112.35a61" @@ -5366,8 +4949,8 @@ "repeat": "60", "crontab": "", "once": true, - "x": 497.5, - "y": 2513.750026702881, + "x": 577.5, + "y": 2533.750026702881, "wires": [ [ "e5905320.33efc" @@ -5382,8 +4965,8 @@ "func": "msg.topic = \"System Time Updated\";\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1450, - "y": 2520, + "x": 1530, + "y": 2540, "wires": [ [ "8ee3b7e3.1833a8" @@ -5398,8 +4981,8 @@ "func": "var ipAddress = msg.payload.ipv4;\nmsg.payload = \"http://\" + ipAddress.trim() + \":1880/ui\"\nflow.set('ipaddress',msg.payload);\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1030, - "y": 2600, + "x": 1110, + "y": 2620, "wires": [ [ "a4a5a7ed.d59958" @@ -5418,8 +5001,8 @@ "ret": "\\n", "temp": "ipv4,ipv6", "skip": 0, - "x": 870, - "y": 2600, + "x": 950, + "y": 2620, "wires": [ [ "375008fe.27a988" @@ -5435,8 +5018,8 @@ "appendNewline": false, "createDir": false, "overwriteFile": "true", - "x": 1650, - "y": 2280, + "x": 1730, + "y": 2300, "wires": [ [] ] @@ -5449,8 +5032,8 @@ "func": "flow.set(\"tz\",\"/usr/share/zoneinfo/\" + msg.payload);\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1660, - "y": 2320, + "x": 1740, + "y": 2340, "wires": [ [] ] @@ -5466,8 +5049,8 @@ "timer": "", "oldrc": false, "name": "copy timezone file (for jessie)", - "x": 1480, - "y": 2420, + "x": 1560, + "y": 2440, "wires": [ [], [], @@ -5487,8 +5070,8 @@ "timer": "", "oldrc": false, "name": "scan control", - "x": 570, - "y": 100, + "x": 650, + "y": 120, "wires": [ [ "8dc4fe46.fc364" @@ -5510,8 +5093,8 @@ "console": false, "tostatus": false, "complete": "payload", - "x": 2950, - "y": 80, + "x": 3030, + "y": 100, "wires": [] }, { @@ -5524,8 +5107,8 @@ "console": false, "tostatus": false, "complete": "payload", - "x": 810, - "y": 40, + "x": 890, + "y": 60, "wires": [] }, { @@ -5542,8 +5125,8 @@ "reset": "", "bytopic": "all", "name": "Reset", - "x": 590, - "y": 20, + "x": 670, + "y": 40, "wires": [ [ "9d251f5a.10bdc" @@ -5562,8 +5145,8 @@ "crontab": "", "once": true, "onceDelay": "2", - "x": 500, - "y": 2920, + "x": 580, + "y": 2940, "wires": [ [ "e5c9eaf5.b44748" @@ -5578,46 +5161,14 @@ "func": "msg.payload = flow.get(msg.payload);\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 670, - "y": 2920, + "x": 750, + "y": 2940, "wires": [ [ "a4d1964e.cb4f78" ] ] }, - { - "id": "713dd3f6.8af61c", - "type": "ui_text", - "z": "a564595f.642818", - "group": "6acae0b0.a184", - "order": 1, - "width": 0, - "height": 0, - "name": "", - "label": "Calibrated Specific Gravity:", - "format": "{{msg.payload.SG | number:4}}", - "layout": "row-spread", - "x": 2420, - "y": 1500, - "wires": [] - }, - { - "id": "675094a4.49a26c", - "type": "ui_text", - "z": "a564595f.642818", - "group": "c12bcb12.dbd0d8", - "order": 1, - "width": 0, - "height": 0, - "name": "", - "label": "Calibrated Temperature:", - "format": "{{msg.payload.displayTemp | number:1}}{{msg.payload.tempunits}}", - "layout": "row-spread", - "x": 2608.4999237060547, - "y": 1550.9999895095825, - "wires": [] - }, { "id": "2c407f92.0b22b", "type": "exec", @@ -5629,8 +5180,8 @@ "timer": "", "oldrc": false, "name": "Reduce Baud", - "x": 1720, - "y": 2600, + "x": 1800, + "y": 2620, "wires": [ [], [], @@ -5650,8 +5201,8 @@ "timer": "", "oldrc": false, "name": "Restore Baud", - "x": 1720, - "y": 2660, + "x": 1800, + "y": 2680, "wires": [ [], [], @@ -5677,8 +5228,8 @@ "payload": "", "payloadType": "date", "topic": "", - "x": 1500, - "y": 2600, + "x": 1580, + "y": 2620, "wires": [ [ "2c407f92.0b22b" @@ -5702,8 +5253,8 @@ "payload": "", "payloadType": "date", "topic": "", - "x": 1480, - "y": 2660, + "x": 1560, + "y": 2680, "wires": [ [ "6b927b9c.f1c794" @@ -5722,8 +5273,8 @@ "label": "Current Version: {{msg.label}}", "format": "{{msg.payload}}", "layout": "col-center", - "x": 2250, - "y": 2840, + "x": 2330, + "y": 2860, "wires": [] }, { @@ -5740,8 +5291,8 @@ "reset": "", "bytopic": "all", "name": "Reset Result", - "x": 3610, - "y": 580, + "x": 3690, + "y": 600, "wires": [ [ "b94e4a26.8805b8" @@ -5774,8 +5325,8 @@ "from": "", "to": "", "reg": false, - "x": 3780, - "y": 580, + "x": 3860, + "y": 600, "wires": [ [ "df1ac3a9.c4472" @@ -5792,8 +5343,8 @@ "console": false, "tostatus": false, "complete": "true", - "x": 3850, - "y": 40, + "x": 3930, + "y": 60, "wires": [] }, { @@ -5804,8 +5355,8 @@ "func": "// true marks tiltpi as developer mode \n// dev-mode: true allows custom update source\n//var devEnabled = true; // dev-mode enabled\nvar devEnabled = false; // dev-mode disabled\nflow.set('dev-mode',devEnabled); \n\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 770, - "y": 2680, + "x": 850, + "y": 2700, "wires": [ [ "f089aeab.e0832" @@ -5820,8 +5371,8 @@ "func": "// replace this url with your custom publicly resolved github source\nvar customUrl = \"https://raw.githubusercontent.com/baronbrew/TILTpi/Aioblescan/flow.json\";\n//var customUrl = \"https://raw.githubusercontent.com/baronbrew/tiltpi/tiltpi-dev/flow.json\";\nvar customReleases = \"https://api.github.com/repos/baronbrew/tiltpi/releases\";\nflow.set('custom-update-url', customUrl);\nflow.set('custom-update-release-url', customReleases);\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 980, - "y": 2680, + "x": 1060, + "y": 2700, "wires": [ [] ] @@ -5834,8 +5385,8 @@ "func": "// disabled use of master due to broken builds on later raspberry pi images\n//var defaultUrl = \"https://raw.githubusercontent.com/baronbrew/TILTpi/master/flow.json\";\nvar defaultUrl = \"https://raw.githubusercontent.com/baronbrew/TILTpi/Aioblescan/flow.json\";\n\nvar customUrl = flow.get('custom-update-url');\n\nif (flow.get('dev-mode') && customUrl) {\n msg.payload = customUrl;\n} else {\n msg.payload = defaultUrl;\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 800, - "y": 2720, + "x": 880, + "y": 2740, "wires": [ [ "13f0085a.0d5178" @@ -5854,8 +5405,8 @@ "crontab": "", "once": true, "onceDelay": "", - "x": 580, - "y": 2680, + "x": 660, + "y": 2700, "wires": [ [ "b434dd22.03a0f" @@ -5870,8 +5421,8 @@ "func": "// use github releases API to fetch latest release details\nvar defaultReleases = \"https://api.github.com/repos/baronbrew/TILTpi/releases/latest\";\nvar customReleases = flow.get('custom-update-release-url') + \"/latest\";\n\nif (flow.get('dev-mode') && customReleases) {\n msg.url = customReleases;\n} else {\n msg.url = defaultReleases;\n}\n\nmsg.headers = {\n \"User-Agent\": \"node-red;tiltpi\"\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1750, - "y": 2800, + "x": 1830, + "y": 2820, "wires": [ [ "e5ef4db6.33ad1" @@ -5890,8 +5441,8 @@ "crontab": "", "once": true, "onceDelay": "", - "x": 1560, - "y": 2800, + "x": 1640, + "y": 2820, "wires": [ [ "28059b08.d92734" @@ -5910,8 +5461,8 @@ "label": "{{msg.label}}", "format": "{{msg.payload}}", "layout": "col-center", - "x": 2480, - "y": 2800, + "x": 2560, + "y": 2820, "wires": [] }, { @@ -5922,8 +5473,8 @@ "func": "var status = msg.statusCode;\nvar resp = msg.payload;\n\nvar msg = {};\nif (status == 200 && resp !== []) {\n var latest = flow.get(\"version\");\n if (resp.name == latest.name) {\n msg.enabled = false;\n msg.label = \"\";\n msg.payload = \"Running most current version.\";\n } else {\n msg.enabled = true;\n msg.label = \"Latest Update: \" + resp.name;\n msg.payload = resp.body;\n }\n} else {\n msg.enabled = false;\n msg.label = \"Lastest Update: Unknown\";\n msg.payload = \"Failed to retrieve latest release information. Check internet connectivity.\"\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2330, - "y": 2800, + "x": 2410, + "y": 2820, "wires": [ [ "a1089058.b969" @@ -5939,8 +5490,8 @@ "ret": "obj", "url": "", "tls": "", - "x": 2150, - "y": 2800, + "x": 2230, + "y": 2820, "wires": [ [ "9ae6ebe8.91e128" @@ -5962,8 +5513,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 1940, - "y": 2800, + "x": 2020, + "y": 2820, "wires": [ [ "a5a85aba.a9d748" @@ -5982,8 +5533,8 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 1900, - "y": 2840, + "x": 1980, + "y": 2860, "wires": [ [ "edb8b308.bde27" @@ -5995,11 +5546,11 @@ "type": "function", "z": "a564595f.642818", "name": "release info", - "func": "var release = {\n name: \"v.2.7\",\n notes: \"Optionally use Tilt MAC address to identify Tilts along with color. Optionally smooth Tilt measurements\"\n}\nflow.set(\"version\", release);\n\nmsg.label = release.name;\nmsg.payload = release.notes;\nreturn msg;", + "func": "var release = {\n name: \"v.2.7.1\",\n notes: \"UI improvements for calibrating\"\n}\nflow.set(\"version\", release);\n\nmsg.label = release.name;\nmsg.payload = release.notes;\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 2070, - "y": 2840, + "x": 2150, + "y": 2860, "wires": [ [ "47d6079b.2ae9c8" @@ -6016,8 +5567,8 @@ "console": false, "tostatus": false, "complete": "false", - "x": 1560, - "y": 220, + "x": 1640, + "y": 240, "wires": [] }, { @@ -6030,8 +5581,8 @@ "console": false, "tostatus": false, "complete": "false", - "x": 4260, - "y": 400, + "x": 4340, + "y": 420, "wires": [] }, { @@ -6053,8 +5604,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 440, + "x": 2070, + "y": 460, "wires": [ [] ] @@ -6078,8 +5629,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 480, + "x": 2070, + "y": 500, "wires": [ [] ] @@ -6103,8 +5654,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 520, + "x": 2070, + "y": 540, "wires": [ [] ] @@ -6128,8 +5679,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 560, + "x": 2070, + "y": 580, "wires": [ [] ] @@ -6153,8 +5704,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 620, + "x": 2070, + "y": 640, "wires": [ [] ] @@ -6178,8 +5729,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 660, + "x": 2070, + "y": 680, "wires": [ [] ] @@ -6203,8 +5754,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 700, + "x": 2070, + "y": 720, "wires": [ [] ] @@ -6228,8 +5779,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 740, + "x": 2070, + "y": 760, "wires": [ [] ] @@ -6253,8 +5804,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 780, + "x": 2070, + "y": 800, "wires": [ [] ] @@ -6278,8 +5829,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 820, + "x": 2070, + "y": 840, "wires": [ [] ] @@ -6303,8 +5854,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 860, + "x": 2070, + "y": 880, "wires": [ [] ] @@ -6328,8 +5879,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 900, + "x": 2070, + "y": 920, "wires": [ [] ] @@ -6346,8 +5897,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 440, + "x": 2240, + "y": 460, "wires": [ [ "647d71c4.628e8" @@ -6373,8 +5924,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 440, + "x": 2430, + "y": 460, "wires": [ [ "23acb7c8.0f4fa8" @@ -6389,8 +5940,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 440, + "x": 2610, + "y": 460, "wires": [ [ "b0c871ee.825fa" @@ -6410,8 +5961,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 440, + "x": 2830, + "y": 460, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6432,8 +5983,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 480, + "x": 2830, + "y": 500, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6449,8 +6000,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 480, + "x": 2610, + "y": 500, "wires": [ [ "1b07d15a.22721f" @@ -6476,8 +6027,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 480, + "x": 2430, + "y": 500, "wires": [ [ "69c80d48.ff3944" @@ -6496,8 +6047,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 480, + "x": 2240, + "y": 500, "wires": [ [ "a388c3a2.eac4d" @@ -6517,8 +6068,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 520, + "x": 2830, + "y": 540, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6534,8 +6085,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 520, + "x": 2610, + "y": 540, "wires": [ [ "d85b1a06.40d7c8" @@ -6561,8 +6112,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 520, + "x": 2430, + "y": 540, "wires": [ [ "9292de64.9ae" @@ -6581,8 +6132,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 520, + "x": 2240, + "y": 540, "wires": [ [ "720fd272.1a56cc" @@ -6602,8 +6153,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 560, + "x": 2830, + "y": 580, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6619,8 +6170,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 560, + "x": 2610, + "y": 580, "wires": [ [ "c3e65142.1abc1" @@ -6646,8 +6197,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 560, + "x": 2430, + "y": 580, "wires": [ [ "4b54d3d8.c7a56c" @@ -6666,8 +6217,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 560, + "x": 2240, + "y": 580, "wires": [ [ "99a8c422.9a5d18" @@ -6687,8 +6238,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 620, + "x": 2830, + "y": 640, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6704,8 +6255,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 620, + "x": 2610, + "y": 640, "wires": [ [ "b7987897.334ee8" @@ -6731,8 +6282,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 620, + "x": 2430, + "y": 640, "wires": [ [ "6fbf3d7b.557c44" @@ -6751,8 +6302,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 620, + "x": 2240, + "y": 640, "wires": [ [ "4d34d92a.daacb8" @@ -6772,8 +6323,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 660, + "x": 2830, + "y": 680, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6789,8 +6340,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 660, + "x": 2610, + "y": 680, "wires": [ [ "50c01cc7.5c7ce4" @@ -6816,8 +6367,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 660, + "x": 2430, + "y": 680, "wires": [ [ "adb9f508.09beb8" @@ -6836,8 +6387,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 660, + "x": 2240, + "y": 680, "wires": [ [ "bf999e86.007a" @@ -6857,8 +6408,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 700, + "x": 2830, + "y": 720, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6874,8 +6425,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 700, + "x": 2610, + "y": 720, "wires": [ [ "96fc73f7.4aedf" @@ -6901,8 +6452,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 700, + "x": 2430, + "y": 720, "wires": [ [ "56b1aaf6.963794" @@ -6921,8 +6472,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 700, + "x": 2240, + "y": 720, "wires": [ [ "302c41e1.93c55e" @@ -6942,8 +6493,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 740, + "x": 2830, + "y": 760, "wires": [ [ "1ee5d27c.fa4e8e", @@ -6959,8 +6510,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 740, + "x": 2610, + "y": 760, "wires": [ [ "2c830d1d.47a5c2" @@ -6986,8 +6537,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 740, + "x": 2430, + "y": 760, "wires": [ [ "f158029e.ab5ad" @@ -7006,8 +6557,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 740, + "x": 2240, + "y": 760, "wires": [ [ "bf4e38c5.6b64e8" @@ -7027,8 +6578,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 780, + "x": 2830, + "y": 800, "wires": [ [ "1ee5d27c.fa4e8e", @@ -7044,8 +6595,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 780, + "x": 2610, + "y": 800, "wires": [ [ "9fb8659c.72a988" @@ -7071,8 +6622,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 780, + "x": 2430, + "y": 800, "wires": [ [ "52a8aa48.8cbb84" @@ -7091,8 +6642,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 780, + "x": 2240, + "y": 800, "wires": [ [ "5e446f27.4b485" @@ -7112,8 +6663,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 820, + "x": 2830, + "y": 840, "wires": [ [ "1ee5d27c.fa4e8e", @@ -7129,8 +6680,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 820, + "x": 2610, + "y": 840, "wires": [ [ "fad59c31.459a5" @@ -7156,8 +6707,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 820, + "x": 2430, + "y": 840, "wires": [ [ "ee3d5711.f574e8" @@ -7176,8 +6727,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 820, + "x": 2240, + "y": 840, "wires": [ [ "57519e88.1b6e3" @@ -7197,8 +6748,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 860, + "x": 2830, + "y": 880, "wires": [ [ "1ee5d27c.fa4e8e", @@ -7214,8 +6765,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 860, + "x": 2610, + "y": 880, "wires": [ [ "2d9318ec.26fb18" @@ -7241,8 +6792,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 860, + "x": 2430, + "y": 880, "wires": [ [ "4eddc4d8.fd628c" @@ -7261,8 +6812,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 860, + "x": 2240, + "y": 880, "wires": [ [ "8d67d3dc.c514e" @@ -7282,8 +6833,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 900, + "x": 2830, + "y": 920, "wires": [ [ "1ee5d27c.fa4e8e", @@ -7299,8 +6850,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 900, + "x": 2610, + "y": 920, "wires": [ [ "e58cff3a.8f6cd" @@ -7326,8 +6877,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 900, + "x": 2430, + "y": 920, "wires": [ [ "5fc1729f.da123c" @@ -7346,8 +6897,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 900, + "x": 2240, + "y": 920, "wires": [ [ "ca4b0ee0.4371d" @@ -7365,8 +6916,8 @@ "timer": "", "oldrc": false, "name": "", - "x": 530, - "y": 300, + "x": 610, + "y": 320, "wires": [ [ "3f72b10e.4b106e" @@ -7388,8 +6939,8 @@ "arraySpltType": "len", "stream": true, "addname": "", - "x": 690, - "y": 300, + "x": 770, + "y": 320, "wires": [ [ "f5df2cba.4ec66" @@ -7415,8 +6966,8 @@ "from": "", "to": "", "reg": false, - "x": 820, - "y": 300, + "x": 900, + "y": 320, "wires": [ [ "2c73dfce.b79cc" @@ -7440,8 +6991,8 @@ "checkall": "false", "repair": false, "outputs": 1, - "x": 1090, - "y": 260, + "x": 1170, + "y": 280, "wires": [ [ "cdc2a491.47b908" @@ -7458,8 +7009,8 @@ "console": false, "tostatus": false, "complete": "false", - "x": 1580, - "y": 380, + "x": 1660, + "y": 400, "wires": [] }, { @@ -7477,8 +7028,8 @@ "mode": "text", "delay": "0", "topic": "", - "x": 640, - "y": 2760, + "x": 720, + "y": 2780, "wires": [ [ "71555fdb.854f1" @@ -7496,8 +7047,8 @@ "syntax": "mustache", "template": "https://raw.githubusercontent.com/baronbrew/TILTpi/{{payload}}/flow.json\n", "output": "str", - "x": 810, - "y": 2760, + "x": 890, + "y": 2780, "wires": [ [ "13f0085a.0d5178" @@ -7523,8 +7074,8 @@ "from": "", "to": "", "reg": false, - "x": 590, - "y": 2800, + "x": 670, + "y": 2820, "wires": [ [ "14afaa5e.5b9ff6" @@ -7550,8 +7101,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 940, + "x": 2070, + "y": 960, "wires": [ [] ] @@ -7568,8 +7119,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 940, + "x": 2240, + "y": 960, "wires": [ [ "ec92d732.73b488" @@ -7595,8 +7146,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 940, + "x": 2430, + "y": 960, "wires": [ [ "6b2630c1.ee399" @@ -7611,8 +7162,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 940, + "x": 2610, + "y": 960, "wires": [ [ "cf792291.cb942" @@ -7632,8 +7183,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 940, + "x": 2830, + "y": 960, "wires": [ [ "394a5d3d.92fa72", @@ -7660,8 +7211,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 980, + "x": 2070, + "y": 1000, "wires": [ [] ] @@ -7678,8 +7229,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 980, + "x": 2240, + "y": 1000, "wires": [ [ "95307bd3.783cc8" @@ -7705,8 +7256,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 980, + "x": 2430, + "y": 1000, "wires": [ [ "6b914e1.9bb8eb" @@ -7721,8 +7272,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 980, + "x": 2610, + "y": 1000, "wires": [ [ "a68bf66a.5f1538" @@ -7742,8 +7293,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 980, + "x": 2830, + "y": 1000, "wires": [ [ "394a5d3d.92fa72", @@ -7770,8 +7321,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 1020, + "x": 2070, + "y": 1040, "wires": [ [] ] @@ -7788,8 +7339,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 1020, + "x": 2240, + "y": 1040, "wires": [ [ "a7e1f3b1.13f8e" @@ -7815,8 +7366,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 1020, + "x": 2430, + "y": 1040, "wires": [ [ "c3bb0e8a.e2ea3" @@ -7831,8 +7382,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 1020, + "x": 2610, + "y": 1040, "wires": [ [ "9d398dc.08dc57" @@ -7852,8 +7403,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 1020, + "x": 2830, + "y": 1040, "wires": [ [ "394a5d3d.92fa72", @@ -7880,8 +7431,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 1060, + "x": 2070, + "y": 1080, "wires": [ [] ] @@ -7898,8 +7449,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 1060, + "x": 2240, + "y": 1080, "wires": [ [ "8843e2c8.51bdf" @@ -7925,8 +7476,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 1060, + "x": 2430, + "y": 1080, "wires": [ [ "6d524c1c.8009f4" @@ -7941,8 +7492,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 1060, + "x": 2610, + "y": 1080, "wires": [ [ "96d4a8e7.f414a8" @@ -7962,8 +7513,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 1060, + "x": 2830, + "y": 1080, "wires": [ [ "394a5d3d.92fa72", @@ -7990,8 +7541,8 @@ "from": "", "to": "", "reg": false, - "x": 1990, - "y": 1100, + "x": 2070, + "y": 1120, "wires": [ [] ] @@ -8008,8 +7559,8 @@ "crontab": "", "once": false, "onceDelay": "", - "x": 2160, - "y": 1100, + "x": 2240, + "y": 1120, "wires": [ [ "da4dbd71.50463" @@ -8035,8 +7586,8 @@ "from": "", "to": "", "reg": false, - "x": 2350, - "y": 1100, + "x": 2430, + "y": 1120, "wires": [ [ "4200342b.ee6e5c" @@ -8051,8 +7602,8 @@ "func": "if(msg.payload === undefined){\n msg.payload = {};\n msg.show = \"hidden\";\n return msg; \n}\nvar displayTimeout = flow.get('displayTimeout')||120000;\n//set msg.topic for use in displaying the correct color\nmsg.topic = msg.payload.Color;\n//reorder list if a Tilt disconnects\nif (msg.payload.clock - msg.payload.timeStamp > displayTimeout){\n flow.set('storage-1',undefined);\n flow.set('storage-2',undefined);\n flow.set('storage-3',undefined);\n flow.set('storage-4',undefined);\n flow.set('storage-5',undefined);\n flow.set('storage-6',undefined);\n flow.set('storage-7',undefined);\n flow.set('storage-8',undefined);\n flow.set('storage-9',undefined);\n flow.set('storage-10',undefined);\n flow.set('storage-11',undefined);\n flow.set('storage-12',undefined);\n flow.set('storage-13',undefined);\n flow.set('storage-14',undefined);\n flow.set('storage-15',undefined);\n flow.set('storage-16',undefined);\n flow.set('storage-17',undefined);\n flow.set('storage-18',undefined);\n flow.set('storage-19',undefined);\n flow.set('storage-20',undefined);\n flow.set('storage-21',undefined);\n flow.set('storage-22',undefined);\n flow.set('storage-23',undefined);\n flow.set('storage-24',undefined);\n flow.set('storage-25',undefined);\n flow.set('options',[]);\n if (msg.topic === flow.get('colordropdownSelect')){\n flow.set('colordropdownSelect',undefined);\n }\n msg.show = \"hidden\";\n return msg;\n}\nelse{\n msg.show = \"visible\";\n return msg;\n}", "outputs": 1, "noerr": 0, - "x": 2530, - "y": 1100, + "x": 2610, + "y": 1120, "wires": [ [ "b8172640.fdaf28" @@ -8072,8 +7623,8 @@ "storeOutMessages": true, "fwdInMessages": true, "templateScope": "local", - "x": 2750, - "y": 1100, + "x": 2830, + "y": 1120, "wires": [ [ "394a5d3d.92fa72", @@ -8086,8 +7637,8 @@ "type": "ui_ui_control", "z": "a564595f.642818", "name": "", - "x": 1240, - "y": 3520, + "x": 1320, + "y": 3540, "wires": [ [] ] @@ -8115,8 +7666,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 520, - "y": 3440, + "x": 600, + "y": 3460, "wires": [ [ "1bd050cb.503d1f" @@ -8149,8 +7700,8 @@ "from": "", "to": "", "reg": false, - "x": 710, - "y": 3420, + "x": 790, + "y": 3440, "wires": [ [ "87e1a3b9.13fb6" @@ -8172,8 +7723,8 @@ "randomLast": "5", "randomUnits": "seconds", "drop": false, - "x": 900, - "y": 3440, + "x": 980, + "y": 3460, "wires": [ [ "bc47cb99.cb1a18" @@ -8199,8 +7750,8 @@ "from": "", "to": "", "reg": false, - "x": 1120, - "y": 3440, + "x": 1200, + "y": 3460, "wires": [ [] ] @@ -8210,8 +7761,8 @@ "type": "ui_ui_control", "z": "a564595f.642818", "name": "", - "x": 520, - "y": 860, + "x": 600, + "y": 880, "wires": [ [ "9215e4a9.c3af38" @@ -8237,8 +7788,8 @@ "from": "", "to": "", "reg": false, - "x": 680, - "y": 860, + "x": 760, + "y": 880, "wires": [ [ "423412c2.1b104c" @@ -8253,8 +7804,8 @@ "links": [ "e829c02e.da7e1" ], - "x": 1580, - "y": 180, + "x": 1660, + "y": 200, "wires": [] }, { @@ -8265,8 +7816,8 @@ "links": [ "e493bf39.98126" ], - "x": 695, - "y": 920, + "x": 775, + "y": 940, "wires": [ [ "423412c2.1b104c" @@ -8291,8 +7842,8 @@ "checkall": "true", "repair": false, "outputs": 2, - "x": 770, - "y": 3520, + "x": 850, + "y": 3540, "wires": [ [ "b7da9395.ce5ca" @@ -8321,8 +7872,8 @@ "from": "", "to": "", "reg": false, - "x": 990, - "y": 3500, + "x": 1070, + "y": 3520, "wires": [ [ "712aa79c.da4988" @@ -8348,8 +7899,8 @@ "from": "", "to": "", "reg": false, - "x": 990, - "y": 3540, + "x": 1070, + "y": 3560, "wires": [ [ "712aa79c.da4988" @@ -8361,8 +7912,8 @@ "type": "ui_ui_control", "z": "a564595f.642818", "name": "", - "x": 460, - "y": 3520, + "x": 540, + "y": 3540, "wires": [ [ "45d0c134.d6bcf" @@ -8388,8 +7939,8 @@ "from": "", "to": "", "reg": false, - "x": 630, - "y": 3520, + "x": 710, + "y": 3540, "wires": [ [ "84b471d.dd3d59" @@ -8408,8 +7959,8 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 460, - "y": 3320, + "x": 540, + "y": 3340, "wires": [ [ "be79385c.484a28" @@ -8424,8 +7975,8 @@ "func": "var smoothSwitch = flow.get('smoothSwitch')||false;\nif (smoothSwitch && msg.payload.SG > 0.5){\nvar color = msg.payload.Color;\nvar SG = msg.payload.SG;\nvar Temp = msg.payload.Temp;\nvar alphaSG = flow.get('alphaSG') / 100||0.5;//ratio of current sample vs. average of previous samples over sample rate\nvar alphaTemp = flow.get('alphaTemp') / 100||0.5;//ratio of current sample vs. average of previous samples over sample rate\nvar numberSamples = flow.get('numberSamples') * 12 || 36;//multiply this number by sample rate to determine timeframe of moving average\nvar sampleRate = 5000;//measurements on Tilt taken every 5 seconds\nvar timeSinceLastSample = context.get(color + '-timeSinceLastSample')||sampleRate;\nvar prevSampleTime = context.get(color + '-prevSampleTime')||msg.payload.timeStamp;\nvar sampleTakenFlag = context.get(color + '-sampleTakenFlag')||\"not taken\";\nvar prevSGArray = context.get(color + '-SG')||[];\nvar prevTempArray = context.get(color + '-Temp')||[];\nif (timeSinceLastSample >= sampleRate && sampleTakenFlag == \"not taken\"){//take sample if time elapsed is more than sample rate\n context.set(color + '-sampleTakenFlag', \"taken\");\n prevSGArray.push(SG);\n prevTempArray.push(Temp);\n if (prevSGArray.length > numberSamples || prevTempArray.length > numberSamples){\n prevSGArray.shift();\n prevTempArray.shift();\n }\n context.set(color + '-SG', prevSGArray);\n context.set(color + '-Temp', prevTempArray);\n context.set(color + '-prevSampleTime', msg.payload.timeStamp);\n}else{\n context.set(color + '-sampleTakenFlag', \"not taken\")\n}\ntimeSinceLastSample = msg.payload.timeStamp - prevSampleTime;\ncontext.set(color + '-timeSinceLastSample', timeSinceLastSample)\n//calculate means\nvar totalSG = 0;\nfor(var i = 0; i < prevSGArray.length; i++) {\n totalSG += prevSGArray[i];\n}\nvar meanSG = totalSG / prevSGArray.length;\nmsg.payload.SG = ((SG * (1 - alphaSG)) + (meanSG * alphaSG));\nvar totalTemp = 0;\nfor(var i = 0; i < prevTempArray.length; i++) {\n totalTemp += prevTempArray[i];\n}\nvar meanTemp = totalTemp / prevTempArray.length;\nmsg.payload.Temp = ((Temp * (1 - alphaTemp)) + (meanTemp * alphaTemp));\n}\nreturn msg;", "outputs": 1, "noerr": 0, - "x": 1440, - "y": 120, + "x": 1520, + "y": 140, "wires": [ [ "86447ba5.5d5b68" @@ -8455,8 +8006,8 @@ "offvalueType": "bool", "officon": "", "offcolor": "", - "x": 470, - "y": 3660, + "x": 550, + "y": 3680, "wires": [ [ "78939739.e7eac8" @@ -8482,8 +8033,8 @@ "from": "", "to": "", "reg": false, - "x": 710, - "y": 3660, + "x": 790, + "y": 3680, "wires": [ [] ] @@ -8507,8 +8058,8 @@ "from": "", "to": "", "reg": false, - "x": 750, - "y": 3740, + "x": 830, + "y": 3760, "wires": [ [] ] @@ -8532,8 +8083,8 @@ "from": "", "to": "", "reg": false, - "x": 750, - "y": 3820, + "x": 830, + "y": 3840, "wires": [ [] ] @@ -8555,8 +8106,8 @@ "min": 0, "max": "120", "step": ".1", - "x": 510, - "y": 3900, + "x": 590, + "y": 3920, "wires": [ [ "349b10e1.3c62c" @@ -8582,8 +8133,8 @@ "from": "", "to": "", "reg": false, - "x": 790, - "y": 3900, + "x": 870, + "y": 3920, "wires": [ [] ] @@ -8605,8 +8156,8 @@ "min": "1", "max": "100", "step": "1", - "x": 500, - "y": 3820, + "x": 580, + "y": 3840, "wires": [ [ "a99b227e.f6b3" @@ -8630,8 +8181,8 @@ "min": "1", "max": "100", "step": "1", - "x": 500, - "y": 3740, + "x": 580, + "y": 3760, "wires": [ [ "abb434fc.fa72a8" @@ -8650,8 +8201,8 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 210, - "y": 3660, + "x": 290, + "y": 3680, "wires": [ [ "69de6eed.51ee3" @@ -8670,8 +8221,8 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 220, - "y": 3740, + "x": 300, + "y": 3760, "wires": [ [ "4c545b57.8a8e44" @@ -8690,8 +8241,8 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 200, - "y": 3820, + "x": 280, + "y": 3840, "wires": [ [ "bc58593a.8338b8" @@ -8710,12 +8261,695 @@ "crontab": "", "once": true, "onceDelay": "8", - "x": 220, - "y": 3900, + "x": 300, + "y": 3920, "wires": [ [ "b8cf9d8c.26898" ] ] + }, + { + "id": "26d12db4.df7f82", + "type": "ui_numeric", + "z": "a564595f.642818", + "name": "", + "label": "Enter Pre-cal/Tilt SG", + "tooltip": "", + "group": "6acae0b0.a184", + "order": 2, + "width": "0", + "height": "0", + "passthru": false, + "topic": "", + "format": "{{msg.payload}}", + "min": "0.9900", + "max": "1.1200", + "step": ".0001", + "x": 2600, + "y": 1480, + "wires": [ + [ + "777f1a14.1b3e44", + "ba7658fb.988088" + ] + ] + }, + { + "id": "8756395a.c6f6e8", + "type": "ui_numeric", + "z": "a564595f.642818", + "name": "", + "label": "Enter Actual SG", + "tooltip": "", + "group": "6acae0b0.a184", + "order": 4, + "width": "0", + "height": "0", + "passthru": false, + "topic": "", + "format": "{{msg.payload}}", + "min": "0.990", + "max": "1.200", + "step": ".0001", + "x": 2580, + "y": 1540, + "wires": [ + [ + "84ffe685.150d58", + "ba7658fb.988088" + ] + ] + }, + { + "id": "2b26e418.b14aec", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "6acae0b0.a184", + "order": 5, + "width": 0, + "height": 0, + "passthru": false, + "label": "Calibrate in Known SG", + "tooltip": "", + "color": "", + "bgcolor": "", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "", + "x": 2740, + "y": 1820, + "wires": [ + [ + "6c6270ad.ae742" + ] + ] + }, + { + "id": "7edb039d.78073c", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "6acae0b0.a184", + "order": 1, + "width": 0, + "height": 0, + "passthru": false, + "label": "Calibrate in Water", + "tooltip": "", + "color": "", + "bgcolor": "", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "calibrate in water", + "x": 2730, + "y": 1740, + "wires": [ + [ + "6c6270ad.ae742" + ] + ] + }, + { + "id": "483fead5.b9c834", + "type": "ui_switch", + "z": "a564595f.642818", + "name": "", + "label": "Get Current SG", + "tooltip": "", + "group": "6acae0b0.a184", + "order": 3, + "width": 0, + "height": 0, + "passthru": true, + "decouple": "false", + "topic": "", + "style": "", + "onvalue": "enabled", + "onvalueType": "str", + "onicon": "", + "oncolor": "", + "offvalue": "disabled", + "offvalueType": "str", + "officon": "", + "offcolor": "", + "x": 1760, + "y": 1520, + "wires": [ + [ + "3eb6f3c4.588d1c" + ] + ] + }, + { + "id": "58debd3d.af16a4", + "type": "inject", + "z": "a564595f.642818", + "name": "Color", + "topic": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "repeat": "1", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "x": 1910, + "y": 1460, + "wires": [ + [ + "3eb6f3c4.588d1c", + "d6de2020.56974" + ] + ] + }, + { + "id": "18df7203.454ade", + "type": "inject", + "z": "a564595f.642818", + "name": "", + "topic": "", + "payload": "enabled", + "payloadType": "str", + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "x": 1580, + "y": 1520, + "wires": [ + [ + "483fead5.b9c834" + ] + ] + }, + { + "id": "ba7658fb.988088", + "type": "link out", + "z": "a564595f.642818", + "name": "sg calibration update", + "links": [ + "22133d6c.455a72" + ], + "x": 2795, + "y": 1380, + "wires": [] + }, + { + "id": "22133d6c.455a72", + "type": "link in", + "z": "a564595f.642818", + "name": "sg calibration update", + "links": [ + "ba7658fb.988088" + ], + "x": 1475, + "y": 1620, + "wires": [ + [ + "b47e694e.3ce3c8" + ] + ] + }, + { + "id": "b47e694e.3ce3c8", + "type": "change", + "z": "a564595f.642818", + "name": "Disabled", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "disabled", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1560, + "y": 1560, + "wires": [ + [ + "483fead5.b9c834" + ] + ] + }, + { + "id": "3b195e06.c8f962", + "type": "function", + "z": "a564595f.642818", + "name": "SG Calibration Table", + "func": "var color = msg.topic;\nmsg.uncalpointsArray = flow.get('uncalSGpoints-' + color)||[];\nmsg.actualpointsArray = flow.get('actualSGpoints-' + color)||[];\nif (typeof msg.uncalpointsArray == \"string\" || typeof msg.actualpointsArray == \"string\"){\n msg.uncalpointsArray = msg.uncalpointsArray.split(\",\");\n msg.actualpointsArray = msg.actualpointsArray.split(\",\");\n}\nif (msg.uncalpointsArray[0] === undefined){\n msg.row0 = 'hidden'\n}else{\nmsg.row0 = 'visible';\n}\nif (msg.uncalpointsArray[1] === undefined){\n msg.row1 = 'hidden'\n}else{\nmsg.row1 = 'visible';\n}\nif (msg.uncalpointsArray[2] === undefined){\n msg.row2 = 'hidden'\n}else{\nmsg.row2 = 'visible';\n}\nif (msg.uncalpointsArray[3] === undefined){\n msg.row3 = 'hidden'\n}else{\nmsg.row3 = 'visible';\n}\nif (msg.uncalpointsArray[4] === undefined){\n msg.row4 = 'hidden'\n}else{\nmsg.row4 = 'visible';\n}\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 3280, + "y": 1740, + "wires": [ + [ + "44aae1a8.7f6b3" + ] + ] + }, + { + "id": "44aae1a8.7f6b3", + "type": "ui_template", + "z": "a564595f.642818", + "group": "6acae0b0.a184", + "name": "SG Calibration Points", + "order": 6, + "width": "0", + "height": "0", + "format": "\n\n\n\n\n

SG Calibration Points:

\n\n \n \n \n \n \n \n
DeletePre-Cal/TiltActual
X{{msg.uncalpointsArray[0]}}{{msg.actualpointsArray[0]}}
X{{msg.uncalpointsArray[1]}}{{msg.actualpointsArray[1]}}
X{{msg.uncalpointsArray[2]}}{{msg.actualpointsArray[2]}}
X{{msg.uncalpointsArray[3]}}{{msg.actualpointsArray[3]}}
X{{msg.uncalpointsArray[4]}}{{msg.actualpointsArray[4]}}
\n", + "storeOutMessages": false, + "fwdInMessages": false, + "templateScope": "local", + "x": 3520, + "y": 1740, + "wires": [ + [ + "25ccc367.8d427c" + ] + ] + }, + { + "id": "5a6c003b.37e3", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "6acae0b0.a184", + "order": 7, + "width": 0, + "height": 0, + "passthru": false, + "label": "Delete All", + "tooltip": "", + "color": "", + "bgcolor": "#FF5733", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "clear calibration", + "x": 2720, + "y": 1780, + "wires": [ + [ + "6c6270ad.ae742" + ] + ] + }, + { + "id": "25ccc367.8d427c", + "type": "function", + "z": "a564595f.642818", + "name": "Remove SG Cal Point", + "func": "var calpointIndex = Number(msg.payload);\nvar color = flow.get('colordropdownSelect');\nvar uncalpointsArray = flow.get('uncalSGpoints-' + color)||[];\nvar actualpointsArray = flow.get('actualSGpoints-' + color)||[];\nif (typeof uncalpointsArray == \"string\" || typeof actualpointsArray == \"string\"){\n uncalpointsArray = uncalpointsArray.split(\",\");\n actualpointsArray = actualpointsArray.split(\",\");\n}\nuncalpointsArray.splice(calpointIndex,1);\nactualpointsArray.splice(calpointIndex,1);\nflow.set('uncalSGpoints-' + color,uncalpointsArray);\nflow.set('actualSGpoints-' + color,actualpointsArray);\nmsg.topic = color;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 3500, + "y": 1940, + "wires": [ + [ + "3b195e06.c8f962" + ] + ] + }, + { + "id": "8cb2d9.bccfcd28", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "c12bcb12.dbd0d8", + "order": 7, + "width": 0, + "height": 0, + "passthru": false, + "label": "Delete All", + "tooltip": "", + "color": "", + "bgcolor": "#FF5733", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "clear calibration", + "x": 2320, + "y": 2140, + "wires": [ + [ + "c78e4ac7.89ba88" + ] + ] + }, + { + "id": "a4aa0e4b.1999d", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "c12bcb12.dbd0d8", + "order": 5, + "width": 0, + "height": 0, + "passthru": false, + "label": "Calibrate in Known Temp", + "tooltip": "", + "color": "", + "bgcolor": "", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "", + "x": 2350, + "y": 2200, + "wires": [ + [ + "c78e4ac7.89ba88" + ] + ] + }, + { + "id": "c78e4ac7.89ba88", + "type": "function", + "z": "a564595f.642818", + "name": "Add Temp Cal Points", + "func": "var color = msg.payload;\nif (msg.topic == \"clear calibration\"){\n flow.set('uncalTemppoints-' + color,[]);\n flow.set('actualTemppoints-' + color,[]);\n}else{\nvar uncalTempcalPoint = flow.get('uncalTemppoint')||0;\nvar actualTempcalPoint = flow.get('actualTemppoint')||0;\nif (msg.topic == \"calibrate in ice water\"){\n if (flow.get(\"displayUnits\") == \"°F\"){\n actualTempcalPoint = \"32.0\";\n }else{\n actualTempcalPoint = \"0.0\"\n }\n \n}\nvar uncalpointsArray = flow.get('uncalTemppoints-' + color)||[];\nvar actualpointsArray = flow.get('actualTemppoints-' + color)||[];\nuncalpointsArray.push(uncalTempcalPoint);\nuncalpointsArray.sort(function(a, b){return a-b;});\nflow.set('uncalTemppoints-' + color,uncalpointsArray);\nactualpointsArray.push(actualTempcalPoint);\nactualpointsArray.sort(function(a, b){return a-b;});\nflow.set('actualTemppoints-' + color,actualpointsArray);\n}\nmsg.topic = color;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 2640, + "y": 2140, + "wires": [ + [ + "518cb266.0001dc" + ] + ] + }, + { + "id": "518cb266.0001dc", + "type": "function", + "z": "a564595f.642818", + "name": "Temp Calibration Table", + "func": "var color = msg.topic;\nmsg.uncalpointsArray = flow.get('uncalTemppoints-' + color)||[];\nmsg.actualpointsArray = flow.get('actualTemppoints-' + color)||[];\nif (typeof msg.uncalpointsArray == \"string\" || typeof msg.actualpointsArray == \"string\"){\n msg.uncalpointsArray = msg.uncalpointsArray.split(\",\");\n msg.actualpointsArray = msg.actualpointsArray.split(\",\");\n}\nif (msg.uncalpointsArray[0] === undefined){\n msg.row0 = 'hidden'\n}else{\nmsg.row0 = 'visible';\n}\nif (msg.uncalpointsArray[1] === undefined){\n msg.row1 = 'hidden'\n}else{\nmsg.row1 = 'visible';\n}\nif (msg.uncalpointsArray[2] === undefined){\n msg.row2 = 'hidden'\n}else{\nmsg.row2 = 'visible';\n}\nif (msg.uncalpointsArray[3] === undefined){\n msg.row3 = 'hidden'\n}else{\nmsg.row3 = 'visible';\n}\nif (msg.uncalpointsArray[4] === undefined){\n msg.row4 = 'hidden'\n}else{\nmsg.row4 = 'visible';\n}\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 2900, + "y": 2140, + "wires": [ + [ + "1eb8ab12.557895" + ] + ] + }, + { + "id": "1eb8ab12.557895", + "type": "ui_template", + "z": "a564595f.642818", + "group": "c12bcb12.dbd0d8", + "name": "Temp Calibration Points", + "order": 6, + "width": "0", + "height": "0", + "format": "\n\n\n\n\n

Temp Calibration Points:

\n\n \n \n \n \n \n \n
DeletePre-Cal/TiltActual
X{{msg.uncalpointsArray[0]}}{{msg.actualpointsArray[0]}}
X{{msg.uncalpointsArray[1]}}{{msg.actualpointsArray[1]}}
X{{msg.uncalpointsArray[2]}}{{msg.actualpointsArray[2]}}
X{{msg.uncalpointsArray[3]}}{{msg.actualpointsArray[3]}}
X{{msg.uncalpointsArray[4]}}{{msg.actualpointsArray[4]}}
\n", + "storeOutMessages": false, + "fwdInMessages": false, + "templateScope": "local", + "x": 3150, + "y": 2140, + "wires": [ + [ + "4ee1ce04.5d" + ] + ] + }, + { + "id": "4ee1ce04.5d", + "type": "function", + "z": "a564595f.642818", + "name": "Remove Temp Cal Point", + "func": "var calpointIndex = Number(msg.payload);\nvar color = flow.get('colordropdownSelect');\nvar uncalpointsArray = flow.get('uncalTemppoints-' + color)||[];\nvar actualpointsArray = flow.get('actualTemppoints-' + color)||[];\nif (typeof uncalpointsArray == \"string\" || typeof actualpointsArray == \"string\"){\n uncalpointsArray = uncalpointsArray.split(\",\");\n actualpointsArray = actualpointsArray.split(\",\");\n}\nuncalpointsArray.splice(calpointIndex,1);\nactualpointsArray.splice(calpointIndex,1);\nflow.set('uncalTemppoints-' + color,uncalpointsArray);\nflow.set('actualTemppoints-' + color,actualpointsArray);\nmsg.topic = color;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 3110, + "y": 2300, + "wires": [ + [ + "518cb266.0001dc" + ] + ] + }, + { + "id": "ee2ae6f4.9089f8", + "type": "ui_numeric", + "z": "a564595f.642818", + "name": "", + "label": "Enter Pre-cal/Tilt Temp", + "tooltip": "", + "group": "c12bcb12.dbd0d8", + "order": 2, + "width": "0", + "height": "0", + "passthru": false, + "topic": "", + "format": "{{msg.payload}}", + "min": "-20", + "max": "220", + "step": ".1", + "x": 2600, + "y": 1580, + "wires": [ + [ + "67b168fa.e90078", + "4e784ef2.20482" + ] + ] + }, + { + "id": "1381f934.df5b27", + "type": "ui_numeric", + "z": "a564595f.642818", + "name": "", + "label": "Enter Actual Temp", + "tooltip": "", + "group": "c12bcb12.dbd0d8", + "order": 4, + "width": "0", + "height": "0", + "passthru": false, + "topic": "", + "format": "{{msg.payload}}", + "min": "-20", + "max": "220", + "step": ".1", + "x": 2610, + "y": 1620, + "wires": [ + [ + "37e5d681.345a7a", + "4e784ef2.20482" + ] + ] + }, + { + "id": "37e5d681.345a7a", + "type": "function", + "z": "a564595f.642818", + "name": "set Actual Temp Value", + "func": "var value = Number(msg.payload);\nflow.set('actualTemppoint',value.toFixed(1));\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 2860, + "y": 1660, + "wires": [ + [] + ] + }, + { + "id": "31140e5b.ae7102", + "type": "ui_ui_control", + "z": "a564595f.642818", + "name": "", + "x": 1360, + "y": 1740, + "wires": [ + [ + "2c202db.f124dd2" + ] + ] + }, + { + "id": "2c202db.f124dd2", + "type": "change", + "z": "a564595f.642818", + "name": "Update Local Logging Interval", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "localloggingInterval", + "tot": "flow" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1590, + "y": 1740, + "wires": [ + [ + "7b1370e2.6e8c9" + ] + ] + }, + { + "id": "4e784ef2.20482", + "type": "link out", + "z": "a564595f.642818", + "name": "temp calibration update", + "links": [ + "5a61d854.c47468" + ], + "x": 2855, + "y": 1560, + "wires": [] + }, + { + "id": "5a61d854.c47468", + "type": "link in", + "z": "a564595f.642818", + "name": "temp calibration update", + "links": [ + "4e784ef2.20482" + ], + "x": 1520, + "y": 1680, + "wires": [ + [ + "4419c6f1.d35ca8" + ] + ] + }, + { + "id": "4419c6f1.d35ca8", + "type": "change", + "z": "a564595f.642818", + "name": "Disabled", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "disabled", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1640, + "y": 1680, + "wires": [ + [ + "dfd8fe97.8ff78" + ] + ] + }, + { + "id": "a1cbb161.09291", + "type": "inject", + "z": "a564595f.642818", + "name": "", + "topic": "", + "payload": "enabled", + "payloadType": "str", + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "x": 1600, + "y": 1620, + "wires": [ + [ + "dfd8fe97.8ff78" + ] + ] + }, + { + "id": "dfd8fe97.8ff78", + "type": "ui_switch", + "z": "a564595f.642818", + "name": "", + "label": "Get Current Temp", + "tooltip": "", + "group": "c12bcb12.dbd0d8", + "order": 3, + "width": 0, + "height": 0, + "passthru": true, + "decouple": "false", + "topic": "", + "style": "", + "onvalue": "enabled", + "onvalueType": "str", + "onicon": "", + "oncolor": "", + "offvalue": "disabled", + "offvalueType": "str", + "officon": "", + "offcolor": "", + "x": 1790, + "y": 1640, + "wires": [ + [ + "d6de2020.56974" + ] + ] + }, + { + "id": "e53f4a.4ede80b8", + "type": "ui_ui_control", + "z": "a564595f.642818", + "name": "", + "x": 580, + "y": 2340, + "wires": [ + [ + "a1357f50.ee57a", + "9fa076ac.17f568" + ] + ] + }, + { + "id": "757b57b9.6d63a8", + "type": "ui_button", + "z": "a564595f.642818", + "name": "", + "group": "c12bcb12.dbd0d8", + "order": 1, + "width": 0, + "height": 0, + "passthru": false, + "label": "Calibrate in Ice Water", + "tooltip": "", + "color": "", + "bgcolor": "", + "icon": "", + "payload": "colordropdownSelect", + "payloadType": "flow", + "topic": "calibrate in ice water", + "x": 2340, + "y": 2080, + "wires": [ + [ + "c78e4ac7.89ba88" + ] + ] } ] \ No newline at end of file