YannStatic
  • Etiquettes
  • Liens
  • Aide

Raspbian Lite Stretch + FlightRadar24

  • raspberry
  •  27 août  2018
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

raspberry-pi3

Installer raspian-lite stretch sur raspberry…, chercher l’expression “raspbian lite stretch” dans le champ recherche du site

Matériel

alt text

  • 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

  • https://www.framboise314.fr/un-raspberry-pi-pour-suivre-les-avions-sur-flightradar24-2/#Pygmalion_vous_explique_comment_configurer_le_Raspberry_Pi

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>&nbsp;</td>
							<td>&nbsp;</td>
						</tr>

						<tr class="infoblock_body dim">
							<td>(Aucun aéronef sélectionné)</td>
							<td>&nbsp;</td>
						</tr>

						<tr class="infoblock_body">
							<td>&nbsp;</td>
							<td>&nbsp;</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">&#x21D2;</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.

alt text

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 par votre clé)

./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);

alt text

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.

alt text

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

alt text

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.

alt text

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.

alt text

Avec plus de gain

alt text

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!

alt text

Antenne dipole

ADS-B wine cork dipole antenna

alt text

alt text

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

alt text

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

Kafka Kibana
https://github.com/saubury/plane-kafka

PRÉCÉDENTOVH VPS506197 Yunohost yanfi.net
SUIVANTGitlab authentification double facteur (2FA)
Recherche