Comment on page
If you wish to feed PlaneFinder, follow the steps below.
The docker image
pfclientfeeder software and all of its required prerequisites and libraries. This needs to run in conjunction with
ultrafeeder(or another Beast provider).
You'll need your share code from your existing feeder.
You will need to make sure your existing receiver is shutdown prior to continuing.
If you're already running
pfclientand you've followed the steps in the previous command, you can skip this section.
You'll need a share code. In order to obtain a PlaneFinder Share Code, we will start a temporary container running
pfclient, which will run through a configuration wizard and generate a share code.
Run the command:
docker run \
--name pfclient_temp \
--entrypoint pfclient \
-p 30053:30053 \
Once the container has started, you should see a message such as:
2020-04-11 06:45:25.823307 [-] We were unable to locate a configuration file and have entered configuration mode by default. Please visit: http://172.22.7.12:30053 to complete configuration.
At this point, open a web browser and go to
http://docker.host.ip.addr:30053You won't be able to use the URL given in the log output, as the IP address in the log output will show the private, internal IP of the docker container.
In your browser, follow the steps in the configuration wizard. When finished, you'll be given a PlaneFinder Share Code. Save this in safe place.
You can now kill the temporary container by pressing
You should now claim your receiver:
Inside your application directory (
/opt/adsb), edit the
.envfile using your favourite text editor. Beginners may find the editor
nanoeasy to use:
This file holds all of the commonly used variables (such as our latitude, longitude and altitude). We're going to add our
pfclientshare code to this file. Add the following line to the file:
YOURSHARECODEwith the share code that was generated in the previous step.
docker-compose.ymlfile that was created when deploying
Append the following lines to the end of the file (inside the
To explain what's going on in this addition:
- We're creating a container called
pfclient, from the image
- We're passing several environment variables to the container:
BEASTHOST=ultrafeederto inform the feeder to get its ADSB data from the container
TZwill use the
FEEDER_TZvariable from your
LATwill use the
FEEDER_LATvariable from your
LONGwill use the
FEEDER_LONGvariable from your
SHARECODEwill use the
PLANEFINDER_SHARECODEvariable from your
- We're using
tmpfsfor volumes that have regular I/O. Any files stored in a
tmpfsmount are temporarily stored outside the container's writable layer. This helps to reduce:
- The size of the container, by not writing changes to the underlying container; and
- SD Card or SSD wear
Once the file has been updated, issue the command
docker compose up -din the application directory to apply the changes and bring up the
pfclientcontainer. You should see the following output:
ultrafeeder is up-to-date
piaware is up-to-date
fr24 is up-to-date
We can view the logs for the environment with the command
docker compose logs, or continually "tail" them with
docker compose logs -f. At this stage, the logs will be fairly unexciting and look like this:
pfclient | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
pfclient | [s6-init] ensuring user provided files have correct perms...exited 0.
pfclient | [fix-attrs.d] applying ownership & permissions fixes...
pfclient | [fix-attrs.d] done.
pfclient | [cont-init.d] executing container initialization scripts...
pfclient | [cont-init.d] 01-pfclient: executing...
pfclient | [cont-init.d] 01-pfclient: exited 0.
pfclient | [cont-init.d] done.
pfclient | [services.d] starting services
pfclient | [services.d] done.
pfclient | 2020-04-11 09:14:33.361261 [-] pfclient (4.1.1 i386) started with the following options:
pfclient | 2020-04-11 09:14:33.361432 [-] connection_type = 1
pfclient | 2020-04-11 09:14:33.361437 [-] tcp_address = ultrafeeder
pfclient | 2020-04-11 09:14:33.361440 [-] tcp_port = 30005
pfclient | 2020-04-11 09:14:33.361442 [-] data_format = 1
pfclient | 2020-04-11 09:14:33.361445 [-] aircraft_timeout = 30
pfclient | 2020-04-11 09:14:33.361448 [-] select_timeout = 10
pfclient | 2020-04-11 09:14:33.361450 [-] web_server_port = 30053
pfclient | 2020-04-11 09:14:33.361454 [-] user_latitude = -33.33333
pfclient | 2020-04-11 09:14:33.361458 [-] user_longitude = 111.11111
pfclient | 2020-04-11 09:14:33.361539 [V] Performing NTP sync (1.planefinder.pool.ntp.org)...
pfclient | 2020-04-11 09:14:33.361679 [-] Web server is now listening on: http://126.96.36.199:30053
pfclient | 2020-04-11 09:14:33.361698 [-] Echo port is now listening on: 188.8.131.52:30054
pfclient | 2020-04-11 09:14:33.362179 [-] TCP connection established: ultrafeeder:30005
pfclient | 2020-04-11 09:14:33.723215 [V] NTP sync succeeded with settings:
pfclient | 2020-04-11 09:14:33.723269 [V] Stratum: 3
pfclient | 2020-04-11 09:14:33.723287 [V] System clock time: 1586596473.7232
pfclient | 2020-04-11 09:14:33.723299 [V] Corrected clock time: 1586596473.7181
pfclient | 2020-04-11 09:14:33.723310 [V] NTP offset: -0.0052s
pfclient | 2020-04-11 09:15:38.239652 [-] User location has been verified.
pfclient | 2020-04-11 09:16:23.809962 [-] Successfully sent 46 aircraft updates across 10 packets (8.00KB)
pfclient | 2020-04-11 09:18:14.117198 [-] Successfully sent 57 aircraft updates across 10 packets (9.00KB)
pfclient | 2020-04-11 09:20:04.389081 [-] Successfully sent 53 aircraft updates across 10 packets (8.00KB)
Once running, you can visit
http://docker.host.ip.addr:30053to access the
pfclientweb interface. You can also visit the PlaneFinder website, and go to "Account" > "Manage Receivers" and click your receiver to see your live data and statistics.