Symulator EU07 (i nie tylko) > Pomoc w tworzeniu
Maszyna i stream deck
Ntq:
Od strony SDK Stream Decka nie powinno być problemu — bardziej zastanawiam się, jakie mam opcje po stronie maszyny. Chciałbym w miarę prosto się pod nią podpiąć, a wtedy napiszę sobie jakiegoś wrappera albo drobne API do komunikacji z SDK.
Ntq:
--- Cytat: Hirek w 15 Kwietnia 2025, 01:26:43 ---A może do podstawy samej to jakiś wirtualny com i obsługa maszyny przez uart?
--- Koniec cytatu ---
Też się nad tym zastanawiałem, ale liczyłem, że jest jakaś prostsza droga — na przykład skrypt w Pythonie, który będzie automatycznie uruchamiany razem z symulatorem.
jakubg1:
No właśnie w grę wchodzi albo wirtualny port szeregowy i UART jak napisał Hirek, albo hakowanie po stronie Pythona co w sumie ma parę wad i nie wiadomo czy jest w pełni możliwe.
Obecnie exe nie pozwala na stworzenie globalnego skryptu pythona, który zawsze by się wykonywał niezależnie od czegokolwiek. Nikt do tej pory nigdy:
- ani nie wykorzystywał skryptów pythona do wysyłania zapytań po sieci (i w sumie ze względów bezpieczeństwa istnieje szansa, że kiedyś zostanie to zablokowane),
- ani też nie przewidział wyprowadzania parametrów prowadzonego pojazdu po sieci na socket lub bezpośrednio na serwer w formie zapytań. Co prawda jest taki system, ale dotyczy scenerii czyli stanu rozjazdów czy semaforów oraz wysyłania komend do AI w pojazdach, a nie bezpośrednio stanu prowadzonego pojazdu.
MaSzyna bezpośrednio wyprowadza dane tylko na UART do komunikacji z Arduino i PoKeys i chyba coś jeszcze, ale w podobnym celu i zakresie. Dopisanie dedykowanego modułu do obsługi StreamDecka (i tym podobnych) w kodzie exe bezpośrednio tak jak do tej pory UART byłoby najtrudniejszym do zrealizowania, ale najczystszym pod względem implementacji sposobem.
Tutaj parę linków:
- konfiguracja komunikacji z programami zewnętrznymi za pomocą eu07.ini: https://wiki.eu07.pl/index.php/Informacje_zwrotne
- protokół WM_COPYDATA do scenerii: https://wiki.eu07.pl/index.php/Komunikacja_z_programami_trzecimi
Hirek:
--- Cytat: jakubg1 w 15 Kwietnia 2025, 01:37:33 ---(i w sumie ze względów bezpieczeństwa istnieje szansa, że kiedyś zostanie to zablokowane),
- ani też nie przewidział wyprowadza
--- Koniec cytatu ---
Podejrzewam, że prędzej przejdziemy na pythona 3
--- Cytat: jakubg1 w 15 Kwietnia 2025, 01:37:33 ---ani też nie przewidział wyprowadzania parametrów prowadzonego pojazdu po sieci na socket lub bezpośrednio na serwer w formie zapytań.
--- Koniec cytatu ---
W sosnowcu mają pulpit do maszyny podłączony za pomocą TCP (wydaje mi sie ze zmq za to odpowiada ale to tak na 5% jestem pewien)
Ogólnie są programy ktore pozwalają tworzyć wirtualne porty COM na komputerze (dwa połączone ze sobą). Np na COM1 wpinasz maszyne, na COM2 skrypt pytonga, który komunikuje się ze streamdeckiem. Moim zdaniem najlepsze w tej chwili rozwiązanie.
jakubg1:
--- Cytat: Hirek w 15 Kwietnia 2025, 01:41:33 ---Podejrzewam, że prędzej przejdziemy na pythona 3
--- Koniec cytatu ---
Nie ma to większego znaczenia, to zależy jakie moduły są wbudowane w pythona i czy było coś doinstalowywane (na pewno nie tutaj, bo nikt nie potrzebował instalowania modułów sieciowych do pythona, potrzebny zawsze był tylko PIL do rysowania). Ale moduły wbudowane można chyba jakoś wyłączyć. Nie jestem pewien jakie są możliwości virtualenv.
--- Cytat: Hirek w 15 Kwietnia 2025, 01:41:33 ---Ogólnie są programy ktore pozwalają tworzyć wirtualne porty COM na komputerze (dwa połączone ze sobą). Np na COM1 wpinasz maszyne, na COM2 skrypt pytonga, który komunikuje się ze streamdeckiem. Moim zdaniem najlepsze w tej chwili rozwiązanie.
--- Koniec cytatu ---
Jest w node.js moduł do zarządzania portami COM, i wtedy pythona nie potrzebujemy w ogóle. https://www.npmjs.com/package/serialport
Podsumowując, najlepsze rozwiązanie według mnie i Hirka prezentuje się następująco:
1. Konfigurujemy w MaSzynie komunikację UART przez port COM (opis tutaj: https://eu07.pl/forum/index.php/topic,28460.0.html)
2. Stawiamy serwer node.js, instalujemy SDK od Stream Decka i moduł serialport. Programujemy sobie to jakoś żeby nasłuchiwało na dane, odpowiadało, i jeżeli dostanie jakąś interesującą nas informacje wywoła kod od SDK który zmieni nam obrazek np. drzwi.
3. Łączyć portów COM jakimś programem nie trzeba, bo wpiąć się można od razu do portu używanego przez MaSzynę. Przynajmniej teoretycznie.
Wskazówka:
- do otrzymywania danych od symulatora potrzebujemy: https://serialport.io/docs/api-parser-byte-length/ z ilością bajtów 1
- po każdym otrzymanym bajcie musimy odesłać go z powrotem używając write: https://serialport.io/docs/api-stream#write
Nawigacja
Idź do wersji pełnej