Skocz do zawartości

ASCOM Driver [Developer] - pytań dużo.


Wiesiek1952

Rekomendowane odpowiedzi

Zabrałem się za napisanie własnego drivera ASCOM i uparłem się, że ma działać jako "local server".

 

Mam stację pogodową zrobioną, działającą na Arduino/EPS32. Stacja komunikuje się po USB z PC-tem. W PCcie pod Win 11 mam działający program czytajacy z COM serial ciągi znaków i wyświetlajacy wszystko co trzeba na ekranie. Ta część działa bez zarzutu. Mam napisany własnoręcznie na bazie ASCOMowych szablonów driver który działa na PC i NINA czy inne oprogramowanie też widzi i czyta dane z Arduino.  Zapisuje ustawienia "safety" do EPROMU Arduino, wyświetla co trzeba na ekranie, nawet na Nextionie itp. itd. 

 

Problem pojawia się w momencie kiedy chcę podłączyć - czytać z seriala z Arduino w wielu programach zewnętrznych np. dwie instancje NINA czy NINA i dowolny inny klient ASCOMa. Wiem, że to można obejść i że używajac dowolnego huba jako pośrednika to to będzie działać no ale... od tego jest "local server" i daje większe możliwości włącznie z czytaniem danych z poziomu przeglądarki web.  Nie potrafię ustawić local servera i z jego poziomu czytać z seriala arduino i rozsyłać to "po świecie".

 

Nie oczekuję gotowców tylko podpowiedzi gdzie można znaleźć coś sensownego. Ze dwa tygodnie googlam i czytam ale to co jest w necie to albo starocie sprzed 12 lat albo odnoszące się do ASCOMa sprzed lat 5.

 

 

Edytowane przez Wiesiek1952
  • Lubię 2
Odnośnik do komentarza
Udostępnij na innych stronach

  • Wiesiek1952 zmienił(a) tytuł na ASCOM Driver [Developer] - pytań dużo.

Nie wiem czy problem dotyczy właśnie tego i jak to ewentualnie obejść, ale zazwyczaj jak jeden program otworzy dany port COM, to inny juz tego zrobić nie może, bo wyświetla jako zajęty. Prostym obejściem tego tematu mogłoby być podpięcie przejściówki USB-UART i wpięcie w ten sam port szeregowy Arduino i sniffowanie, nqsluchiwanie danych - przejściówka pojawi Ci się jako nowy port COM w komputerze i będziesz mógł odpalić go w innym programie. Całość zadziała o ile będziesz tylko odbierać dane z Arduino, bo jak zaczniesz nadawać, to już się może pokrzaczyć. 

Odnośnik do komentarza
Udostępnij na innych stronach

Użyłem szablonu aktualnego z pakietu ze strony ASCOM. Klasyczny/stary szablon też tam jest ale jest też "zalecenie" żeby używac tych nowych. 🙂 Stronę o której pisze @Pikolaczek śledzę dość dokładnie od miesiąca 🙂 Ogromna ilość wiedzy ale znalezienie czegokolwiek nie jest łatwe. Tam dość często pojawia się Bob Denny czyli ten co wymyślił ASCOMa - niestety najczęściej z radami w stylu (cytuję)  ...Drivers are not easy. There are a myriad of "shortcuts" that will get a driver writer into trouble and cause apps to misbehave...o czym wiadomo i bez tego albo z oczywistościami na temat korzystania z przykładów na GitHub (znów cytat)  ...This is somewhat risky, as you may end adopting techniques and logic you don't really understand and therefore may not work the way you hoped for...

 

Local server jest dla stacji pogodowej i safety monitora wręcz koniecznością bo chcąc wykorzystać jedno fizyczne urządzenie (Arduino/ESP) to da się to zrobić tylko z local server. Hub też da radę ale potrzebne fizycznie dwa osobne Adruino (chyba bo nie mam pewności). 

 

Dłubię dalej 🙂 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ja swoje nowe sterowniki zrobiłem również w oparciu o architekturę serwerową, żeby można było łączyć się z wielu programów, oraz nie blokować UI programów swoim panelem. Jednak zrobiłem to "po swojemu", tj serwer to normalny program, a klienci to klasyczne sterowniki ascom, które do niego uderzają. Jakoś też miałem problemy ze zrozumieniem local server ascoma i uznałem, że tak będzie prościej :) Czy było, trudno powiedzieć.

  • Lubię 1
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

Od strony czysto teoretycznej rozwiązanie softwarowe jest oczywiste:

 

Oddzielny program/proces/wątek, który jedyne co robi, to czyta i pisze do seriala Arduino. 

Projekt jest prosty - dwie kolejki, jedna do czytania druga do pisania, korzystając z pythonowych gotowców z modułów serial i threading prawie nic nie trzeba pisać.

 

Do takiego programu można dopisać prosty serwer HTTP który będzie obsługiwał API alpaca, czyli RESTowy 

ASCOM dla różnych urządzeń, i zamieniał je na komendy wpisywane po serialu (na kolejki). 

 

Jeśli dobrze się to zrobi (ASCOM udostępnia program do sprawdzania zgodności) to nasze urządzenia można zobaczyć z poziomu serwera alpaki.

 

Kiedyś był projekt (pyalpaca) który ułatwiał część serwera http.

 

Ja zrobiłem to bez niczego, zwykły serwer w FastApi. Działało. 

 

Teraz dałem sobie spokój w ogóle z ASCOM, bo mam swój program do akwizycji a'la Sharpcap do kamery i innych rzeczy.

;)

 

Ale architektura została taka sama.

 

 

  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.