Autor Wątek:  Maszyna i stream deck  (Przeczytany 858 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Ntq

  • Wiadomości: 4
    • Zobacz profil
  • Otrzymane polubienia: 2
Maszyna i stream deck
« dnia: 14 Kwietnia 2025, 11:08:58 »
Witajcie!

Chciałbym zintegrować Maszynę z urządzeniem typu Stream Deck, ale nie wiem, od czego zacząć. Zależy mi na tym, aby część po stronie Maszyny była napisana w Pythonie i zbierała feedback z masznyny (otwarte drzwi, włączone urządzenia itd). Czy istnieje możliwość, aby skrypt w Pythonie był w jakiś sposób „podpięty” pod katalog scripts?

Znalazłem stronę: https://wiki.eu07.pl/index.php/Python — gdzie i w jaki sposób mogę z tego skorzystać?

Stream Decka chciałbym używać do wywoływania skrótów klawiszowych, ale zależy mi też na tym, żeby Maszyna przesyłała informacje zwrotne do Stream Decka — np. o włączonych urządzeniach, otwartych drzwiach itp.

Z góry dzięki za pomoc.

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1695
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1385
Odp: Maszyna i stream deck
« Odpowiedź #1 dnia: 14 Kwietnia 2025, 11:55:16 »
W jaki sposób ma polegać integracja? Sterowanie pojazdem za pomocą kontrolera Steam Deck, obraz z gry wyświetlany na monitorze komputera a ekran komputera pokładowego na wbudowanym ekranie Steam Decka?

Offline Ntq

  • Wiadomości: 4
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Maszyna i stream deck
« Odpowiedź #2 dnia: 14 Kwietnia 2025, 16:36:08 »
Chodzi mi o urządzenie typu Stream Deck:

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1695
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1385
Odp: Maszyna i stream deck
« Odpowiedź #3 dnia: 15 Kwietnia 2025, 00:59:23 »
A to przepraszam. Myślałem że to literówka.

Przejrzałem trochę i wygląda na to, że do Stream Decka jest SDK, który musi być postawiony na serwerze z Node.js (tylko z Node.js Stream Deck jest w stanie się komunikować): https://docs.elgato.com/streamdeck/sdk/introduction/getting-started
Z poziomu serwera node.js jesteś w stanie wrzucić obrazki statyczne na jakiś przycisk: https://docs.elgato.com/streamdeck/sdk/guides/keys#images

Potem musisz wystawić endpoint i po REST wysyłać zapytania do serwera na Node.js, które będą uruchamiać odpowiednie obrazki.
Samo wyciąganie danych z MaSzyny to oddzielna kwestia. Możesz użyć skryptów pythonowych co rysują ekran komputera pokładowego jak sugerowałeś, ale nie będzie to działać absolutnie wszędzie, tylko w pojazdach do których ten kod wrzucisz. Nie wiem czy Python wbudowany w MaSzynę posiada odpowiednie moduły do wysyłania zapytań HTTP. No i za każdym razem jak będziesz chciał odpalić symulację będziesz musiał uruchomić serwer Node.js i aplikację Elgato, żeby wszystko było się w stanie ze sobą komunikować.

Podsumowując - zadanie trudne, ale nie niemożliwe, jak na początku myślałem. W sumie poziom trudności porównywalny do pisania kodu kontrolera fizycznego pulpitu na Arduino.
« Ostatnia zmiana: 15 Kwietnia 2025, 01:00:33 wysłana przez jakubg1 »

Offline Hirek

  • Wiadomości: 421
  • ugułem to siemens fajne wozy robi
    • Zobacz profil
    • Kanał YT
  • Otrzymane polubienia: 483
Odp: Maszyna i stream deck
« Odpowiedź #4 dnia: 15 Kwietnia 2025, 01:26:43 »
A może do podstawy samej to jakiś wirtualny com i obsługa maszyny przez uart?
exe dłubacz
#makeMaSzynaGreatAgain
moj fork bo tak

Offline Ntq

  • Wiadomości: 4
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Maszyna i stream deck
« Odpowiedź #5 dnia: 15 Kwietnia 2025, 01:29:40 »
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.

Offline Ntq

  • Wiadomości: 4
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Maszyna i stream deck
« Odpowiedź #6 dnia: 15 Kwietnia 2025, 01:33:04 »
A może do podstawy samej to jakiś wirtualny com i obsługa maszyny przez uart?

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.

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1695
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1385
Odp: Maszyna i stream deck
« Odpowiedź #7 dnia: 15 Kwietnia 2025, 01:37:33 »
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
« Ostatnia zmiana: 15 Kwietnia 2025, 01:41:04 wysłana przez jakubg1 »

Offline Hirek

  • Wiadomości: 421
  • ugułem to siemens fajne wozy robi
    • Zobacz profil
    • Kanał YT
  • Otrzymane polubienia: 483
Odp: Maszyna i stream deck
« Odpowiedź #8 dnia: 15 Kwietnia 2025, 01:41:33 »
(i w sumie ze względów bezpieczeństwa istnieje szansa, że kiedyś zostanie to zablokowane),
- ani też nie przewidział wyprowadza
Podejrzewam, że prędzej przejdziemy na pythona 3

ani też nie przewidział wyprowadzania parametrów prowadzonego pojazdu po sieci na socket lub bezpośrednio na serwer w formie zapytań.
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.
exe dłubacz
#makeMaSzynaGreatAgain
moj fork bo tak

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1695
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1385
Odp: Maszyna i stream deck
« Odpowiedź #9 dnia: 15 Kwietnia 2025, 01:49:12 »
Podejrzewam, że prędzej przejdziemy na pythona 3
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.

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.
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
« Ostatnia zmiana: 15 Kwietnia 2025, 02:08:50 wysłana przez jakubg1 »