{"id":13587993,"url":"https://github.com/ketilmo/balena-ads-b","last_synced_at":"2025-04-08T02:34:36.494Z","repository":{"id":41357317,"uuid":"181685366","full_name":"ketilmo/balena-ads-b","owner":"ketilmo","description":"ADS-B Flight Tracker running on balena with support for FlightAware, Flightradar24, PlaneFinder, OpenSky Network, RadarBox, ADSB Exchange, Wingbits, and UAT.","archived":false,"fork":true,"pushed_at":"2024-11-05T14:05:00.000Z","size":2563,"stargazers_count":153,"open_issues_count":20,"forks_count":43,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-11-05T15:20:17.537Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"compujuckel/adsb-docker","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ketilmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-04-16T12:30:45.000Z","updated_at":"2024-10-22T08:59:29.000Z","dependencies_parsed_at":"2023-02-08T07:15:40.735Z","dependency_job_id":null,"html_url":"https://github.com/ketilmo/balena-ads-b","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ketilmo%2Fbalena-ads-b","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ketilmo%2Fbalena-ads-b/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ketilmo%2Fbalena-ads-b/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ketilmo%2Fbalena-ads-b/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ketilmo","download_url":"https://codeload.github.com/ketilmo/balena-ads-b/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223300649,"owners_count":17122661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-08-01T15:06:27.485Z","updated_at":"2025-04-08T02:34:36.480Z","avatar_url":"https://github.com/ketilmo.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"\n![balena ADS-B Flight Tracker](https://raw.githubusercontent.com/ketilmo/balena-ads-b/master/docs/images/header.svg)\n\n**ADS-B Flight Tracker running on balena with support for FlightAware, Flightradar24, Plane Finder, OpenSky Network, AirNav Radar, ADSB Exchange, Wingbits, adsb.fi, ADSB.lol, ADS-B One, airplanes.live, Planespotters.net, TheAirTraffic, AvDelphi, HP Radar, RadarPlane, Fly Italy ADSB and plane.watch.**\n\nContribute to the flight tracking community! Feed your local ADS-B data from an [RTL-SDR](https://www.rtl-sdr.com/) USB dongle (or various other radio types) and a supported device (see below) running balenaOS to the tracking services [FlightAware](https://flightaware.com/), [Flightradar24](https://www.flightradar24.com/), [Plane Finder](https://planefinder.net/), [OpenSky Network](https://opensky-network.org/), [AirNav Radar](https://www.airnavradar.com/), [ADSB Exchange](https://adsbexchange.com), [Wingbits](https://wingbits.com), [adsb.fi](https://adsb.fi/), [ADSB.lol](https://adsb.lol/), [ADS-B One](https://adsb.one), [airplanes.live](https://airplanes.live/), [Planespotters.net](https://www.planespotters.net/), [TheAirTraffic](https://theairtraffic.com/), [AvDelphi](https://www.avdelphi.com/), [HP Radar](https://hpradar.com/), [RadarPlane](https://radarplane.com/), [Fly Italy ADSB](https://flyitalyadsb.com/) and [plane.watch](https://plane.watch/). In return, you can receive complimentary premium accounts (or cryptocurrency tokens) worth several hundred dollars annually!\n\n# Stay in the loop\n\n👉🏻\u0026nbsp;\u003ca href=\"https://buttondown.email/balena-ads-b\"\u003e Subscribe to our newsletter\u003c/a\u003e\u0026nbsp;👈🏻\u0026nbsp; to stay updated on the latest development of balena ADS-B Flight Tracker.\n\n# Did you get stuck? Get help!\n\n💬\u0026nbsp; [Ask a question](https://github.com/ketilmo/balena-ads-b/discussions) in our discussion board\n\n🖥️\u0026nbsp; Join the [SDR Enthusiasts Discord Server](https://discord.gg/bqDDwwfM) and chat to us in the [balena-ads-b channel](https://discord.com/channels/734090820684349521/1328170413859012609)\n\n✏️\u0026nbsp; [Create a post](https://forums.balena.io/t/the-balena-ads-b-thread/272290) in our balena forum thread\n\n🚨\u0026nbsp; [Raise an issue](https://github.com/ketilmo/balena-ads-b/issues) on GitHub\n\n📺\u0026nbsp; Watch the videos from the [balena IoT Happy Hour in March 2021](https://youtu.be/-8RgToapBoQ) and from [balena Hackathon in October 2021](https://youtu.be/aHlNRT1iFl0)\n\n📨\u0026nbsp; [Reach out directly](https://ketil.mo.land/contact)\n\n🗞\u0026nbsp; [Read past newsletters](https://buttondown.email/balena-ads-b/archive/)\n\n# Supported devices\n|                                                                                                                        | Device                          |\n|------------------------------------------------------------------------------------------------------------------------|---------------------------------|\n| \u003cimg alt=\"Intel NUC\" height=\"24px\" src=\"https://docs.balena.io/img/device/intel-nuc.svg\"/\u003e                             | Intel NUC                       |\n| \u003cimg alt=\"Nvidia Jetson Nano SD-CARD\" height=\"24px\" src=\"https://docs.balena.io/img/device/jetson-nano.svg\"/\u003e          | Nvidia Jetson Nano SD-CARD      |\n| \u003cimg alt=\"Orange Pi Zero\" height=\"24px\" src=\"https://docs.balena.io/img/device/orange-pi-zero.svg\"/\u003e                   | Orange Pi Zero                  |\n| \u003cimg alt=\"Raspberry Pi 3 Model B+\" height=\"24px\" src=\"https://docs.balena.io/img/device/raspberrypi3.svg\"/\u003e            | Raspberry Pi 3 Model B+         |\n| \u003cimg alt=\"Raspberry Pi 3 (using 64bit OS)\" height=\"24px\" src=\"https://docs.balena.io/img/device/raspberrypi3-64.svg\"/\u003e | Raspberry Pi 3 (using 64bit OS) |\n| \u003cimg alt=\"Raspberry Pi 4 (using 64bit OS)\" height=\"24px\" src=\"https://docs.balena.io/img/device/raspberrypi4-64.svg\"/\u003e | Raspberry Pi 4 (using 64bit OS) |\n| \u003cimg alt=\"Raspberry Pi 400\" height=\"24px\" src=\"https://docs.balena.io/img/device/raspberrypi400-64.svg\"/\u003e              | Raspberry Pi 400                |\n| \u003cimg alt=\"Raspberry Pi 5\" height=\"24px\" src=\"https://docs.balena.io/img/device/raspberrypi5.svg\"/\u003e                     | Raspberry Pi 5                  |\n\nPlease [let us know](https://github.com/ketilmo/balena-ads-b/discussions/new) if you are successfully running balena-ads-b on a hardware platform not listed here!\n\n# Supported radios\n\nThis software defaults to using an RTL-SDR radio device. However, it is also compatible with Mode-S Beast, bladeRF, HackRF, LimeSDR, and SoapySDR. Below, you can find more information on configuring these device types in the [Using different radio device types](#using-different-radio-device-types) section.\n\n# Credits\n\nThe balena-ads-b project was created by [Ketil Moland Olsen](https://github.com/ketilmo/). It is now maintained as a team effort by Ketil, [Aaron Shaw (shawaj)](https://github.com/shawaj), and [Teko012](https://github.com/Teko012/). \n\nThe project was inspired by and has borrowed code from the following repos and forum threads:  \n\n - https://github.com/compujuckel/adsb-docker\n - https://bitbucket.org/inodes/resin-docker-rtlsdr\n - https://github.com/wercsy/balena-ads-b\n - https://github.com/mikenye/\n - [https://discussions.flightaware.com/](https://discussions.flightaware.com/t/howto-install-piaware-4-0-on-debian-10-amd64-ubuntu-20-amd64-kali-2020-amd64-on-pc/69753/3)\n - https://github.com/marcelstoer/docker-adsbexchange\n\nThanks to [compujuckel](https://github.com/compujuckel/), [Glenn Stewart](https://bitbucket.org/inodes/), [wercsy](https://github.com/wercsy/), [mikenye](https://github.com/mikenye/), [abcd567a](https://github.com/abcd567a) and [marcelstoer](https://github.com/marcelstoer) for sharing!\n\nThanks to [garethhowell](https://github.com/garethhowell) for implementing the initial ADSB Exchange support and to [wiedehopf](https://github.com/wiedehopf/) for improving it.\n\nThanks to [rmorillo24](https://github.com/rmorillo24/) for verifying balenaFin compatibility, to [adaptive](https://github.com/adaptive/) for confirming Raspberry Pi 400 compatibility, and to [eagleDiego](https://github.com/eagleDiego) for confirming Orange Pi Zero compability.\n\nThanks to [schubydoo](https://github.com/schubydoo) for assistance in keeping the repository up to date.\n\nThanks to [Teko012](https://github.com/Teko012/) for modernising the repo, keeping it up to date, and suggesting several improvements.\n\nThanks to [schubydoo](https://github.com/schubydoo), [JPGMC](https://github.com/JPGMC), and [alanb128](https://github.com/alanb128) for beta testing the UAT support.\n\nThanks to [Aaron Shaw (shawaj)](https://github.com/shawaj) for implementing Wingbits and Mode-S Beast support, fixing bugs, and improving the code.\n\nThanks to [mikenye](https://github.com/mikenye) for implementing [plane.watch](https://plane.watch/) support.\n\nAnd thanks to [jediksd](https://github.com/jediksd) for squashing a OpenSky Network issue.\n\nYou are all stars! 🤩\n\nSoftware packages downloaded, installed, and configured by the balena-ads-b script are disclosed in [CREDITS.md](https://github.com/ketilmo/balena-ads-b/blob/master/CREDITS.md).\n\n# Contributors\n\u003ca href=\"https://github.com/ketilmo/balena-ads-b/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=ketilmo/balena-ads-b\" /\u003e\n\u003c/a\u003e\n\n# Table of Contents\n- [Part 1 – Build the receiver](#part-1--build-the-receiver)\n- [Part 2 – Setup balena and configure the device](#part-2--setup-balena-and-configure-the-device)\n- [Part 3 – Configure FlightAware](#part-3--configure-flightaware)\n  * [Alternative A: Port an existing FlightAware receiver](#alternative-a-port-an-existing-flightaware-receiver)\n  * [Alternative B: Setup a new FlightAware receiver](#alternative-b-setup-a-new-flightaware-receiver)\n- [Part 4 – Configure Flightradar24](#part-4--configure-flightradar24)\n  * [Alternative A: Port an existing Flightradar24 receiver](#alternative-a-port-an-existing-flightradar24-receiver)\n  * [Alternative B: Setup a new Flightradar24 receiver](#alternative-b-setup-a-new-flightradar24-receiver)\n- [Part 5 – Configure Plane Finder](#part-5--configure-plane-finder)\n  * [Alternative A: Port an existing Plane Finder receiver](#alternative-a-port-an-existing-plane-finder-receiver)\n  * [Alternative B: Setup a new Plane Finder receiver](#alternative-b-setup-a-new-plane-finder-receiver)\n- [Part 6 – Configure OpenSky Network](#part-6--configure-opensky-network)\n  * [Alternative A: Port an existing OpenSky Network receiver](#alternative-a-port-an-existing-opensky-network-receiver)\n  * [Alternative B: Setup a new OpenSky Network receiver](#alternative-b-setup-a-new-opensky-network-receiver)\n- [Part 7 – Configure AirNav Radar](#part-7--configure-airnav-radar)\n  * [Alternative A: Port an existing AirNav Radar receiver](#alternative-a-port-an-existing-airnavn-radar-receiver)\n  * [Alternative B: Setup a new AirNav Radar receiver](#alternative-b-setup-a-new-airnav-radar-receiver)\n- [Part 8 – Configure ADSB Exchange and clones](#part-8--configure-adsb-exchange-and-clones)\n  * [Enable ADSB Exchange](#enable-adsb-exchange)\n  * [Enable ADSB Exchange Clones](#enable-adsb-exchange-clones)\n- [Part 9 – Configure Wingbits](#part-9--configure-wingbits)\n  * [Alternative A: Port an existing Wingbits receiver](#alternative-a-port-an-existing-wingbits-receiver)\n  * [Alternative B: Setup a new Wingbits receiver](#alternative-b-setup-a-new-wingbits-receiver)\n- [Part 10 - Configure plane.watch](#part-10---configure-planewatch)\n  * [Alternative A: Port an existing plane.watch receiver](#alternative-a-port-an-existing-planewatch-receiver)\n  * [Alternative B: Setup a new plane.watch receiver](#alternative-b-setup-a-new-planewatch-receiver)\n- [Part 11 – Configure UAT (Optional and US only)](#part-11--configure-uat-optional-and-us-only)\n- [Part 12 - Configure tar1090 and graphs1090 (Optional)](#part-12--configure-tar1090-and-graphs1090-optional)\n- [Part 13 – Add a digital display (Optional)](#part-13--add-a-digital-display-optional)\n- [Part 14 – Exploring flight traffic locally on your device](#part-14--exploring-flight-traffic-locally-on-your-device)\n- [Part 15 – Advanced configuration](#part-15--advanced-configuration)\n  * [Disabling specific services](#disabling-specific-services)\n  * [Using different radio device types](#using-different-radio-device-types)\n  * [Adaptive gain configuration](#adaptive-gain-configuration)\n  * [Setting dump1090 antenna gain](#setting-dump1090-antenna-gain)\n  * [Device reboot on service exit](#device-reboot-on-service-exit)\n  * [Automatic balenaOS host updates](#automatic-balenaos-host-updates)\n  * [Custom MLAT client](#custom-mlat-client)\n - [Part 16 – Updating to the latest version](#part-16--updating-to-the-latest-version)\n\n# Part 1 – Build the receiver\n\nWe'll build the receiver using the parts that are outlined on the Flightradar24, FlightAware, and AirNav Radar websites: \n- https://www.flightradar24.com/build-your-own\n- https://www.flightaware.com/adsb/piaware/build\n- https://www.airnavradar.com/raspberry-pi\n\nThese sites suggest the Raspberry Pi 3 Model B+ as the preferred device. Still, this project runs on all the devices mentioned above. Suppose you are buying a new appliance specifically for this project. In that case, we suggest the **Raspberry Pi 4 Model B** with as much memory as possible. It's excellent value for money.\n\nIn addition to the device, you will need an RTL-SDR-compatible USB dongle. The dongles are based on a digital television tuner, and numerous types will work – both generic TV sticks and specialized ADS-B sticks (produced by FlightAware). Although both options work, the ADS-B sticks seem to perform a little better.\n\nIf you live in the US, and want to track UAT traffic in addition to ADS-B traffic, you can use two dongles in parallell. Please note that the blue FlightAware USB devices should only be used for ADS-B traffic, as they have an integrated filter optimized explicitly for the 1090 MHz frequencies. The orange FlightAware USB devices work well for tracking UAT traffic. See [Part 11 – Configure UAT (Optional and US only)](#part-11--configure-uat-optional-and-us-only) for more details.\n\n# Part 2 – Setup balena and configure the device\n\n[![Deploy with button](https://raw.githubusercontent.com/ketilmo/balena-ads-b/master/docs/images/deploy.svg)](https://dashboard.balena-cloud.com/deploy?repoUrl=https://github.com/ketilmo/balena-ads-b\u0026defaultDeviceType=raspberrypi4-64)\n\nor\n\n 1. [Create a free balena account](https://dashboard.balena-cloud.com/signup). You will be asked to upload your public SSH key during the process. If you don't have a public SSH key yet, you can [create one](https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent).\n 2. Sign in to balena and head to the [*Fleets*](https://dashboard.balena-cloud.com/fleets) panel.\n 3. Create a fleet with the name of your choice for your device type. Please take note of the fleet name. You will need it later. In the dialog that appears, pick a *Default Device Type* that matches your device. Specify the SSID and password if you want to use WiFi (and your device supports it). (If your device comes up without an active connection to the Internet, the `wifi-connect` container will create a network with a captive portal to connect to a local WiFi network. The SSID for the created hotspot is `balenaWiFi`, and the password is`balenaWiFi`. When connected, visit `http://192.168.42.1:8181/` in your web browser to set up the connection.\n 4. balena will create an SD card image for you, which will start downloading automatically after a few seconds. Flash the image to an SD card using balena's dedicated tool [balenaEtcher](https://www.balena.io/etcher/).\n 5. Insert the SD card in your receiver, and connect it to your cabled network (unless you plan to use WiFi only and configured that in step 3). \n 6. Power up the receiver.\n 7. From the balena dashboard, navigate to the fleet you created. A new device with an automatically generated name should appear within a few minutes. Click on it to open it.\n 8. Rename your device to your taste by clicking on the pencil icon next to the current device name.\n 9. Next, we'll configure the receiver with its geographic location. Unless you know this by heart, you can use [Google Maps](https://maps.google.com) to find it. The corresponding coordinates should appear when you click on your desired location on the map. We are looking for the decimal coordinates, which should look like *60.395429, 5.325127.*\n 10. Back in the balena console, verify that you have opened the view for your desired device. Click on the *Device Variables*-button. Add the following two variables: `LAT` *(Receiver Latitude)*, e.g. with a value such as `60.12345` and `LON` *(Receiver Longitude)*, e.g. with a value such as `4.12345`.\n 11. Now, you're going to enter the receiver's altitude in *meters* above sea level in a new variable named `ALT`. If you need to find the altitude, you can find it using [one of several online services](https://www.maps.ie/coordinates.html). Remember to add the approximate number of corresponding meters if your antenna is mounted above ground level.\n 12. Almost there! Next, we will push this code to your device through the balena cloud. We'll do that using the [balena CLI](https://github.com/balena-io/balena-cli). Follow the [official instructions](https://github.com/balena-io/balena-cli/blob/master/INSTALL.md) to download and install the CLI for your platform of choice.\n 13. Head into your terminal and log in to balena with the following command: `balena login`. Then follow the instructions on the screen.\n 14. Next, clone the balena-ads-b repository to your local computer with your Git client of choice or the standard command line tool: `git clone git@github.com:ketilmo/balena-ads-b.git`. If you want to make changes to the repo, you can also fork it.\n 15. Head into the folder of the newly cloned repo by typing `cd balena-ads-b`.\n 16. Do you remember your fleet name from earlier? Good. Now, we are ready to push the applications to balena's servers by typing `balena push YOUR–FLEET–NAME–HERE`.\n 17. Now, wait while the Docker containers build on balena's servers. If the process is successful, you will see a beautiful piece of ASCII art depicting a unicorn right in your terminal window:\n\u003cpre\u003e\n\t\t\t    \\\n\t\t\t     \\\n\t\t\t      \\\\\n\t\t\t       \\\\\n\t\t\t        \u003e\\/7\n\t\t\t    _.-(6'  \\\n\t\t\t   (=___._/` \\\n\t\t\t        )  \\ |\n\t\t\t       /   / |\n\t\t\t      /    \u003e /\n\t\t\t     j    \u003c _\\\n\t\t\t _.-' :      ``.\n\t\t\t \\ r=._\\        `.\n\t\t\t\u003c`\\\\_  \\         .`-.\n\t\t\t \\ r-7  `-. ._  ' .  `\\\n\t\t\t  \\`,      `-.`7  7)   )\n\t\t\t   \\/         \\|  \\'  / `-._\n\t\t\t              ||    .'\n\t\t\t               \\\\  (\n\t\t\t                \u003e\\  \u003e\n\t\t\t            ,.-' \u003e.'\n\t\t\t           \u003c.'_.''\n\t\t\t             \u003c'\n\n\u003c/pre\u003e\n 18. Wait a few moments while the Docker containers are deployed and installed on your device. The groundwork is now done – good job!\n\n\n# Part 3 – Configure FlightAware\n## Alternative A: Port an existing FlightAware receiver\nIf you have previously set up a standalone FlightAware receiver and want to port it to balena, you only have to do the following steps:\n\n 1. Head to your device's page in the balena dashboard and click on the *Device Variables*-button. Add the following variable: `FLIGHTAWARE_FEEDER_ID`, then paste your *Unique Identifier* key, e.g. `134cdg7d-7533-5gd4-d31d-r31r52g63v12`. The ID can be found on the FlightAware website's *My ADS-B* section.\n 2. From the balena dashboard, restart the *piaware* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new FlightAware receiver\nIf you have not previously set up a FlightAware receiver that you want to reuse, do the following steps:\n\n 1. Head back to your device's *Summary* page. Inside the *Terminal* section, click *Select a target*, then *piaware*, and finally *Start terminal session*. This will open a terminal which lets you interact directly with your PiAware container.\n 2. Once the terminal prompt appears, enter `/getid.sh` (including the leading slash), then press return.\n 3. If everything goes according to plan, your FlightAware feeder id will soon appear. Copy it.\n 4. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `FLIGHTAWARE_FEEDER_ID` and paste the value from the previous step, e.g. `134cdg7d-7533-5gd4-d31d-r31r52g63v12`.\n 5. Go back to your device's *Summary* page. Restart the *piaware* service under *Services* by clicking the “cycle” icon next to the service name.\n 6. Register [a new account](https://flightaware.com/account/join/) at FlightAware, then log in using your newly created credentials.\n 7. **Important:** While being connected to *the same network* (either cabled or wireless) as your receiver is connected to, head to FlightAware's *[Claim Receiver](https://flightaware.com/adsb/piaware/claim)* page. (If this doesn't work, you can try using this link: https://flightaware.com/adsb/piaware/claim/98395c99-xxxxxxxxx16e. Replace the part after \"claim\" with your `FLIGHTAWARE_FEEDER_ID`.)\n 8. Check if any receivers appear under the *Linked PiAware Receivers* heading. (If not, wait a few minutes and click the *Check Again for my PiAware*-button.) Hopefully, your receiver is now visible under the *Linked PiAware Receivers* header.\n 9. In the left-hand-side menu on the top of the page, click the *My ADBS-B* menu item. Your device should be listed in an orange rectangle. Next, click the cogwheel icon on the right-hand side of the screen.\n 10. Click the *Configure Location*-button, and verify that the location matches the coordinates you entered earlier. If not, correct them.\n 11. Click the *Configure Height*-button, and specify the altitude of your receiver. The value should match the number you entered in the `ALT` variable in part 1.\n 12. If you don't face any bandwidth constraints, enable multilateration (MLAT). Enabling MLAT lets your receiver connect to other nearby receivers to multilaterate the aircraft's positions that do not report their position through ADS-B. This option increases bandwidth usage but gives more visible aircraft positions in return. \n 13. Specify the other settings in the FlightAware lightbox according to your preferences. Close the lightbox.\n 14. Finally, verify that FlightAware is receiving data from your receiver. You'll find your receiver's dashboard by clicking on the *My ADS-B* top menu item at [flightaware.com](https://www.flightaware.com). \n \n## Part 4 – Configure Flightradar24\n## Alternative A: Port an existing Flightradar24 receiver\nIf you have previously set up a Flightradar24 receiver and want to port it to balena, you only have to do the following steps:\n\n 1. Head back to the balena dashboard and your device's page. Click on the *Device Variables*-button. Add a variable named `FR24_KEY` and paste the value of your existing Flightradar24 key, e.g. `dv4rrt2g122g7233`. The key is located in the Flightradar24 config file, usually found here: `/etc/fr24feed.ini`. (If you cannot locate your old key, retrieve or create a new one by following the steps in alternative B.)\n 2. Restart the *fr24feed* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new Flightradar24 receiver\nIf you have not previously set up a Flightradar24 receiver that you want to reuse, do the following steps:\n\n 1. Head back to your device's page on the balena dashboard.\n 2. Inside the *Terminal* section, click *Select a target*, then *fr24feed*, and finally *Start terminal session*.\n 3. This will open a terminal which lets you interact directly with your Flightradar24 container.\n 4. At the prompt, enter `fr24feed --signup`.\n 5. When asked, enter your email address.\n 6. You will be asked if you have a Flightradar24 sharing key. Unless you have one from the past that you would like to reuse, press return here.\n 7. If you want to activate multilateration, type `yes` at the next prompt. If you have restricted bandwidth, consider leaving it off by typing `no`. \n 8. Enter the receiver's latitude. This should be the same value you entered in the `LAT` variable in part 1.\n 9. Enter the receiver's longitude. This should be the same value you entered in the `LON` variable in part 1.\n 10. Finally, enter the receiver's altitude in *feet*. You can calculate this by multiplying the value you entered in the `ALT` variable in part 1 by 3.28.\n 11. Now, a summary of your settings will be displayed. If you are happy with the result, type `yes` to continue.\n 12. Under receiver type, choose `4` for ModeS Beast.\n 13. Under connection type, choose `1` for network connection.\n 14. When asked for your receiver's IP address/hostname, enter `dump1090-fa`.\n 15. Next, enter the data port number: `30005`.\n 16. Type `no` to disable the RAW data feed on port 30334.\n 17. Type `no` to disable the BaseStation data feed on port 30003.\n 18. Enter `0` to disable log file writing.\n 19. When asked for a log file path, just hit return.\n 20. The configuration will now be submitted, and you will be redirected back to the terminal.\n 21. At the prompt, type `cat /etc/fr24feed.ini`. Your Flightradar24 settings will be displayed. \n 22. Find the line starting with `fr24key=`, and copy the string between the quotes. It will look something like this: `dv4rrt2g122g7233`.\n 23. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `FR24_KEY` and paste the value from the previous step, e.g. `dv4rrt2g122g7233`.\n 24. Restart the *fr24feed* service under *Services* by clicking the \"cycle\" icon next to the service name.\n 25. Head over to [Flightradar24's website](https://www.flightradar24.com/premium/signup) and create a new *Basic* account, using the *exact same email address* that you filled in in step 5.\n 26. Shortly after your receiver starts feeding data to Flightradar24, your *Basic* account will be upgraded to their *Business* plan. Enjoy!\n\n# Part 5 – Configure Plane Finder\n## Alternative A: Port an existing Plane Finder receiver\nIf you have previously set up a Plane Finder receiver and want to port it to balena, you only have to do the following steps:\n\n 1. Head back to the balena dashboard and your device's page. Click on the *Device Variables*-button. Add a variable named `PLANEFINDER_SHARECODE` and paste the value of your existing Plane Finder key, e.g. `7e3q8n45wq369`. You can find your key at Plane Finder's *[Your Receivers](https://planefinder.net/account/receivers)* page.\n 2. On your device's page in the balena dashboard, restart the *planefinder* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new Plane Finder receiver\nIf you have not previously set up a Plane Finder receiver that you want to reuse, do the following steps:\n\n 1. Register a new [Plane Finder account](https://planefinder.net) or log into your existing account.\n 2. Inside the *Terminal* section, click *Select a target*, then *planefinder*, and finally *Start terminal session*.\n 3. This will open a terminal which lets you interact directly with your Plane Finder container.\n 4. Once the terminal prompt appears, enter `pfclient`, then press return.\n 5. If everything goes according to plan, you will see some output log messages in the terminal section.\n 6. Scroll to the top of the page and look for the *Local IP Address* of your device - it should look something like `192.168.2.35` - if there is more than one IP address, any of them should work. Click the button next to the IP address to copy it to the clipboard.\n 7. Open a browser window, paste in the IP address and then press return. This should load the Plane Finder sharecode generator page.\n 8. Fill in the form to generate a Plane Finder share code. Use the same email address you used when registering for the Plane Finder account. For *Receiver Lat*, use the value from the `LAT` variable in part 2. For *Receiver Lon*, use the value from the `LON` variable. Lastly, click the *Create new sharecode* button. A sharecode should appear in a few seconds. It should look similar to `6g34asr1gvvx7`. Copy it to your clipboard. Disregard the rest of the form – you don't have to fill this out.\n 9. Open Plane Finder's *[Your Receivers](https://planefinder.net/account/receivers)* page. Under the *Add a Receiver* heading, locate the *Share Code* input field. Paste the sharecode from the previous step, then click the *Add Receiver*-button.\n 10. Head back to the Balena dashboard and your device's page. Click on the *Device Variables*-button. Add a variable named `PLANEFINDER_SHARECODE` and paste the value of the Plane Finder key you just created, e.g. `7e3q8n45wq369`.\n 11. On your device's page in the Balena dashboard, restart the *planefinder* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n# Part 6 – Configure OpenSky Network\n## Alternative A: Port an existing OpenSky Network receiver\nIf you have previously set up an OpenSky Network receiver and want to port it to balena, you only have to do the following steps:\n\n 1. Head back to the balena dashboard and your device's page. Click on the *Device Variables*-button – *Vx*.\n 2. Add a variable named `OPENSKY_USERNAME` and paste your OpenSky Network username, e.g. `JohnDoe123`. You can find your username on your OpenSky Network *[Dashboard](https://opensky-network.org/my-opensky)* page.\n 3. Add a variable named `OPENSKY_SERIAL` and paste the value of your existing OpenSky Network serial number, e.g. `1663421823`. You can find your serial on your OpenSky Network *[Dashboard](https://opensky-network.org/my-opensky)* page.\n 4. On your device's page in the balena dashboard, restart the *opensky-network* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new OpenSky Network receiver\nIf you have not previously set up an OpenSky Network receiver that you want to reuse, do the following steps:\n\n 1. Register a new [OpenSky Network account](https://opensky-network.org/index.php?option=com_users\u0026view=registration). Make sure to activate it using the email that's sent to you. Please take note of your username. You will need it soon.\n 2. Head back to your device's page on the balena dashboard. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `OPENSKY_USERNAME` and populate it with your newly created OpenSky Username, e.g.  `JohnDoe123`.\n 3. Head back to your device's *Summary* page. Restart the *opensky-network* service under *Services* by clicking the \"cycle\" icon next to the service name. Wait for the service to finish restarting.\n 4. Inside the *Terminal* section, click *Select a target*, then *opensky-network*, and finally *Start terminal session*.\n 5. This will open a terminal which lets you interact directly with your OpenSky Network container.\n 6. Once the terminal prompt appears, enter `/getserial.sh` (including the leading slash), then press return.\n 7. If everything goes according to plan, your OpenSky Network serial number will soon appear. Copy it.\n 8. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `OPENSKY_SERIAL` and paste the value from the previous step, e.g. `1267385439`.\n 9. Go back to your device's *Summary* page. Restart the *opensky-network* service under *Services* by clicking the “cycle” icon next to the service name.\n 10. Head over to your OpenSky Network *[Dashboard](https://opensky-network.org/my-opensky)* and verify that your receiver shows up and feeds data.\n\n# Part 7 – Configure AirNav Radar\n\n## Alternative A: Port an existing AirNav Radar receiver\nIf you have previously set up a AirNav Radar receiver and want to port it to Balena, you only have to do the following steps:\n\n 1. Head back to the Balena dashboard and your device's page. Click on the *Device Variables*-button.\n 2. Add a variable named `AIRNAV_RADAR_KEY` and paste the value of your existing AirNav Radar key, e.g. `546b69e69b4671a742b82b10c674cdc1`. \n 3. Click the button *Apply all changes* to activate the changes. The *airnav-radar* service will automatically restart to load the new settings.\n 4. Optional: If you need to get your key, issue the following command at your current AirNav Radar device: `sudo rbfeeder --showkey --no-start`.\n\n\n## Alternative B: Setup a new AirNav Radar receiver\nIf you have not previously set up a AirNav Radar receiver that you want to reuse, do the following steps:\n\n 1. Register a new [AirNav Radar account](https://www.airnavradar.com/register/). Make sure to activate it using the email that's sent to you.\n 2. Head back to your device's page on the balena dashboard.\n 3. Inside the *Terminal* section, click *Select a target*, then *airnav-radar*, and finally *Start terminal session*.\n 4. This will open a terminal which lets you interact directly with your AirNav Radar container.\n 5. At the prompt, enter `/showkey.sh`. Your AirNav Radar key will be displayed and look similar to this: `546b69e69b4671a742b82b10c674cdc1`.\n 6. Click on the *Device Variables*-button. Add a variable named `AIRNAV_RADAR_KEY`, and paste the key from step 5, e.g. `546b69e69b4671a742b82b10c674cdc1`. \n 7. Click the button *Apply all changes* to activate the changes. The *airnav-radar* service will automatically restart to load the new settings.\n 8. Head to AirNav Radar's [Claim Your Raspberry Pi](https://www.airnavradar.com/raspberry-pi/claim) page. Locate the input field named *Sharing Key,* and paste the value from step 5, e.g. `546b69e69b4671a742b82b10c674cdc1`.\n 9. You might be asked to enter your feeder's location and altitude *above the ground.* Enter the same values you entered earlier in the `LAT` and `LON` variables. When asked for the antenna's altitude, specify it in meters (or feet) *above the ground* – NOT above sea level, as done previously. If you are not asked to enter this information, you can do it manually by clicking the *Edit* link under your receiver's ID on the left-hand side of the screen. \n 10. Finally, verify that AirNav Radar is receiving data from your receiver. You'll find your receiver by clicking on the *Account* menu at [airnavradar.com](https://www.airnavradar.com) under the *Stations* accordion. \n\n# Part 8 – Configure ADSB Exchange and clones\n\n## Enable ADSB Exchange\n1. Head back to your device's page on the balena dashboard. Inside the *Terminal* section, click *Select a target*, then *adsb-exchange*, and finally *Start terminal session*. This will open a terminal which lets you interact directly with your ADSB Exchange container.\n2. At the prompt, type `/usr/local/share/adsbexchange-stats/create-uuid.sh` followed by return. Your ADSB-Exchange UUID is displayed. Note it down.\n3. At the same prompt, type `/create-sitename.sh` followed by return. Enter a friendly name for your feeder as per the instructions on the screen (e.g. your location). Hit return and note down the result.\n4. Click on the *Device Variables*-button. Add a variable named `ADSB_EXCHANGE_UUID` with the value from step 2.\n5. Click on the *Device Variables*-button. Add a variable named `ADSB_EXCHANGE_SITENAME` with the value from step 3.\n6. Restart the *adsb-exchange* service under *Services* by clicking the \"cycle\" icon next to the service names.\n7. Next, wait a minute or two for the service to restart and head over to ADSB Exchange's \n[Feeder Status](https://www.adsbexchange.com/myip/) page from a PC on the same network as the feeder. Verify that your feeder is shown as registered and that ADSB Exchange is receiving your feed and MLAT data. You can also verify your feeder's performance at the [ADSB Exchange Feeder Map](https://map.adsbexchange.com/mlat-map/) by searching for your site name.\n\n# Enable ADSB Exchange clones\nThis project supports a number of ADSB Exchange clones that arose after the sale of ADSB Exchange. Currently there is support for [adsb.fi](https://adsb.fi/), [ADSB.lol](https://adsb.lol/), [ADS-B One](https://adsb.one/), [airplanes.live](https://airplanes.live/), [Planespotters.net](https://www.planespotters.net/), [TheAirTraffic](https://theairtraffic.com/), [AvDelphi](https://www.avdelphi.com/), [HP Radar](https://hpradar.com/), [RadarPlane](https://radarplane.com/) and [Fly Italy ADSB](https://flyitalyadsb.com/). If you would like any new services adding, please create a PR adding the new service or if you do not know how then please [open an issue](https://github.com/ketilmo/balena-ads-b/issues/new) with your request.\n\nFor these services, you currently do not need any login or API credentials so there is no need to make an account with them (although some of them do offer this) and no credentials to add in balenaCloud. However, you do have to selectively enable each service (or you can enable all of them, or all but ADSB Exchange).\n\nTo enable all services, or all services apart from ADSB Exchange, you can use one of the following *Device Variables*:\n\n- `ADSB_EXCHANGE_ENABLE_ALL=true`\n- `ADSB_EXCHANGE_ENABLE_ALL_BUT_ADSBX=true`\n\nNote that you can use `true`, `enable`, `enabled`, `1`, `y`, `yes` or `on` for the value, and capitalisation does not matter. If you use `ADSB_EXCHANGE_ENABLE_ALL` this will enable ADSB Exchange and you will then need to add the `ADSB_EXCHANGE_UUID` and `ADSB_EXCHANGE_SITENAME` as described [in the section above](#enable-adsb-exchange).\n\nTo enable a single service, you would need to add a *Device Variable* with one of the following value (or several if you want to enable multiple services):\n\n- `ADSB_EXCHANGE_ENABLE=true` (you also need to add the `ADSB_EXCHANGE_UUID` and `ADSB_EXCHANGE_SITENAME` as described [in the section above](#enable-adsb-exchange).\n- `ADSB_FI_ENABLE=true`\n- `ADSB_LOL_ENABLE=true`\n- `ADSB_ONE_ENABLE=true`\n- `AIRPLANES_LIVE_ENABLE=true`\n- `PLANESPOTTERS_ENABLE=true`\n- `THE_AIR_TRAFFIC_ENABLE=true`\n- `AV_DELPHI_ENABLE=true`\n- `HPRADAR_ENABLE=true`\n- `RADARPLANE_ENABLE=true`\n- `FLY_ITALY_ADSB_ENABLE=true`\n\nLastly, these services all require a UUID to be passed to identify devices in their system. If you have set an `ADSB_EXCHANGE_UUID` the same UUID will be used for all services. If you do not have ADSB Exchange enabled and the `ADSB_EXCHANGE_UUID` variable set, the system will automatically generate one for you. However, if you would like, you can also set a UUID manually using the *Device Variable* with name `UUID` and with a UUID as a value (e.g. 2ddf6698-ea34-4c39-bbce-a8c3ddaf9bbd). You can use an [online UUID generator](https://www.uuidgenerator.net/) to generate one should you want to.\n\n# Part 9 – Configure Wingbits\n\n**PLEASE NOTE:** No new BYOD (bring your own device) Wingbits stations can be [onboarded as of Oct 14th, 2024](https://docs.wingbits.com/project/wingbits-approved-hardware-program). Unless you have an already active Wingbits station and a [GeoSigner dongle](https://shop.wingbits.com/products/wingbits-geosigner) then you will not be able to earn Wingbits tokens using this software.\n\n## Alternative A: Port an existing Wingbits receiver\nIf you have previously set up a Wingbits receiver and want to port it to Balena, you only have to do the following steps:\n\n 1. Head back to the Balena dashboard and your device's page. Click on the *Device Variables*-button. Add a variable named `WINGBITS_DEVICE_ID` and paste the value of your existing Wingbits ID, e.g. `small-coral-spider`. To get your ID, visit the [Wingbits Dashboard](https://wingbits.com/dashboard/antennas), make sure you are on the *Antennas* tab and look in the ID column.\n 2. Restart the *wingbits* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new Wingbits receiver\nIf you have not previously set up a Wingbits receiver that you want to reuse, do the following steps:\n\n 1. Register a new [Wingbits account](https://wingbits.com/register). Make sure to activate it using the email that's sent to you.\n 2. Login to your [Wingbits account](https://wingbits.com/login), navigate to the *Antennas* tab and then click on *Register Antenna*.\n 3. Enter your latitude and longitude in the boxes (or select your location on the map). Then scroll down and click *Register*. You will then be returned to the antennas page with a new entry in the list. Make sure to take note of the name in the ID column, for example `small-coral-spider`.\n 4. Head back to your device's page on the balena dashboard.\n 5. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `WINGBITS_DEVICE_ID` and paste the value from step 4, e.g. `small-coral-spider`.\n 6. Restart the *wingbits* service under *Services* by clicking the \"cycle\" icon next to the service name.\n 7. Wait a few minutes and then head back to the [Wingbits antennas tab](https://wingbits.com/dashboard/antennas), refresh the page and in the *Status* column of the table you should see the text `Online` with a green background. If you hover over this with your mouse you should see a tooltip text pop-up that says the last time data was receive e.g. `Last message: 22/11/2023, 03:17:40`.\n\n## Wingbits status commands\nYou will notice that the [documentation for the new Wingbits client](https://docs.wingbits.com/get-started/byod-stations/installing-the-client#confirm-status-of-the-client-and-geosigner-if-installed) discusses how to check that your GeoSigner is working correctly using the `wingbits status` command. Unfortunately, as this command uses systemctl under the hood, it will not run correctly as balena containers do not use systemctl by default.\n\nHowever, it is still possible to check that your GeoSigner is working correctly using the command `wingbits geosigner info`.\n\n# Part 10 - Configure plane.watch\n\n## Alternative A: Port an existing plane.watch receiver\nIf you have previously set up a plane.watch receiver and want to port it to Balena, you only have to do the following steps:\n\n1. Head back to the Balena dashboard and your device's page. Click on the *Device Variables*-button. Add a variable named `PLANEWATCH_API_KEY` and paste the value of your existing plane.watch receiver's API Key, e.g. `4e8413e6-52eb-11ea-8681-1c1b0d925d3g`. To get your feeder's API Key, visit the [plane.watch ATC (ADS-B Traffic Control) dashboard](https://atc.plane.watch), go to the *Feeders* section, press the show button (magnifying glass) next to the feeder in question, and copy the API key from the page that appears.\n2. Restart the *planewatch* service under *Services* by clicking the \"cycle\" icon next to the service name.\n\n## Alternative B: Setup a new plane.watch receiver\nIf you have not previously set up a plane.watch receiver that you want to reuse, do the following steps:\n\n1. Register a new [plane.watch ATC account](https://atc.plane.watch). Make sure to activate it using the email that's sent to you.\n2. Login to your [plane.watch ATC account](https://atc.plane.watch), navigate to the *Feeders* tab and then click on *+ New Feeder*.\n3. Enter your location name, latitude and longitude, and elevation details in the boxes. Then scroll down and click *Save*. You will then be returned to the feeders page with a new entry in the list. Press the show button (magnifying glass) next to the feeder in question, and copy the API Key, e.g. `4e8413e6-52eb-11ea-8681-1c1b0d925d3g`.\n4. Head back to your device's page on the balena dashboard.\n5. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `PLANEWATCH_API_KEY` and paste the value from step 3, e.g. `4e8413e6-52eb-11ea-8681-1c1b0d925d3g`.\n6. Restart the *planewatch* service under *Services* by clicking the \"cycle\" icon next to the service name.\n7. Wait a few minutes and then head back to your feeder's page within [plane.watch ATC](https://atc.plane.watch), refresh the page and in the *ADS-B Connection Status* and *MLAT Connection Status* columns of the table you should see the text `Online` in green text, with your connection details.\n\n# Part 11 – Configure UAT (Optional and US only) \n***Please note:** The following instructions involve making low-level changes to RTL-SDR USB sticks, such as changing the serial numbers. Proceed with caution, and only if you are comfortable with the steps involved. All changes made are at your own risk.*\n\nIn the United States, aircraft can use either the ADS-B standard, which transmits at a frequency of 1090 MHz or the UAT protocol, which transmits at 978 MHz. If you live in the US and have an extra RTL-SDR dongle, you can track the UAT and ADS-B traffic. Please note that the blue FlightAware USB devices should only be used for ADS-B traffic, as they have an integrated filter optimized explicitly for the 1090 MHz frequencies. The orange FlightAware USB devices work well for tracking UAT traffic.\n\n1. Make sure you only have one RTL-SDR stick connected to your device before executing the following steps. The connected stick should be used for regular ADS-B 1090 MHz feeding. \n2. Head to your device's *Summary* page. Click on the *Device Variables*-button in the left-hand menu. Add a variable named `DUMP1090_IDLE` and populate it with the value `true`.\n3. From the *Summary* page, inside the *Terminal* section, click *Select a target*, then *dump1090-fa*, and finally *Start terminal session*. This will open a terminal that lets you interact directly with the dump1090-fa container.\n4. Once the terminal prompt appears, enter `/add-serial-1090.sh`, then press return. \n5. Type `YES`, followed by return, to change your dongle's serial number. Verify that the process completes successfully.\n6. Click on the *Device Variables*-button in the left-hand menu. Add a new variable named `DUMP1090_DEVICE` and set its value to `00001090`.\n7. Shut down your device. When it's powered off, remove the first RTL-SDR stick from the Pi.\n8. Insert the second RTL-SDR stick (the one used for UAT), leaving the first stick disconnected. Power on your device.\n9. Click on the Device Variables-button in the left-hand menu. Delete the variable you created earlier called `DUMP1090_IDLE`. Then create a variable named `DUMP978_IDLE` and populate it with the value `true`. Also add a new variable named `UAT_ENABLED` and assign it the value `true`.\n10. Head to your device's *Summary* page. Wait for all containers to come up with the status *Running*. Inside the *Terminal* section, click *Select a target*, then *dump978-fa*, and finally *Start terminal session*.\n11. Once the terminal prompt appears, enter `/add-serial-978.sh`, then press return.\n12. Type `YES`, followed by return, to change your dongle's serial number. Verify that the process completes successfully.\n13. Click on the *Device Variables*-button in the left-hand menu. Add a new variable named `DUMP978_DEVICE` and set its value to `00000978`.\n14. Shut down your device. When it's powered off, connect both RTL-SDR sticks.\n15. Click on the *Device Variables*-button in the left-hand menu. Delete the `DUMP978_IDLE` variable.\n16. Power on the device. You should now be feeding ADS-B and UAT data simultaneously to the services that support it (FlightAware, AirNav Radar and ADSB-Exchange).\n\n**Manually set gain for UAT/dump978**\n\nBy default the gain for the UAT/dump978 service is set to `--sdr-auto-gain`. This is an automatic setting which tries to get the optimum gain setting for your setup. In some cases the automatic gain setting can cause issues with over-saturation of your receiver, and so we have added an optional setting for `DUMP978_GAIN` to allow you to manually set it to an appropriate value of your choosing.\n\nIn order to manually set the gain. click on the *Device Variables*-button in the left-hand menu in the balena dashboard. Add a new variable named `DUMP978_GAIN` and set its value to your required gain. You can choose from any of the following values: `0.0, 0.9, 1.4, 2.7, 3.7, 7.7, 8.7, 12.5, 14.4, 15.7, 16.6, 19.7, 20.7, 22.9, 25.4, 28.0, 29.7, 32.8, 33.8, 36.4, 37.2, 38.6, 40.2, 42.1, 43.4, 43.9, 44.5, 48.0, 49.6`\n\n# Part 12 – Configure tar1090 and graphs1090 (Optional)\n[Tar1090](https://github.com/wiedehopf/tar1090) and [graphs1090](https://github.com/wiedehopf/graphs1090) are visualisation tools that can help you to see the output and determine the performance of your ADS-B plane tracking setup. These tools are pre-configured to run out-of-the-box as long as the `LAT` and `LON` parameters are set as described in [part 2 above](#part-2--setup-balena-and-configure-the-device). However, there is some significant customisation possible as this service uses the [docker-tar1090 container](https://github.com/sdr-enthusiasts/docker-tar1090) from [SDR Enthusiasts](https://github.com/sdr-enthusiasts). You can view all of the configuration options in the [README of the docker-tar1090 GitHub repo](https://github.com/sdr-enthusiasts/docker-tar1090/blob/main/README.md).\n\nBy default, these viewers are fed with ADS-B data from the dump1090 container and with MLAT data from the adsb-exchange container, however you can also manually configure these. You can use the *Device Variables* `BEASTHOST` and `BEASTPORT` (default `dump1090-fa` and `30005` respectively) for ADS-B data input and the *Device Variables* `MLATHOST` and `MLATPORT` (default `adsb-exchange` and `30157` respectively) to configure the inputs you desire.\n\n# Part 13 – Add a digital display (Optional)\nbalena also produces a project that can be easily configured to display a webpage in kiosk mode on a digital display called balenaDash. By dropping that project into this one, we can automatically display a feeder page directly from the Pi. We can then set a `LAUNCH_URL` device variable configured to connect to `http://{{YOURIP or YOURSERVICENAME}}:YOURSERVICEPORT` (where the service/port is one of the frontends above, like `http://planefinder:30053`) and that will automatically be displayed on the attached display. The balenaDash service can be configured locally by accessing the webserver on port 8081.\n\n# Part 14 – Exploring flight traffic locally on your device\nIf the setup goes well, you should feed flight traffic data to several online services. You will receive access to the providers' premium services in return for your efforts. But in addition to this, you can explore the data straight from your device, raw and unedited. And that's part of the magic, right?\n\nWhen you have local network access to your receiver, you can explore the data straight from the source. Start by opening your device page in the balena console and locate the `IP ADDRESS` field, e.g. `10.0.0.10`. Then, add the desired port numbers specified further below.\n\nAway from your local network but still eager to know what planes are cruising over your home? Here, balena's built-in *Public Device URL* comes in handy. Open your device page in the balena console, locate the `PUBLIC DEVICE URL` header, and flip the switch below to enable it. Finally, click on the arrow icon next to the button, add the desired URL postfix specified below and voila – you should see what's going on in your area.\n\n **Dump1090's Radar View**\nThis view visualizes everything that your receiver sees, including multilaterated plane positions. When you are in your local network, head to `YOURIP:8080` to check it out. When remote, open balena's *Public Device URL* and add `/skyaware/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/skyaware/`\n\n**Plane Finder's Radar View**\nIt's similar to Dump1090, but Plane Finder adds 3D visualization and other excellent viewing options. Head to `YOURIP:30053` to check it out. When remote, open balena's *Public Device URL* and add `/planefinder/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/planefinder/`\n\n**Flightradar24 Status Page**\nLess visual than the two other options, Flightradar24's status page gives you high-level statistics and metrics about your feeder's performance. Head to `YOURIP:8754` to check it out. When remote, open balena's *Public Device URL* and add `/fr24feed/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/fr24feed/`\n\n**Dump978's Radar View (Optional and US only)**\nIf you live in the US and have configuered UAT feeding, you can explore the data using this view. When you are in your local network, head to `YOURIP:8978` to check it out. When remote, open balena's *Public Device URL* and add `/skyaware978/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/skyaware978/`. However, keep in mind that UAT traffic is scarce. It might take several days before you see any traffic, depending on where in the US you are situated.\n\n**Tar1090 Radar View**\n[Tar1090](https://github.com/wiedehopf/tar1090) is a radar view of the plane traffic (ADS-B. MLAT etc) seen by the SDR. It is similar to the Dump1090 / skyaware radar view but has a number of other useful viewing options and data points. It is also highly configurable. When you are in your local network, head to `YOURIP/tar1090` to check it out. When remote, open balena's *Public Device URL* and add `/tar1090/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/tar1090/`\n\n**Graphs1090 Stats Graphs**\n[Graphs1090](https://github.com/wiedehopf/graphs1090) is a graphical output that plots performance graphs of the interesting data from both your SDR data and your system data. You can see things like your ADS-B range, message rates, number of planes and signal levels as well as system data such as CPU and memory usage, temperature and bandwidth. When you are in your local network, head to `YOURIP/graphs1090` to check it out. When remote, open balena's *Public Device URL* and add `/graphs1090/` to the tail end of the URL, e.g. `https://6g31f15653bwt4y251b18c1daf4qw164.balena-devices.com/graphs1090/`\n\n# Part 15 – Advanced configuration\n## Disabling specific services\nYou can disable any of the balena-ads-b services by creating a *Device Variable* named `DISABLED_SERVICES` with the services you want to disable as comma-separated values. For example, if you want to disable the dump1090fa service, you set the `DISABLED_SERVICES` variable to `dump1090fa`. If you want to disable the dump1090fa and piaware services, you set the `DISABLED_SERVICES` variable to `dump1090fa, piaware`.\n\n## Using different radio device types\n\nWith balena-ads-b you are able to use a variety of SDRs (software defined radios) and other devices such as the FPGA based Mode-S Beast. The default operating mode is to use an RTL-SDR over USB and no additional configuration is needed for this setup.\n\nIf you are using a Mode-S Beast, bladeRF, HackRF, LimeSDR or SoapySDR then you will need to configure this for the device to work as intended.\n\nIn order to configure the particular device type you are using, you need to create a *Device Variable* named `RADIO_DEVICE_TYPE`. The possible values are below:\n\n- rtlsdr (this is the default and you do not need to configure this variable if you are using an RTL-SDR)\n- modesbeast\n- bladerf\n- hackrf\n- limesdr\n- soapysdr\n\nFor example if you have a Mode-S Beast, you set the `RADIO_DEVICE_TYPE` variable to `modesbeast`. Remember to save the device variable settings after you have updated them. Your device should restart automatically once you configure this and the radio should now work.\n\n## Adaptive gain configuration\nThe dump1090-fa service can be configured to adapt the tuner gain to changing conditions automatically. You can [read more about how this works](https://github.com/flightaware/dump1090/blob/master/README.adaptive-gain.md#default-settings) at FlightAware's website. \n\n### Adaptive gain in dynamic range mode\nFrom FlightAware's documentation: *The dynamic range adaptive gain mode attempts to set the receiver gain to maintain a given dynamic range - that is, it tries to set the gain so that general noise is at or below a given level.*\n\nThis mode is *enabled* by default. If you specify the antenna gain manually (see below), it will be deactivated. You can manually disable this mode by setting a *Device Variable* named `DUMP1090_ADAPTIVE_DYNAMIC_RANGE` with the value `false`.  \n\n### Adaptive gain in \"burst\" signal mode\nFrom FlightAware's documentation: *The \"burst\" adaptive gain mode listens for loud bursts of signal that were _not_ successfully decoded as ADS-B messages, but which have approximately the right timing to be possible messages that were lost due to receiver overloading. When enough overly-loud signals are heard in a short period of time, dump1090 will _reduce_ the receiver gain to try to allow them to be received.*\n\nThis mode is *disabled* by default. You can enable it by setting a *Device Variable* named `DUMP1090_ADAPTIVE_BURST` with the value `true`. \n\nFor this mode to work optimally, you should adjust *loud* and *quiet* ranges. You do this by creating two *Device Variables* named `DUMP1090_ADAPTIVE_BURST_LOUD_RATE` and `DUMP1090_ADAPTIVE_BURST_QUIET_RATE`, with the desired loud- and quiet targets as their values.\n\n### Limiting the gain range\nFrom FlightAware's documentation: *If you know in advance approximately what the gain setting should be, so you want to allow adaptive gain to change the gain only within a certain range, you can set minimum and maximum gain settings in dB. Adaptive gain will only adjust the gain within this range.*\n\nYou can specify the target maximum and minimum gain by creating two *Device Variables* named `DUMP1090_ADAPTIVE_MIN_GAIN` and `DUMP1090_ADAPTIVE_MAX_GAIN`, with the desired maximum- and minimum gain as their values.\n\n### Reducing the CPU cost of adaptive gain\nFrom FlightAware's documentation: *The measurements needed to adjust gain have a CPU cost, and on slower devices it may be useful to reduce the amount of work that adaptive gain does. This can be done by adjusting the adaptive gain duty cycle. This is a percentage that controls what fraction of incoming data adaptive gain inspects. 100% means that every sample is inspected. Lower values reduce CPU use, with a tradeoff that adaptive gain has a less accurate picture of the RF environment. The default duty cycle is 50% on \"fast\" CPUs and 10% on \"slow\" CPUs (where currently \"slow\" means \"armv6 architecture\", for example the Pi Zero or Pi 1).* \n\nYou can reduce the duty cycle further by creating a *Device Variable* named `DUMP1090_SLOW_CPU`, with the desired duty cycle percentage as the value (1-100).\n\n## Setting dump1090 antenna gain\nBy default, dump1090 will run with adaptive gain in dynamic range mode. You can override this by setting a *Device Variable* named `DUMP1090_GAIN` with a value of your liking.  You can read more about manual gain optimization at the [adsb-wiki](https://github.com/wiedehopf/adsb-wiki/wiki/Optimizing-gain).\n\n## Device reboot on service exit\ndump978 and dump1090 can restart the device if it hits an error. You can enable this feature by setting a *Device Variable* named `REBOOT_DEVICE_ON_SERVICE_EXIT` with the value of `true`.\n\n## Automatic balenaOS host updates\n\nAutomatically keep your balenaOS host release up-to-date. To enable this service, create a *Device Variables* named `ENABLED_SERVICES` with the value of `autohupr`. You may also want to set the following *Device Variables*:\n\n- `HUP_CHECK_INTERVAL`: Interval between checking for available updates. Default is 1d.\n- `HUP_TARGET_VERSION`: The OS version you want balenaHUP to automatically update your device to. This is a required variable to be specified, otherwise, an update won't be performed by default. Set the variable to 'latest'/'recommended' for your device to always update to the latest OS version or set it to a specific version (e.g '2.107.10').\n\n## Custom MLAT client\n\nIn the [docker compose file]([https://github.com/ketilmo/balena-ads-b/blob/shawaj/mlat-version/docker-compose.yml](https://github.com/ketilmo/balena-ads-b/blob/master/docker-compose.yml#L258-L271)) you will notice at the bottom there is a section labelled `Optional: Uncomment to enable custom mlat server.` This allows you to share MLAT data with an MLAT server of your choosing, unrelated to any of the above services.\n\nIn order to enable this, you will need to fork the repo and edit the docker-compose.yml file to remove the `#` at the beginning of each line starting with the one that says `mlat-client`. Once done you should save the file, and then you can deploy it to your fleet using the manual method described above in [Part 2 – Setup balena and configure the device](#part-2--setup-balena-and-configure-the-device).\n\nYou will also need to add *Device Variables* named `MLAT_CLIENT_USER` with a value of your desired username or UUID and another one named `MLAT_SERVER` with a value or your desired MLAT server address and port. For example you might have an `MLAT_CLIENT_USER` of `0327791e-3777-40a5-addc-aa13408d3b07` and an `MLAT_SERVER` of `feed.mymlatserver.com:31090`.\n\n# Part 16 – Updating to the latest version\n\nUpdating to the latest version is trivial. If you installed balena-ads-b using the blue Deploy with balena-button, you can click it again and overwrite your current application. Choose the \"Deploy to existing fleet\" option, then select the fleet you want to update. All settings will be preserved. For convenience, the button is right here:\n\n[![Deploy with button](https://www.balena.io/deploy.svg)](https://dashboard.balena-cloud.com/deploy?repoUrl=https://github.com/ketilmo/balena-ads-b\u0026defaultDeviceType=raspberrypi4-64)\n\nIf you used the manual `balena push` method, pull the changes from the master branch and push the update to your application with the balena CLI. For complete instructions, look at [Part 2 – Setup balena and configure the device](#part-2--setup-balena-and-configure-the-device).\n\nEnjoy!\n\n![Visitors](https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fgithub.com%2Fketilmo%2Fbalena-ads-b\u0026countColor=%23263759)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fketilmo%2Fbalena-ads-b","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fketilmo%2Fbalena-ads-b","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fketilmo%2Fbalena-ads-b/lists"}