Flight warning - skrypt w pythonie

Coś dla Spotterów ze skanerkiem oraz radarem SBS.
Awatar użytkownika
spinka
Posty: 420
Rejestracja: 30 maja 2017, 13:07
Lokalizacja: Poznań

Pisałem już o tym , ale dziś upubliczniam sam skrypt.
Jest to wersja najprostsza "konsolowa".
Powinno działać na Windowsie, Linuxie i prawdopodobnie na Mac, udało mi się to uruchomić też na androidzie.
Dla mnie uruchomienie tego wydaje się w miarę proste, ale spróbuję opisać co jest potrzebne krok po kroku i odpowiadać na ew. pytania.

Skrypt znajduje się tu (plik flight_warning_winlin_term.py):
https://github.com/spink-al/flight-warning

W pobranym pliku należy zmienić poniższe na swoje koordynaty:

Kod: Zaznacz cały

my_lat =50.1234 #yourl atitude # (positive = north, negative = south)
my_lon = 15.1234 #your longitude # (positive = east, negative = west)
my_elevation_const = 90 #wysokość punktu obserwacji w metrach nad poziomem morza
my_elevation = 90 #wysokość punktu obserwacji w metrach nad poziomem morza
Do uruchomienia potrzebne są dodatkowo:
- odbiornik adsb i output z dump1090 dostępny na porcie 30003 w sieci lokalnej, lub na tym samym komputerze czy hoście.

Na windowsie:
- Python 2.7
- pyephem
- Ncat z pakietu Nmap (Podczas instalacji można zostawić zaznaczony tylko Ncat)

Uruchomienie skryptu w konsoli na windowsie:
Win+R
w okienku wpisujemy: cmd.exe <enter>

W konsoli:
<ścieżka do ncat>\ncat.exe <adres ip na którym mamy dump1090> 30003 | <ścieżka do pythona>\python.exe <ścieżka do skryptu>\flight_warning_winlin_term.py

Przy standardowych miejscach instalacji, skrypcie w katalogu z pythonem i dump1090 pod adresem ip 192.168.0.1 polecenie powinno wyglądać tak:

Kod: Zaznacz cały

"C:\Program Files (x86)\Nmap\ncat.exe" 192.168.0.1 30003 | C:\Python27\python.exe C:\Python27\flight_warning_winlin_term.py
Na linuxie, ncat to nc, i jest chyba w większości dystrybucji standardowo jak i python, więc trzeba tylko pyephem doinstalować.
Polecenie pod linuxem na komputerze na którym jest uruchomiony dump1090 wyglądałoby na przykład tak:

Kod: Zaznacz cały

nc 127.0.0.1 30003 | python /home/user/flight_warning_winlin_term.py
Jeśli wszystko pójdzie ok, to po uruchomieniu powinna się pojawić taka tabelka:
Obrazek

Flight info
- ICAO lub callsign
- elev - wysokość lotu w m
- trck - kierunek lotu w stopniach

- dist - aktualna odległość do samolotu w km

Pred. closest
- warn - najbliższa przewidywana odległość w jakiej przeleci samolot
- Alt - kąt na jakim będzie samolot najbliższej przewidywanej odległości

Current Az/Alt
- Alt - aktualna wysokość na jakiej jest samolot w stopniach
- Azim d- aktualny azymut na jakim jest samolot w stopniach
- Azim l - aktualny azymut na jakim jest samolot w oznaczeniach literowych

Transits:
Pierwsza sekcja dla tranzytów słonecznych, druga księżycowych.
Aktualne pozycje alt/az Słońca/Księżyca
- Sep - Odległość kątowa w jakiej samolot przetnie azymut na którym jest Słońce/Księżyc (wszystko poniżej 3st jest warte uwagi)
- p2x - Odległość w km jaką samolot ma do przebycia do punktu przecięcia azymut na którym jest Słońce/Księżyc
- h2x - Odległość z punktu obserwacji do punktu przecięcia toru lotu z azymutem na którym jest Słońce/Księżyc
- time2X - Czas w jakim samolot doleci do punktu przecięcia azymutu na którym jest Słońce/Księżyc

age
- wiek ostatniego odebranego komunikatu od samolotu.

