diff --git a/node-red flow.txt b/node-red flow.txt new file mode 100644 index 0000000..5fe8546 --- /dev/null +++ b/node-red flow.txt @@ -0,0 +1 @@ +[{"id":"220d605.1b337a","type":"ttn message","z":"b469b5.66e3f648","name":"TTN message","app":"4d3dfc88.1efbe4","dev_id":"your_device_id","field":"","x":110,"y":200,"wires":[["f1843889.712ed8","f5fe8883.d2dc38"]]},{"id":"284834b7.4643ac","type":"worldmap","z":"b469b5.66e3f648","name":"Show Map","lat":"51.00","lon":"5.00","zoom":"16","layer":"OSM","cluster":"","maxage":"","usermenu":"show","layers":"show","panit":"true","x":670,"y":200,"wires":[]},{"id":"f5fe8883.d2dc38","type":"change","z":"b469b5.66e3f648","name":"","rules":[{"t":"set","p":"payload.lat","pt":"msg","to":"payload_fields.latitude","tot":"msg"},{"t":"set","p":"payload.lon","pt":"msg","to":"payload_fields.longitude","tot":"msg"},{"t":"set","p":"payload.name","pt":"msg","to":"dev_id","tot":"msg"},{"t":"set","p":"payload.icon","pt":"msg","to":"bullseye","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":200,"wires":[["a82cf429.fa7db8","284834b7.4643ac"]]},{"id":"9870202a.12b2d","type":"debug","z":"b469b5.66e3f648","name":"","active":true,"console":"false","complete":"true","x":650,"y":280,"wires":[]},{"id":"a82cf429.fa7db8","type":"worldmap-tracks","z":"b469b5.66e3f648","depth":20,"name":"","x":510,"y":160,"wires":[["284834b7.4643ac"]]},{"id":"f1843889.712ed8","type":"function","z":"b469b5.66e3f648","name":"Process received packet","func":"//function claculates distance between locations in meters\nfunction getdistance(lat1, lon1, lat2, lon2) {\n var R = 6371000; // Radius of the earth in m\n var dLat = (lat2 - lat1) * Math.PI / 180; // deg2rad below\n var dLon = (lon2 - lon1) * Math.PI / 180;\n var a = \n 0.5 - Math.cos(dLat)/2 + \n Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *\n (1 - Math.cos(dLon))/2;\n\n return Math.ceil(R * 2 * Math.asin(Math.sqrt(a)));\n}\n\n//reset gateways, packets and couter if tracker did restart\nvar counter = global.get(\"counter\");\nif (msg.counter < counter){\n gateways = 0;\n packets = 0;\n var unique_gateways = [];\n} else {\n gateways = flow.get(\"gateways\");\n packets = flow.get(\"packets\");\n var unique_gateways = flow.get(\"unique_gateways\"); \n}\n\nflow.set(\"counter\", msg.counter);\n\nvar lat_m = msg.payload_fields.latitude;\nvar lon_m = msg.payload_fields.longitude;\n\nvar gatewaysarray = msg.metadata.gateways;\nvar distancesarray = [];\n\n//log received data on second port\nvar logMsgs = [];\nvar currentTime = new Date().getTime();\n\n//process new packet\npackets = packets + 1;\nfor (i = 0; i < gatewaysarray.length; i++){\n distancesarray[i] = getdistance(lat_m, lon_m, gatewaysarray[i].latitude, gatewaysarray[i].longitude);\n logMsgs.push({payload: {time: currentTime,\n my_lat: lat_m,\n my_lon: lon_m,\n gateway: gatewaysarray[i]\n }\n });\n if(unique_gateways.indexOf(gatewaysarray[i].gtw_id) == -1){\n //new gateway found\n unique_gateways.push(gatewaysarray[i].gtw_id);\n gateways = gateways + 1;\n }\n}\nvar distance = Math.max(...distancesarray);\n\n\n//store results of this packet\nflow.set(\"gateways\",gateways);\nflow.set(\"unique_gateways\", unique_gateways);\nflow.set(\"packets\",packets);\n\nreturn [{\n dev_id: msg.dev_id,\n port: msg.port,\n payload: {\n packets: packets,\n gateways: gateways,\n distance: distance\n }\n },\n logMsgs\n];\n\n\n","outputs":"2","noerr":0,"x":370,"y":280,"wires":[["9870202a.12b2d","adcf6d74.22fbf"],["be213873.ab5038","9870202a.12b2d"]]},{"id":"adcf6d74.22fbf","type":"ttn send","z":"b469b5.66e3f648","name":"Send Data","app":"4d3dfc88.1efbe4","dev_id":"your_device_id","port":"1","x":670,"y":320,"wires":[]},{"id":"be213873.ab5038","type":"file","z":"b469b5.66e3f648","name":"ttn.log","filename":"/home/pi/ttn/ttn.log","appendNewline":true,"createDir":true,"overwriteFile":"false","x":650,"y":380,"wires":[]},{"id":"45f90d7b.65b664","type":"inject","z":"b469b5.66e3f648","name":"Init","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":110,"y":40,"wires":[["d5fb9316.98361"]]},{"id":"d5fb9316.98361","type":"function","z":"b469b5.66e3f648","name":"Init flow vars","func":"flow.set(\"gateways\",0);\nflow.set(\"unique_gateways\",[]);\nflow.set(\"packets\",0);\nflow.set(\"counter\",0);\n","outputs":"0","noerr":0,"x":290,"y":40,"wires":[]},{"id":"84c69c1a.a495d","type":"inject","z":"b469b5.66e3f648","name":"Debug","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":110,"y":100,"wires":[["165bd848.de1148"]]},{"id":"165bd848.de1148","type":"function","z":"b469b5.66e3f648","name":"show flow vars","func":"return {\n payload: {\n packets: flow.get(\"packets\"),\n gateways: flow.get(\"gateways\"),\n unique_gateways: flow.get(\"unique_gateways\"),\n counter: flow.get(\"counter\")\n }\n};","outputs":"1","noerr":0,"x":300,"y":100,"wires":[["eef3cb0b.0b1128"]]},{"id":"eef3cb0b.0b1128","type":"debug","z":"b469b5.66e3f648","name":"","active":true,"console":"false","complete":"payload","x":630,"y":100,"wires":[]},{"id":"4d3dfc88.1efbe4","type":"ttn app","z":"","appId":"your_appId","region":"eu","accessKey":"ttn-account-v2.hash"}] \ No newline at end of file