Hi. I need help to organise an array in a function node.
- When datas are valid (flag = A) ... running fine
- When datas are invalid datas (flag = else) ... wrong split. The additional array wifiAccessPoints can't be cut like it should be, as: ssid, macAddress, signalStrength
Below, only 4 wifiAccessPoints, but it can be really more...
[{"id":"a3659948.e3a2d8","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"808e6dcf.2024e","type":"inject","z":"a3659948.e3a2d8","name":"Valid IWAP01","topic":"","payload":"IWAP01190215A2232.9806N11404.9355E000.1061830323.8706000908000102,460,0,9520,3671#","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":116,"y":114,"wires":[["46808aec.699a04"]]},{"id":"b3d6f3f0.126ee","type":"inject","z":"a3659948.e3a2d8","name":"Invalid IWAP01","topic":"","payload":"IWAP01190215V0000.0000N00000.0000E000.1061830323.8706000908000102,460,0,9520,3671,Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97#","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":126.5,"y":196.00000190734863,"wires":[["46808aec.699a04"]]},{"id":"46808aec.699a04","type":"function","z":"a3659948.e3a2d8","name":"AP01 split flag A/V TOTAL","func":"// flag = A\n//IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,460,0,9520,3671#\n// flag = else\n//IWAP01080524V0000.0000N00000.0000E000.1061830323.8706000908000102,460,0,9520,3671,Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97# \nlet answer = {}\nlet elements = msg.payload.replace('#','').split(\",\") // this gives an array containing the bits\n// elements[0] is the long string starting IWAP01\nanswer.command = elements[0].substr(0,6)\nlet dateStr = elements[0].substr(6,6) // eg \"190215\" 15th Feb 2019\nanswer.date = new Date(Number(dateStr.substr(0,2))+2000, Number(dateStr.substr(2,2))-1, dateStr.substr(4,2)) // 080524 - date\nanswer.valid = (elements[0].substr(12,1) === \"A\") // true or false - A or V\nif (answer.valid) {\n let degreesN = Number(elements[0].substr(13,2))\n let minutesN = Number(elements[0].substr(15,7))\n let ns = elements[0].substr(22,1) // N or S\n let degreesE = Number(elements[0].substr(23,3))\n let minutesE = Number(elements[0].substr(26,7))\n let ew = elements[0].substr(33,1) // E or W\n node.warn(`${degreesN} ${minutesN} ${ns} ${degreesE} ${minutesE} ${ew}`)\n answer.latitude = degreesN + minutesN/60 // 2232.9806N\n if (ns === \"S\") answer.latitude = -answer.latitude\n answer.longitude = degreesE + minutesE/60\n if (ew === \"W\") answer.longitude = -answer.longitude // 11404.9355E\n} else {\n answer.latitude = 0\n answer.longitude = 0\n}\n\nanswer.speedMoving = elements[0].substr(34,5) // 000.1\nanswer.angleDirection = elements[0].substr(45,6) // 323.87\nanswer.GSMsignal = elements[0].substr(51,3) // 060\nanswer.satellites = elements[0].substr(54,3) // 009\nanswer.batteryLevel = elements[0].substr(57,3) // 080\n// LBS datas\nanswer.mobileCountryCode = elements[1] // 460\nanswer.mobileNetworkCode = elements[2] // 0\nanswer.locationAreaCode = elements[3] // 9520 \nanswer.cellId = elements[4] // 3671\n// WIFI bases only with flag = else\n//\n// answer.wifiAccessPoints = elements[5]\n//\nanswer.wifiAccessPoints = []\nif (answer.valid === \"else\") {\n i = elements[4]+1 // move on to wifi bases\n let wifiAccessPointsStrings = elements[5].split(\"&\")\n let j;\n for (j=0; j<wifiAccessPointsStrings.length; j++) {\n let baseElements = wifiAccessPointsStrings[j].split(\"|\")\n answer.wifiAccessPoints.push({ssid: baseElements[0], macAddress: baseElements[1], signalStrength: baseElements[2]}) // Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97\n }\n}\n\nmsg.payload = answer\nreturn msg\n\n\n\n","outputs":1,"noerr":0,"x":382.50000762939453,"y":144.00000190734863,"wires":[["8e6852f6.ee3a4"]]},{"id":"8e6852f6.ee3a4","type":"debug","z":"a3659948.e3a2d8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":629.5000076293945,"y":144.00000381469727,"wires":[]}]
Someone who can help? Thanks...