Kolory opiszę później, czerwone i zielone tło w danej kolumnie ma zwracać uwagę.
System powinien wydawać dźwięki, pojedyncze jak coś "wlatuje w zasięg",
bardzo irytujące ciągłe pikanie gdy może nastąpić tranzyt, ciężko przegapić (niestety nasila się gdy Słońce/Księżyc są poniżej 10st nad horyzontem).

Mogą się zdarzać błędy i wysypki skryptu.

Może komuś się przyda albo chociaż uda się to u siebie uruchomić.
"U mnie działa" :-D
Awatar użytkownika
spinka
Posty: 420
Rejestracja: 30 maja 2017, 13:07
Lokalizacja: Poznań

Na rozgrzewkę - "Plugin" do Stellarium:


https://github.com/spink-al/flight-warn ... rol-plugin
Plik flight_warning_STELLARIUM.py

Konfiguracja Stellarium -> Wciśnij F2 -> Zakładka Wtyczki -> Remote Control -> zaznaczyć jak na screenie i klik na"konfiguruj":
Obrazek

Zaznaczyć jak na screenie, adres ip i port mogą i będą inne, ale trzeba je potem podać w skrypcie:
Obrazek

Po ponownym uruchomieniu powinna być aktywna taka ikonka:
Obrazek

Może być konieczne puszczenie portuna windowsowym firewallu jeśli skrypt i stellarium będą na różnych urządzeniach.

W skrypcie należy zmienić te dane na swoje lat/lon i podać ip/port urządzenia na którym będzie uruchomione Stellarium,
może być 127.0.0.1 jeśli na tym samym kompie:

Kod: Zaznacz cały

###################  ZMIEN TE DANE               ########################
#########################################################################

my_lat = 51.1234 #yourlatitude # (positive = north, negative = south)
my_lon = 14.12335 #yourlongitude # (positive = east, negative = west)
my_elevation_const = 90 #yourantennaelevation
IP_STELLARIUM = "192.168.3.104:8090"
Najpierw trzeba uruchomić Stellarium potem skrypt.
Skrypt uruchamia się tak samo jak ten w poprzednim poście tylko zamiast flight_warning_winlin_term.py będzie flight_warning_STELLARIUM.py

Skrypt nie wyświetla tabelki i jest ostro okrojony, bez mlat, tylko z przeznaczeniem karmienia stellarium jeśli ktoś chce sobie zobaczyć u siebie, pokombinować, u mnie działa z linuxa, windowsa, po sieci, lokalnie.
Awatar użytkownika
spinka
Posty: 420
Rejestracja: 30 maja 2017, 13:07
Lokalizacja: Poznań

Na dokładkę flight_warning z obsługą mlat.

Od początku:
Nie korzystam z raspbiana który flightaware udostępnia w formie obrazu karty sd.
U mnie jest zainstalowany dump1090-fa, potem feeder piaware, potem fr24feed (który ma nie instalować swojej wersji dump1090).
Dump1090 u mnie "gada" na porcie 30003.

Po dodaniu takich linijek w /etc/piaware.conf

Kod: Zaznacz cały

                                                                                                                                                                                                                              
allow-mlat      yes
mlat-results    yes
mlat-results-anon       yes
dodatkowo dostałem na porcie 30106 pozycje mlat od flightaware.

Teraz żeby te dwa strumienie danych połączyć w jeden, którym potem karmię flight_warning, używam "Rebroadcast Server" w Virtual Server Radar. Można go odpalić na rPi na którym jest dump1090 z feederami albo na innym kompie. W poniższych screenach adres ip rPi z dumpem to 192.168.3.113, jeśli VRS będzie na tym samym urządzeniu co dump1090, to adres może być 127.0.0.1 czy localhost.

Główne okno VRS z aktywnymi źródłami danych (feeder status):
Receiver + mlat = merged feed
oraz aktywnym połączeniem do Rebroadcast Server.
Obrazek

Konfiguracja fizycznego Receivera czyli dump1090 na porcie 30003:
Obrazek

Konfiguracja semi-wirtualnego receivera mlat na porcie 30106:
Obrazek

Kongiguracja Merged feed:
Obrazek

