ApexDash to darmowy plugin, który zamienia Stream Dock, Mirabox, AJAZZ albo inne zgodne urządzenie w panel telemetrii do Forza Horizon. Na przyciskach można wyświetlać na żywo między innymi prędkość, obroty silnika, aktualny bieg, boost, temperatury opon, przyczepność, położenie pedałów i statystyki z bieżącej jazdy.
Projekt powstał z myślą o najnowszej odsłonie serii, czyli Forza Horizon 6, ale opiera się na standardowym mechanizmie Forza Data Out. Nie czyta pamięci gry, nie wstrzykuje kodu i nie wymaga SimHuba jako pośrednika.
ApexDash jest dostępny za darmo i taki pozostanie. To projekt hobbystyczny, dlatego mogą występować niedociągnięcia, błędy albo funkcje działające inaczej zależnie od wersji gry i konkretnego modelu Stream Docka.
Skąd wziął się pomysł?
Gdy mam trochę wolnego czasu — którego niestety zwykle jest mało — lubię pojeździć na swoim sim rigu. Mam przy nim kierownicę, pedały, button boxy, Stream Docki i inne dodatki, które może nie są niezbędne, ale znacznie poprawiają klimat całego stanowiska.
Najczęściej wybieram bardziej realistyczne symulatory pokroju iRacing. Od czasu do czasu lubię jednak uruchomić coś luźniejszego i bardziej arcade, zwłaszcza nową Forza Horizon 6.
Właśnie wtedy brakowało mi prostego panelu telemetrii na Stream Docku.
Rozwiązania, które znalazłem, miały przynajmniej jeden z kilku problemów:
- nie działały z najnowszą częścią Forzy,
- wymagały dodatkowego programu pośredniczącego,
- nie oferowały interesujących mnie kafelków,
- miały ograniczone możliwości konfiguracji,
- były płatne, a mimo to nadal brakowało im części funkcji,
- działały cały czas w tle, nawet gdy panel nie był używany.
Zamiast dalej szukać kompromisu, przygotowałem ApexDash jako prosty, darmowy dodatek do mojego stanowiska.
Co to właściwie jest?
ApexDash jest pluginem do aplikacji Stream Dock. Odbiera telemetrię wysyłaną przez Forza Horizon za pomocą funkcji Data Out i wyświetla wybrane wartości na fizycznych przyciskach urządzenia.
Nie jest to klasyczny overlay wyświetlany na monitorze. Dane trafiają bezpośrednio na małe ekrany Stream Docka, dlatego urządzenie może pełnić rolę niewielkiego dashboardu samochodowego.
Na jednej stronie można przygotować na przykład układ zawierający:
- aktualną prędkość,
- obroty silnika,
- wybrany bieg,
- segmentową lampkę zmiany biegu,
- temperatury czterech opon,
- położenie gazu i hamulca,
- informację o utracie przyczepności,
- maksymalną prędkość z bieżącej sesji.
Nie trzeba używać wszystkich elementów. Każdy może zbudować panel pasujący do swojego urządzenia i sposobu grania.
Dostępne kafelki
Aktualna wersja ApexDash zawiera kilka gotowych typów kafelków.
| Kafelek | Zastosowanie |
|---|---|
| Speed Tile | Aktualna prędkość pojazdu |
| RPM Tile | Obroty silnika |
| Gear Tile | Aktualnie wybrany bieg |
| Boost Tile | Ciśnienie doładowania |
| Metric Tile | Uniwersalny kafelek z wybraną wartością telemetrii |
| Gauge Tile | Wskaźnik procentowy lub zegar dla RPM, paliwa, gazu, hamulca albo boostu |
| Shift Light | Segment lampki zmiany biegu |
| Tire Monitor | Temperatury, poślizg i stan czterech opon |
| Grip Coach | Informacja o przyczepności, podsterowności albo poślizgu tylnej osi |
| Input Monitor | Gaz, hamulec, sprzęgło, ręczny i skręt kierownicy |
| Session Stats | Maksymalna prędkość, moc, boost i czas 0–100 km/h |
| Telemetry Status | Stan połączenia, liczba pakietów i diagnostyka |
Uniwersalny kafelek
Metric Tile pozwala wybrać jedną z dostępnych wartości bez tworzenia osobnej akcji dla każdej wielkości.
Można wykorzystać go do prezentowania między innymi:
- prędkości,
- RPM,
- biegu,
- boostu,
- mocy,
- poziomu paliwa,
- innych wartości dostępnych w pakietach Data Out.
Dzięki temu jeden typ kafelka można wielokrotnie dodać do profilu i za każdym razem skonfigurować inaczej.
Gauge Tile
Gauge Tile jest przeznaczony do wartości, które dobrze wyglądają jako procentowy wskaźnik lub prosty zegar.
Sprawdza się przy:
- obrotach silnika,
- poziomie paliwa,
- położeniu pedału gazu,
- położeniu hamulca,
- ciśnieniu doładowania.
Shift Light
Shift Light można rozłożyć na kilku sąsiadujących przyciskach. Każdy przycisk odpowiada wtedy za osobny segment lampki zmiany biegu.
Na większym Stream Docku można dzięki temu zbudować prosty pasek RPM przypominający rozwiązania spotykane w kierownicach wyścigowych.
Tire Monitor i Grip Coach
Tire Monitor wyświetla dane związane z oponami, w tym temperatury i poślizg poszczególnych kół.
Grip Coach interpretuje dostępne dane i prezentuje prosty komunikat, na przykład:
GOOD
REAR SLIP
UNDERSTEER
BAD GRIP
Nie zastępuje to rozbudowanej analizy telemetrycznej znanej z profesjonalnych symulatorów. W grze arcade może jednak być ciekawym dodatkiem i szybko informować, co dzieje się z samochodem.
Jak ApexDash odbiera dane?
Forza Horizon potrafi wysyłać telemetrię przez sieć za pomocą pakietów UDP.
W ustawieniach gry należy wskazać:
Data Out: Wł.
Adres IP Data Out: 127.0.0.1
Port Data Out: 23666
Adres 127.0.0.1 oznacza ten sam komputer, na którym działa gra i aplikacja Stream Dock.
ApexDash nasłuchuje pakietów pod adresem:
127.0.0.1:23666 UDP
Gdy samochód porusza się w grze, Forza wysyła kolejne pakiety zawierające dane pojazdu. Plugin odczytuje interesujące go wartości i aktualizuje kafelki na urządzeniu.
W menu albo po zatrzymaniu telemetria może przestać się aktualizować. Nie zawsze oznacza to awarię pluginu — gra zwykle wysyła pełny strumień danych dopiero podczas aktywnej jazdy.
Bez SimHuba i bez ingerowania w grę
ApexDash jest pluginem wyłącznie telemetrycznym.
Nie oferuje i nie potrzebuje:
- wstrzykiwania bibliotek DLL,
- czytania pamięci procesu,
- sterownika działającego w jądrze systemu,
- modyfikowania plików gry,
- zewnętrznego nakładania obrazu,
- pośrednictwa SimHuba,
- wysyłania skrótów klawiszowych do gry.
Plugin korzysta wyłącznie z danych, które Forza sama wysyła przez funkcję Data Out.
Dzięki temu jego działanie jest proste do zrozumienia: gra wysyła telemetrię, ApexDash ją odbiera, a Stream Dock wyświetla wartości.
Działanie tylko wtedy, gdy jest potrzebne
Jednym z ważniejszych założeń było ograniczenie niepotrzebnej pracy w tle.
Listener UDP uruchamia się dopiero wtedy, gdy przynajmniej jeden kafelek ApexDash jest widoczny albo aktywny na bieżącej stronie Stream Docka.
Gdy przełączysz się na stronę bez kafelków ApexDash, plugin powinien po krótkim czasie:
- zatrzymać aktywny nasłuch,
- zwolnić port UDP
23666, - przestać przetwarzać telemetrię.
Jest to istotne również dlatego, że tylko jeden program może jednocześnie nasłuchiwać tego samego portu UDP.
Jeżeli ktoś używa także innego narzędzia telemetrycznego, zwolnienie portu pozwala ograniczyć konflikty po przełączeniu strony Stream Docka.
Instalacja
ApexDash wymaga:
- Windows 10 albo Windows 11,
- aplikacji Stream Dock w wersji
2.10.179.426lub nowszej, - zgodnego urządzenia Stream Dock, Mirabox albo AJAZZ,
- Forza Horizon z obsługą Data Out.
Najnowszą wersję można pobrać z zakładki wydań:
ApexDash — wydania na GitHubie
Instalacja ręczna
- Zamknij aplikację Stream Dock.
- Sprawdź również ikonę programu w zasobniku systemowym i zakończ go całkowicie.
- Rozpakuj pobrane archiwum ApexDash.
- Skopiuj folder:
com.nineerza.apexdash.sdPlugin
do katalogu:
%APPDATA%\HotSpot\StreamDock\plugins
- Ponownie uruchom Stream Dock.
- Na liście akcji znajdź kategorię
ApexDash. - Przeciągnij wybrane kafelki na przyciski urządzenia.
W paczce znajduje się również skrypt:
install_apexdash.bat
który może uprościć instalację.
Konfiguracja Forza Horizon 6
W ustawieniach Forza Horizon 6 odszukaj opcje Data Out i ustaw:
Data Out: Wł.
Adres IP Data Out: 127.0.0.1
Port Data Out: 23666
Po zapisaniu ustawień:
- uruchom jazdę,
- przejdź na stronę Stream Docka zawierającą kafelki ApexDash,
- sprawdź, czy wartości zaczynają się zmieniać.
W menu głównym część kafelków może pokazywać brak danych. Najlepiej testować połączenie podczas aktywnej jazdy samochodem.
Diagnostyka bez zgadywania
ApexDash zawiera lokalny endpoint diagnostyczny.
Gdy przynajmniej jeden kafelek pluginu jest aktywny, otwórz w przeglądarce:
http://127.0.0.1:28766/state
Można tam sprawdzić między innymi:
udpBound: true
connected: true
packetRate: 60 / 120 / 140
lastPacketAgeMs: wartość zmieniająca się podczas jazdy
Najważniejsze pola:
| Pole | Znaczenie |
|---|---|
udpBound |
Czy plugin poprawnie otworzył port UDP |
connected |
Czy odbierane są dane z gry |
packetRate |
Przybliżona liczba pakietów na sekundę |
lastPacketAgeMs |
Ile czasu minęło od ostatniego pakietu |
Dostępny jest również tryb symulacji:
http://127.0.0.1:28766/simulate
Jeżeli symulacja aktualizuje kafelki, ale prawdziwa telemetria z Forzy nie działa, sam plugin i komunikacja ze Stream Dockiem prawdopodobnie są sprawne. Problem najczęściej znajduje się wtedy w adresie IP, porcie albo wyłączonej funkcji Data Out.
Kafelki pokazują „NO DATA”
Najpierw sprawdź podstawy:
- czy Data Out jest włączone,
- czy adres to dokładnie
127.0.0.1, - czy port to
23666, - czy samochód faktycznie porusza się w grze,
- czy Stream Dock został całkowicie zrestartowany po instalacji,
- czy widoczny jest przynajmniej jeden kafelek ApexDash,
- czy w katalogu pluginów nie pozostała starsza wersja.
Warto również otworzyć endpoint /state i sprawdzić, czy plugin otworzył port oraz czy odbiera pakiety.
Konflikt portu 23666
Port UDP może być zajęty przez inny program telemetryczny.
W PowerShellu można sprawdzić właściciela portu:
Get-NetUDPEndpoint -LocalPort 23666 |
Select-Object LocalAddress, LocalPort, OwningProcess
Następnie odczytać proces:
Get-Process -Id <PID> |
Select-Object Id, ProcessName, Path
Gdy kafelek ApexDash jest widoczny, port powinien należeć do procesu node20.exe uruchamianego przez Stream Dock.
Gdy żaden kafelek ApexDash nie jest aktywny, port powinien zostać zwolniony po kilku sekundach.
Konflikt ze starszą wersją
W katalogu:
%APPDATA%\HotSpot\StreamDock\plugins
nie powinno znajdować się kilka kopii tego samego pluginu.
W szczególności warto usunąć stare foldery takie jak:
com.erza.forzadash.sdPlugin
com.nineerza.apexdash.sdPlugin_old
Po usunięciu starych wersji trzeba ponownie całkowicie zamknąć i uruchomić aplikację Stream Dock.
Dla jakich urządzeń jest przeznaczony?
ApexDash korzysta z formatu pluginów obsługiwanego przez aplikację Stream Dock.
Może działać między innymi z urządzeniami sprzedawanymi pod markami:
- Stream Dock,
- Mirabox,
- AJAZZ.
Nie mogę jednak zagwarantować działania z każdym modelem. Kompatybilność zależy od tego, czy konkretne urządzenie jest poprawnie obsługiwane przez wymaganą wersję aplikacji Stream Dock.
Plugin nie jest przeznaczony bezpośrednio dla Elgato Stream Deck, ponieważ korzysta z innego środowiska pluginów.
Obecny stan projektu
ApexDash ma status eksperymentalny.
Aktualna wersja pluginu zawiera gotowe kafelki, konfigurację przez panel właściwości, nasłuch Data Out, diagnostykę i mechanizm ograniczający pracę w tle. Nie oznacza to jednak, że wszystkie możliwe konfiguracje sprzętu zostały dokładnie przetestowane.
Mogą pojawić się między innymi:
- różnice między modelami Stream Docka,
- problemy po aktualizacji aplikacji Stream Dock,
- zmiany w pakietach Data Out po aktualizacji Forzy,
- niewłaściwe wartości dla wybranych samochodów,
- opóźnione odświeżanie kafelków,
- konflikty z innymi programami telemetrycznymi,
- błędy w mniej popularnych trybach kafelków.
To projekt tworzony w wolnym czasie, a nie płatny produkt z pełnym działem testów i wsparcia.
ApexDash jest i pozostanie darmowy
Nie planuję pobierania opłat za ApexDash.
Powstał jako gadżet do mojego własnego sim rigu i jako rozwiązanie problemu, którego dostępne narzędzia nie rozwiązywały tak, jak oczekiwałem.
Kod źródłowy jest dostępny publicznie na GitHubie, a projekt korzysta z licencji MIT:
Dzięki temu każdy może:
- sprawdzić sposób działania pluginu,
- przejrzeć obsługiwane kafelki,
- zgłosić problem,
- zaproponować poprawkę,
- przygotować własne modyfikacje zgodnie z warunkami licencji.
Nie oznacza to, że każda zgłoszona funkcja zostanie szybko dodana. Projekt rozwijam wtedy, gdy mam na to czas i ochotę.
Czym ApexDash nie jest?
ApexDash nie próbuje zastępować profesjonalnych systemów telemetrycznych wykorzystywanych w iRacing, Assetto Corsa Competizione albo rozbudowanych konfiguracjach SimHub.
Forza Horizon jest bardziej arcade niż pełnoprawne symulatory, a jej Data Out ma własne ograniczenia.
ApexDash ma być:
- ciekawym dodatkiem do stanowiska,
- sposobem na wykorzystanie ekranów Stream Docka,
- czytelnym panelem podstawowych danych,
- darmową alternatywą dla niektórych płatnych pluginów,
- rozwiązaniem działającym bez dodatkowego relay’a.
Dla mnie właśnie taki zakres ma najwięcej sensu.
Podsumowanie
ApexDash zamienia Stream Dock w niewielki dashboard telemetryczny dla Forza Horizon 6.
Odbiera oficjalny strumień Data Out przez UDP i pozwala wyświetlać na fizycznych przyciskach:
- prędkość,
- RPM,
- bieg,
- boost,
- shift light,
- temperatury i poślizg opon,
- stan przyczepności,
- wejścia z kierownicy i pedałów,
- statystyki sesji,
- stan połączenia telemetrycznego.
Plugin nie ingeruje w grę, nie wymaga SimHuba i nie pracuje bez potrzeby, gdy jego kafelki nie są aktywne.
Jest dostępny za darmo, ale nadal pozostaje projektem eksperymentalnym. Mogą wystąpić błędy i niedociągnięcia, szczególnie przy mniej popularnych urządzeniach albo po aktualizacjach gry i aplikacji Stream Dock.
Pobieranie i kod źródłowy
ApexDash jest nieoficjalnym projektem i nie jest powiązany z Microsoft, Xbox Game Studios, Turn 10 Studios, Playground Games ani marką Forza.