diff --git a/.dictionary.txt b/.dictionary.txt new file mode 100644 index 0000000..9ac17d5 --- /dev/null +++ b/.dictionary.txt @@ -0,0 +1 @@ +crate diff --git a/.github/workflows/cancel_dupes.yml b/.github/workflows/cancel_dupes.yml index cc24020..daa8c3e 100644 --- a/.github/workflows/cancel_dupes.yml +++ b/.github/workflows/cancel_dupes.yml @@ -2,10 +2,10 @@ name: Cancelling Duplicates on: workflow_run: workflows: - - 'Deploy to Docker Hub' - - 'Check Linting' - - 'Tests' - types: ['requested'] + - "Deploy to Docker Hub" + - "Check Linting" + - "Tests" + types: ["requested"] jobs: cancel-duplicate-workflow-runs: @@ -18,4 +18,3 @@ jobs: cancelMode: allDuplicates token: ${{ secrets.GITHUB_TOKEN }} sourceRunId: ${{ github.event.workflow_run.id }} - diff --git a/.github/workflows/pre-commit-updates.yaml b/.github/workflows/pre-commit-updates.yaml new file mode 100644 index 0000000..f075972 --- /dev/null +++ b/.github/workflows/pre-commit-updates.yaml @@ -0,0 +1,23 @@ +name: Update pre-commit hooks + +on: + workflow_dispatch: + schedule: + - cron: 0 0 * * * + +jobs: + update: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.1.0 + with: + fetch-depth: 0 + - uses: vrslev/pre-commit-autoupdate@v1.0.0 + - uses: peter-evans/create-pull-request@v5 + with: + branch: pre-commit-autoupdate + title: "chore(deps): Update pre-commit hooks" + commit-message: "chore(deps): Update pre-commit hooks" + body: Update pre-commit hooks + labels: dependencies + delete-branch: True diff --git a/.hadolint.yaml b/.hadolint.yaml index f676b3e..0306774 100644 --- a/.hadolint.yaml +++ b/.hadolint.yaml @@ -1,6 +1,6 @@ -ignored: +ignored: - DL3003 - DL3007 - DL3008 - SC3054 - - SC3044 \ No newline at end of file + - SC3044 diff --git a/.markdownlint.json b/.markdownlint.json index 699d9f2..28989a5 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,6 +1,6 @@ { - "MD024": false, - "MD013": false, - "MD033": false, - "MD029": false -} \ No newline at end of file + "MD024": false, + "MD013": false, + "MD033": false, + "MD029": false +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..34ef282 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,65 @@ +repos: + # lint yaml, line and whitespace + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: requirements-txt-fixer + - id: mixed-line-ending + - id: check-executables-have-shebangs + - id: check-shebang-scripts-are-executable + + # lint the dockerfiles + - repo: https://github.com/hadolint/hadolint + rev: v2.12.1-beta + hooks: + - id: hadolint + + # prettier + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v3.0.3" # Use the sha / tag you want to point at + hooks: + - id: prettier + types_or: [file, bash, sh, javascript, jsx, ts, tsx] + additional_dependencies: + - prettier@2.5.1 + exclude: ^(Dockerfile*) + + - repo: https://github.com/codespell-project/codespell.git + rev: "v2.2.5" # Use the sha / tag you want to point at + hooks: + - id: codespell + types: [text] + args: [--ignore-words=.dictionary.txt] + exclude: ^(Dockerfile*) + + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.9.0.6 + hooks: + - id: shellcheck + + - repo: https://github.com/sirosen/check-jsonschema + rev: 0.27.0 + hooks: + - id: check-github-actions + - id: check-github-workflows + + - repo: https://github.com/doublify/pre-commit-rust + rev: v1.0 + hooks: + - id: fmt + - id: cargo-check + + # lint python formatting + - repo: https://github.com/psf/black + rev: 23.9.1 + hooks: + - id: black + + - repo: https://github.com/pycqa/flake8 + rev: "6.1.0" # pick a git hash / tag to point to + hooks: + - id: flake8 + args: ["--extend-ignore=W503,W504,E501"] diff --git a/.vscode/settings.json b/.vscode/settings.json index 7eb5d68..8076706 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "yaml.schemas": { - "https://json.schemastore.org/github-workflow.json": "file:///Users/ramon_kolb/github/docker-adsb-ultrafeeder/.github/workflows/deploy.yml" - } -} \ No newline at end of file + "yaml.schemas": { + "https://json.schemastore.org/github-workflow.json": "file:///Users/ramon_kolb/github/docker-adsb-ultrafeeder/.github/workflows/deploy.yml" + } +} diff --git a/README-grafana.md b/README-grafana.md index 1b2fcf5..cfa226a 100644 --- a/README-grafana.md +++ b/README-grafana.md @@ -43,7 +43,7 @@ services: Prometheus will store a lot of data, and Grafana will do a lot of data queries. As a result, it would be better if you run these containers on a different system than your feeder Raspberry Pi. This will leave your Pi focused on data collection and processing, and unbothered by the CPU and Disk IO load that Prometheus/Grafana will cause. -You *can* do it on a single system. We're assuming below that you are not. If you do it on a single system, then you can combine the `docker-compose.yml` components in a single file +You _can_ do it on a single system. We're assuming below that you are not. If you do it on a single system, then you can combine the `docker-compose.yml` components in a single file ## Steps to install Prometheus, Grafana, and the Grafana Dashboard @@ -52,11 +52,11 @@ You *can* do it on a single system. We're assuming below that you are not. If yo - Edit your Ultrafeeder's `docker-compose.yml` file and ensure that the following is set for the `ultrafeeder` service: ```yaml - environment: - - PROMETHEUS_ENABLE=true - - TAR1090_ENABLE_AC_DB=true - ports: - - 9273-9274:9273-9274 +environment: + - PROMETHEUS_ENABLE=true + - TAR1090_ENABLE_AC_DB=true +ports: + - 9273-9274:9273-9274 ``` Now recreate the ultrafeeder container (`docker-compose up -d ultrafeeder`) and it will generate Prometheus data. @@ -71,7 +71,7 @@ cd /opt/grafana cat > docker-compose.yml ``` -Now paste in the following text *): +Now paste in the following text \*):
<‐‐ Click the arrow to see the docker-compose.yml text @@ -149,7 +149,7 @@ services:
-*) The volume definition structure is written this way purposely to ensure that the containers can place files in the persistent directories. Do not try to "directly" map volumes (`/opt/grafana/grafana/appdata:/var/lib/grafana`). +\*) The volume definition structure is written this way purposely to ensure that the containers can place files in the persistent directories. Do not try to "directly" map volumes (`/opt/grafana/grafana/appdata:/var/lib/grafana`). You should be able to see the following directories: @@ -178,9 +178,9 @@ docker compose up -d This will add the following to the bottom of the `prometheus.xml` file: ```yaml - - job_name: 'ultrafeeder' - static_configs: - - targets: ['ip_xxxxxxx:9273', 'ip_xxxxxxx:9274'] +- job_name: "ultrafeeder" + static_configs: + - targets: ["ip_xxxxxxx:9273", "ip_xxxxxxx:9274"] ``` (If you screw this up, **do NOT** re-run the command. Instead, try `sudo nano /opt/grafana/prometheus/config/prometheus.yml` and fix it that way.) @@ -198,9 +198,9 @@ docker compose up -d This will add the following to the bottom of the `prometheus.xml` file: ```yaml - - job_name: 'dump978' - static_configs: - - targets: ['ip_xxxxxxx:9274'] +- job_name: "dump978" + static_configs: + - targets: ["ip_xxxxxxx:9274"] ``` (If you screw this up, **do NOT** re-run the command. Instead, try `sudo nano /opt/grafana/prometheus/config/prometheus.yml` and fix it that way.) @@ -222,10 +222,10 @@ After you have logged into the `grafana` console the following manual steps are 2. Click `Prometheus` from the list of options provided 3. Input or select the following options, if the option is not listed, do not input anything for that option: -Option | Input -------------- | ------------- -Name | ultrafeeder -URL | `http://prometheus:9090/` +| Option | Input | +| ------ | ------------------------- | +| Name | ultrafeeder | +| URL | `http://prometheus:9090/` | Clicking `Save & Test` should return a green message indicating success. The dashboard can now be imported with the following steps: @@ -261,12 +261,12 @@ First execute all steps above, and then continue here. ### Step 1: Edit your Prometheus config file so the `job_name`s look like this ```yaml - - job_name: 'heerlen' - static_configs: - - targets: ['10.0.0.100:9273', '10.0.0.100:9274'] - - job_name: 'trenton' - static_configs: - - targets: ['10.0.0.101:9273', '10.0.0.101:9274'] +- job_name: "heerlen" + static_configs: + - targets: ["10.0.0.100:9273", "10.0.0.100:9274"] +- job_name: "trenton" + static_configs: + - targets: ["10.0.0.101:9273", "10.0.0.101:9274"] ``` Here, `10.0.0.100` is the IP address of the `heerlen` station, and `10.0.0.101` is the IP address of the `trenton` station. Yours will be different. Please keep the ports as you mapped them for Ultrafeeder in each instance. You should have a `- job_name` block for each ultrafeeder instance. diff --git a/README.md b/README.md index 03de058..1384461 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ wget https://raw.githubusercontent.com/sdr-enthusiasts/docker-adsb-ultrafeeder/m wget https://raw.githubusercontent.com/sdr-enthusiasts/docker-adsb-ultrafeeder/main/.env ``` -Then edit the `docker-compose.yml` and `.env` files and make any changes as needed. Please configure ALL variables in `.env`: +Then edit the `docker-compose.yml` and `.env` files and make any changes as needed. Please configure ALL variables in `.env`: ```bash nano docker-compose.yml @@ -109,30 +109,30 @@ The general principle behind the port numbering, is: - `92xx` ports are for Prometheus statistics output - `80` contains the Tar1090 web interface -| Port | Details | -|------|---------| -| `30001/tcp` | Raw protocol input | -| `30002/tcp` | Raw protocol output | -| `30003/tcp` | SBS/Basestation protocol output | -| `32006/tcp` | SBS/Basestation protocol input | -| `30004/tcp`
`30104/tcp` | Beast protocol input | -| `30005/tcp` | Beast protocol output | -| `30006/tcp` | Beast reduce protocol output | -| `30047/tcp` | Json position output | -| `31003/tcp` | MLATHUB SBS/Basestation protocol output | -| `31004/tcp` | MLATHUB Beast protocol input | -| `31005/tcp` | MLATHUB Beast protocol output | -| `31006/tcp` | MLATHUB Beast-reduce protocol output | -| `9273/tcp` | Prometheus web interface with data from `readsb` | -| `9274/tcp` | Prometheus web interface with data from `Telegraf` | -| `80/tcp` | Tar1090 (map) web interface | +| Port | Details | +| --------------------------- | -------------------------------------------------- | +| `30001/tcp` | Raw protocol input | +| `30002/tcp` | Raw protocol output | +| `30003/tcp` | SBS/Basestation protocol output | +| `32006/tcp` | SBS/Basestation protocol input | +| `30004/tcp`
`30104/tcp` | Beast protocol input | +| `30005/tcp` | Beast protocol output | +| `30006/tcp` | Beast reduce protocol output | +| `30047/tcp` | Json position output | +| `31003/tcp` | MLATHUB SBS/Basestation protocol output | +| `31004/tcp` | MLATHUB Beast protocol input | +| `31005/tcp` | MLATHUB Beast protocol output | +| `31006/tcp` | MLATHUB Beast-reduce protocol output | +| `9273/tcp` | Prometheus web interface with data from `readsb` | +| `9274/tcp` | Prometheus web interface with data from `Telegraf` | +| `80/tcp` | Tar1090 (map) web interface | Any of these ports can be made available to the host system by using the `ports:` directive in your `docker-compose.yml`. The container's web interface is rendered to port `80` in the container. This can me mapped to a port on the host using the docker-compose `ports` directive. In the example [`docker-compose.yml`](docker-compose.yml) file, the container's Tar1090 interface is mapped to `8080` on the host system, and ports `9273-9274` are exposed as-is: ```yaml - ports: - - 8080:80 # to expose the web interface - - 9273-9274:9273-9274 # to expose the statistics interface to Prometheus +ports: + - 8080:80 # to expose the web interface + - 9273-9274:9273-9274 # to expose the statistics interface to Prometheus ``` Json position output: @@ -161,11 +161,11 @@ Note: You need to make sure that the USB device can be accessed by the container. The best way to do so, is by adding the following to your `docker-compose.yml` file: ```yaml - device_cgroup_rules: - - 'c 189:* rwm' -... - volumes: - - /dev:/dev:ro +device_cgroup_rules: + - "c 189:* rwm" +--- +volumes: + - /dev:/dev:ro ``` The advantage of doing this (over simply adding a `device:` directive pointing at the USB port) is that the construction above will automatically recover if you "hot plug" your dongle. ⚠️This feature requires a recent version of docker-compose (version >=2.3). Make sure your system is up to date if dongles are not found. ⚠️ @@ -176,32 +176,32 @@ The advantage of doing this (over simply adding a `device:` directive pointing a The following parameters must be set (mandatory) for the container to function: -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `LAT` or `READSB_LAT` | The latitude of your antenna. Use either parameter, but not both | | -| `LONG` or `READSB_LON` | The longitude of your antenna. Use either parameter, but not both | | -| `ALT` or `READSB_ALT` | The altitude of your antenna above sea level. For example, `15m` or `45ft` | | -| `TZ` | Your local timezone in [TZ-database-name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) format | | +| Environment Variable | Purpose | Default | +| ---------------------- | -------------------------------------------------------------------------------------------------------------- | ------- | +| `LAT` or `READSB_LAT` | The latitude of your antenna. Use either parameter, but not both | | +| `LONG` or `READSB_LON` | The longitude of your antenna. Use either parameter, but not both | | +| `ALT` or `READSB_ALT` | The altitude of your antenna above sea level. For example, `15m` or `45ft` | | +| `TZ` | Your local timezone in [TZ-database-name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) format | | ##### Optional Parameters -| Variable | Description | Controls which `readsb` option | Default | -|----------|-------------|--------------------------------|---------| -| `ENABLE_TIMELAPSE1090` | Optional / Legacy. Set to `true` to enable timelapse1090. Once enabled, can be accessed via . | Unset | -| `READSB_EXTRA_ARGS` | Optional, allows to specify extra parameters for readsb | Unset | -| `READSB_DEBUG` | Optional, used to set debug mode. `n`: network, `P`: CPR, `S`: speed check | Unset | -| `S6_SERVICES_GRACETIME` | Optional, set to 30000 when saving traces / globe_history | `3000` | -| `READSB_MAX_RANGE` | Optional. Maximum range (in nautical miles). | `300` | -| `READSB_ENABLE_BIASTEE` | Set to `true` to enable bias tee on supporting interfaces | | Unset | -| `READSB_RX_LOCATION_ACCURACY` | Accuracy of receiver location in metadata: 0=no location, 1=approximate, 2=exact | `--rx-location-accuracy=` | `2` | -| `READSB_HEATMAP_INTERVAL` | Per plane interval for heatmap and replay (if you want to lower this, also lower json-trace-interval to this or a lower value) | `--heatmap=` | `15` | -| `READSB_MAX_RANGE` | Absolute maximum range for position decoding (in nm) | `--max-range=` | `300` | -| `READSB_STATS_EVERY` | Number of seconds between showing and resetting stats. | `--stats-every=` | Unset | -| `READSB_STATS_RANGE` | Set this to `true` to collect range statistics for polar plot. | `--stats-range` | Unset | -| `READSB_RANGE_OUTLINE_HOURS` | Change which past timeframe the range outline is based on | `--range-outline-hours` | `24` | -| `READSB_EXTRA_ARGS` | Optional, allows to specify extra parameters for readsb | | Unset | -| `S6_SERVICES_GRACETIME` | Optional, set to 30000 when saving traces / globe_history | | `3000` | -| `LOGLEVEL` | `verbose` (all messages), `error` (errors only), `none` (minimal) | | `verbose` | +| Variable | Description | Controls which `readsb` option | Default | +| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | --------- | +| `ENABLE_TIMELAPSE1090` | Optional / Legacy. Set to `true` to enable timelapse1090. Once enabled, can be accessed via . | Unset | +| `READSB_EXTRA_ARGS` | Optional, allows to specify extra parameters for readsb | Unset | +| `READSB_DEBUG` | Optional, used to set debug mode. `n`: network, `P`: CPR, `S`: speed check | Unset | +| `S6_SERVICES_GRACETIME` | Optional, set to 30000 when saving traces / globe_history | `3000` | +| `READSB_MAX_RANGE` | Optional. Maximum range (in nautical miles). | `300` | +| `READSB_ENABLE_BIASTEE` | Set to `true` to enable bias tee on supporting interfaces | | Unset | +| `READSB_RX_LOCATION_ACCURACY` | Accuracy of receiver location in metadata: 0=no location, 1=approximate, 2=exact | `--rx-location-accuracy=` | `2` | +| `READSB_HEATMAP_INTERVAL` | Per plane interval for heatmap and replay (if you want to lower this, also lower json-trace-interval to this or a lower value) | `--heatmap=` | `15` | +| `READSB_MAX_RANGE` | Absolute maximum range for position decoding (in nm) | `--max-range=` | `300` | +| `READSB_STATS_EVERY` | Number of seconds between showing and resetting stats. | `--stats-every=` | Unset | +| `READSB_STATS_RANGE` | Set this to `true` to collect range statistics for polar plot. | `--stats-range` | Unset | +| `READSB_RANGE_OUTLINE_HOURS` | Change which past timeframe the range outline is based on | `--range-outline-hours` | `24` | +| `READSB_EXTRA_ARGS` | Optional, allows to specify extra parameters for readsb | | Unset | +| `S6_SERVICES_GRACETIME` | Optional, set to 30000 when saving traces / globe_history | | `3000` | +| `LOGLEVEL` | `verbose` (all messages), `error` (errors only), `none` (minimal) | | `verbose` | `READSB_EXTRA_ARGS` just passes arguments to the commandline, you can check this file for more options for wiedehopf's readsb fork: @@ -220,18 +220,18 @@ If you want to connect your SDR to the container, here's how to do that: ##### Mandatory parameters -| Variable | Description | Controls which `readsb` option | Default | -|----------|-------------|--------------------------------|---------| -| `READSB_DEVICE_TYPE` | If using an SDR, set this to `rtlsdr`, `modesbeast`, `gnshulc` depending on the model of your SDR. If not using an SDR, leave un-set. | `--device-type=` | Unset | -| `READSB_RTLSDR_DEVICE` | Select device by serial number. | `--device=` | Unset | -| `READSB_BEAST_SERIAL` | only when type `modesbeast` or `gnshulc` is used: Path to Beast serial device. | `--beast-serial=` | `/dev/ttyUSB0` | +| Variable | Description | Controls which `readsb` option | Default | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------- | +| `READSB_DEVICE_TYPE` | If using an SDR, set this to `rtlsdr`, `modesbeast`, `gnshulc` depending on the model of your SDR. If not using an SDR, leave un-set. | `--device-type=` | Unset | +| `READSB_RTLSDR_DEVICE` | Select device by serial number. | `--device=` | Unset | +| `READSB_BEAST_SERIAL` | only when type `modesbeast` or `gnshulc` is used: Path to Beast serial device. | `--beast-serial=` | `/dev/ttyUSB0` | ##### Optional/Additional Parameters -| Variable | Description | Controls which `readsb` option | Default | -|----------|-------------|--------------------------------|---------| -| `READSB_GAIN` | Set gain (in dB). Use `autogain` to have the container determine an appropriate gain, more on this below. | `--gain=` | Max gain | -| `READSB_RTLSDR_PPM` | Set oscillator frequency correction in PPM. See [Estimating PPM](https://github.com/sdr-enthusiasts/docker-readsb-protobuf/#estimating-ppm) | `--ppm=` | Unset | +| Variable | Description | Controls which `readsb` option | Default | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------- | +| `READSB_GAIN` | Set gain (in dB). Use `autogain` to have the container determine an appropriate gain, more on this below. | `--gain=` | Max gain | +| `READSB_RTLSDR_PPM` | Set oscillator frequency correction in PPM. See [Estimating PPM](https://github.com/sdr-enthusiasts/docker-readsb-protobuf/#estimating-ppm) | `--ppm=` | Unset | ##### AutoGain for RTLSDR Devices @@ -250,18 +250,18 @@ We recommend running the initial period during times when there are a lot of pla Although not recommended, you can change the measurement intervals and low/high cutoffs with these parameters: -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `READSB_AUTOGAIN_INITIAL_TIMEPERIOD` | How long the Initial Time Period should last (in seconds) | `7200` | -| `READSB_AUTOGAIN_INITIAL_INTERVAL` | The measurement interval to optimize gain during the initial period of 90 minutes (in seconds) | `300` | -| `READSB_AUTOGAIN_SUBSEQUENT_INTERVAL` | The measurement interval to optimize gain during the subsequent period (in seconds) | `86400` | -| `READSB_AUTOGAIN_LOW_PCT` | If the percentage of "strong signals" (stronger than 3dBFS RSSI) is below this number, gain will be increased | `2.5` | -| `READSB_AUTOGAIN_HIGH_PCT` | If the percentage of "strong signals" (stronger than 3dBFS RSSI) is above this number, gain will be decreased | `6.0` | +| Environment Variable | Purpose | Default | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------- | +| `READSB_AUTOGAIN_INITIAL_TIMEPERIOD` | How long the Initial Time Period should last (in seconds) | `7200` | +| `READSB_AUTOGAIN_INITIAL_INTERVAL` | The measurement interval to optimize gain during the initial period of 90 minutes (in seconds) | `300` | +| `READSB_AUTOGAIN_SUBSEQUENT_INTERVAL` | The measurement interval to optimize gain during the subsequent period (in seconds) | `86400` | +| `READSB_AUTOGAIN_LOW_PCT` | If the percentage of "strong signals" (stronger than 3dBFS RSSI) is below this number, gain will be increased | `2.5` | +| `READSB_AUTOGAIN_HIGH_PCT` | If the percentage of "strong signals" (stronger than 3dBFS RSSI) is above this number, gain will be decreased | `6.0` | If you need to reset AutoGain and start over determining the gain, you can do so with this command: ```bash -docker exec -it ultrafeeder /usr/local/bin/autogain1090 reset +docker exec -it ultrafeeder /usr/local/bin/autogain1../sdr-e-base-repo-setup/.pre-commit-config.yaml090 reset ``` #### Connecting to external ADSB data sources @@ -310,28 +310,28 @@ In the above configuration strings: ##### Networking parameters -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `BEASTHOST` | IP/Hostname of a Mode-S/Beast provider (`dump1090`/`readsb`) | | -| `BEASTPORT` | TCP port number of Mode-S/Beast provider (`dump1090`/`readsb`) | `30005` | -| `MLATHOST` | Legacy parameter. IP/Hostname of an MLAT provider (`mlat-client`). Note - using this parameter will not make the MLAT data part of the consolidated mlathub. The preferred way of ingesting MLAT results is using the `mlathub` functionality of the container, see below for details | | -| `MLATPORT` | Legacy parameter used with `MLATHOST`. TCP port number of an MLAT provider (`mlat-client`) | 30105 | +| Environment Variable | Purpose | Default | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `BEASTHOST` | IP/Hostname of a Mode-S/Beast provider (`dump1090`/`readsb`) | | +| `BEASTPORT` | TCP port number of Mode-S/Beast provider (`dump1090`/`readsb`) | `30005` | +| `MLATHOST` | Legacy parameter. IP/Hostname of an MLAT provider (`mlat-client`). Note - using this parameter will not make the MLAT data part of the consolidated mlathub. The preferred way of ingesting MLAT results is using the `mlathub` functionality of the container, see below for details | | +| `MLATPORT` | Legacy parameter used with `MLATHOST`. TCP port number of an MLAT provider (`mlat-client`) | 30105 | ##### Feeding directly from Ultrafeeder There are several aggregators, both non-profit and commercial, that can directly be sent data from ultrafeeder without the need for an additional feeder container. We have added them in the example `docker-compose.yml` snippet above. Here is a partial list of these aggregators. All of them use the `beast_reduce_plus` format for feeding ADSB data, and `mlat-client` for feeding MLAT: -| Name | (C)ommercial/
(N)on-profit | Description | Feed details | -|------|---------------------------|-------------|--------------| -| Airplanes.live | N | Run by volunteers that used to be related to adsbexchange | adsb:`feed.airplanes.live` port `30004`
mlat: `feed.airplanes.live` port `31090`| -| ADSB.fi | N | Run by volunteers that used to be related to adsbexchange | adsb:`feed.adsb.fi` port `30004`
mlat: `feed.adsb.fi` port `31090`| -| ADSB.lol | N | Run by a private individual located in the Netherlands | adsb:`in.adsb.lol` port `30004`
mlat: `in.adsb.one` port `31090`| -| Planespotters | N | planespotters.net | adsb:`feed.planespotters.net` port `30004`
mlat: `mlat.planespotters.net` port `31090`| -| The Air Traffic | N | Run by a private individual | adsb:`feed.theairtraffic.com` port `30004`
mlat: `mlat.theairtraffic.com` port `31090`| -| AV Delphi | C | Swiss aircraft data company | adsb:`data.avdelphi.com` port `24999`
mlat: no MLAT| -| ADSB Exchange | C | Large aggregator owned by JetNet | adsb:`feed1.adsbexchange.com` port `30004`
mlat: `feed.adsbexchange.com` port `31090`| -| RadarPlane | N | Run by a few volunteers in Canada and Portugal | adsb: `feed.radarplane.com` port `30001`
mlat: `feed.radarplane.com` port `31090` | -| Fly Italy ADSB | N | Run by a few ADSB enthusiasts in Italy | adsb: `dati.flyitalyadsb.com` port `4905`
mlat: `dati.flyitalyadsb.com` port `30100` | +| Name | (C)ommercial/
(N)on-profit | Description | Feed details | +| --------------- | ------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------ | +| Airplanes.live | N | Run by volunteers that used to be related to adsbexchange | adsb:`feed.airplanes.live` port `30004`
mlat: `feed.airplanes.live` port `31090` | +| ADSB.fi | N | Run by volunteers that used to be related to adsbexchange | adsb:`feed.adsb.fi` port `30004`
mlat: `feed.adsb.fi` port `31090` | +| ADSB.lol | N | Run by a private individual located in the Netherlands | adsb:`in.adsb.lol` port `30004`
mlat: `in.adsb.one` port `31090` | +| Planespotters | N | planespotters.net | adsb:`feed.planespotters.net` port `30004`
mlat: `mlat.planespotters.net` port `31090` | +| The Air Traffic | N | Run by a private individual | adsb:`feed.theairtraffic.com` port `30004`
mlat: `mlat.theairtraffic.com` port `31090` | +| AV Delphi | C | Swiss aircraft data company | adsb:`data.avdelphi.com` port `24999`
mlat: no MLAT | +| ADSB Exchange | C | Large aggregator owned by JetNet | adsb:`feed1.adsbexchange.com` port `30004`
mlat: `feed.adsbexchange.com` port `31090` | +| RadarPlane | N | Run by a few volunteers in Canada and Portugal | adsb: `feed.radarplane.com` port `30001`
mlat: `feed.radarplane.com` port `31090` | +| Fly Italy ADSB | N | Run by a few ADSB enthusiasts in Italy | adsb: `dati.flyitalyadsb.com` port `4905`
mlat: `dati.flyitalyadsb.com` port `30100` | ##### Alternate Configuration Method with `READSB_NET_CONNECTOR` @@ -350,32 +350,32 @@ NOTE: If you have a UAT dongle and use `dump978` to decode this, you should use There are many optional parameters relating to the ingestion of data and the general networking functioning of the `readsb` program that implements this functionality. -| Variable | Description | Controls which `readsb` option | Default | -|----------|-------------|--------------------------------|---------| -| `READSB_NET_API_PORT` | | `--net-api-port=` | `30152` | -| `READSB_NET_BEAST_REDUCE_INTERVAL` | BeastReduce position update interval, longer means less data (valid range: `0.000` - `14.999`) | `--net-beast-reduce-interval=` | `1.0` | -| `READSB_NET_BEAST_REDUCE_FILTER_DIST` | Restrict beast-reduce output to aircraft in a radius of X nmi | `--net-beast-reduce-filter-dist=` | Unset | -| `READSB_NET_BEAST_REDUCE_FILTER_ALT` | Restrict beast-reduce output to aircraft below X ft | `--net-beast-reduce-filter-alt=` | Unset | -| `READSB_NET_BEAST_REDUCE_OUT_PORT` | TCP BeastReduce output listen ports (comma separated) | `--net-beast-reduce-out-port=` | Unset | -| `READSB_NET_BEAST_INPUT_PORT`| TCP Beast input listen ports | `--net-bi-port=` | `30004,30104` | -| `READSB_NET_BEAST_OUTPUT_PORT` | TCP Beast output listen ports | `--net-bo-port=` | `30005` | -| `READSB_NET_BUFFER` | TCP buffer size 64Kb * (2^n) | `--net-buffer=` | `2` (256Kb) | -| `READSB_NET_RAW_OUTPUT_INTERVAL` | TCP output flush interval in seconds (maximum interval between two network writes of accumulated data). | `--net-ro-interval=` | `0.05` | -| `READSB_NET_RAW_OUTPUT_SIZE` | TCP output flush size (maximum amount of internally buffered data before writing to network). | `--net-ro-size=` | `1200` | -| `READSB_NET_CONNECTOR_DELAY` | Outbound re-connection delay. | `--net-connector-delay=` | `30` | -| `READSB_NET_HEARTBEAT` | TCP heartbeat rate in seconds (0 to disable). | `--net-heartbeat=` | `35` | -| `READSB_NET_RAW_INPUT_PORT` | TCP raw input listen ports. | `--net-ri-port=` | `30001` | -| `READSB_NET_RAW_OUTPUT_PORT` | TCP raw output listen ports. | `--net-ro-port=` | `30002` | -| `READSB_NET_SBS_INPUT_PORT` | TCP BaseStation input listen ports. | `--net-sbs-in-port=` | Unset | -| `READSB_NET_SBS_OUTPUT_PORT` | TCP BaseStation output listen ports. | `--net-sbs-port=` | `30003` | -| `READSB_NET_SBS_DISABLE_REDUCE` | Disable application of "reduce" logic to SBS/BaseStation output. (By default, this is enabled) | `--net-sbs-reduce` | Unset | -| `REASSB_NET_VERBATIM` | Set this to `true` to forward messages unchanged. | `--net-verbatim` | Unset | -| `READSB_NET_VRS_PORT` | TCP VRS JSON output listen ports. | `--net-vrs-port=` | Unset | -| `READSB_WRITE_STATE_ONLY_ON_EXIT` | if set to anything, it will only write the status range outlines, etc. upon termination of `readsb` | `--write-state-only-on-exit` | Unset | -| `READSB_JSON_INTERVAL` | Update interval for the webinterface in seconds / interval between aircraft.json writes | `--write-json-every=` | `1.0` | -| `READSB_JSON_TRACE_INTERVAL` | Per plane interval for json position output and trace interval for globe history | `--json-trace-interval=` | `15` | -| `READSB_FORWARD_MLAT_SBS` | If set to anthing, it will include MLAT results in the SBS/BaseStation output. This may be desirable if you feed SBS data to applications like [VRS](https://github.com/sdr-enthusiasts/docker-virtualradarserver) or [PlaneFence](https://github.com/kx1t/docker-planefence) | Unset | -| `UUID` | Sets the UUID that is sent on the `beast_reduce_plus` port if no individual UUIDs have been defined with the `READSB_NET_CONNECTOR` parameter. Similarly, it's also used with `mlat-client` (see below) if no individual UUIDs have been set with the `MLAT_CONFIG` parameter. | | unset | +| Variable | Description | Controls which `readsb` option | Default | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------- | ------------- | +| `READSB_NET_API_PORT` | | `--net-api-port=` | `30152` | +| `READSB_NET_BEAST_REDUCE_INTERVAL` | BeastReduce position update interval, longer means less data (valid range: `0.000` - `14.999`) | `--net-beast-reduce-interval=` | `1.0` | +| `READSB_NET_BEAST_REDUCE_FILTER_DIST` | Restrict beast-reduce output to aircraft in a radius of X nmi | `--net-beast-reduce-filter-dist=` | Unset | +| `READSB_NET_BEAST_REDUCE_FILTER_ALT` | Restrict beast-reduce output to aircraft below X ft | `--net-beast-reduce-filter-alt=` | Unset | +| `READSB_NET_BEAST_REDUCE_OUT_PORT` | TCP BeastReduce output listen ports (comma separated) | `--net-beast-reduce-out-port=` | Unset | +| `READSB_NET_BEAST_INPUT_PORT` | TCP Beast input listen ports | `--net-bi-port=` | `30004,30104` | +| `READSB_NET_BEAST_OUTPUT_PORT` | TCP Beast output listen ports | `--net-bo-port=` | `30005` | +| `READSB_NET_BUFFER` | TCP buffer size 64Kb \* (2^n) | `--net-buffer=` | `2` (256Kb) | +| `READSB_NET_RAW_OUTPUT_INTERVAL` | TCP output flush interval in seconds (maximum interval between two network writes of accumulated data). | `--net-ro-interval=` | `0.05` | +| `READSB_NET_RAW_OUTPUT_SIZE` | TCP output flush size (maximum amount of internally buffered data before writing to network). | `--net-ro-size=` | `1200` | +| `READSB_NET_CONNECTOR_DELAY` | Outbound re-connection delay. | `--net-connector-delay=` | `30` | +| `READSB_NET_HEARTBEAT` | TCP heartbeat rate in seconds (0 to disable). | `--net-heartbeat=` | `35` | +| `READSB_NET_RAW_INPUT_PORT` | TCP raw input listen ports. | `--net-ri-port=` | `30001` | +| `READSB_NET_RAW_OUTPUT_PORT` | TCP raw output listen ports. | `--net-ro-port=` | `30002` | +| `READSB_NET_SBS_INPUT_PORT` | TCP BaseStation input listen ports. | `--net-sbs-in-port=` | Unset | +| `READSB_NET_SBS_OUTPUT_PORT` | TCP BaseStation output listen ports. | `--net-sbs-port=` | `30003` | +| `READSB_NET_SBS_DISABLE_REDUCE` | Disable application of "reduce" logic to SBS/BaseStation output. (By default, this is enabled) | `--net-sbs-reduce` | Unset | +| `REASSB_NET_VERBATIM` | Set this to `true` to forward messages unchanged. | `--net-verbatim` | Unset | +| `READSB_NET_VRS_PORT` | TCP VRS JSON output listen ports. | `--net-vrs-port=` | Unset | +| `READSB_WRITE_STATE_ONLY_ON_EXIT` | if set to anything, it will only write the status range outlines, etc. upon termination of `readsb` | `--write-state-only-on-exit` | Unset | +| `READSB_JSON_INTERVAL` | Update interval for the webinterface in seconds / interval between aircraft.json writes | `--write-json-every=` | `1.0` | +| `READSB_JSON_TRACE_INTERVAL` | Per plane interval for json position output and trace interval for globe history | `--json-trace-interval=` | `15` | +| `READSB_FORWARD_MLAT_SBS` | If set to anything, it will include MLAT results in the SBS/BaseStation output. This may be desirable if you feed SBS data to applications like [VRS](https://github.com/sdr-enthusiasts/docker-virtualradarserver) or [PlaneFence](https://github.com/kx1t/docker-planefence) | Unset | +| `UUID` | Sets the UUID that is sent on the `beast_reduce_plus` port if no individual UUIDs have been defined with the `READSB_NET_CONNECTOR` parameter. Similarly, it's also used with `mlat-client` (see below) if no individual UUIDs have been set with the `MLAT_CONFIG` parameter. | | unset | #### MLAT configuration @@ -395,18 +395,18 @@ It will create a separate instance of `mlat-client` for each defined MLAT server where: -| Parameter | Mandatory/Optional | Description | -|-------------------|--------------------|-------------| -| `mlat` | Mandatory | indicates that the line container MLAT-client configuration parameters | -| `mlat-server.com` | Mandatory | the domain name or ip address of the target MLAT server | -| `port` | Mandatory | the port (TCP or UDP) of the target MLAT server | -| `return_port` | Optional | the port at which the MLAT results are made available in BEAST format. We recommend to sequentially number them starting at 39000 | -| `uuid` | Optional | a unique user ID for this MLAT server instance. If included, the string must start with `uuid=`. If not included, it will use the value of the `UUID` parameter if it exists | -| `input_connect` | Optional | a unique input connection in the form `input_connect=remotehost:port`, where `remotehost:` is the hostname or IP address and TCP port of your remote BEAST source. This can be used to connect to a remote Beast source and forward MLAT data to an MLAT server | -| `lat` | Optional | the latitude to be sent to the MLAT server in the form `lat=xx.xxxxx`. If omitted, the `LAT` / `READSB_LAT` parameter will be used. This is meant to be used in combination with `input_connect` for connecting to a remote Beast source and forward MLAT data to an MLAT server | +| Parameter | Mandatory/Optional | Description | +| ----------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `mlat` | Mandatory | indicates that the line container MLAT-client configuration parameters | +| `mlat-server.com` | Mandatory | the domain name or ip address of the target MLAT server | +| `port` | Mandatory | the port (TCP or UDP) of the target MLAT server | +| `return_port` | Optional | the port at which the MLAT results are made available in BEAST format. We recommend to sequentially number them starting at 39000 | +| `uuid` | Optional | a unique user ID for this MLAT server instance. If included, the string must start with `uuid=`. If not included, it will use the value of the `UUID` parameter if it exists | +| `input_connect` | Optional | a unique input connection in the form `input_connect=remotehost:port`, where `remotehost:` is the hostname or IP address and TCP port of your remote BEAST source. This can be used to connect to a remote Beast source and forward MLAT data to an MLAT server | +| `lat` | Optional | the latitude to be sent to the MLAT server in the form `lat=xx.xxxxx`. If omitted, the `LAT` / `READSB_LAT` parameter will be used. This is meant to be used in combination with `input_connect` for connecting to a remote Beast source and forward MLAT data to an MLAT server | | `lon` | Optional | the longitude to be sent to the MLAT server in the form `lon=xx.xxxxx`. If omitted, the `LONG` / `READSB_LON` parameter will be used. This is meant to be used in combination with `input_connect` for connecting to a remote Beast source and forward MLAT data to an MLAT server | -| `alt` | Optional | the altitude to be sent to the MLAT server in the form `alt=xx.xxxxx`. If omitted, the `ALT` / `READSB_ALT` parameter will be used. This is meant to be used in combination with `input_connect` for connecting to a remote Beast source and forward MLAT data to an MLAT server | -| `extra-arguments` | Optional | Any extra parameter you want to pass to the `mlat-client` program. Will be added verbatim to the command line | +| `alt` | Optional | the altitude to be sent to the MLAT server in the form `alt=xx.xxxxx`. If omitted, the `ALT` / `READSB_ALT` parameter will be used. This is meant to be used in combination with `input_connect` for connecting to a remote Beast source and forward MLAT data to an MLAT server | +| `extra-arguments` | Optional | Any extra parameter you want to pass to the `mlat-client` program. Will be added verbatim to the command line | Note - the optional parameters can be given in any order. @@ -425,14 +425,14 @@ Note - due to design limitations of `readsb`, the `tar1090` graphical interface Generally, there is little to configure, but there are a few parameters that you can set or change: -| Variable | Description | Default if omitted| -|----------|-------------|--------------------------------| -| `MLATHUB_SBS_OUT_PORT` | TCP port where the consolidated MLAT results will be available in SBS (BaseStation) format | `31003` | -| `MLATHUB_BEAST_IN_PORT` | TCP port you where you can send additional MLAT results to, in Beast format | `31004` | -| `MLATHUB_BEAST_OUT_PORT` | TCP port where consolidated MLAT results will be available in Beast format | `31005` | -| `MLATHUB_BEAST_REDUCE_OUT_PORT` | TCP port where consolidated MLAT results will be available in Beast format with reduced data rates | `31006` | -| `MLATHUB_NET_CONNECTOR` | List of semi-colon (`;`) separated IP or host, port, and protocols where MLATHUB will connect to ingest or send MLAT data. It follows the same syntax as described in the [`READSB_NET_CONNECTOR` syntax section](#alternate-configuration-method-with-readsb_net_connector) above | Unset | -| `MLATHUB_DISABLE` | If set to `true`, the MLATHUB will be disabled even if there are `mlat-client`s running in the container | Unset | +| Variable | Description | Default if omitted | +| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| `MLATHUB_SBS_OUT_PORT` | TCP port where the consolidated MLAT results will be available in SBS (BaseStation) format | `31003` | +| `MLATHUB_BEAST_IN_PORT` | TCP port you where you can send additional MLAT results to, in Beast format | `31004` | +| `MLATHUB_BEAST_OUT_PORT` | TCP port where consolidated MLAT results will be available in Beast format | `31005` | +| `MLATHUB_BEAST_REDUCE_OUT_PORT` | TCP port where consolidated MLAT results will be available in Beast format with reduced data rates | `31006` | +| `MLATHUB_NET_CONNECTOR` | List of semi-colon (`;`) separated IP or host, port, and protocols where MLATHUB will connect to ingest or send MLAT data. It follows the same syntax as described in the [`READSB_NET_CONNECTOR` syntax section](#alternate-configuration-method-with-readsb_net_connector) above | Unset | +| `MLATHUB_DISABLE` | If set to `true`, the MLATHUB will be disabled even if there are `mlat-client`s running in the container | Unset | ### Web Gui (`tar1090`) Configuration @@ -446,110 +446,110 @@ Note - due to design limitations of `readsb`, the `tar1090` graphical interface #### `tar1090` Core Configuration -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `READSB_JSON_INTERVAL` | Update data update interval for the webinterface in seconds | `1.0` | -| `UPDATE_TAR1090` | At startup update tar1090 and tar1090db to the latest versions | `true` | -| `INTERVAL` | Interval at which the track history is saved | `8` | -| `HISTORY_SIZE` | How many points in time are stored in the track history | `450` | -| `ENABLE_978` | Change to yes to enable UAT/978 display in `tar1090`. This will also enable UAT-specific graphs in graphs1090 | `no` | -| `URL_978` | The URL needs to point at where you would normally find the skyview978 webinterface, for example `http://192.168.0.29/skyaware978`. Note -- do not use `localhost` or `127.0.0.1 | | -| `GZIP_LVL` | `1`-`9` are valid, lower lvl: less CPU usage, higher level: less network bandwidth used when loading the page | `3` | -| `PTRACKS` | Shows the last `$PTRACKS` hours of traces you have seen at the `?pTracks` URL | `8` | -| `TAR1090_FLIGHTAWARELINKS` | Set to `true` to enable FlightAware links in the web interface | `null` | -| `TAR1090_ENABLE_AC_DB` | Set to `true` to enable extra information, such as aircraft type and registration, to be included in in `aircraft.json` output. Will use more memory; use caution on older Pis or similar devices. | `false` | -| `HEYWHATSTHAT_PANORAMA_ID` | Your `heywhatsthat.com` panorama ID. See | | -| `HEYWHATSTHAT_ALTS` | Comma separated altitudes for multiple outlines. Use no units or `ft` for feet, `m` for meters, or `km` for kilometers. Only integer numbers are accepted, no decimals please | `12192m` (=40000 ft) | -| `HTTP_ACCESS_LOG` | Optional. Set to `true` to display HTTP server access logs. | `false` | -| `HTTP_ERROR_LOG` | Optional. Set to `false` to hide HTTP server error logs. | `true` | +| Environment Variable | Purpose | Default | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | +| `READSB_JSON_INTERVAL` | Update data update interval for the webinterface in seconds | `1.0` | +| `UPDATE_TAR1090` | At startup update tar1090 and tar1090db to the latest versions | `true` | +| `INTERVAL` | Interval at which the track history is saved | `8` | +| `HISTORY_SIZE` | How many points in time are stored in the track history | `450` | +| `ENABLE_978` | Change to yes to enable UAT/978 display in `tar1090`. This will also enable UAT-specific graphs in graphs1090 | `no` | +| `URL_978` | The URL needs to point at where you would normally find the skyview978 webinterface, for example `http://192.168.0.29/skyaware978`. Note -- do not use `localhost` or `127.0.0.1 | | +| `GZIP_LVL` | `1`-`9` are valid, lower lvl: less CPU usage, higher level: less network bandwidth used when loading the page | `3` | +| `PTRACKS` | Shows the last `$PTRACKS` hours of traces you have seen at the `?pTracks` URL | `8` | +| `TAR1090_FLIGHTAWARELINKS` | Set to `true` to enable FlightAware links in the web interface | `null` | +| `TAR1090_ENABLE_AC_DB` | Set to `true` to enable extra information, such as aircraft type and registration, to be included in in `aircraft.json` output. Will use more memory; use caution on older Pis or similar devices. | `false` | +| `HEYWHATSTHAT_PANORAMA_ID` | Your `heywhatsthat.com` panorama ID. See | | +| `HEYWHATSTHAT_ALTS` | Comma separated altitudes for multiple outlines. Use no units or `ft` for feet, `m` for meters, or `km` for kilometers. Only integer numbers are accepted, no decimals please | `12192m` (=40000 ft) | +| `HTTP_ACCESS_LOG` | Optional. Set to `true` to display HTTP server access logs. | `false` | +| `HTTP_ERROR_LOG` | Optional. Set to `false` to hide HTTP server error logs. | `true` | - For documentation on the aircraft.json format see this page: - TAR1090_ENABLE_AC_DB causes readsb to load the tar1090 database as a csv file from this repository: #### `tar1090` `config.js` Configuration - Title -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `TAR1090_PAGETITLE` | Set the tar1090 web page title | `tar1090` | -| `TAR1090_PLANECOUNTINTITLE` | Show number of aircraft in the page title | `false` | -| `TAR1090_MESSAGERATEINTITLE` | Show number of messages per second in the page title | `false` | +| Environment Variable | Purpose | Default | +| ---------------------------- | ---------------------------------------------------- | --------- | +| `TAR1090_PAGETITLE` | Set the tar1090 web page title | `tar1090` | +| `TAR1090_PLANECOUNTINTITLE` | Show number of aircraft in the page title | `false` | +| `TAR1090_MESSAGERATEINTITLE` | Show number of messages per second in the page title | `false` | #### `tar1090` `config.js` Configuration - Output -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| +| Environment Variable | Purpose | Default | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | `TAR1090_DISPLAYUNITS` | The DisplayUnits setting controls whether nautical (ft, NM, knots), metric (m, km, km/h) or imperial (ft, mi, mph) units are used in the plane table and in the detailed plane info. Valid values are "`nautical`", "`metric`", or "`imperial`". | `nautical` | #### `tar1090` `config.js` Configuration - Map Settings -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `TAR1090_BINGMAPSAPIKEY` | Provide a Bing Maps API key to enable the Bing imagery layer. You can obtain a free key (with usage limits) at (you need a "basic key"). | `null` | -| `TAR1090_DEFAULTCENTERLAT` | Default center (latitude) of the map. This setting is overridden by any position information provided by dump1090/readsb. All positions are in decimal degrees. | `45.0` | -| `TAR1090_DEFAULTCENTERLON` | Default center (longitude) of the map. This setting is overridden by any position information provided by dump1090/readsb. All positions are in decimal degrees. | `9.0` | -| `TAR1090_DEFAULTZOOMLVL` | The google maps zoom level, `0` - `16`, lower is further out. | `7` | -| `TAR1090_SITESHOW` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Set to `true` to show a center marker. | `false` | -| `TAR1090_SITELAT` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Position of the marker (latitude). | `45.0` | -| `TAR1090_SITELON` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Position of the marker (longitude). | `9.0` | -| `TAR1090_SITENAME` | The tooltip of the center marker. | `My Radar Site` | -| `TAR1090_RANGE_OUTLINE_COLOR` | Colour for the range outline. | `#0000DD` | -| `TAR1090_RANGE_OUTLINE_WIDTH` | Width for the range outline. | `1.7` | -| `TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE` | Range outline is coloured by altitude. | `false` | -| `TAR1090_RANGE_OUTLINE_DASH` | Range outline dashing. Syntax `[L, S]` where `L` is the pixel length of the line, and `S` is the pixel length of the space. | Unset | -| `TAR1090_ACTUAL_RANGE_OUTLINE_COLOR` | Colour for the actual range outline | `#00596b` | -| `TAR1090_ACTUAL_RANGE_OUTLINE_WIDTH` | Width of the actual range outline | `1.7` | -| `TAR1090_ACTUAL_RANGE_OUTLINE_DASH` | Dashed style for the actual range outline. Unset for solid line. `[5,5]` for a dashed line with 5 pixel lines and spaces in between | Unset | -| `TAR1090_MAPTYPE_TAR1090` | Which map is displayed to new visitors. Valid values for this setting are `osm`, `esri`, `carto_light_all`, `carto_light_nolabels`, `carto_dark_all`, `carto_dark_nolabels`, `gibs`, `osm_adsbx`, `chartbundle_sec`, `chartbundle_tac`, `chartbundle_hel`, `chartbundle_enrl`, `chartbundle_enra`, `chartbundle_enrh`, and only with bing key `bing_aerial`, `bing_roads`. | `carto_light_all` | -| `TAR1090_MAPDIM` | Default map dim state, true or false. | `true` | -| `TAR1090_MAPDIMPERCENTAGE` | The percentage amount of dimming used if the map is dimmed, `0`-`1` | `0.45` | -| `TAR1090_MAPCONTRASTPERCENTAGE` | The percentage amount of contrast used if the map is dimmed, `0`-`1` | `0` | -| `TAR1090_DWDLAYERS` | Various map layers provided by the DWD geoserver can be added here. [Preview and available layers](https://maps.dwd.de/geoserver/web/wicket/bookmarkable/org.geoserver.web.demo.MapPreviewPage?1&filter=false). Multiple layers are also possible. Syntax: `dwd:layer1,dwd:layer2,dwd:layer3` | `dwd:RX-Produkt` | -| `TAR1090_LABELZOOM` | Displays aircraft labels only until this zoom level, `1`-`15` (values >`15` don't really make sense)| | -| `TAR1090_LABELZOOMGROUND` | Displays ground traffic labels only until this zoom level, `1`-`15` (values >`15` don't really make sense) | | +| Environment Variable | Purpose | Default | +| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| `TAR1090_BINGMAPSAPIKEY` | Provide a Bing Maps API key to enable the Bing imagery layer. You can obtain a free key (with usage limits) at (you need a "basic key"). | `null` | +| `TAR1090_DEFAULTCENTERLAT` | Default center (latitude) of the map. This setting is overridden by any position information provided by dump1090/readsb. All positions are in decimal degrees. | `45.0` | +| `TAR1090_DEFAULTCENTERLON` | Default center (longitude) of the map. This setting is overridden by any position information provided by dump1090/readsb. All positions are in decimal degrees. | `9.0` | +| `TAR1090_DEFAULTZOOMLVL` | The google maps zoom level, `0` - `16`, lower is further out. | `7` | +| `TAR1090_SITESHOW` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Set to `true` to show a center marker. | `false` | +| `TAR1090_SITELAT` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Position of the marker (latitude). | `45.0` | +| `TAR1090_SITELON` | Center marker. If dump1090 provides a receiver location, that location is used and these settings are ignored. Position of the marker (longitude). | `9.0` | +| `TAR1090_SITENAME` | The tooltip of the center marker. | `My Radar Site` | +| `TAR1090_RANGE_OUTLINE_COLOR` | Colour for the range outline. | `#0000DD` | +| `TAR1090_RANGE_OUTLINE_WIDTH` | Width for the range outline. | `1.7` | +| `TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE` | Range outline is coloured by altitude. | `false` | +| `TAR1090_RANGE_OUTLINE_DASH` | Range outline dashing. Syntax `[L, S]` where `L` is the pixel length of the line, and `S` is the pixel length of the space. | Unset | +| `TAR1090_ACTUAL_RANGE_OUTLINE_COLOR` | Colour for the actual range outline | `#00596b` | +| `TAR1090_ACTUAL_RANGE_OUTLINE_WIDTH` | Width of the actual range outline | `1.7` | +| `TAR1090_ACTUAL_RANGE_OUTLINE_DASH` | Dashed style for the actual range outline. Unset for solid line. `[5,5]` for a dashed line with 5 pixel lines and spaces in between | Unset | +| `TAR1090_MAPTYPE_TAR1090` | Which map is displayed to new visitors. Valid values for this setting are `osm`, `esri`, `carto_light_all`, `carto_light_nolabels`, `carto_dark_all`, `carto_dark_nolabels`, `gibs`, `osm_adsbx`, `chartbundle_sec`, `chartbundle_tac`, `chartbundle_hel`, `chartbundle_enrl`, `chartbundle_enra`, `chartbundle_enrh`, and only with bing key `bing_aerial`, `bing_roads`. | `carto_light_all` | +| `TAR1090_MAPDIM` | Default map dim state, true or false. | `true` | +| `TAR1090_MAPDIMPERCENTAGE` | The percentage amount of dimming used if the map is dimmed, `0`-`1` | `0.45` | +| `TAR1090_MAPCONTRASTPERCENTAGE` | The percentage amount of contrast used if the map is dimmed, `0`-`1` | `0` | +| `TAR1090_DWDLAYERS` | Various map layers provided by the DWD geoserver can be added here. [Preview and available layers](https://maps.dwd.de/geoserver/web/wicket/bookmarkable/org.geoserver.web.demo.MapPreviewPage?1&filter=false). Multiple layers are also possible. Syntax: `dwd:layer1,dwd:layer2,dwd:layer3` | `dwd:RX-Produkt` | +| `TAR1090_LABELZOOM` | Displays aircraft labels only until this zoom level, `1`-`15` (values >`15` don't really make sense) | | +| `TAR1090_LABELZOOMGROUND` | Displays ground traffic labels only until this zoom level, `1`-`15` (values >`15` don't really make sense) | | #### `tar1090` `config.js` Configuration - Range Rings -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `TAR1090_RANGERINGS` | `false` to hide range rings | `true` | -| `TAR1090_RANGERINGSDISTANCES` | Distances to display range rings, in miles, nautical miles, or km (depending settings value '`TAR1090_DISPLAYUNITS`'). Accepts a comma separated list of numbers (no spaces, no quotes). | `100,150,200,250` | -| `TAR1090_RANGERINGSCOLORS` | Colours for each of the range rings specified in `TAR1090_RANGERINGSDISTANCES`. Accepts a comma separated list of hex colour values, each enclosed in single quotes (eg `TAR1090_RANGERINGSCOLORS='#FFFFF','#00000'`). No spaces. | Unset | +| Environment Variable | Purpose | Default | +| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| `TAR1090_RANGERINGS` | `false` to hide range rings | `true` | +| `TAR1090_RANGERINGSDISTANCES` | Distances to display range rings, in miles, nautical miles, or km (depending settings value '`TAR1090_DISPLAYUNITS`'). Accepts a comma separated list of numbers (no spaces, no quotes). | `100,150,200,250` | +| `TAR1090_RANGERINGSCOLORS` | Colours for each of the range rings specified in `TAR1090_RANGERINGSDISTANCES`. Accepts a comma separated list of hex colour values, each enclosed in single quotes (eg `TAR1090_RANGERINGSCOLORS='#FFFFF','#00000'`). No spaces. | Unset | #### `tar1090` `config.js` Configuration - Route Display -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `TAR1090_USEROUTEAPI` | Set to `true` to enable route lookup for callsigns | Unset | -| `TAR1090_ROUTEAPIURL` | API URL used | `https://api.adsb.lol/api/0/routeset` | +| Environment Variable | Purpose | Default | +| --------------------- | -------------------------------------------------- | ------------------------------------- | +| `TAR1090_USEROUTEAPI` | Set to `true` to enable route lookup for callsigns | Unset | +| `TAR1090_ROUTEAPIURL` | API URL used | `https://api.adsb.lol/api/0/routeset` | ### `graphs1090` Configuration #### `graphs1090` Environment Parameters -| Variable | Description | Default | -|----------|-------------|---------| -| `GRAPHS1090_DARKMODE` | If set to `true`, `graphs1090` will be rendered in "dark mode". | Unset | -| `GRAPHS1090_RRD_STEP` | Interval in seconds to feed data into RRD files. | `60` | -| `GRAPHS1090_SIZE` | Set graph size, possible values: `small`, `default`, `large`, `huge`, `custom`. | `default` | -| `GRAPHS1090_ALL_LARGE` | Make the small graphs as large as the big ones by setting to `yes`. | `no` | -| `GRAPHS1090_FONT_SIZE` | Font size (relative to graph size). | `10.0` | -| `GRAPHS1090_MAX_MESSAGES_LINE` | Set to `true` to draw a reference line at the maximum message rate. | Unset | -| `GRAPHS1090_LARGE_WIDTH` | Defines the width of the larger graphs. | `1096` | -| `GRAPHS1090_LARGE_HEIGHT` | Defines the height of the larger graphs. | `235` | -| `GRAPHS1090_SMALL_WIDTH` | Defines the width of the smaller graphs. | `619` | -| `GRAPHS1090_SMALL_HEIGHT` | Defines the height of the smaller graphs. | `324` | -| `GRAPHS1090_DISK_DEVICE` | Defines which disk device (`mmc0`, `sda`, `sdc`, etc) is shown. Leave empty for default device | Unset | -| `GRAPHS1090_ETHERNET_DEVICE` | Defines which (wired) ethernet device (`eth0`, `enp0s`, etc) is shown. Leave empty for default device | Unset | -| `GRAPHS1090_WIFI_DEVICE` | Defines which (wireless) WiFi device (`wlan0`, `wlp3s0`, etc) is shown. Leave empty for default device | Unset | -| `GRAPHS1090_DISABLE` | Set to `true` to disable the entire GRAPHS1090 web page and associated data collection | Unset | -| `GRAPHS1090_DISABLE_CHART_CPU` | Set to `true` to disable the GRAPHS1090 CPU chart | Unset | -| `GRAPHS1090_DISABLE_CHART_TEMP` | Set to `true` to disable the GRAPHS1090 Temperature chart | Unset | -| `GRAPHS1090_DISABLE_CHART_MEMORY` | Set to `true` to disable the GRAPHS1090 Memory Utilization chart | Unset | -| `GRAPHS1090_DISABLE_CHART_NETWORK_BANDWIDTH` | Set to `true` to disable the GRAPHS1090 Network Bandwidth chart | Unset | -| `GRAPHS1090_DISABLE_CHART_DISK_USAGE` | Set to `true` to disable the GRAPHS1090 Disk Usage chart | Unset | -| `GRAPHS1090_DISABLE_CHART_DISK_IOPS` | Set to `true` to disable the GRAPHS1090 Disk IOPS chart | Unset | -| `GRAPHS1090_DISABLE_CHART_DISK_BANDWIDTH` | Set to `true` to disable the GRAPHS1090 Disk Bandwidth chart | Unset | -| `ENABLE_AIRSPY` | Optional, set to any non-empty value if you want to enable the special AirSpy graphs. See below for additional configuration requirements | Unset | +| Variable | Description | Default | +| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | --------- | +| `GRAPHS1090_DARKMODE` | If set to `true`, `graphs1090` will be rendered in "dark mode". | Unset | +| `GRAPHS1090_RRD_STEP` | Interval in seconds to feed data into RRD files. | `60` | +| `GRAPHS1090_SIZE` | Set graph size, possible values: `small`, `default`, `large`, `huge`, `custom`. | `default` | +| `GRAPHS1090_ALL_LARGE` | Make the small graphs as large as the big ones by setting to `yes`. | `no` | +| `GRAPHS1090_FONT_SIZE` | Font size (relative to graph size). | `10.0` | +| `GRAPHS1090_MAX_MESSAGES_LINE` | Set to `true` to draw a reference line at the maximum message rate. | Unset | +| `GRAPHS1090_LARGE_WIDTH` | Defines the width of the larger graphs. | `1096` | +| `GRAPHS1090_LARGE_HEIGHT` | Defines the height of the larger graphs. | `235` | +| `GRAPHS1090_SMALL_WIDTH` | Defines the width of the smaller graphs. | `619` | +| `GRAPHS1090_SMALL_HEIGHT` | Defines the height of the smaller graphs. | `324` | +| `GRAPHS1090_DISK_DEVICE` | Defines which disk device (`mmc0`, `sda`, `sdc`, etc) is shown. Leave empty for default device | Unset | +| `GRAPHS1090_ETHERNET_DEVICE` | Defines which (wired) ethernet device (`eth0`, `enp0s`, etc) is shown. Leave empty for default device | Unset | +| `GRAPHS1090_WIFI_DEVICE` | Defines which (wireless) WiFi device (`wlan0`, `wlp3s0`, etc) is shown. Leave empty for default device | Unset | +| `GRAPHS1090_DISABLE` | Set to `true` to disable the entire GRAPHS1090 web page and associated data collection | Unset | +| `GRAPHS1090_DISABLE_CHART_CPU` | Set to `true` to disable the GRAPHS1090 CPU chart | Unset | +| `GRAPHS1090_DISABLE_CHART_TEMP` | Set to `true` to disable the GRAPHS1090 Temperature chart | Unset | +| `GRAPHS1090_DISABLE_CHART_MEMORY` | Set to `true` to disable the GRAPHS1090 Memory Utilization chart | Unset | +| `GRAPHS1090_DISABLE_CHART_NETWORK_BANDWIDTH` | Set to `true` to disable the GRAPHS1090 Network Bandwidth chart | Unset | +| `GRAPHS1090_DISABLE_CHART_DISK_USAGE` | Set to `true` to disable the GRAPHS1090 Disk Usage chart | Unset | +| `GRAPHS1090_DISABLE_CHART_DISK_IOPS` | Set to `true` to disable the GRAPHS1090 Disk IOPS chart | Unset | +| `GRAPHS1090_DISABLE_CHART_DISK_BANDWIDTH` | Set to `true` to disable the GRAPHS1090 Disk Bandwidth chart | Unset | +| `ENABLE_AIRSPY` | Optional, set to any non-empty value if you want to enable the special AirSpy graphs. See below for additional configuration requirements | Unset | #### Enabling UAT data @@ -558,7 +558,7 @@ ADS-B over UAT data is transmitted in the 978 MHz band, and this is used in the 1. Set the following environment parameters: ```yaml - - URL_978=http://dump978/skyaware978 +- URL_978=http://dump978/skyaware978 ``` 2. Install the [`docker-dump978` container](https://github.com/sdr-enthusiasts/docker-dump978). Note - only containers downloaded/deployed on/after Feb 8, 2023 will work. @@ -572,7 +572,7 @@ Users of AirSpy devices can enable extra `graphs1090` graphs by configuring the - Set the following environment parameter: ```yaml - - ENABLE_AIRSPY=yes +- ENABLE_AIRSPY=yes ``` - To provide the container access to the AirSpy statistics, map a volume in your `docker-compose.yml` file as follows: @@ -634,7 +634,7 @@ Note - on some systems (DietPi comes to mind), `/sys/class/thermal/` may not be #### Reducing Disk IO for Graphs1090 -Note - *this feature is still somewhat experimental. If you are really attached to your statistics/graphs1090 data, please make sure to back up your mapped drives regularly* +Note - _this feature is still somewhat experimental. If you are really attached to your statistics/graphs1090 data, please make sure to back up your mapped drives regularly_ If you are using a Raspberry Pi or another type of computer with an SD card, you may already be aware that these SD cards have a limited number of write-cycles that will determine their lifespan. In other words - a common reason for SD card failure is excessive writes to it. @@ -647,28 +647,27 @@ Note -- there is a chance that the data isn't written back in time (due to power The feature assumes that you have mapped `/var/lib/collectd` to a volume (to ensure data is persistent across container recreations), and `/run` as a `tmpfs` RAM disk, as shown below and also as per the [`docker-compose.yml` example](docker-compose.yml): ```yaml - volumes: - - /opt/adsb/ultrafeeder/globe_history:/var/globe_history -... - tmpfs: - - /run:exec,size=256M -... +volumes: + - /opt/adsb/ultrafeeder/globe_history:/var/globe_history +--- +tmpfs: + - /run:exec,size=256M ``` -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `GRAPHS1090_REDUCE_IO=` | Optional Set to `true` to reduce the write cycles for `graphs1090`| Unset | -| `GRAPHS1090_REDUCE_IO_FLUSH_IVAL` | Interval (in secs) over which the `graphs1090` data is written back to non-volatile storage | `3600` | +| Environment Variable | Purpose | Default | +| --------------------------------- | ------------------------------------------------------------------------------------------- | ------- | +| `GRAPHS1090_REDUCE_IO=` | Optional Set to `true` to reduce the write cycles for `graphs1090` | Unset | +| `GRAPHS1090_REDUCE_IO_FLUSH_IVAL` | Interval (in secs) over which the `graphs1090` data is written back to non-volatile storage | `3600` | ### `timelapse1090` Configuration Legacy: **We recommend AGAINST enabling this feature** as it has been replaced with . `timelapse1090` writes a lot of data to disk, which could shorten the lifespan of your Raspiberry Pi SD card. The replacement functionality is better and doesn't cause any additional disk writes. -| Environment Variable | Purpose | Default | -|----------------------|---------|---------| -| `ENABLE_TIMELAPSE1090` | Optional / Legacy. Set to `true` to enable timelapse1090. Once enabled, can be accessed via | Unset | -| `TIMELAPSE1090_INTERVAL` | Snapshot interval in seconds | `10` | -| `TIMELAPSE1090_HISTORY` | Time saved in hours | `24` | +| Environment Variable | Purpose | Default | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ------- | +| `ENABLE_TIMELAPSE1090` | Optional / Legacy. Set to `true` to enable timelapse1090. Once enabled, can be accessed via | Unset | +| `TIMELAPSE1090_INTERVAL` | Snapshot interval in seconds | `10` | +| `TIMELAPSE1090_HISTORY` | Time saved in hours | `24` | ## Web Pages @@ -686,14 +685,14 @@ You should now be able to browse to: No paths need to be mapped through to persistent storage. However, if you don't want to lose your range outline and aircraft tracks/history and heatmap / replay data on container restart, you can optionally map these paths: -| Path | Purpose | -|------|---------| -| `/opt/adsb/ultrafeeder/globe_history:/var/globe_history` | Holds range outline data, heatmap / replay data and traces if enabled. -*Note: this data won't be automatically deleted, you will need to delete it eventually if you map this path.* | -| `/opt/adsb/ultrafeeder/timelapse1090:/var/timelapse1090` | Holds timelapse1090 data if enabled. (We recommend against enabling this feature, see above) | -| `/opt/adsb/ultrafeeder/collectd:/var/lib/collectd` | Holds graphs1090 & performance data | -| `/proc/diskstats:/proc/diskstats:ro` | Makes disk statistics available to `graphs1090` | -| `/sys/class/thermal/thermal_zone8:/sys/class/thermal/thermal_zone0:ro` | Only needed on some systems to display the CPU temperature in `graphs1090`, see [here](#configuring-the-core-temperature-graphs) | +| Path | Purpose | +| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `/opt/adsb/ultrafeeder/globe_history:/var/globe_history` | Holds range outline data, heatmap / replay data and traces if enabled. | +| _Note: this data won't be automatically deleted, you will need to delete it eventually if you map this path._ | +| `/opt/adsb/ultrafeeder/timelapse1090:/var/timelapse1090` | Holds timelapse1090 data if enabled. (We recommend against enabling this feature, see above) | +| `/opt/adsb/ultrafeeder/collectd:/var/lib/collectd` | Holds graphs1090 & performance data | +| `/proc/diskstats:/proc/diskstats:ro` | Makes disk statistics available to `graphs1090` | +| `/sys/class/thermal/thermal_zone8:/sys/class/thermal/thermal_zone0:ro` | Only needed on some systems to display the CPU temperature in `graphs1090`, see [here](#configuring-the-core-temperature-graphs) | ## Display of Metrix with Grafana and Prometheus/InfluxDB @@ -718,20 +717,20 @@ Please see the [separate instruction document](README-grafana.md) for step by st In order for Telegraf to serve a [Prometheus](https://prometheus.io) endpoint, the following environment variables can be used: -| Variable | Description | -| ---- | ---- | +| Variable | Description | +| ------------------- | ------------------------------------------------------------------------ | | `PROMETHEUS_ENABLE` | Set to `true` for a Prometheus endpoint on `http://0.0.0.0:9273/metrics` | ### Output from Ultrafeeder to InfluxDBv2 In order for Telegraf to output metrics to an [InfluxDBv2](https://docs.influxdata.com/influxdb/) time-series database, the following environment variables can be used: -| Variable | Description | -| ---- | ---- | -| `INFLUXDBV2_URL` | The URL of the InfluxDB instance | -| `INFLUXDBV2_TOKEN` | The token for authentication | -| `INFLUXDBV2_BUCKET` | Destination bucket to write into | -| `INFLUXDBV2_ORG` | InfluxDB Organization to write into | +| Variable | Description | +| ------------------- | ----------------------------------- | +| `INFLUXDBV2_URL` | The URL of the InfluxDB instance | +| `INFLUXDBV2_TOKEN` | The token for authentication | +| `INFLUXDBV2_BUCKET` | Destination bucket to write into | +| `INFLUXDBV2_ORG` | InfluxDB Organization to write into | ## Message decoding introspection @@ -750,7 +749,7 @@ docker exec -it ultrafeeder /usr/local/bin/viewadsb --cpr-focus 3D3ED0 ## Minimalist setup -If you want to use `ultrafeeder` *only* as a SDR decoder but without any mapping or stats/graph websites, without MLAT connections or MLAT-hub, etc., for example to minimize CPU and RAM needs on a low CPU/memory single board computer, then do the following: +If you want to use `ultrafeeder` _only_ as a SDR decoder but without any mapping or stats/graph websites, without MLAT connections or MLAT-hub, etc., for example to minimize CPU and RAM needs on a low CPU/memory single board computer, then do the following: - in the `ULTRAFEEDER_CONFIG` parameter, remove any entry that starts with `mlat` or `mlathub`. This will prevent any `mlat-client`s or `mlathub` instances to be launched. If you still want to connect the `mlat-client`(s) to external MLAT servers but you don't want to run the overhead of a MLATHUB, you can leave any entries starting with `mlat` in the `ULTRAFEEDER_CONFIG` parameter, and set `MLATHUB_DISABLE=true` - Set the parameter `TAR1090_DISABLE=true`. This will prevent the `nginx` webserver and any websites to be launched and no `collectd` (graphs1090) or `rrd` (ADSB message history) data to be collected or retained. @@ -769,7 +768,7 @@ We also have a [Discord channel](https://discord.gg/sTf9uYF), feel free to [join ## Acknowledgements - The [SDR-Enthusiasts team](https://github.com/sdr-enthusiasts) ([Mike Nye](https://github.com/mikenye), [Fred Clausen](https://github.com/fredclausen)) for all the foot and leg work done to create the base images on which the container is built -- [Wiedehopf](https://github.com/wiedehopf) for modifying, creating, maintaining, and adding features to many of the components of this container including [readsb](https://github.com/wiedehopf/readsb), [tar1090](https://github.com/wiedehopf/tar1090), [graphs1090](https://github.com/wiedehopf/graphs1090), [autogain](https://github.com/wiedehopf/adsb-scripts/wiki/Automatic-gain-optimization-for-readsb-and-dump1090-fa), and many more components, and for helping debug the container whenever the need arised +- [Wiedehopf](https://github.com/wiedehopf) for modifying, creating, maintaining, and adding features to many of the components of this container including [readsb](https://github.com/wiedehopf/readsb), [tar1090](https://github.com/wiedehopf/tar1090), [graphs1090](https://github.com/wiedehopf/graphs1090), [autogain](https://github.com/wiedehopf/adsb-scripts/wiki/Automatic-gain-optimization-for-readsb-and-dump1090-fa), and many more components, and for helping debug the container whenever the need arose - [John Norrbin](https://github.com/Johnex) for his ideas, testing, feature requests, more testing, nagging, pushing, prodding, and overall efforts to make this a high quality container and for the USB "hotplug" configuration - The community at the [SDR-Enthusiasts Discord Server](https://discord.gg/sTf9uYF) for helping out, testing, asking questions, and generally driving to make this a better product - Of course the Open Source community at large, including [Salvatore Sanfilippo](https://github.com/antirez) and [Oliver Jowett](https://github.com/mutability) who wrote the excellent base code for `dump1090` from which much of this package is derived diff --git a/buildnow.sh b/buildnow.sh index a2adc16..976b2ce 100755 --- a/buildnow.sh +++ b/buildnow.sh @@ -7,10 +7,10 @@ [[ "$ARCHS" == "" ]] && ARCHS="linux/armhf,linux/arm64,linux/amd64" BASETARGET1=ghcr.io/sdr-enthusiasts -BASETARGET2=kx1t +#BASETARGET2=kx1t IMAGE1="$BASETARGET1/$(pwd | sed -n 's|.*/\(docker-.*\)|\1|p'):$TAG" -IMAGE2="$BASETARGET2/$(pwd | sed -n 's|.*/docker-\(.*\)|\1|p'):$TAG" +#IMAGE2="$BASETARGET2/$(pwd | sed -n 's|.*/docker-\(.*\)|\1|p'):$TAG" echo "press enter to start building $IMAGE1 from $BRANCH" diff --git a/docker-compose.yml b/docker-compose.yml index 076273d..53b5f30 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,10 +9,10 @@ services: hostname: ultrafeeder restart: unless-stopped device_cgroup_rules: - - 'c 189:* rwm' + - "c 189:* rwm" ports: - - 8080:80 # to expose the web interface - - 9273-9274:9273-9274 # to expose the statistics interface to Prometheus + - 8080:80 # to expose the web interface + - 9273-9274:9273-9274 # to expose the statistics interface to Prometheus environment: # -------------------------------------------------- # general parameters: @@ -39,28 +39,28 @@ services: # - remove "adsb,dump978,30978,uat_in;" if you don't have dump978 and a UAT dongle connected to your station # - !!! make sure that each line ends with a semicolon ";", with the exception of the last line which shouldn't have a ";" !!! - ULTRAFEEDER_CONFIG= - adsb,dump978,30978,uat_in; - adsb,feed.adsb.fi,30004,beast_reduce_plus_out; - adsb,in.adsb.lol,30004,beast_reduce_plus_out; - adsb,feed.airplanes.live,30004,beast_reduce_plus_out; - adsb,feed.planespotters.net,30004,beast_reduce_plus_out; - adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out; - adsb,data.avdelphi.com,24999,beast_reduce_plus_out; - adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out; - adsb,feed.radarplane.com,30001,beast_reduce_plus_out; - adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out; - mlat,feed.adsb.fi,31090,39000; - mlat,in.adsb.lol,31090,39001; - mlat,feed.airplanes.live,31090,39002; - mlat,mlat.planespotters.net,31090,39003; - mlat,feed.theairtraffic.com,31090,39004; - mlat,skyfeed.hpradar.com,31090,39005; - mlat,feed.radarplane.com,31090,39006; - mlat,dati.flyitalyadsb.com,30100,39007; - mlathub,piaware,30104,beast_in; - mlathub,rbfeeder,30105,beast_in; - mlathub,radarvirtuel,30105,beast_in - # If you really want to feed ADSBExchange, you can do so by adding this above: + adsb,dump978,30978,uat_in; + adsb,feed.adsb.fi,30004,beast_reduce_plus_out; + adsb,in.adsb.lol,30004,beast_reduce_plus_out; + adsb,feed.airplanes.live,30004,beast_reduce_plus_out; + adsb,feed.planespotters.net,30004,beast_reduce_plus_out; + adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out; + adsb,data.avdelphi.com,24999,beast_reduce_plus_out; + adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out; + adsb,feed.radarplane.com,30001,beast_reduce_plus_out; + adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out; + mlat,feed.adsb.fi,31090,39000; + mlat,in.adsb.lol,31090,39001; + mlat,feed.airplanes.live,31090,39002; + mlat,mlat.planespotters.net,31090,39003; + mlat,feed.theairtraffic.com,31090,39004; + mlat,skyfeed.hpradar.com,31090,39005; + mlat,feed.radarplane.com,31090,39006; + mlat,dati.flyitalyadsb.com,30100,39007; + mlathub,piaware,30104,beast_in; + mlathub,rbfeeder,30105,beast_in; + mlathub,radarvirtuel,30105,beast_in + # If you really want to feed ADSBExchange, you can do so by adding this above: # adsb,feed1.adsbexchange.com,30004,beast_reduce_plus_out,uuid=${ADSBX_UUID}; # mlat,feed.adsbexchange.com,31090,39008,uuid=${ADSBX_UUID} # @@ -93,7 +93,7 @@ services: - GRAPHS1090_DARKMODE=true # - ENABLE_978=yes # - URL_978=http://dump978/skyaware978 - # + # # -------------------------------------------------- # Prometheus and InfluxDB connection parameters: # (See above for the correct image tag you must use to enable this) diff --git a/rootfs/etc/s6-overlay/s6-rc.d/02-remove-prometheus-data/type b/rootfs/etc/s6-overlay/s6-rc.d/02-remove-prometheus-data/type index 3d92b15..bdd22a1 100644 --- a/rootfs/etc/s6-overlay/s6-rc.d/02-remove-prometheus-data/type +++ b/rootfs/etc/s6-overlay/s6-rc.d/02-remove-prometheus-data/type @@ -1 +1 @@ -oneshot \ No newline at end of file +oneshot diff --git a/rootfs/etc/s6-overlay/s6-rc.d/03-remove-mlathub-up/type b/rootfs/etc/s6-overlay/s6-rc.d/03-remove-mlathub-up/type index 3d92b15..bdd22a1 100644 --- a/rootfs/etc/s6-overlay/s6-rc.d/03-remove-mlathub-up/type +++ b/rootfs/etc/s6-overlay/s6-rc.d/03-remove-mlathub-up/type @@ -1 +1 @@ -oneshot \ No newline at end of file +oneshot diff --git a/rootfs/etc/s6-overlay/scripts/02-remove-prometheus-data-init b/rootfs/etc/s6-overlay/scripts/02-remove-prometheus-data-init index a676abf..7798ea9 100755 --- a/rootfs/etc/s6-overlay/scripts/02-remove-prometheus-data-init +++ b/rootfs/etc/s6-overlay/scripts/02-remove-prometheus-data-init @@ -4,4 +4,4 @@ # dummy file to allow for graceful shutdown # I don't know if we need this, but it won't hurt anything -exit 0 \ No newline at end of file +exit 0 diff --git a/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-down b/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-down index cb32365..ae874ed 100755 --- a/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-down +++ b/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-down @@ -22,4 +22,4 @@ source /scripts/common rm -f /run/mlathub_up -exit 0 \ No newline at end of file +exit 0 diff --git a/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-init b/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-init index 0f44202..e66b2d2 100755 --- a/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-init +++ b/rootfs/etc/s6-overlay/scripts/03-remove-mlathub-up-init @@ -18,4 +18,4 @@ # If not, see . #--------------------------------------------------------------------------------------------- -exit 0 \ No newline at end of file +exit 0 diff --git a/rootfs/etc/s6-overlay/scripts/60-mlathub-prep b/rootfs/etc/s6-overlay/scripts/60-mlathub-prep index bf7c9af..64a27ad 100755 --- a/rootfs/etc/s6-overlay/scripts/60-mlathub-prep +++ b/rootfs/etc/s6-overlay/scripts/60-mlathub-prep @@ -22,4 +22,4 @@ source /scripts/common rm -f /run/mlathub_up -exit 0 \ No newline at end of file +exit 0 diff --git a/rootfs/etc/s6-overlay/scripts/mlat-client b/rootfs/etc/s6-overlay/scripts/mlat-client index 9d31cc5..416f84d 100755 --- a/rootfs/etc/s6-overlay/scripts/mlat-client +++ b/rootfs/etc/s6-overlay/scripts/mlat-client @@ -100,7 +100,7 @@ do then "${s6wrap[@]}" --args echo "ERROR -- MLAT_CONFIG is malformed: \"${instance}\". Stopping MLAT execution." # shellcheck disable=SC2046 - kill $(ps -s $$ -o pid=) + kill $(ps -s $$ -o pid=) exec sleep infinity fi @@ -151,9 +151,9 @@ do # add input-connect to the param array: MLAT_PARAM+=(--input-connect "${input_connect_arg:-localhost:30005}") - if [ -n "${MLAT_USER}" ]; then + if [ -n "${MLAT_USER}" ]; then MLAT_PARAM+=(--user "${MLAT_USER}") - else + else rnd="${RANDOM}" "${s6wrap[@]}" --args echo "WARNING: MLAT_USER is not set - using random number \"${rnd}\" as MLAT_USER" MLAT_PARAM+=(--user "${rnd}") diff --git a/rootfs/etc/s6-overlay/scripts/readsb b/rootfs/etc/s6-overlay/scripts/readsb index 3da5d51..db55fb5 100755 --- a/rootfs/etc/s6-overlay/scripts/readsb +++ b/rootfs/etc/s6-overlay/scripts/readsb @@ -328,4 +328,3 @@ elif [[ "${LOGLEVEL,,}" == "error" ]]; then elif [[ "${LOGLEVEL,,}" == "none" ]]; then exec "${s6wrap[@]}" --quiet --ignore-stdout --ignore-stderr --args "${READSB_BIN}" "${READSB_CMD[@]}" $READSB_EXTRA_ARGS fi - diff --git a/rootfs/scripts/interpret_ultrafeeder_config b/rootfs/scripts/interpret_ultrafeeder_config index e52c09f..ea0dd36 100755 --- a/rootfs/scripts/interpret_ultrafeeder_config +++ b/rootfs/scripts/interpret_ultrafeeder_config @@ -1,3 +1,5 @@ +#!/usr/bin/with-contenv bash + # shellcheck shell=bash disable=SC2015 # # This scripts should be sourced by the /etc/services.d/xxx/run modules for @@ -30,7 +32,7 @@ # ULTRAFEEDER_CONFIG=mlathub,host,port,protocol[,uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX][,extra-arguments] # # The ULTRAFEEDER_CONFIG parameter can have multiple config strings, separated by a `;` -# Please note that the config strings cannot containe `;` or `,` -- undefined things may happen if these characters are present. +# Please note that the config strings cannot contain `;` or `,` -- undefined things may happen if these characters are present. # # In the above configuration strings: # `host` is an IP address. Specify an IP/hostname/containername for incoming or outgoing connections.