Konfiguracja Rebroadcast servers:
Obrazek

Konfiguracja Rebroadcast server na porcie 33333 (może być inny port):
Obrazek


Teraz skrypt flight_warning:
https://github.com/spink-al/flight-warn ... lat+output
Plik: flight_warning_MLAT.py
Dodatkowo skrypt flight_warning.sh, który uruchamia i w razie braku danych restartuje flight_warning_MLAT.py
W skrypcie .sh jest wpisany localhost i port 33333 z założeniem, że VRS jest uruchomiony na tym samym urządzeniu.
Jeśli VRS będzie gdzie indziej to localhost trzeba zmienić na jego adres ip, port ma być taki jaki jest ustawiony w VRS w Rebroadcast Server.

Kod: Zaznacz cały

nc -w 30 localhost 33333 | python flight_warning_MLAT.py
Nie testowałem tej wersji flight_warning pod windowsem, skrypt .sh na pewno nie zadziała, a .py może, nie musi.
Powinno działać pod pythonem 2.7 jak i 3.7.

Jeśli VRS nie będzie lokalnie tylko na komputerze z windowsem, to polecam dodać regułę do firewalla, żeby flight_warning dobił się do Rebroadcast Server.

W skrypcie flight_warning_MLAT.py trzeba zmienić lat/lon/altitude na swoje.
Jest to wersja która dodatkowo zapisuje aktualne dane, do wykorzystania przez matplotlib,
ale ustawiłem wyjście na /dev/null, jak ktoś jest ciekaw, to może sobie zmienić:

Kod: Zaznacz cały

out_path = '/dev/null'
na:

Kod: Zaznacz cały

out_path = '/tmp/out.txt'
VRS na rPi trzeba skonfigurować z włączonym desktopem, czyli z podpiętym hdmi albo przez vnc,
ale jeśli ktoś uważa - tak jak np. ja - że desktop na malinie jest zbyteczny, to po skonfigurowaniu można uruchamiać VRS z shella poleceniem:
mono VirtualRadar.exe -nogui
jedyne czego mi brakowało to resetowanie Receiver Range, ale można to zrobić poprzez usunięcie pliku ~/.local/share/VirtualRadar/SavedPlots/Receiver.json


Potem postaram się dodać generator jpg-ów taki jak mam w allsky, tyle że z pominięciem kamery. (Dodałem tu: viewtopic.php?p=54987#p54987)

Chyba najważniejsze napisałem. Najważniejsze żeby flightaware zwracał mlaty, bez tego będzie co prawda działać, no ale będzie samo adsb.
Może da się zrezygnować z VRS żeby połączyć strumienie, ale lubię ten interfejs bardziej niż dumpowe www, więc nie szukam.
Awatar użytkownika
spinka
Posty: 420
Rejestracja: 30 maja 2017, 13:07
Lokalizacja: Poznań

Dużo małych zmian w zasadzie jak coś zmieniam i przetesuje, to teraz od razu ląduje na githubie.

Najważniejsze: przeniosłem większość konfigurowalnych zmiennych do pliku flight_warning_Conf.py
W minimalnej wersji trzeba zmienić MY_LAT, MY_LON, MY_ALT, ew. out_path="/dev/null", reszta może być defaultowa.

flight_warning.sh uruchamia skrypt flight_warning_MLAT.py w pętli.
Tu trzeba ip/port zmienić, ew. python/python3, pętla podnosi skrypt jeśli się wysypie, "nc -w 30" powoduje reload, jeśli np. nocą brakuje danych.

"Uproszczony" opis użytego kolorowania dla odległości/wysokości w metrach/wysokości kątowej
(tranzyty są kolorowane inaczej, ale tam jest mniejsza komplikacja)

Dla testu można uruchomić z korekcją ciśnienia atmosferycznego wpisaną w konf, wychodzą drobne różnice na wyjściu,
ale sam nie jestem jeszcze pewny czy ta korekcja koryguje czy wręcz przeciwnie, poniżej na screenie równolegle 995hPa i defaultowe 1013hPa,
im bliżej zenitu tym się różnice zmniejszają: Więcej też opisane w treści konf/skryptów, ale łamanym angielskim.
:-)
ODPOWIEDZ