==== 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 ... {{ :panorama.jpg?nolink&800 |}} Using a generic RTL-SDR (NooElec NESDR Nano 2+) ... {{ :2016-10-21_piaware.jpg?nolink&800 |}} Using FlightAware Pro Stick Plus USB ADS-B Receiver with 20dB integrated amplifier & 1090MHz filter ... {{ :2016-11-02_piaware.jpg?nolink&800 |}} {{ :2017-01-29_piaware.jpg?nolink&800 |}} [[http://gedean.net:8080|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 gpds gpsd > 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 FlightAware FlightAware > 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 gpspipe gpspipe > 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 gpsd2nmea gpsd2nmea > 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