Afficher/cacher Sommaire
ADS-B
Utiliser des solutions de streaming open-source (KSQL, Apache Kafka, un Raspberry Pi et un récepteur radio logiciel) pour cartographier le trafic aérien
Les aéronefs déterminent leur position à l’aide du GPS et transmettent périodiquement cette position ainsi que la chaîne d’identité, l’altitude, la vitesse, etc. sous forme de signaux ADS-B.
Raspbian-Lite/Raspberry Pi 3
Installer raspian-lite stretch sur raspberry…, chercher l’expression “raspbian lite stretch” dans le champ recherche du site
Matériel
- Dongle USB 2.0 DVB (Digital Video Broadcasting) modèle DVB-T+DAB+FM
- Elle peut aussi être utilisée comme récepteur-scanner large bande, pour recevoir de 24Mhz à 1766Mhz (sans trou) en mode RTL-SDR.
- Utilisation en SDR (software define radio) : Ce modèle est équipé du chipset RTL2832U et du tuner R820T
- Connecteur antenne sur la clé USB : MCX Femelle
Introduction
Un dongle USB DVB-T peut être utilisé pour recevoir les signaux ADS-B, qui peuvent être décodés avec le logiciel approprié (Installing RTL SDR Software).
Installer les outils de construction du logiciel et la librairie requise.
sudo apt-get install -y git cmake pkg-config libusb-1.0-0-dev
Installation de rtl-sdr
Le pack logiciel contient la bibliothèque chargée de communiquer avec le dongle DVB-T (Digital Video Braodcasting-Terrestrial) et un certain nombre d’outils pour l’utiliser comme SDR (Software Defined Radio).
cd ~
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
sudo make install
sudo cp ../rtl-sdr.rules /etc/udev/rules.d/
sudo ldconfig
Comme nous ne voulons pas regarder la télévision le pilote DVB-T par défaut doit être supprimé dans la liste noire. Créez le fichier suivant:
sudo nano /etc/modprobe.d/rtlsdr.conf
Ajoutez lui les lignes suivantes :
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
Arrêter le raspberry
sudo poweroff
Connecter le dongle DVB-T et redémarrer le raspberry
Connexion ssh
Vérification : aucun module chargé
lsmod | grep dvb_usb_rtl28xxu
Installer et exécuter Dump1090
Ce logiciel est utilisé pour recevoir et décoder le signa ADS-B.
Il permet également de représenter les données que vous aurez collectées sur une page web.
cd ~
# pour utiliser openstreetmap et un server externe (lighttpd ou nginx)
git clone https://github.com/mutability/dump1090
cd dump1090
make
Création du bash avec les données au format json
nano /home/pi/start_flight_radar.sh
#!/bin/sh
cd /home/pi/dump1090/
if [ -d "/run/dump1090" ]
then
echo "/run/dump1090 exists."
else
sudo mkdir -p /run/dump1090-mutability
sudo chown pi. -R /run/dump1090-mutability/ #droits pour utilisateur pi
fi
# Exécution
./dump1090 --net --ppm 0 --oversample --fix --phase-enhance --lat 47.27076 --lon -1.02527 --max-range 300 --net-http-port 0 --net-ri-port 30001 --net-ro-port 30002 --net-bi-port 30004 --net-bo-port 30005 --net-sbs-port 30003 --net-heartbeat 60 --net-ro-size 500 --net-ro-interval 1 --net-buffer 2 --net-bind-address 127.0.0.1 --stats-every 3600 --write-json /run/dump1090-mutability --write-json-every 1 --json-location-accuracy 2 --quiet&
Rendre exécutable
chmod +x /home/pi/start_flight_radar.sh
Test
cd ~
./start_flight_radar.sh
Mon Aug 27 15:01:17 2018 UTC dump1090-mutability v1.15-dev-333-gfb5942d starting up.
Using sample converter: UC8, integer/table path
Found 1 device(s):
0: Generic, RTL2832U, SN: 77771111153705700 (currently selected)
Found Rafael Micro R820T tuner
Max available gain is: 49.60 dB
Setting gain to: 49.60 dB
Gain reported by device: 49.60 dB
Allocating 15 zero-copy buffers
Appuyer sur entrée pour récupérer le curseur
Vérifier la capture des données sur le port 3003 (arrêt par Ctrl C)
curl 127.0.0.1:30003 # localhost est résolu en ipv6 (::1)
MSG,8,1,1,440735,1,2018/06/07,15:58:44.078,2018/06/07,15:58:44.129,,,,,,,,,,,,0
MSG,6,1,1,3B77EB,1,2018/06/07,15:58:44.085,2018/06/07,15:58:44.130,,,,,,,,1745,0,0,0,
MSG,8,1,1,440735,1,2018/06/07,15:58:44.089,2018/06/07,15:58:44.131,,,,,,,,,,,,0
MSG,4,1,1,440735,1,2018/06/07,15:58:44.190,2018/06/07,15:58:44.239,,,440,343,,,64,,,,,0
MSG,8,1,1,3C09F3,1,2018/06/07,15:58:44.282,2018/06/07,15:58:44.298,,,,,,,,,,,,0
MSG,8,1,1,3C09F3,1,2018/06/07,15:58:44.298,2018/06/07,15:58:44.348,,,,,,,,,,,,0
MSG,8,1,1,3C09F3,1,2018/06/07,15:58:44.314,2018/06/07,15:58:44.350,,,,,,,,,,,,0
MSG,7,1,1,3C09F3,1,2018/06/07,15:58:44.338,2018/06/07,15:58:44.353,,38000,,,,,,,,,,
MSG,8,1,1,3C09F3,1,2018/06/07,15:58:44.347,2018/06/07,15:58:44.402,,,,,,,,,,,,0
Arrêt du batch
sudo pkill dump1090 #Appuyer 2 fois sur entrée pour récupérer le curseur
service web externe lighttpd
Installer lighttpd
sudo apt install lighttpd
Créer le dossier /usr/share/dump1090-mutability/html/
sudo mkdir -p /usr/share/dump1090-mutability/html/
Copier les fichiers et dossiers nécessaires au fonctionnement
sudo cp -r ~/dump1090/public_html/* /usr/share/dump1090-mutability/html/
Créer le fichier de configuration du serveur lighttpd
sudo nano /etc/lighttpd/conf-available/89-dump1090.conf
# Allows access to the static files that provide the dump1090 map view,
# and also to the dynamically-generated json parts that contain aircraft
# data and are periodically written by the dump1090 daemon.
url.redirect += (
"^/dump1090/$" => "/dump1090/gmap.html",
"^/dump1090$" => "/dump1090/gmap.html"
)
alias.url += (
"/dump1090/data/" => "/run/dump1090-mutability/",
"/dump1090/" => "/usr/share/dump1090-mutability/html/"
)
# The stat cache must be disabled, as receiver.json changes
# rapidly and lighttpd's stat cache often ends up with the
# wrong content length.
server.stat-cache-engine = "disable"
Activer le fichier de configuration /etc/lighttpd/conf-available/89-dump1090.conf
sudo lighty-enable-mod dump1090 # pour l'activation ou exécuter la ligne qui suit
# sudo ln -s /etc/lighttpd/conf-available/89-dump1090.conf /etc/lighttpd/conf-enabled/
Personnaliser Dump1090
Personnaliser l’apparence de la couche des données dans /usr/share/dump1090-mutability/html/config.js.(remplacer le fichier existant)
sudo nano /usr/share/dump1090-mutability/html/config.js
// --------------------------------------------------------
//
// This file is to configure the configurable settings.
// Load this file before script.js file at gmap.html.
//
// --------------------------------------------------------
// -- Title Settings --------------------------------------
// Show number of aircraft and/or messages per second in the page title
PlaneCountInTitle = true;
MessageRateInTitle = false;
// -- Output Settings -------------------------------------
// Show metric values
// The Metric setting controls whether metric (m, km, km/h) or
// imperial (ft, NM, knots) units are used in the plane table
// and in the detailed plane info. If ShowOtherUnits is true,
// then the other unit will also be shown in the detailed plane
// info.
Metric = true;
ShowOtherUnits = true;
// -- Map settings ----------------------------------------
// These settings are overridden by any position information
// provided by dump1090 itself. All positions are in decimal
// degrees.
// Default center of the map.
DefaultCenterLat = 47.27076; //latitude antenne
DefaultCenterLon = -1.02527; //longitude antenne
// The google maps zoom level, 0 - 16, lower is further out
DefaultZoomLvl = 8;
// Center marker. If dump1090 provides a receiver location,
// that location is used and these settings are ignored.
SiteShow = false; // true to show a center marker
SiteLat = 47.27076; // position of the marker
SiteLon = -1.02527;
SiteName = "Radar Site"; // tooltip of the marker
// -- Marker settings -------------------------------------
// These settings control the coloring of aircraft by altitude.
// All color values are given as Hue (0-359) / Saturation (0-100) / Lightness (0-100)
ColorByAlt = {
// HSL for planes with unknown altitude:
unknown : { h: 0, s: 0, l: 40 },
// HSL for planes that are on the ground:
ground : { h: 120, s: 100, l: 30 },
air : {
// These define altitude-to-hue mappings
// at particular altitudes; the hue
// for intermediate altitudes that lie
// between the provided altitudes is linearly
// interpolated.
//
// Mappings must be provided in increasing
// order of altitude.
//
// Altitudes below the first entry use the
// hue of the first entry; altitudes above
// the last entry use the hue of the last
// entry.
h: [ { alt: 2000, val: 20 }, // orange
{ alt: 10000, val: 140 }, // light green
{ alt: 40000, val: 300 } ], // magenta
s: 85,
l: 50,
},
// Changes added to the color of the currently selected plane
selected : { h: 0, s: -10, l: +20 },
// Changes added to the color of planes that have stale position info
stale : { h: 0, s: -10, l: +30 },
// Changes added to the color of planes that have positions from mlat
mlat : { h: 0, s: -10, l: -10 }
};
// For a monochrome display try this:
// ColorByAlt = {
// unknown : { h: 0, s: 0, l: 40 },
// ground : { h: 0, s: 0, l: 30 },
// air : { h: [ { alt: 0, val: 0 } ], s: 0, l: 50 },
// selected : { h: 0, s: 0, l: +30 },
// stale : { h: 0, s: 0, l: +30 },
// mlat : { h: 0, s: 0, l: -10 }
// };
// Outline color for aircraft icons with an ADS-B position
OutlineADSBColor = '#000000';
// Outline color for aircraft icons with a mlat position
OutlineMlatColor = '#4040FF';
SiteCircles = true; // true to show circles (only shown if the center marker is shown)
// In nautical miles or km (depending settings value 'Metric')
SiteCirclesDistances = new Array(50,100,150,200);
// Show the clocks at the top of the righthand pane? You can disable the clocks if you want here
ShowClocks = true;
// Controls page title, righthand pane when nothing is selected
PageName = "DUMP1090";
// Show country flags by ICAO addresses?
ShowFlags = true;
// Path to country flags (can be a relative or absolute URL; include a trailing /)
FlagPath = "flags-tiny/";
// Set to true to enable the ChartBundle base layers (US coverage only)
ChartBundleLayers = true;
// Provide a Bing Maps API key here to enable the Bing imagery layer.
// You can obtain a free key (with usage limits) at
// https://www.bingmapsportal.com/ (you need a "basic key")
//
// Be sure to quote your key:
// BingMapsAPIKey = "your key here";
//
BingMapsAPIKey = null;
// Provide a Mapzen API key here to enable the Mapzen vector tile layer.
// You can obtain a free key at https://mapzen.com/developers/
// (you need a "vector tiles" key)
//
// Be sure to quote your key:
// MapzenAPIKey = "your key here";
//
MapzenAPIKey = null;
Le fichier gmap.html
sudo nano /usr/share/dump1090-mutability/html/gmap.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" href="jquery/jquery-ui-1.11.4-smoothness.css" />
<script src="jquery/jquery-3.0.0.min.js"></script>
<script src="jquery/jquery-ui-1.11.4.min.js"></script>
<link rel="stylesheet" href="ol3/ol-3.17.1.css" type="text/css" />
<script src="ol3/ol-3.17.1.js" type="text/javascript"></script>
<link rel="stylesheet" href="ol3/ol3-layerswitcher.css" type="text/css"/>
<script src="ol3/ol3-layerswitcher.js" type="text/javascript"></script>
<script type="text/javascript" src="config.js"></script>
<script type="text/javascript" src="markers.js"></script>
<script type="text/javascript" src="dbloader.js"></script>
<script type="text/javascript" src="registrations.js"></script>
<script type="text/javascript" src="planeObject.js"></script>
<script type="text/javascript" src="formatter.js"></script>
<script type="text/javascript" src="flags.js"></script>
<script type="text/javascript" src="layers.js"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="coolclock/excanvas.js"></script>
<script type="text/javascript" src="coolclock/coolclock.js"></script>
<script type="text/javascript" src="coolclock/moreskins.js"></script>
<title>Radar Virtuel</title>
</head>
<body onload="initialize()">
<div id="loader" class="hidden">
<img src="spinny.gif" id="spinny" alt="Loading...">
<progress id="loader_progress"></progress>
</div>
<!--
This is hideous. airframes.org insists on getting a POST with a "submit" value specified,
but if we have an input control with that name then it shadows the submit() function that
we need. So steal the submit function off a different form. Surely there is a better way?!
-->
<form id="horrible_hack" class="hidden">
</form>
<form id="airframes_post" method="POST" action="http://www.airframes.org/" target="_blank" class="hidden">
<input type="hidden" name="reg1" value="">
<input type="hidden" name="selcal" value="">
<input id="airframes_post_icao" type="hidden" name="ica024" value="">
<input type="hidden" name="submit" value="submit">
</form>
<div id="map_container">
<div id="map_canvas"></div>
</div>
<div id="sidebar_container">
<div id="sidebar_canvas">
<div id="timestamps">
<table style="width: 100%">
<tr>
<td style="text-align: center"> <canvas id="utcclock"></canvas> </td>
<td style="text-align: center"> <canvas id="receiverclock"></canvas> </td>
</tr>
<tr>
<td style="text-align: center">Heure UTC</td>
<td style="text-align: center">Dernières mises à jour</td>
</tr>
</table>
</div> <!-- timestamps -->
<div id="sudo_buttons">
<table style="width: 100%">
<tr>
<td style="width: 150px; text-align: center;" class="pointer">
[ <span onclick="resetMap();">Reset Carte</span> ]
</td>
</tr>
</table>
</div> <!-- sudo_buttons -->
<div id="dump1090_infoblock">
<table style="width: 100%">
<tr class="infoblock_heading">
<td>
<b id="infoblock_name">Radar Virtuel</b>
</td>
<td style="text-align: right">
<a href="https://github.com/mutability/dump1090" id="dump1090_version" target="_blank"></a>
</td>
</tr>
<tr class="infoblock_body">
<td> </td>
<td> </td>
</tr>
<tr class="infoblock_body dim">
<td>(Aucun aéronef sélectionné)</td>
<td> </td>
</tr>
<tr class="infoblock_body">
<td> </td>
<td> </td>
</tr>
<tr class="infoblock_body">
<td>Aéronef (Nb total): <span id="dump1090_total_ac">n/a</span></td>
<td>Messages: <span id="dump1090_message_rate">n/a</span>/sec</td>
</tr>
<tr class="infoblock_body">
<td>(Réception correcte): <span id="dump1090_total_ac_positions">n/a</span></td>
<td>Historique: <span id="dump1090_total_history">n/a</span> positions</td>
</tr>
</table>
</div> <!-- dump1090_infoblock -->
<div id="selected_infoblock" class="hidden">
<table style="width: 100%">
<tr class="infoblock_heading">
<td colspan="2">
<b>
<span id="selected_callsign" onclick="toggleFollowSelected();" class="pointer">n/a</span>
</b>
<span id="selected_follow" onclick="toggleFollowSelected();" class="pointer">⇒</span>
<span id="selected_flag">
<img style="width: 20px; height=12px" src="about:blank" alt="Flag">
</span>
<a href="http://www.airframes.org/" onclick="document.getElementById('horrible_hack').submit.call(document.getElementById('airframes_post')); return false;">
<span id="selected_icao"></span>
</a>
<span id="selected_registration"></span>
<span id="selected_icaotype"></span>
<span id="selected_emergency"></span>
<a id="selected_flightaware_link" href="" target="_blank">[FlightAware]</a>
<span id="selected_links">
<a id="selected_fr24_link" href="" target="_blank">[FR24]</a>
<!--
<a id="selected_flightstats_link" href="" target="_blank">[FlightStats]</a>
<a id="selected_planefinder_link" href="" target="_blank">[PlaneFinder]</a>
-->
</span>
</td>
</tr>
<tr id="infoblock_country" class="infoblock_body">
<td colspan="2">Enregistrement (pays): <span id="selected_country">n/a</span></td>
</tr>
<tr class="infoblock_body">
<td style="width: 55%">Altitude: <span id="selected_altitude"></span></td>
<td style="width: 45%">Squawk: <span id="selected_squawk"></span></td>
</tr>
<tr class="infoblock_body">
<td>Vitesse: <span id="selected_speed">n/a</span></td>
<td>RSSI: <span id="selected_rssi">n/a</span></td>
</tr>
<tr class="infoblock_body">
<td>Direction: <span id="selected_track">n/a</span></td>
<td>Dernière vue: <span id="selected_seen">n/a</span></td>
</tr>
<tr class="infoblock_body">
<td colspan="2">Position: <span id="selected_position">n/a</span></td>
</tr>
<tr class="infoblock_body">
<td colspan="2">Distance antenne: <span id="selected_sitedist">n/a</span></td>
</tr>
</table>
</div> <!-- selected_infoblock -->
<div id="planes_table">
<table id="tableinfo" style="width: 100%">
<thead style="background-color: #BBBBBB; cursor: pointer;">
<tr>
<td id="icao" onclick="sortByICAO();">ICAO</td>
<td id="flag" onclick="sortByCountry()"><!-- column for flag image --></td>
<td id="flight" onclick="sortByFlight();">Indicatif</td>
<td id="squawk" onclick="sortBySquawk();" style="text-align: right">Squawk</td>
<td id="altitude" onclick="sortByAltitude();" style="text-align: right">Altitude</td>
<td id="speed" onclick="sortBySpeed();" style="text-align: right">Vitesse</td>
<td id="distance" onclick="sortByDistance();" style="text-align: right">Distance</td>
<td id="track" onclick="sortByTrack();" style="text-align: right">Direction</td>
<td id="msgs" onclick="sortByMsgs();" style="text-align: right">Msgs</td>
<td id="seen" onclick="sortBySeen();" style="text-align: right">Age</td>
</tr>
</thead>
<tbody>
<tr id="plane_row_template" class="plane_table_row hidden">
<td>ICAO</td>
<td><img style="width: 20px; height=12px" src="about:blank" alt="Flag"></td>
<td>FLIGHT</td>
<td style="text-align: right">SQUAWK</td>
<td style="text-align: right">ALTITUDE</td>
<td style="text-align: right">SPEED</td>
<td style="text-align: right">DISTANCE</td>
<td style="text-align: right">TRACK</td>
<td style="text-align: right">MSGS</td>
<td style="text-align: right">SEEN</td>
</tr>
</tbody>
</table>
</div> <!-- planes_table -->
</div> <!-- sidebar_canvas -->
</div> <!-- sidebar_container -->
<div id="SpecialSquawkWarning" class="hidden">
<b>Squawk 7x00 is reported and shown.</b><br>
This is most likely an error in receiving or decoding.<br>
Please do not call the local authorities, they already know about it if it is a valid squawk.
</div>
<div id="update_error" class="hidden">
<b>Problem fetching data from dump1090.</b><br>
<span id="update_error_detail"></span><br>
The displayed map data will be out of date.
</div>
<div id="container_splitter"></div>
</body>
</html>
Tester le serveur
cd ~
./start_flight_radar.sh #Appuyer sur entrée pour récupérer le curseur
sudo service lighttpd reload
[ ok ] Reloading web server configuration: lighttpd.
Maintenant ouvrez une page web à l’adresse de votre Raspberry Pi http://192.168.0.36/dump1090 (remplacer 192.168.0.36 par l’adresse IP de votre raspberry)
Vous devriez voir une carte avec les données de tous les avions à portée.
Partager vos données avec FlightRadar24
Pour partager vos données avec FlightRadar24, vous devez fournir un flux compatible TCP30003
Installer le logiciel :
cd ~
mkdir fr24
cd fr24/
wget https://dl.dropboxusercontent.com/u/66906/fr24feed_arm-rpi_242.tgz
tar zxvf fr24feed_arm-rpi_242.tgz
Inscrivez vous pour obtenir une clé :
./fr24feed_arm-rpi_242 --signup
Remplissez le questionnaire. Vous aurez besoin des coordonnées décimales de votre récepteur. Une fois que vous aurez obtenu la clé, vous pouvez partager vos données
Test de la transmission des données (remplacer
./fr24feed_arm-rpi_242 --fr24key=<key> --bs-ip=127.0.0.1 --bs-port=30003
Modifier le fichier start_flight_radar.sh pour y ajouter le partage
nano /home/pi/start_flight_radar.sh
#!/bin/sh
# Dump1090
cd /home/pi/dump1090/
if [ -d "/run/dump1090" ]
then
echo "/run/dump1090 exists."
else
sudo mkdir -p /run/dump1090-mutability
sudo chown pi. -R /run/dump1090-mutability/ #droits pour utilisateur pi
fi
#
./dump1090 --net --ppm 0 --oversample --fix --phase-enhance --lat 47.27076 --lon -1.02527 --max-range 300 --net-http-port 0 --net-ri-port 30001 --net-ro-port 30002 --net-bi-port 30004 --net-bo-port 30005 --net-sbs-port 30003 --net-heartbeat 60 --net-ro-size 500 --net-ro-interval 1 --net-buffer 2 --net-bind-address 127.0.0.1 --stats-every 3600 --write-json /run/dump1090-mutability --write-json-every 1 --json-location-accuracy 2 --quiet&
# Partage
cd /home/pi/fr24/
sudo pkill -f fr24feed
./fr24feed_arm-rpi_242 --fr24key=<key> --bs-ip=127.0.0.1 --bs-port=30003
Remplacer <key> par votre clé
Lancement au démarrage
Création du service flightradar
sudo nano /etc/init.d/flightradar
#!/bin/bash
# /etc/init.d/flightradar
### BEGIN INIT INFO
# Provides: flightradar
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Flight Radar
# Description: Flight Radar (ADS-B Receiver)
### END INIT INFO
case "$1" in
start)
echo "Starting flightradar"
/home/pi/start_flight_radar.sh &
;;
stop)
echo "Stopping flightradar"
killall dump1090
;;
*)
echo "Usage: /etc/init.d/flightradar start|stop"
exit 1
;;
esac
exit 0
Rendre le script exécutable et configurer update-rc.d
sudo chmod +x /etc/init.d/flightradar
sudo update-rc.d flightradar defaults
Avant de lancer le service , on arrête les éventuels tests en cours
sudo pkill -f dump1090 #flightradar
sudo pkill -f fr24feed #partage
Démarrer le service
sudo service flightradar start
Relancer le serveur
sudo service lighttpd restart
Pour arrêter et désactiver le service
sudo systemctl stop flightradar
sudo systemctl disable flightradar
Conclusion
le sujet vous intéresse, rejoignez le forum de framboise314 : Un tutoriel de Mmega vous y attend, ainsi qu’une intéressante discussion sur l’ADS-B…
Personnalisation de l’affichage de Dump1090
Il est possible de personnaliser votre affichage comme indiqué plus haut.
Fichier /home/pi/dump1090/public_html/config.js est modifié comme suit :
// --------------------------------------------------------
//
// Ce fichier permet de modifier l'affichage sous Dump1090.
// Chargez ce fichier avant script.js dans gmap.html.
//
// --------------------------------------------------------
// -- Valeurs de sortie -------------------------------------
// Affichage métrique : true pour afficher en km
Metric = true; // true ou false
// -- Configuration de la carte -----------------------------
// Latitude et Longitude en format décimal
// Indique le centre de la carte qui sera affichée
CONST_CENTERLAT = 47.27076;
CONST_CENTERLON = -1.02527;
// Niveau de zoom google map de 0 à 16, 0 est le plus éloigné
CONST_ZOOMLVL = 5;
// -- Paramètres des marqueurs -------------------------------
// Couleur par défaut des marqueurs
MarkerColor = "rgb(127, 127, 127)";
SelectedColor = "rgb(225, 225, 225)";
StaleColor = "rgb(190, 190, 190)";
// -- Configuration du site de réception ---------------------
// true affiche une cible aux coordonnées indiquées
// les coordonnées de l'antenne
SiteShow = true; // true ou false
// Latitude et Longitude en format décimal
SiteLat = 47.27076;
SiteLon = -1.02527;
// -- Dessin des cercles donnant la distance des avions ------
// Les cercles ne sont affichés que si SiteShow est sur true
SiteCircles = true; // true ou false
// In miles nautiques ou en km (selon la valeur de 'Metric')
// Afficher des cercles à 50km, 100km, 150km et 200km
SiteCirclesDistances = new Array(50,100,150,200);
L’affichage sur la console du Raspberry Pi
Dump1090 possède de nombreuses options accessibles par la commande
./dump1090 --help
-----------------------------------------------------------------------------
| dump1090 ModeS Receiver Ver : 1.10.3010.14 |
-----------------------------------------------------------------------------
--device-index <index> Select RTL device (default: 0)
--gain <db> Set gain (default: max gain. Use -10 for auto-gain)
--enable-agc Enable the Automatic Gain Control (default: off)
--freq <hz> Set frequency (default: 1090 Mhz)
--ifile <filename> Read data from file (use '-' for stdin)
--interactive Interactive mode refreshing data on screen
--interactive-rows <num> Max number of rows in interactive mode (default: 15)
--interactive-ttl <sec> Remove from list if idle for <sec> (default: 60)
--interactive-rtl1090 Display flight table in RTL1090 format
--raw Show only messages hex values
--net Enable networking
--modeac Enable decoding of SSR Modes 3/A & 3/C
--net-beast TCP raw output in Beast binary format
--net-only Enable just networking, no RTL device or file used
--net-bind-address <ip> IP address to bind to (default: Any; Use 127.0.0.1 for private)
--net-http-port <port> HTTP server port (default: 8080)
--net-ri-port <port> TCP raw input listen port (default: 30001)
--net-ro-port <port> TCP raw output listen port (default: 30002)
--net-sbs-port <port> TCP BaseStation output listen port (default: 30003)
--net-bi-port <port> TCP Beast input listen port (default: 30004)
--net-bo-port <port> TCP Beast output listen port (default: 30005)
--net-ro-size <size> TCP raw output minimum size (default: 0)
--net-ro-rate <rate> TCP raw output memory flush rate (default: 0)
--net-heartbeat <rate> TCP heartbeat rate in seconds (default: 60 sec; 0 to disable)
--net-buffer <n> TCP buffer size 64Kb * (2^n) (default: n=0, 64Kb)
--lat <latitude> Reference/receiver latitude for surface posn (opt)
--lon <longitude> Reference/receiver longitude for surface posn (opt)
--fix Enable single-bits error correction using CRC
--no-fix Disable single-bits error correction using CRC
--no-crc-check Disable messages with broken CRC (discouraged)
--phase-enhance Enable phase enhancement
--aggressive More CPU for more messages (two bits fixes, ...)
--mlat display raw messages in Beast ascii mode
--stats With --ifile print stats at exit. No other output
--stats-every <seconds> Show and reset stats every <seconds> seconds
--onlyaddr Show only ICAO addresses (testing purposes)
--metric Use metric units (meters, km/h, ...)
--snip <level> Strip IQ file removing samples < level
--debug <flags> Debug mode (verbose), see README for details
--quiet Disable output to stdout. Use for daemon applications
--ppm <error> Set receiver error in parts per million (default 0)
--help Show this help
Debug mode flags: d = Log frames decoded with errors
D = Log frames decoded with zero errors
c = Log frames with bad CRC
C = Log frames with good CRC
p = Log frames with bad preamble
n = Log network debugging info
j = Log frames to frames.js, loadable by debug.html
Si vous souhaitez afficher un tableau plus lisible que le défilé rapide des messages envoyé par dump1090 vers la console du Raspberry Pi, ajoutez –interactive à la ligne de commande, vous pourrez lire un tableau identique à celui qui apparait sur la page web
Antennes
Antenne colinéaire coaxiale
Traduction partielle de l’article original “Coaxial Collinear Antenna for ADS-B Receiver” de Dusan Balara
Les composants.
- câble coaxial de 75 ohms utilisé pour la TV satellite ou câble coaxial de 50 ohms.
- connecteur de type F ou SMA
- ruban isolant
- un tuyau en PVC avec un diamètre extérieur de 12 mm et un joint d’étanchéité approprié pour ce tuyau.
Les outils nécessaires sont l’étrier, le couteau tranchant, les ciseaux, la colle pour le PVC et l’ohmmètre.
L’élément de base de l’antenne colinéaire coaxiale est le câble coaxial dont la longueur est calculée à partir de la longueur d’onde du signal ADS-B.
La longueur d’onde du signal est
lambda = c/f
où c est la vitesse du signal électromagnétique,dans le vide, ( c = 300 000 millions de mètres par seconde), f est la fréquence du signal ADS-B ( f = 1090 MHz),
la longueur d’onde lambda est de 275 mm.
La longueur L de l’élément de base est la demi-longueur d’onde réduite par le facteur de vitesse du câble coaxial (la vitesse des ondes électromagnétiques dans le câble coaxial est inférieure). J’ai utilisé le câble 75 Ohm RG-6U/32FD avec le facteur de vitesse 0.85 et 50 Ohm câble Tri-Lan 240 avec le facteur de vitesse 0.83 et j’ai utilisé la même longueur d’élément pour les deux câbles, soit :
L=0.5*275mm*0.85=116 mm.
Les éléments de base sont reliés à la chaîne dans laquelle les conducteurs extérieurs et les conducteurs intérieurs sont contrebalancés entre deux éléments adjacents
De tels éléments assemblés sont encore la ligne coaxiale. Cette ligne est connectée au récepteur avec l’impédance d’entrée symétrique 50 Ohm. Mes expériences ont indiqué qu’il est bénéfique de connecter les conducteurs extérieurs et intérieurs sur l’extrémité opposée avec les 75 Ohm ou 50 Ohm pour préserver le VSWR près de 1.
Antenne colinéaire compacte
Approche A
Ce colinéaire se compose simplement d’un fil de cuivre de 2.5mm² avec quelques boucles situées à des emplacements spécifiques. Les dimensions des sections de l’antenne sont importantes et sont illustrées dans le schéma ci-dessous.
La longueur de la section inférieure est de 1/2 longueur d’onde (la section gauche dans le diagramme ci-dessus), la section centrale est 3/4 de longueur d’onde, et la section de fouet sur le dessus est légèrement moins de 3/4 longueur d’onde, apparemment pour réduire l’effet de capacité.
Le standard ADS-B utilise la fréquences de 1090 MHz (longueur d’onde 275 mm), donc la 1/2 longueur d’onde est de 137.5 mm et la 3/4 de longueur d’onde est de 206 mm.
Si vous avez l’intention d’utiliser un conduit isolant de 20 mm de diamètre pour loger votre antenne, assurez-vous que le diamètre des boucles soit environ 15 mm ou moins.
Certains tests de comparaison rapide indiquent que le colinéaire avec les boucles de décalage fonctionne beaucoup mieux que le colinéaire avec les boucles centrées.
Avec plus de gain
Approche B
Les signaux du transpondeur sont polarisés verticalement. Une antenne polarisée verticale accordée à 1090 MHz est nécessaire pour recevoir ces signaux. La solution la plus simple est un fil vertical ou un bâton métallique de 13 cm de longueur, c’est la demi-longueur d’onde du signal de 1090 MHz. Une telle antenne est un dipôle électrique et reçoit des signaux de toutes les directions.
Pour améliorer la sensibilité des antennes, plusieurs dipôles électriques peuvent être combinés. Mais si elles sont placées côte à côte, alors l’antenne ne serait plus une antenne omnidirectionnelle. Par conséquent, les dipôles individuels doivent être placés l’un autour de l’autre. Enfin, les dipôles doivent être interconnectés, mais les extrémités supérieure et inférieure de chaque dipôle oscillent avec un déphasage de 180 degrés. Pour les connecter, des boucles horizontales de 130 mm doivent être utilisées. Ils fonctionnent comme un déphaseur de 180 degrés.
Dipoles et boucles devraient être pliées à partir d’un long morceau de fil. Son diamètre doit être suffisamment grand pour la stabilité nécessaire. Le point le plus bas de ce groupe de dipôles doit être connecté au fil central d’un câble coaxial de 50 ohms.
Maintenant, nous avons besoin d’un “faux-sol”, qui doit être connecté à l’écran du câble coaxial. Un morceau rond de tôle (rayon de 13 cm) serait grand, mais certains fils radiaux peuvent être utilisés à la place. Au moins 4 fils (90 ° interspaces) doivent être utilisés (antenne-plan de masse). “Dummy-ground” et le dipôle n’ont pas à se toucher!
Antenne dipole
ADS-B wine cork dipole antenna
Liens
- ADS-B
- raspberry pi pour suivre les avions sur flightradar24
- dump1090
- New Flightradar24 feeding software for Raspberry Pi
- http://blogwifi.fr/?p=13353
- http://blogwifi.fr/?p=13343
- http://pygmalion.nitri.de/flight-radar-with-raspberry-pi-and-an-sdr-dongle-637.html
- http://www.flightradar24.com
- https://github.com/antirez/dump1090
- http://antirez.com/news/46
- http://www.capital.fr/bourse/actualites/flightradar24-ce-site-stupefiant-que-le-grand-public-a-decouvert-avec-le-crash-de-l-a320-1026205
- http://www.balarad.net/
- http://f5ann.pagesperso-orange.fr/
- http://www.rtl-sdr.com/homemade-ads-b-filter/
- http://forum.flightradar24.com/archive/index.php/t-3831.html
- http://forums.framboise314.fr/viewtopic.php?f=36&t=65&p=6619#p1844
Wifi Raspberry 1 et 2
Utliser un dongle wifi pour se connecter au réseau local ,lsusb
pour connaître le modèle
Bus 001 Device 004: ID 0846:9041 NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]
les pilotes realtek et ralink sont installés par défaut avec raspian
Configurer les paramètres du rréseau WIFI
Ouvrir le fichier de configuration wpa-supplicant dans nano:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
country=FR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
Remplacer GB par FR dans country
Allez dans le bas du fichier et ajoutez ce qui suit:
network={
ssid="YanHotSpot"
psk="testingPassword"
}
Si vous avez besoin de vous connecter à un réseau privé (qui ne diffuse pas son SSID) ajoutez la ligne scan_ssid=1
à l’intérieur du bloc network=
NOTE : il y a de nombreuses autres options qui peuvent être utilisés. Lisez la page man wpa_supplicant.conf.
Maintenant, enregistrez le fichier en appuyant sur Ctrl + X puis Y, puis appuyez sur Enter.
À ce stade, wpa-supplicant remarquera normalement un changement s’est produite en quelques secondes, et il va essayer de se connecter au réseau.
Si ce n’est pas le cas, redémarrez manuellement l’interface avec sudo ifdown wlan0
et sudo ifup wlan0
, ou redémarrez votre Raspberry Pi avec sudo reboot
.
Vous pouvez vérifier s’il s’est correctement connecté en utilisant ifconfig wlan0
.
Si le champ inet addr a une adresse à côté, le Pi est connecté au réseau.
Sinon, vérifiez que votre mot de passe et ESSID sont corrects.
Solutions de streaming Kafka & KSQL
- Cat Compels Raspberry Pi Flight Tracker
- Using KSQL, Apache Kafka, a Raspberry Pi and a software defined radio to find the plane
- Airport and airline data
Utiliser des solutions de streaming open source (Apache Kafka), KSQL (moteur de streaming SQL) et un Raspberry Pi pour traiter les mouvements d’avions en temps réel.Plane Kafka - Plane tracking with KSQL and a Raspberry Pi