3.6 KiB
3.6 KiB
XSayATC — stan prac i plan
Gdzie co leży
- Plugin:
/mnt/nvme_data/SteamLibrary/steamapps/common/X-Plane 12/Resources/plugins/PythonPlugins/PI_XSayATC.py - Konfiguracja lokalna:
config.json(obok pliku .py) — nie w repo (gitignore) - Wzór konfiguracji:
config.example.json - Repo git:
/home/pali112/XSayATC(remote:gitea.myftp.org/pali112/xSayATC_Xplane12) - Zależności: llama.cpp (localhost:8081), whisper (STT), piper (TTS)
Zrobione i działa
ATC / frazeologia
- Rola ATC wg częstotliwości —
sim/atc/com1_tuned_facility→ Delivery/Ground/Tower/Approach/Center. - Czytanie radia z fallbackiem
cockpit2/radios/actuators(Toliss/Zibo/Garmin). - Reset rozmowy przy zmianie służby ATC.
- Handoff ATC — podaje realną częstotliwość następnej służby (z
apt.dat). - Kierunek lotu Odlot/Przylot — tryb Auto (z planu lotu) + ręczny override.
Dane lotniska / plan lotu
- Częstotliwości lotniska w oknie (przycisk „Odśwież (czestotliwosci + pasy)").
- Geometria pasów z
apt.dat(wiersze100) + ręczny wybór pasa. - Plan lotu z natywnego FMS/GPS oraz pliku fallback (
flightplan_file).
Ruch / bezpieczeństwo
- Integracja LiveTraffic — enumeracja po indeksie
livetraffic/ac/key, odczytphase/on_gnd/lat/lon/alt/heading/speed/vsi. - Wykrywanie „pas zajęty" — samolot w fazie na-pasie i w prostokącie pasa (+ bufor 60 m). Tylko w promieniu 15 nm od pasa.
- Status pasa w kontekście — ATC odmawia zgody na start/lądowanie, gdy pas zajęty (reguła
RUNWAY STATUS). - Proaktywny ATC — sam się odzywa: zmiana fazy (start/lądowanie), bliski ruch <5 nm (tylko w powietrzu), pas zajęty. Z dedupem powodu i cooldownem 30 s.
Wydajność / stabilność
- Transkrypcja whisper w tle — nie zamraża gry przy PTT (wynik przez
_pending_senddo flight loopa). - TTS z lockiem — tylko jedna odpowiedź głosowa naraz (kolejna pomijana, nie nakłada się).
- Flaga
streamingustawiana synchronicznie — brak równoległych żądań do LLM. - Cache enumeracji LiveTraffic (2 s) + cache najbliższego lotniska (10 s) — bez przycięć.
Do zrobienia (kolejność)
- „Traffic on final" — wykrywać samolot na podejściu (fazy
50/60/61,on_gnd=0, blisko progu ~2 nm, nisko, kierunek zgodny z osią pasa). Teraz ATC ostrzega dopiero po dotknięciu pasa. - Auto-wybór pasa — po wietrze / pozycji / kursie (zamiast ręcznego).
- Parser SimBrief XML (SID/STAR + ograniczenia):
.fmsjuż działa (trasa + wysokości).- SimBrief XML ma nazwy SID/STAR + ograniczenia („cross at 3000 ft") — wtyczka tego nie czyta.
- Cel: ATC zna procedury po nazwie zamiast statycznych plików
procedures/. - Źródło: SimBrief XML (darmowy) albo Navigraph CIFP (ARINC 424).
- Drobne: naprawić ostrzeżenie Gitea o przekierowaniu URL (stary → nowy
origin).
Pułapki / uwagi (ważne)
config.jsonnadpisujesystem_prompt— po zmianie wDEFAULT_CONFIGzsynchronizuj teżconfig.jsoniconfig.example.json, inaczej nowe reguły promptu nie wejdą._nearest_airport_icao()skanuje całą bazę navaidów — cache 10 s, ale nie wołać w pętlach (flight loop / rysowanie okna). To była przyczyna przycięć.- LiveTraffic
ac/keyto indeks (0..num-1), nie hex; po zapisie zwraca Mode-S hex. - apt.dat (363 MB) parsowany w tle (~4 s) — pierwsze „Odśwież" może chwilę potrwać.
- Pierwszy slot LiveTraffic bywa pusty (
phase=0, lat=0.0) — pomijany (faza0=Unknown).