[{"data":1,"prerenderedAt":1451},["ShallowReactive",2],{"Categories":3,"NavIndexCategoriesCountFooter":203,"content-\u002F2025\u002F10\u002F28\u002Fultrafeeder-ads-b\u002F":204},[4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,68,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202],{"category":5},"System Administration",{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},"Software Development",{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":27},{"category":27},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":5},{"category":27},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":27},{"category":27},{"category":67},"Drones & RC",{"category":69},"DIY Projects",{"category":67},{"category":72},"Photography",{"category":69},{"category":69},{"category":69},{"category":67},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":69},{"category":67},{"category":69},{"category":69},{"category":67},{"category":67},{"category":72},{"category":72},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":5},{"category":5},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":5},{"category":67},{"category":67},{"category":72},{"category":72},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":67},{"category":72},{"category":67},{"category":138},"3D Printing - Laser Cutting - CNC",{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":138},{"category":5},{"category":138},{"category":27},{"category":27},{"category":138},{"category":138},{"category":72},{"category":158},"Photography,3D Printing - Laser Cutting - CNC",{"category":27},{"category":27},{"category":69},{"category":27},{"category":27},{"category":27},{"category":27},{"category":5},{"category":67},{"category":5},{"category":5},{"category":27},{"category":27},{"category":27},{"category":27},{"category":27},{"category":69},{"category":27},{"category":27},{"category":27},{"category":27},{"category":181},"Home Assistant",{"category":181},{"category":72},{"category":27},{"category":27},{"category":72},{"category":138},{"category":5},{"category":72},{"category":72},{"category":138},{"category":27},{"category":181},{"category":181},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},{"category":72},191,{"id":205,"title":206,"body":207,"category":1436,"date":1437,"description":213,"embedImage":1436,"extension":1438,"image":223,"intro":1439,"meta":1440,"navigation":440,"path":1441,"seo":1442,"series":1436,"sitemap":1443,"stem":1444,"tags":1445,"__hash__":1450},"content\u002F2025\u002F10\u002F28\u002Fultrafeeder-ads-b.md","Ultrafeeder - ADS-B",{"type":208,"value":209,"toc":1427},"minimark",[210,214,217,224,229,232,235,251,255,269,278,281,286,289,705,708,882,885,889,892,895,898,997,1000,1008,1016,1019,1059,1105,1108,1116,1119,1123,1126,1135,1138,1210,1213,1218,1226,1233,1236,1239,1347,1350,1368,1371,1389,1392,1399,1402,1405,1408,1411,1416,1420,1423],[211,212,213],"p",{},"If you're interested in using apps like FlightRadar24 or FlightAware - how about listening to your local ADS-B signals directly?",[211,215,216],{},"You can even feed that information onwards - and both FR and FA will upgrade your account if you do so.",[211,218,219],{},[220,221],"img",{"alt":222,"src":223},"Aircraft","\u002Fimages\u002Fposts\u002F2025\u002F10\u002Faircraft.png",[225,226,228],"h2",{"id":227},"hardware","Hardware",[211,230,231],{},"The simplest setup is a raspberry pi and a cheap software defined radio (SDR) USB dongle.",[211,233,234],{},"My current setup is:",[236,237,238,242,245,248],"ul",{},[239,240,241],"li",{},"Raspberry pi 5 - 2gb memory (the cheapest pi 5 model)",[239,243,244],{},"Waveshare POE M.2 HAT+ for pi 5 (allows me to power the pi over PoE and also use a small M.2 SATA disk instead of SD card)",[239,246,247],{},"RTLSDR radio (both the RTL-SDR blog v3 or v4) - these I get from RTL-SDR's own store - they have amazon, ebay and aliexpress entry points",[239,249,250],{},"A cheap 1090Mhz\u002FADSB antenna + a cable that connects from the antenna to the RTL-SDR - so - whatever connecter the antenna needs to the dongle's SMA port.",[225,252,254],{"id":253},"software","Software",[211,256,257,258,268],{},"This is a set of docker containers provided by the ",[259,260,267],"a",{"href":261,"rel":262,"target":266},"https:\u002F\u002Fsdr-enthusiasts.gitbook.io\u002Fads-b\u002Fintro\u002Foverview",[263,264,265],"nofollow","noopener","noreferer","_blank","SDR enthusiasts project",".",[211,270,271,272,277],{},"They provide an example ",[259,273,276],{"href":274,"rel":275,"target":266},"https:\u002F\u002Fgithub.com\u002Fsdr-enthusiasts\u002Fdocker-adsb-ultrafeeder\u002Fblob\u002Fmain\u002Fdocker-compose.yml",[263,264,265],"docker-compose.yml"," with many different sources and aggregators (you can also use this to display other feeds in your local web instance).",[211,279,280],{},"I want only to use my own ADS-B data and then add on two more images to feed to flight radar and flight aware.",[282,283,285],"h3",{"id":284},"ultrafeeder","Ultrafeeder",[211,287,288],{},"This spins up the ultrafeeder image as well as providing the tar1090 web interface.",[290,291,296],"pre",{"className":292,"code":293,"language":294,"meta":295,"style":295},"language-yaml shiki shiki-themes github-dark","services:\n  ultrafeeder:\n    image: ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-adsb-ultrafeeder:latest\n    container_name: ultrafeeder\n    hostname: ultrafeeder\n    restart: unless-stopped\n    device_cgroup_rules:\n      - \"c 189:* rwm\" # allow USB\n    ports:\n      - \"80:80\" # tar1090 \u002F graphs1090 web UI\n    environment:\n      # --- General ---\n      - LOGLEVEL=${LOGLEVEL-verbose}\n      - TZ=${FEEDER_TZ}\n\n      # --- SDR (your dongle only) ---\n      - READSB_DEVICE_TYPE=rtlsdr\n      - READSB_GAIN=${ADSB_SDR_GAIN-auto}\n      - READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL} # e.g. 00000001 or leave empty for device 0\n      - READSB_RTLSDR_PPM=${ADSB_SDR_PPM-0}\n\n      # --- Decoder \u002F location ---\n      - READSB_LAT=${FEEDER_LAT}\n      - READSB_LON=${FEEDER_LONG}\n      - READSB_ALT=${FEEDER_ALT_M}m\n      - READSB_RX_LOCATION_ACCURACY=2\n      - READSB_STATS_RANGE=true\n\n      # --- tar1090 \u002F UI niceties (optional) ---\n      - UPDATE_TAR1090=true\n      - TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}\n      - TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}\n      - TAR1090_PAGETITLE=${FEEDER_NAME}\n      - TAR1090_MESSAGERATEINTITLE=true\n      - TAR1090_PLANECOUNTINTITLE=true\n      - TAR1090_ENABLE_AC_DB=true\n      - TAR1090_SITESHOW=true\n\n      # graphs1090\n      - GRAPHS1090_DARKMODE=true\n\n    volumes:\n      - \u002Fopt\u002Fadsb\u002Fultrafeeder\u002Fglobe_history:\u002Fvar\u002Fglobe_history\n      - \u002Fopt\u002Fadsb\u002Fultrafeeder\u002Fgraphs1090:\u002Fvar\u002Flib\u002Fcollectd\n      - \u002Fproc\u002Fdiskstats:\u002Fproc\u002Fdiskstats:ro\n      - \u002Fdev\u002Fbus\u002Fusb:\u002Fdev\u002Fbus\u002Fusb\n    tmpfs:\n      - \u002Frun:exec,size=256M\n      - \u002Ftmp:size=128M\n      - \u002Fvar\u002Flog:size=32M\n","yaml","",[297,298,299,312,320,333,344,354,365,373,386,394,405,413,419,427,435,442,448,456,464,475,483,488,494,502,510,518,526,534,539,545,553,561,569,577,585,593,601,609,614,620,628,633,641,649,657,665,673,681,689,697],"code",{"__ignoreMap":295},[300,301,304,308],"span",{"class":302,"line":303},"line",1,[300,305,307],{"class":306},"s4JwU","services",[300,309,311],{"class":310},"s95oV",":\n",[300,313,315,318],{"class":302,"line":314},2,[300,316,317],{"class":306},"  ultrafeeder",[300,319,311],{"class":310},[300,321,323,326,329],{"class":302,"line":322},3,[300,324,325],{"class":306},"    image",[300,327,328],{"class":310},": ",[300,330,332],{"class":331},"sU2Wk","ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-adsb-ultrafeeder:latest\n",[300,334,336,339,341],{"class":302,"line":335},4,[300,337,338],{"class":306},"    container_name",[300,340,328],{"class":310},[300,342,343],{"class":331},"ultrafeeder\n",[300,345,347,350,352],{"class":302,"line":346},5,[300,348,349],{"class":306},"    hostname",[300,351,328],{"class":310},[300,353,343],{"class":331},[300,355,357,360,362],{"class":302,"line":356},6,[300,358,359],{"class":306},"    restart",[300,361,328],{"class":310},[300,363,364],{"class":331},"unless-stopped\n",[300,366,368,371],{"class":302,"line":367},7,[300,369,370],{"class":306},"    device_cgroup_rules",[300,372,311],{"class":310},[300,374,376,379,382],{"class":302,"line":375},8,[300,377,378],{"class":310},"      - ",[300,380,381],{"class":331},"\"c 189:* rwm\"",[300,383,385],{"class":384},"sAwPA"," # allow USB\n",[300,387,389,392],{"class":302,"line":388},9,[300,390,391],{"class":306},"    ports",[300,393,311],{"class":310},[300,395,397,399,402],{"class":302,"line":396},10,[300,398,378],{"class":310},[300,400,401],{"class":331},"\"80:80\"",[300,403,404],{"class":384}," # tar1090 \u002F graphs1090 web UI\n",[300,406,408,411],{"class":302,"line":407},11,[300,409,410],{"class":306},"    environment",[300,412,311],{"class":310},[300,414,416],{"class":302,"line":415},12,[300,417,418],{"class":384},"      # --- General ---\n",[300,420,422,424],{"class":302,"line":421},13,[300,423,378],{"class":310},[300,425,426],{"class":331},"LOGLEVEL=${LOGLEVEL-verbose}\n",[300,428,430,432],{"class":302,"line":429},14,[300,431,378],{"class":310},[300,433,434],{"class":331},"TZ=${FEEDER_TZ}\n",[300,436,438],{"class":302,"line":437},15,[300,439,441],{"emptyLinePlaceholder":440},true,"\n",[300,443,445],{"class":302,"line":444},16,[300,446,447],{"class":384},"      # --- SDR (your dongle only) ---\n",[300,449,451,453],{"class":302,"line":450},17,[300,452,378],{"class":310},[300,454,455],{"class":331},"READSB_DEVICE_TYPE=rtlsdr\n",[300,457,459,461],{"class":302,"line":458},18,[300,460,378],{"class":310},[300,462,463],{"class":331},"READSB_GAIN=${ADSB_SDR_GAIN-auto}\n",[300,465,467,469,472],{"class":302,"line":466},19,[300,468,378],{"class":310},[300,470,471],{"class":331},"READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL}",[300,473,474],{"class":384}," # e.g. 00000001 or leave empty for device 0\n",[300,476,478,480],{"class":302,"line":477},20,[300,479,378],{"class":310},[300,481,482],{"class":331},"READSB_RTLSDR_PPM=${ADSB_SDR_PPM-0}\n",[300,484,486],{"class":302,"line":485},21,[300,487,441],{"emptyLinePlaceholder":440},[300,489,491],{"class":302,"line":490},22,[300,492,493],{"class":384},"      # --- Decoder \u002F location ---\n",[300,495,497,499],{"class":302,"line":496},23,[300,498,378],{"class":310},[300,500,501],{"class":331},"READSB_LAT=${FEEDER_LAT}\n",[300,503,505,507],{"class":302,"line":504},24,[300,506,378],{"class":310},[300,508,509],{"class":331},"READSB_LON=${FEEDER_LONG}\n",[300,511,513,515],{"class":302,"line":512},25,[300,514,378],{"class":310},[300,516,517],{"class":331},"READSB_ALT=${FEEDER_ALT_M}m\n",[300,519,521,523],{"class":302,"line":520},26,[300,522,378],{"class":310},[300,524,525],{"class":331},"READSB_RX_LOCATION_ACCURACY=2\n",[300,527,529,531],{"class":302,"line":528},27,[300,530,378],{"class":310},[300,532,533],{"class":331},"READSB_STATS_RANGE=true\n",[300,535,537],{"class":302,"line":536},28,[300,538,441],{"emptyLinePlaceholder":440},[300,540,542],{"class":302,"line":541},29,[300,543,544],{"class":384},"      # --- tar1090 \u002F UI niceties (optional) ---\n",[300,546,548,550],{"class":302,"line":547},30,[300,549,378],{"class":310},[300,551,552],{"class":331},"UPDATE_TAR1090=true\n",[300,554,556,558],{"class":302,"line":555},31,[300,557,378],{"class":310},[300,559,560],{"class":331},"TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}\n",[300,562,564,566],{"class":302,"line":563},32,[300,565,378],{"class":310},[300,567,568],{"class":331},"TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}\n",[300,570,572,574],{"class":302,"line":571},33,[300,573,378],{"class":310},[300,575,576],{"class":331},"TAR1090_PAGETITLE=${FEEDER_NAME}\n",[300,578,580,582],{"class":302,"line":579},34,[300,581,378],{"class":310},[300,583,584],{"class":331},"TAR1090_MESSAGERATEINTITLE=true\n",[300,586,588,590],{"class":302,"line":587},35,[300,589,378],{"class":310},[300,591,592],{"class":331},"TAR1090_PLANECOUNTINTITLE=true\n",[300,594,596,598],{"class":302,"line":595},36,[300,597,378],{"class":310},[300,599,600],{"class":331},"TAR1090_ENABLE_AC_DB=true\n",[300,602,604,606],{"class":302,"line":603},37,[300,605,378],{"class":310},[300,607,608],{"class":331},"TAR1090_SITESHOW=true\n",[300,610,612],{"class":302,"line":611},38,[300,613,441],{"emptyLinePlaceholder":440},[300,615,617],{"class":302,"line":616},39,[300,618,619],{"class":384},"      # graphs1090\n",[300,621,623,625],{"class":302,"line":622},40,[300,624,378],{"class":310},[300,626,627],{"class":331},"GRAPHS1090_DARKMODE=true\n",[300,629,631],{"class":302,"line":630},41,[300,632,441],{"emptyLinePlaceholder":440},[300,634,636,639],{"class":302,"line":635},42,[300,637,638],{"class":306},"    volumes",[300,640,311],{"class":310},[300,642,644,646],{"class":302,"line":643},43,[300,645,378],{"class":310},[300,647,648],{"class":331},"\u002Fopt\u002Fadsb\u002Fultrafeeder\u002Fglobe_history:\u002Fvar\u002Fglobe_history\n",[300,650,652,654],{"class":302,"line":651},44,[300,653,378],{"class":310},[300,655,656],{"class":331},"\u002Fopt\u002Fadsb\u002Fultrafeeder\u002Fgraphs1090:\u002Fvar\u002Flib\u002Fcollectd\n",[300,658,660,662],{"class":302,"line":659},45,[300,661,378],{"class":310},[300,663,664],{"class":331},"\u002Fproc\u002Fdiskstats:\u002Fproc\u002Fdiskstats:ro\n",[300,666,668,670],{"class":302,"line":667},46,[300,669,378],{"class":310},[300,671,672],{"class":331},"\u002Fdev\u002Fbus\u002Fusb:\u002Fdev\u002Fbus\u002Fusb\n",[300,674,676,679],{"class":302,"line":675},47,[300,677,678],{"class":306},"    tmpfs",[300,680,311],{"class":310},[300,682,684,686],{"class":302,"line":683},48,[300,685,378],{"class":310},[300,687,688],{"class":331},"\u002Frun:exec,size=256M\n",[300,690,692,694],{"class":302,"line":691},49,[300,693,378],{"class":310},[300,695,696],{"class":331},"\u002Ftmp:size=128M\n",[300,698,700,702],{"class":302,"line":699},50,[300,701,378],{"class":310},[300,703,704],{"class":331},"\u002Fvar\u002Flog:size=32M\n",[211,706,707],{},"I also provide a .env file alongside compose:",[290,709,713],{"className":710,"code":711,"language":712,"meta":295,"style":295},"language-shell shiki shiki-themes github-dark","# Basics\nFEEDER_NAME=Some_relevant_name\nFEEDER_TZ=Local timezone - e.g. Europe\u002FOslo\nFEEDER_LAT=Accurate latitude of the pi - 5 or 6 decimal places\nFEEDER_LONG=Accurate longitude of the pi - 5 or 6 decimal places\nFEEDER_ALT_M=Accurate height in meters\n\n# Your RTL-SDR\nADSB_SDR_SERIAL=00000001\nADSB_SDR_PPM=0\nADSB_SDR_GAIN=auto\n","shell",[297,714,715,720,732,755,795,825,843,847,852,862,872],{"__ignoreMap":295},[300,716,717],{"class":302,"line":303},[300,718,719],{"class":384},"# Basics\n",[300,721,722,725,729],{"class":302,"line":314},[300,723,724],{"class":310},"FEEDER_NAME",[300,726,728],{"class":727},"snl16","=",[300,730,731],{"class":331},"Some_relevant_name\n",[300,733,734,737,739,742,746,749,752],{"class":302,"line":322},[300,735,736],{"class":310},"FEEDER_TZ",[300,738,728],{"class":727},[300,740,741],{"class":331},"Local",[300,743,745],{"class":744},"svObZ"," timezone",[300,747,748],{"class":331}," -",[300,750,751],{"class":331}," e.g.",[300,753,754],{"class":331}," Europe\u002FOslo\n",[300,756,757,760,762,765,768,771,774,777,779,783,786,789,792],{"class":302,"line":335},[300,758,759],{"class":310},"FEEDER_LAT",[300,761,728],{"class":727},[300,763,764],{"class":331},"Accurate",[300,766,767],{"class":744}," latitude",[300,769,770],{"class":331}," of",[300,772,773],{"class":331}," the",[300,775,776],{"class":331}," pi",[300,778,748],{"class":331},[300,780,782],{"class":781},"sDLfK"," 5",[300,784,785],{"class":331}," or",[300,787,788],{"class":781}," 6",[300,790,791],{"class":331}," decimal",[300,793,794],{"class":331}," places\n",[300,796,797,800,802,804,807,809,811,813,815,817,819,821,823],{"class":302,"line":346},[300,798,799],{"class":310},"FEEDER_LONG",[300,801,728],{"class":727},[300,803,764],{"class":331},[300,805,806],{"class":744}," longitude",[300,808,770],{"class":331},[300,810,773],{"class":331},[300,812,776],{"class":331},[300,814,748],{"class":331},[300,816,782],{"class":781},[300,818,785],{"class":331},[300,820,788],{"class":781},[300,822,791],{"class":331},[300,824,794],{"class":331},[300,826,827,830,832,834,837,840],{"class":302,"line":356},[300,828,829],{"class":310},"FEEDER_ALT_M",[300,831,728],{"class":727},[300,833,764],{"class":331},[300,835,836],{"class":744}," height",[300,838,839],{"class":331}," in",[300,841,842],{"class":331}," meters\n",[300,844,845],{"class":302,"line":367},[300,846,441],{"emptyLinePlaceholder":440},[300,848,849],{"class":302,"line":375},[300,850,851],{"class":384},"# Your RTL-SDR\n",[300,853,854,857,859],{"class":302,"line":388},[300,855,856],{"class":310},"ADSB_SDR_SERIAL",[300,858,728],{"class":727},[300,860,861],{"class":331},"00000001\n",[300,863,864,867,869],{"class":302,"line":396},[300,865,866],{"class":310},"ADSB_SDR_PPM",[300,868,728],{"class":727},[300,870,871],{"class":331},"0\n",[300,873,874,877,879],{"class":302,"line":407},[300,875,876],{"class":310},"ADSB_SDR_GAIN",[300,878,728],{"class":727},[300,880,881],{"class":331},"auto\n",[211,883,884],{},"The serial here will likely be the same unless you have several RTL-SDRs connected to the same pi.",[282,886,888],{"id":887},"flight-radar-24","Flight Radar 24",[211,890,891],{},"Prerequisite - an existing account - the free version is fine.",[211,893,894],{},"We need to add a container to the compose file and some env entries.",[211,896,897],{},"Service:",[290,899,901],{"className":292,"code":900,"language":294,"meta":295,"style":295},"services:\n  fr24:\n    image: ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-flightradar24:latest\n    container_name: fr24\n    restart: unless-stopped\n    ports:\n      - \"8754:8754\" # FR24 local status page\n    environment:\n      - BEASTHOST=ultrafeeder # pull Beast from ultrafeeder:30005\n      - FR24KEY=${FR24_SHARING_KEY} # set in .env (see below)\n    tmpfs:\n      - \u002Fvar\u002Flog\n",[297,902,903,909,916,925,934,942,948,958,964,974,984,990],{"__ignoreMap":295},[300,904,905,907],{"class":302,"line":303},[300,906,307],{"class":306},[300,908,311],{"class":310},[300,910,911,914],{"class":302,"line":314},[300,912,913],{"class":306},"  fr24",[300,915,311],{"class":310},[300,917,918,920,922],{"class":302,"line":322},[300,919,325],{"class":306},[300,921,328],{"class":310},[300,923,924],{"class":331},"ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-flightradar24:latest\n",[300,926,927,929,931],{"class":302,"line":335},[300,928,338],{"class":306},[300,930,328],{"class":310},[300,932,933],{"class":331},"fr24\n",[300,935,936,938,940],{"class":302,"line":346},[300,937,359],{"class":306},[300,939,328],{"class":310},[300,941,364],{"class":331},[300,943,944,946],{"class":302,"line":356},[300,945,391],{"class":306},[300,947,311],{"class":310},[300,949,950,952,955],{"class":302,"line":367},[300,951,378],{"class":310},[300,953,954],{"class":331},"\"8754:8754\"",[300,956,957],{"class":384}," # FR24 local status page\n",[300,959,960,962],{"class":302,"line":375},[300,961,410],{"class":306},[300,963,311],{"class":310},[300,965,966,968,971],{"class":302,"line":388},[300,967,378],{"class":310},[300,969,970],{"class":331},"BEASTHOST=ultrafeeder",[300,972,973],{"class":384}," # pull Beast from ultrafeeder:30005\n",[300,975,976,978,981],{"class":302,"line":396},[300,977,378],{"class":310},[300,979,980],{"class":331},"FR24KEY=${FR24_SHARING_KEY}",[300,982,983],{"class":384}," # set in .env (see below)\n",[300,985,986,988],{"class":302,"line":407},[300,987,678],{"class":306},[300,989,311],{"class":310},[300,991,992,994],{"class":302,"line":415},[300,993,378],{"class":310},[300,995,996],{"class":331},"\u002Fvar\u002Flog\n",[211,998,999],{},"Env:",[290,1001,1006],{"className":1002,"code":1004,"language":1005},[1003],"language-text","# Flightradar24\nFR24_SHARING_KEY=...\n","text",[297,1007,1004],{"__ignoreMap":295},[211,1009,1010,1011],{},"To get the sharing key follow ",[259,1012,1015],{"href":1013,"rel":1014,"target":266},"https:\u002F\u002Fsdr-enthusiasts.gitbook.io\u002Fads-b\u002Ffeeder-containers\u002Ffeeding-flightradar24",[263,264,265],"the guide",[211,1017,1018],{},"Currently that says to run:",[290,1020,1022],{"className":710,"code":1021,"language":712,"meta":295,"style":295},"docker run -it --rm ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-baseimage:qemu bash -c \"$(curl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Fsdr-enthusiasts\u002Fdocker-flightradar24\u002Fmain\u002Fget_adsb_key.sh)\"\n",[297,1023,1024],{"__ignoreMap":295},[300,1025,1026,1029,1032,1035,1038,1041,1044,1047,1050,1053,1056],{"class":302,"line":303},[300,1027,1028],{"class":744},"docker",[300,1030,1031],{"class":331}," run",[300,1033,1034],{"class":781}," -it",[300,1036,1037],{"class":781}," --rm",[300,1039,1040],{"class":331}," ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-baseimage:qemu",[300,1042,1043],{"class":331}," bash",[300,1045,1046],{"class":781}," -c",[300,1048,1049],{"class":331}," \"$(",[300,1051,1052],{"class":744},"curl",[300,1054,1055],{"class":781}," -sSL",[300,1057,1058],{"class":331}," https:\u002F\u002Fraw.githubusercontent.com\u002Fsdr-enthusiasts\u002Fdocker-flightradar24\u002Fmain\u002Fget_adsb_key.sh)\"\n",[236,1060,1061,1069,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102],{},[239,1062,1063,1064,1068],{},"1.1 Enter your email address (",[259,1065,1067],{"href":1066},"mailto:username@domain.tld","username@domain.tld","): Your FlightRadar24 account email address",[239,1070,1071],{},"1.2 If you used to feed FR24 with ADS-B data before, enter your sharing key.: Leave blank and press enter",[239,1073,1074],{},"1.3 Would you like to participate in MLAT calculations?: no",[239,1076,1077],{},"3.A: your latitude",[239,1079,1080],{},"3.B: your longitude",[239,1082,1083],{},"3.C: your height above sea level - in feet",[239,1085,1086],{},"Continue with these settings? yes.",[239,1088,1089],{},"4.1 Receiver selection: 4 (ModeS Beast USB\u002FNetwork)",[239,1091,1092],{},"4.2 Connection Type: 1 - network",[239,1094,1095],{},"4.3A address\u002Fhostname: ultrafeeder",[239,1097,1098],{},"4.3B port: 30005",[239,1100,1101],{},"5.1 RAW feed: no",[239,1103,1104],{},"5.2 Basestation feed: no",[211,1106,1107],{},"It should then communicate with flight radar 24 and return two things:",[236,1109,1110,1113],{},[239,1111,1112],{},"Your sharing key (XXXX) has been configured and emailed to you for backup purposes.",[239,1114,1115],{},"Your radar id is XXXX, please include it in all email communication with us.",[211,1117,1118],{},"Flight radar 24 ask that if you are feeding other locations then to not enable mlat which is why the answer in 1.3 is no.",[282,1120,1122],{"id":1121},"flight-aware","Flight Aware",[211,1124,1125],{},"For this we'll use piaware.",[211,1127,1128,1129,1134],{},"There is a set of instructions ",[259,1130,1133],{"href":1131,"rel":1132,"target":266},"https:\u002F\u002Fsdr-enthusiasts.gitbook.io\u002Fads-b\u002Ffeeder-containers\u002Ffeeding-flightaware-piaware",[263,264,265],"on the guide"," - but there are some small changes that you will probably need to make.",[211,1136,1137],{},"First step is to get a feeder ID.",[290,1139,1141],{"className":710,"code":1140,"language":712,"meta":295,"style":295},"docker pull ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest\nsource .\u002F.env\ntimeout 60 docker run --rm -e LAT=\"$FEEDER_LAT\" -e LONG=\"$FEEDER_LONG\" ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest | grep \"my feeder ID\"\n",[297,1142,1143,1153,1161],{"__ignoreMap":295},[300,1144,1145,1147,1150],{"class":302,"line":303},[300,1146,1028],{"class":744},[300,1148,1149],{"class":331}," pull",[300,1151,1152],{"class":331}," ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest\n",[300,1154,1155,1158],{"class":302,"line":314},[300,1156,1157],{"class":781},"source",[300,1159,1160],{"class":331}," .\u002F.env\n",[300,1162,1163,1166,1169,1172,1174,1176,1179,1182,1185,1188,1190,1193,1196,1198,1201,1204,1207],{"class":302,"line":322},[300,1164,1165],{"class":744},"timeout",[300,1167,1168],{"class":781}," 60",[300,1170,1171],{"class":331}," docker",[300,1173,1031],{"class":331},[300,1175,1037],{"class":781},[300,1177,1178],{"class":781}," -e",[300,1180,1181],{"class":331}," LAT=\"",[300,1183,1184],{"class":310},"$FEEDER_LAT",[300,1186,1187],{"class":331},"\"",[300,1189,1178],{"class":781},[300,1191,1192],{"class":331}," LONG=\"",[300,1194,1195],{"class":310},"$FEEDER_LONG",[300,1197,1187],{"class":331},[300,1199,1200],{"class":331}," ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest",[300,1202,1203],{"class":727}," |",[300,1205,1206],{"class":744}," grep",[300,1208,1209],{"class":331}," \"my feeder ID\"\n",[211,1211,1212],{},"This should get you a feeder ID.",[1214,1215,1217],"h4",{"id":1216},"claiming-the-feeder","Claiming the feeder",[211,1219,1220,1221,1225],{},"The guide suggests heading to ",[259,1222,1223],{"href":1223,"rel":1224,"target":266},"https:\u002F\u002Fflightaware.com\u002Fadsb\u002Fpiaware\u002Fclaim",[263,264,265]," to claim it - but - for me that provided an empty page - only the headers were present.",[211,1227,1228,1229],{},"However - in the flight aware forums a workaround is posted that you simply append the feeder ID ",[259,1230,1231],{"href":1231,"rel":1232,"target":266},"https:\u002F\u002Fflightaware.com\u002Fadsb\u002Fpiaware\u002Fclaim\u002Ffeeder_id_here",[263,264,265],[211,1234,1235],{},"This worked.",[211,1237,1238],{},"Now we can add the piaware service to the compose file:",[290,1240,1242],{"className":292,"code":1241,"language":294,"meta":295,"style":295},"services:\n  piaware:\n    image: ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest\n    container_name: piaware\n    restart: unless-stopped\n    ports:\n      - \"8080:8080\" # FlightAware skyaware map (optional)\n    environment:\n      - BEASTHOST=ultrafeeder # pull Beast from ultrafeeder:30005\n      - TZ=${FEEDER_TZ}\n      - FEEDER_ID=${PIAWARE_FEEDER_ID} # set in .env (see below)\n    tmpfs:\n      - \u002Frun:exec,size=64M\n      - \u002Fvar\u002Flog\n",[297,1243,1244,1250,1257,1266,1275,1283,1289,1299,1305,1313,1319,1328,1334,1341],{"__ignoreMap":295},[300,1245,1246,1248],{"class":302,"line":303},[300,1247,307],{"class":306},[300,1249,311],{"class":310},[300,1251,1252,1255],{"class":302,"line":314},[300,1253,1254],{"class":306},"  piaware",[300,1256,311],{"class":310},[300,1258,1259,1261,1263],{"class":302,"line":322},[300,1260,325],{"class":306},[300,1262,328],{"class":310},[300,1264,1265],{"class":331},"ghcr.io\u002Fsdr-enthusiasts\u002Fdocker-piaware:latest\n",[300,1267,1268,1270,1272],{"class":302,"line":335},[300,1269,338],{"class":306},[300,1271,328],{"class":310},[300,1273,1274],{"class":331},"piaware\n",[300,1276,1277,1279,1281],{"class":302,"line":346},[300,1278,359],{"class":306},[300,1280,328],{"class":310},[300,1282,364],{"class":331},[300,1284,1285,1287],{"class":302,"line":356},[300,1286,391],{"class":306},[300,1288,311],{"class":310},[300,1290,1291,1293,1296],{"class":302,"line":367},[300,1292,378],{"class":310},[300,1294,1295],{"class":331},"\"8080:8080\"",[300,1297,1298],{"class":384}," # FlightAware skyaware map (optional)\n",[300,1300,1301,1303],{"class":302,"line":375},[300,1302,410],{"class":306},[300,1304,311],{"class":310},[300,1306,1307,1309,1311],{"class":302,"line":388},[300,1308,378],{"class":310},[300,1310,970],{"class":331},[300,1312,973],{"class":384},[300,1314,1315,1317],{"class":302,"line":396},[300,1316,378],{"class":310},[300,1318,434],{"class":331},[300,1320,1321,1323,1326],{"class":302,"line":407},[300,1322,378],{"class":310},[300,1324,1325],{"class":331},"FEEDER_ID=${PIAWARE_FEEDER_ID}",[300,1327,983],{"class":384},[300,1329,1330,1332],{"class":302,"line":415},[300,1331,678],{"class":306},[300,1333,311],{"class":310},[300,1335,1336,1338],{"class":302,"line":421},[300,1337,378],{"class":310},[300,1339,1340],{"class":331},"\u002Frun:exec,size=64M\n",[300,1342,1343,1345],{"class":302,"line":429},[300,1344,378],{"class":310},[300,1346,996],{"class":331},[211,1348,1349],{},"We also need to extend the environment for the ultrafeeder service:",[290,1351,1353],{"className":292,"code":1352,"language":294,"meta":295,"style":295},"# Provide MLAT results back to ultrafeeder from the piaware sidecar:\n- ULTRAFEEDER_CONFIG=mlathub,piaware,30105,beast_in\n",[297,1354,1355,1360],{"__ignoreMap":295},[300,1356,1357],{"class":302,"line":303},[300,1358,1359],{"class":384},"# Provide MLAT results back to ultrafeeder from the piaware sidecar:\n",[300,1361,1362,1365],{"class":302,"line":314},[300,1363,1364],{"class":310},"- ",[300,1366,1367],{"class":331},"ULTRAFEEDER_CONFIG=mlathub,piaware,30105,beast_in\n",[211,1369,1370],{},"And we need to add the feeder id to the environment file:",[290,1372,1374],{"className":710,"code":1373,"language":712,"meta":295,"style":295},"# FlightAware\nPIAWARE_FEEDER_ID=\n",[297,1375,1376,1381],{"__ignoreMap":295},[300,1377,1378],{"class":302,"line":303},[300,1379,1380],{"class":384},"# FlightAware\n",[300,1382,1383,1386],{"class":302,"line":314},[300,1384,1385],{"class":310},"PIAWARE_FEEDER_ID",[300,1387,1388],{"class":727},"=\n",[211,1390,1391],{},"Once done (and when the feeder is sending information) you will want to head to your feeder page on flight aware (this can take a few hours)",[211,1393,1394,1395],{},"The link is somewhat hidden - but you can find it by heading to ",[259,1396,1397],{"href":1397,"rel":1398,"target":266},"https:\u002F\u002Fwww.flightaware.com\u002Fadsb\u002Fstats\u002Fuser\u002Fyour_user_name",[263,264,265],[211,1400,1401],{},"We want to add accurat location and height so that it will enable MLAT synchroization.",[211,1403,1404],{},"At the top - just under the profile - is a bar with SITE that has a settings button (cog wheel) on the right hand.",[211,1406,1407],{},"Click on the cog and enter the location manually - accurately - and also set the height - then save.",[211,1409,1410],{},"After a while you should see on the page:",[211,1412,1413],{},[297,1414,1415],{},"Multilateration (MLAT): Supported \u002F Enabled (synchronized with XX nearby receivers)",[225,1417,1419],{"id":1418},"upgraded-accounts","Upgraded accounts",[211,1421,1422],{},"Both flight radar 24 and flight aware should now upgrade your account. It may take a few hours\u002Fcouple of days - but it should happen automatically.",[1424,1425,1426],"style",{},"html pre.shiki code .s4JwU, html code.shiki .s4JwU{--shiki-default:#85E89D}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":295,"searchDepth":314,"depth":314,"links":1428},[1429,1430,1435],{"id":227,"depth":314,"text":228},{"id":253,"depth":314,"text":254,"children":1431},[1432,1433,1434],{"id":284,"depth":322,"text":285},{"id":887,"depth":322,"text":888},{"id":1121,"depth":322,"text":1122},{"id":1418,"depth":314,"text":1419},null,"2025-10-28 10:26 +0100","md","Monitoring plane ADS-B position signals with SDR and feeding the data to external services",{},"\u002F2025\u002F10\u002F28\u002Fultrafeeder-ads-b",{"title":206,"description":213},{"loc":1441},"2025\u002F10\u002F28\u002Fultrafeeder-ads-b",[1446,1447,1448,1449,284],"ads-b","sdr","raspberry pi","rtl-sdr","HS1XgHpr2hJFTQxlp6S3p4Iy_Ncn3OLUzFhMB_9VWV4",1775292984164]