thebaldgeek.github.io

Using Node-RED in aircraft data message processing.

View on GitHub

Three flows to search for aircraft movements, airport arrivals and departures.

Navigation: home

(I might do a page on ADSB feeders, but long story short, feed everyone except the obvious ones that give nothing in return (and I am not talking about ‘enterprise’ or ‘business’ account’s, because they are nothing.))

Unlike most other ADSB sites, OpenSky-network.org give API access to past data. 7 day airport arrival/departure history and 30 aircraft movement history.
You can easily use a Node-RED http node to do a GET on the URL and present the data in a table.
This helps give some more information as to where an aircraft of interest has been lately.

If you are feeding OpenSky, you will have a user/pass. You will need to add these to the following flows.

Aircraft movements

This flow looks for an ICAO 24 number and automatically takes the time now and goes back 30 days. Those three parameters are put into a URL, fed to the OpenSky API and the returned data is put into a table on a dashboard table.

[{"id":"1b9655c0.0172ea","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1610,"y":140,"wires":[]},{"id":"7351741f.dbcd4c","type":"http request","z":"7177b2be.2ec43c","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","x":1070,"y":200,"wires":[["6a1cca82.8fb834"]]},{"id":"951fbcab.a1cb1","type":"function","z":"7177b2be.2ec43c","name":"build URL","func":"msg.url = \"https://yourusername:yourpassword@opensky-network.org/api/flights/aircraft?icao24=\"+msg.payload+\"&begin=\"+msg.past+\"&end=\"+msg.start\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":200,"wires":[["d23735b6.ec35c8","7351741f.dbcd4c"]]},{"id":"92a34e1e.cb4eb","type":"ui_text_input","z":"7177b2be.2ec43c","name":"","label":"ICAO","tooltip":"","group":"bd140338.ef17c","order":1,"width":1,"height":1,"passthru":true,"mode":"text","delay":"0","topic":"topic","topicType":"msg","x":150,"y":200,"wires":[["de3038ac.865a08"]]},{"id":"de3038ac.865a08","type":"function","z":"7177b2be.2ec43c","name":"icao","func":"msg.payload = msg.payload.toLowerCase();\nflow.set(\"icao\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":290,"y":200,"wires":[["be8bcfd7.e90be8"]]},{"id":"6a1cca82.8fb834","type":"function","z":"7177b2be.2ec43c","name":"OpenSky","func":"var m = [];\nfor (var i in msg.payload)\n{\n\n        // gather flight data in one object\n        flight = {};\n        flight.icao = (msg.payload[i].icao24);\n        flight.callsign = (msg.payload[i].callsign);\n        flight.firstseen = (new Date(msg.payload[i].firstSeen*1000).toUTCString());\n        flight.lastseen = (new Date(msg.payload[i].lastSeen*1000).toUTCString());\n        flight.departap = (msg.payload[i].estDepartureAirport);\n        flight.arriveap = (msg.payload[i].estArrivalAirport);\n        flight.abxurl = (\"https://globe.adsbexchange.com/?icao=\"+msg.payload[i].icao24);\n        m.push(flight);\n        \n    \n}\nif(m.length > 0) return { \"payload\" : m };\n\nelse return null; // no matches found. end of line.\n\n","outputs":"1","noerr":0,"initialize":"","finalize":"","x":1240,"y":200,"wires":[["c0a9a5ed.882a68","eee41ebc.58c57"]]},{"id":"c0a9a5ed.882a68","type":"function","z":"7177b2be.2ec43c","name":"array to JSON","func":"var data = []; //create an empty array.\nvar loop = msg.payload.length;  // Loop over the entire array.\nfor (i = 0; i < loop; i++) { //Loop through and get all the arrays to build each JSON object.\n\n    //data.push({\"Date\" : msg.payload[i].tstring, \"Registration\" : msg.payload[i].rego, \"Call Sign\" : msg.payload[i].calls, \"Type\" : msg.payload[i].actype, \"Opperator\" : msg.payload[i].oppr, \"Squawk Code\" : msg.payload[i].sqk, \"Aircraft icao\" : msg.payload[i].icao, \"ADSBEx\" : msg.payload[i].abxurl, \"yours VRS\" : msg.payload[i].yoururl});\n    data.push({\"icao\" : msg.payload[i].icao, \"callsign\" : msg.payload[i].callsign, \"firstseen\" : msg.payload[i].firstseen, \"lastseen\" : msg.payload[i].lastseen, \"departap\" : msg.payload[i].departap,\"arriveap\" : msg.payload[i].arriveap, \"ADSBEx\" : msg.payload[i].abxurl});\n\n}   \nreturn { payload : data };","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1420,"y":200,"wires":[["727bcfb2.2b6f9","1b9655c0.0172ea"]]},{"id":"727bcfb2.2b6f9","type":"ui_table","z":"7177b2be.2ec43c","group":"bd140338.ef17c","name":"Last 30 days","order":8,"width":15,"height":45,"columns":[{"field":"icao","title":"ICAO","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"callsign","title":"Call sign","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"firstseen","title":"Time first seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"lastseen","title":"Time last seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"departap","title":"Depature Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"arriveap","title":"Arrival Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"ADSBEx","title":"ADSBEx - No history! Current location only.","width":"350","align":"left","formatter":"link","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":1630,"y":200,"wires":[]},{"id":"eee41ebc.58c57","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1390,"y":140,"wires":[]},{"id":"d23735b6.ec35c8","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1030,"y":140,"wires":[]},{"id":"42a8f428.78fe2c","type":"function","z":"7177b2be.2ec43c","name":"test data","func":"msg.payload = return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1100,"y":280,"wires":[["c9b74f47.6fb3d","6a1cca82.8fb834"]]},{"id":"4f7d0fb6.7954d","type":"inject","z":"7177b2be.2ec43c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":920,"y":280,"wires":[["42a8f428.78fe2c"]]},{"id":"c9b74f47.6fb3d","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1290,"y":280,"wires":[]},{"id":"ef858602.6f7018","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":890,"y":360,"wires":[]},{"id":"62132bd1.277a54","type":"function","z":"7177b2be.2ec43c","name":"now-30days","func":"timestamp = msg.topic/1000;\nmyDate = new Date(timestamp);\nmsg.past = myDate.setTime(myDate.getTime()-2592000);\n//msg.start = parseInt(timestamp - 86400);\nmsg.start = parseInt(timestamp);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":200,"wires":[["ef858602.6f7018","951fbcab.a1cb1"]]},{"id":"be8bcfd7.e90be8","type":"change","z":"7177b2be.2ec43c","name":"topic timestamp","rules":[{"t":"set","p":"topic","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":200,"wires":[["62132bd1.277a54"]]},{"id":"bd140338.ef17c","type":"ui_group","name":"Past flights - Type aircraft ICAO24 code, press enter. WAIT (Up to 60 seconds!!). Last 30 days of aircraft arrive/depart airports will be returned. (Using opensky-network.org data)","tab":"3d624982.18f596","order":1,"disp":true,"width":"15","collapse":false},{"id":"3d624982.18f596","type":"ui_tab","name":"Aircraft Search","icon":"aircraft","order":3,"disabled":false,"hidden":false}]

Airport arrivals

This flow takes the ICAO code of the airport (ie KLAX) and returns the past 3 days. The OpenSky API will allow up to 7 days, but for most airports the delay between sending the request and getting the data back caused the user to mash the enter button way too many times and in the end give up, if your user actually waits, then the slug of data that got returned caused the table node and dashboard node to blow up and crash Node-RED (for busy airports like Los Angles and San Diego), so I limited it to the last three days - Your mileage may vary.

[{"id":"47dbd9a8.d3b098","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1590,"y":520,"wires":[]},{"id":"88683df8.dab5b","type":"http request","z":"7177b2be.2ec43c","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","x":1050,"y":580,"wires":[["32af9cb.c785564"]]},{"id":"d2c8a63b.238278","type":"function","z":"7177b2be.2ec43c","name":"build URL","func":"msg.url = \"https://yourusername:yourpassword@opensky-network.org/api/flights/arrival?airport=\"+msg.payload+\"&begin=\"+msg.past+\"&end=\"+msg.start\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":580,"wires":[["a92ae62d.a89478","88683df8.dab5b"]]},{"id":"4278f908.094588","type":"ui_text_input","z":"7177b2be.2ec43c","name":"","label":"ICAO","tooltip":"","group":"733e3b6f.359a24","order":1,"width":"1","height":1,"passthru":true,"mode":"text","delay":"0","topic":"topic","topicType":"msg","x":130,"y":580,"wires":[["a4372beb.0ffe88"]]},{"id":"a4372beb.0ffe88","type":"function","z":"7177b2be.2ec43c","name":"icao","func":"//msg.payload = msg.payload.toLowerCase();\nflow.set(\"icao\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":580,"wires":[["4a4ca2bc.6f9b7c"]]},{"id":"32af9cb.c785564","type":"function","z":"7177b2be.2ec43c","name":"OpenSky","func":"var m = [];\nfor (var i in msg.payload)\n{\n\n        // gather flight data in one object\n        flight = {};\n        flight.icao = (msg.payload[i].icao24);\n        flight.callsign = (msg.payload[i].callsign);\n        flight.firstseen = (new Date(msg.payload[i].firstSeen*1000).toUTCString());\n        flight.lastseen = (new Date(msg.payload[i].lastSeen*1000).toUTCString());\n        flight.departap = (msg.payload[i].estDepartureAirport);\n        flight.arriveap = (msg.payload[i].estArrivalAirport);\n        flight.abxurl = (\"https://globe.adsbexchange.com/?icao=\"+msg.payload[i].icao24);\n        m.push(flight);\n        \n    \n}\nif(m.length > 0) return { \"payload\" : m };\n\nelse return null; // no matches found. end of line.\n\n","outputs":"1","noerr":0,"initialize":"","finalize":"","x":1220,"y":580,"wires":[["5aab37fc.12c168","2bbff5cb.26ad8a"]]},{"id":"5aab37fc.12c168","type":"function","z":"7177b2be.2ec43c","name":"array to JSON","func":"var data = []; //create an empty array.\nvar loop = msg.payload.length;  // Loop over the entire array.\nfor (i = 0; i < loop; i++) { //Loop through and get all the arrays to build each JSON object.\n\n    //data.push({\"Date\" : msg.payload[i].tstring, \"Registration\" : msg.payload[i].rego, \"Call Sign\" : msg.payload[i].calls, \"Type\" : msg.payload[i].actype, \"Opperator\" : msg.payload[i].oppr, \"Squawk Code\" : msg.payload[i].sqk, \"Aircraft icao\" : msg.payload[i].icao, \"ADSBEx\" : msg.payload[i].abxurl, \"yours VRS\" : msg.payload[i].yoururl});\n    data.push({\"icao\" : msg.payload[i].icao, \"callsign\" : msg.payload[i].callsign, \"firstseen\" : msg.payload[i].firstseen, \"lastseen\" : msg.payload[i].lastseen, \"departap\" : msg.payload[i].departap,\"arriveap\" : msg.payload[i].arriveap, \"ADSBEx\" : msg.payload[i].abxurl});\n\n}   \nreturn { payload : data };","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1400,"y":580,"wires":[["943d939b.e4a56","47dbd9a8.d3b098"]]},{"id":"943d939b.e4a56","type":"ui_table","z":"7177b2be.2ec43c","group":"733e3b6f.359a24","name":"Last 3 days","order":8,"width":15,"height":45,"columns":[{"field":"icao","title":"ICAO","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"callsign","title":"Call sign","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"firstseen","title":"Time first seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"lastseen","title":"Time last seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"departap","title":"Depature Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"arriveap","title":"Arrival Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"ADSBEx","title":"ADSBEx - No history! Current location only.","width":"350","align":"left","formatter":"link","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":1610,"y":580,"wires":[]},{"id":"2bbff5cb.26ad8a","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1370,"y":520,"wires":[]},{"id":"a92ae62d.a89478","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1010,"y":520,"wires":[]},{"id":"e665c6c9.fac2c8","type":"function","z":"7177b2be.2ec43c","name":"test data","func":"msg.payload = return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1080,"y":660,"wires":[["acbaa0fb.fd0e5","32af9cb.c785564"]]},{"id":"370beaf1.52cf26","type":"inject","z":"7177b2be.2ec43c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":900,"y":660,"wires":[["e665c6c9.fac2c8"]]},{"id":"acbaa0fb.fd0e5","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1270,"y":660,"wires":[]},{"id":"80e4e437.2ae2a8","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":870,"y":740,"wires":[]},{"id":"9774b976.be62a8","type":"function","z":"7177b2be.2ec43c","name":"now-3days","func":"timestamp = msg.topic/1000;\nmyDate = new Date(timestamp);\nmsg.past = myDate.setTime(myDate.getTime()-259200);\n//msg.start = parseInt(timestamp - 86400);\nmsg.start = parseInt(timestamp);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":580,"wires":[["80e4e437.2ae2a8","d2c8a63b.238278"]]},{"id":"4a4ca2bc.6f9b7c","type":"change","z":"7177b2be.2ec43c","name":"topic timestamp","rules":[{"t":"set","p":"topic","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":580,"wires":[["9774b976.be62a8"]]},{"id":"733e3b6f.359a24","type":"ui_group","name":"Airport Arrivals Search - Enter airport ICAO code, press enter. Wait! Last 3 days of arrivals listed. (Using opensky-network.org data)","tab":"5ce3fcb0.90e6a4","order":1,"disp":true,"width":"15","collapse":false},{"id":"5ce3fcb0.90e6a4","type":"ui_tab","name":"Airport Arr Search","icon":"aircraft","order":4,"disabled":false,"hidden":false}]

Airport departures

This flow takes the ICAO code of the airport (ie KLAX) and returns the past 3 days. The OpenSky API will allow up to 7 days, but for most airports the delay between sending the request and getting the data back caused the user to mash the enter button way too many times and in the end give up, if your user actually waits, then the slug of data that got returned caused the table node and dashboard node to blow up and crash Node-RED (for busy airports like Los Angles and San Diego), so I limited it to the last three days - Your mileage may vary..

  [{"id":"eeecee67.ba495","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1570,"y":880,"wires":[]},{"id":"74b181a0.ae8ca","type":"http request","z":"7177b2be.2ec43c","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","x":1030,"y":940,"wires":[["f69f62bd.8f93e"]]},{"id":"65136bff.377ea4","type":"function","z":"7177b2be.2ec43c","name":"build URL","func":"msg.url = \"https://yourusername:yourpassword@opensky-network.org/api/flights/departure?airport=\"+msg.payload+\"&begin=\"+msg.past+\"&end=\"+msg.start\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":840,"y":940,"wires":[["2a353668.9903ea","74b181a0.ae8ca"]]},{"id":"4a24082c.87bcc8","type":"ui_text_input","z":"7177b2be.2ec43c","name":"","label":"ICAO","tooltip":"","group":"840f0e1a.dc2ab","order":1,"width":"1","height":1,"passthru":true,"mode":"text","delay":"0","topic":"topic","topicType":"msg","x":110,"y":940,"wires":[["e2782725.24de38"]]},{"id":"e2782725.24de38","type":"function","z":"7177b2be.2ec43c","name":"icao","func":"//msg.payload = msg.payload.toLowerCase();\nflow.set(\"icao\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":250,"y":940,"wires":[["52b8f3da.d457fc"]]},{"id":"f69f62bd.8f93e","type":"function","z":"7177b2be.2ec43c","name":"OpenSky","func":"var m = [];\nfor (var i in msg.payload)\n{\n\n        // gather flight data in one object\n        flight = {};\n        flight.icao = (msg.payload[i].icao24);\n        flight.callsign = (msg.payload[i].callsign);\n        flight.firstseen = (new Date(msg.payload[i].firstSeen*1000).toUTCString());\n        flight.lastseen = (new Date(msg.payload[i].lastSeen*1000).toUTCString());\n        flight.departap = (msg.payload[i].estDepartureAirport);\n        flight.arriveap = (msg.payload[i].estArrivalAirport);\n        flight.abxurl = (\"https://globe.adsbexchange.com/?icao=\"+msg.payload[i].icao24);\n        m.push(flight);\n        \n    \n}\nif(m.length > 0) return { \"payload\" : m };\n\nelse return null; // no matches found. end of line.\n\n","outputs":"1","noerr":0,"initialize":"","finalize":"","x":1200,"y":940,"wires":[["4d1d64b4.a7395c","e43c94a9.aef908"]]},{"id":"4d1d64b4.a7395c","type":"function","z":"7177b2be.2ec43c","name":"array to JSON","func":"var data = []; //create an empty array.\nvar loop = msg.payload.length;  // Loop over the entire array.\nfor (i = 0; i < loop; i++) { //Loop through and get all the arrays to build each JSON object.\n\n    //data.push({\"Date\" : msg.payload[i].tstring, \"Registration\" : msg.payload[i].rego, \"Call Sign\" : msg.payload[i].calls, \"Type\" : msg.payload[i].actype, \"Opperator\" : msg.payload[i].oppr, \"Squawk Code\" : msg.payload[i].sqk, \"Aircraft icao\" : msg.payload[i].icao, \"ADSBEx\" : msg.payload[i].abxurl, \"your VRS\" : msg.payload[i].benurl});\n    data.push({\"icao\" : msg.payload[i].icao, \"callsign\" : msg.payload[i].callsign, \"firstseen\" : msg.payload[i].firstseen, \"lastseen\" : msg.payload[i].lastseen, \"departap\" : msg.payload[i].departap,\"arriveap\" : msg.payload[i].arriveap, \"ADSBEx\" : msg.payload[i].abxurl});\n\n}   \nreturn { payload : data };","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1380,"y":940,"wires":[["fde8328c.d6ea7","eeecee67.ba495"]]},{"id":"fde8328c.d6ea7","type":"ui_table","z":"7177b2be.2ec43c","group":"840f0e1a.dc2ab","name":"Last 3 days","order":8,"width":15,"height":45,"columns":[{"field":"icao","title":"ICAO","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"callsign","title":"Call sign","width":"100","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"firstseen","title":"Time first seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"lastseen","title":"Time last seen","width":"250","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"departap","title":"Depature Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"arriveap","title":"Arrival Airport","width":"110","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"ADSBEx","title":"ADSBEx - No history! Current location only.","width":"350","align":"left","formatter":"link","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":1590,"y":940,"wires":[]},{"id":"e43c94a9.aef908","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":880,"wires":[]},{"id":"2a353668.9903ea","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":880,"wires":[]},{"id":"6ed61542.50caec","type":"function","z":"7177b2be.2ec43c","name":"test data","func":"msg.payload = return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1060,"y":1020,"wires":[["f17da350.ed8f4","f69f62bd.8f93e"]]},{"id":"37c41ce7.167734","type":"inject","z":"7177b2be.2ec43c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":880,"y":1020,"wires":[["6ed61542.50caec"]]},{"id":"f17da350.ed8f4","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1250,"y":1020,"wires":[]},{"id":"b047c6ee.4beca8","type":"debug","z":"7177b2be.2ec43c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":850,"y":1100,"wires":[]},{"id":"fece29e.9d623d8","type":"function","z":"7177b2be.2ec43c","name":"now-3days","func":"timestamp = msg.topic/1000;\nmyDate = new Date(timestamp);\nmsg.past = myDate.setTime(myDate.getTime()-259200);\n//msg.start = parseInt(timestamp - 86400);\nmsg.start = parseInt(timestamp);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":940,"wires":[["b047c6ee.4beca8","65136bff.377ea4"]]},{"id":"52b8f3da.d457fc","type":"change","z":"7177b2be.2ec43c","name":"topic timestamp","rules":[{"t":"set","p":"topic","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":940,"wires":[["fece29e.9d623d8"]]},{"id":"840f0e1a.dc2ab","type":"ui_group","name":"Airport Departure Search - Enter airport ICAO code, press enter. Wait! Last 3 days of departures listed. (Using opensky-network.org data)","tab":"c9cd4ed.46100b","order":1,"disp":true,"width":"15","collapse":false},{"id":"c9cd4ed.46100b","type":"ui_tab","name":"Airport Dep Search","icon":"aircraft_takeoff","order":5,"disabled":false,"hidden":false}]

Have fun.