==== 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