piaware
Table of Contents
PiAware ADS-B Feeder
- Raspberry Pi Model B v2 mounted in an aluminum alloy enclosure
- FlightAware Pro Stick Plus USB ADS-B Receiver with 20dB integrated amplifier & 1090MHz filter
- FlightAware 5dB 1090Mhz vertically polarized antenna ADS-B Antenna - 66cm with N connector
- IEEE802.3af PoE 48V to 5V (2.4A) Micro USB adapter
- Holux GR-213 GPS receiver
Maximum range based upon terrain …
Using a generic RTL-SDR (NooElec NESDR Nano 2+) …
Using FlightAware Pro Stick Plus USB ADS-B Receiver with 20dB integrated amplifier & 1090MHz filter …
Live data from the Raspberry Pi...
Setup
- Burn the latest Piaware image to an SD card & boot up the Pi
- Login using “Pi” with password “flightaware”
- Open the terminal
> sudo raspi-config Expand filesystem Set the boot option to console with auto login Set Wi-Fi country "US United States" Enable SSH Disable serial port console
Patches
> sudo apt-get update > sudo apt-get upgrade
Change default pi password ("flightaware") & set the root password
> passwd > sudo passwd root > sudo nano /etc/ssh/sshd_config change "PermitRootLogin without-password" to "PermitRootLogin yes"
firewalld
> sudo apt-get install firewalld
Create firewall service for gpsd
> sudo nano /etc/firewalld/services/gpsd.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>gpds</short> <description>gpsd</description> <port protocol="tcp" port="2947"/> </service> > sudo chmod 640 /etc/firewalld/services/gpsd.xml > sudo firewall-cmd --permanent --add-service=gpsd
Create firewall service for FlightAware
> sudo nano /etc/firewalld/services/flightaware.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>FlightAware</short> <description>FlightAware</description> <port protocol="tcp" port="8080"/> <port protocol="tcp" port="30001"/> <port protocol="tcp" port="30104"/> </service> > sudo chmod 640 /etc/firewalld/services/flightaware.xml > sudo firewall-cmd --permanent --add-service=flightaware
STOP HERE & MAKE A COPY OF THE SD CARD
gpsd
> sudo apt-get install gpsd gpsd-clients python-gps > sudo nano /lib/systemd/system/gpsd.socket change "ListenStream=127.0.0.1:2947" to "ListenStream=0.0.0.0:2947" > sudo nano /etc/default/gpsd START_DAEMON="true" USBAUTO="false" DEVICES="/dev/ttyUSB0" GPSD_OPTIONS="-n" GPSD_SOCET="/var/run/gpsd.sock" > sudo /etc/init.d/gpsd restart > cgps -s
ntpd
> sudo apt-get install ntp > sudo nano /etc/ntp.conf # GPS NMEA data reference server 127.127.28.0 minpoll 4 fudge 127.127.28.0 time1 0.183 refid NMEA > sudo service ntp restart > sudo firewall-cmd --permanent --add-service=ntp > ntpq -p
gpspipe
(This only supports one client, so don't use this. Use gpsd2nmea)
> sudo nano gpsd_nmea.sh #!/bin/bash # Read gpsd output, convert to NMEA and create TCP socket on port 12101 gpspipe -r | nc -l 12101 > sudo chmod +x gpsd_nmea.sh > sudo nano /etc/systemd/system/gpsd_nmea.service [Unit] Description=gpsd_nmea After=gpsd.service [Install] WantedBy=multi-user.target [Service] User=pi Type=simple ExecStart=/home/pi/gpsd_nmea.sh > sudo systemctl enable /etc/systemd/system/gpsd_nmea.service > sudo systemctl start gpsd_nmea > sudo systemctl status gpsd_nmea
Create firewall service for gpspipe
> sudo nano /etc/firewalld/services/gpspipe.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>gpspipe</short> <description>gpspipe</description> <port protocol="tcp" port="12101"/> </service> > sudo chmod 640 /etc/firewalld/services/gpspipe.xml > sudo firewall-cmd --permanent --add-service=gpspipe
gpsd2nmea
> sudo nano gpsd2nmea.sh #!/usr/bin/python # 2017 Ilker Temir # import argparse import os import socket import sys import threading clients = set() addresses = {} clients_lock = threading.Lock() def listener(client, address): if cli_options.verbose: print "New connection %s." % str(address) addresses[client.fileno()] = address with clients_lock: clients.add(client) try: while True: pass finally: with clients_lock: clients.remove(client) client.close() def read_ais_messages(gpsd): while True: try: ais_message = gpsd.recv(2048) except (IOError, socket.error): print 'Error reading from gpsd' sys.exit(1) if cli_options.verbose: log = ais_message.strip() print 'Received NMEA sentence: %s' % log clients_to_remove = set() clients_lock.acquire() for client in clients: try: client.sendall(ais_message) except (IOError, socket.error): clients_to_remove.add(client) for client in clients_to_remove: if cli_options.verbose: print "Connection dropped %s." % str(addresses[client.fileno()]) clients.remove(client) clients_lock.release() parser = argparse.ArgumentParser() parser.add_argument('--gpsd-server', dest='gpsd_server', default='127.0.0.1', help='gpsd server address (default: 127.0.0.1)') parser.add_argument('--gpsd-port', dest='gpsd_port', type=int, default=2947, help='gpsd port number (default: 2947)') parser.add_argument('--port', dest='port', type=int, default=2948, help='Listen on TCP port number (default: 2948)') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Enable debug messages') cli_options = parser.parse_args() try: gpsd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) gpsd.connect((cli_options.gpsd_server, cli_options.gpsd_port)) gpsd.send('?WATCH= {"enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}') except (IOError, socket.error): print 'Error opening connection to %s:%s' % (cli_options.gpsd_server, cli_options.gpsd_port) sys.exit(1) s = socket.socket() s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(('0.0.0.0',cli_options.port)) s.listen(3) ais_thread = threading.Thread(target=read_ais_messages, args=(gpsd,)) ais_thread.start() th = [] while True: client, address = s.accept() th.append(threading.Thread(target=listener, args = (client,address)).start()) s.close()
> sudo chmod +x gpsd2nmea.sh > sudo nano /etc/systemd/system/gpsd2nmea.service [Unit] Description=gpsd2nmea After=gpsd.service [Install] WantedBy=multi-user.target [Service] User=USERNAME Type=simple ExecStart=/home/USERNAME/gpsd2nmea.sh > sudo systemctl enable /etc/systemd/system/gpsd2nmea.service > sudo systemctl start gpsd2nmea > sudo systemctl status gpsd2nmea
Create firewall service for gpsd2nmea
> sudo nano /etc/firewalld/services/gpsd2nmea.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>gpsd2nmea</short> <description>gpsd2nmea</description> <port protocol="tcp" port="2948"/> </service> > sudo chmod 640 /etc/firewalld/services/gpsd2nmea.xml > sudo firewall-cmd --permanent --add-service=gpsd2nmea
Config
sudo nano /boot/piaware-config.txt
wired-network yes wired-type static wired-address 192.168.10.110 wired-netmask 255.255.255.0 wired-broadcast 192.168.10.255 wired-gateway 192.168.10.1
piaware.txt · Last modified: 2023/09/28 20:02 by w5ged