Skocz do zawartości

Komunikacja z serwerem zewnetrznym - problem w rozumowaniu


mkowsky

Pomocna odpowiedź

Drodzy forumowicze,  od jakiegoś czasu czytałem wiele na temat, który zaraz opiszę, ale mimo to nadal nie wszystko jest dla mnie do końca jasne. Dlatego też zwracam się do Was z prośbą o pomoc w "uporządkowaniu" mojego rozumowania.

Chcę napisać prostą aplikacje w android studio, która umożliwiłaby mi odczyt z czujnika temperatury (czujnik podłączony jest do arduino, które z kolei połączone jest z ESP). Chciałbym aby odczyt temperatury byłby możliwy również poza zasięgiem mojej sieci domowej i tutaj pojawia się problem w moim rozumowaniu odnośnie przebiegu takiej komunikacji. Logiczne wydaje się, że do całego przedsięwzięcia wymagany będzie serwer zewnętrzny, z którym będę łączył się bezpośrednio z mojej aplikacji (jako klient) i wysyłał "prośbę" o odczyt temperatury w danej chwili... tylko co dalej? Czy serwer po otrzymaniu takiego zapytania, powinien przekierować je do ESP? Jeśli tak to w jakiej formie występuje tutaj nasze ESP (klient/serwer?) Czy realizacja tego zadania w sposób zbliżony do przedstawionego przeze mnie jest w ogóle możliwa? Jeśli nie to czy mógłby mi ktoś wyjaśnić jak powinna przebiegać taka komunikacja, albo odesłać w odpowiednie miejsce?

 

Z góry dziękuje za wszelką pomoc!

Link do komentarza
Share on other sites

Do tego potrzebujesz jakiejś możliwości inicjacji połączenia z serwera zewnętrznego do Twojego ESP. Da się to zrobić, ale wymaga trochę kombinacji (przekierowanie portu chociażby, przy czym np. w sieciach komórkowych nie jest to praktycznie możliwe - blokowane są połączenia przychodzące, a ich odblokowanie wiąże się z pewnymi restrykcjami, których raczej jako prywatny użytkownik nie przeskoczysz).

Twój ESP powinien co jakiś czas wysyłać na serwer informacje o aktualnym stanie czujników. Wtedy serwer odpowiada klientowi jaki był ostatni stan pomiaru (np. sprzed 5 minut).

Jeśli pomiar jest kosztowny a krytyczna jest jakość odpowiedzi (no. "potrzebuję wyniku z teraz a nie sprzed 10 minut)  - ESP powinien wysyłać na serwer pytanie "czy mam podać ostatnie wyniki" (w miarę często); jeśli istnieje jakiś klient oczekujący na wyniki, serwer odpowie "tak, dawaj", ESP + Arduino (nie wiem po co on tam w ogóle potrzebny, sam ESP pewnie wystarczy) zrobią pomiar, wyślą wyniki na serwer, a ten już sobie z klientem pogada.

Nie wiem w jaki sposób Twój ESP podłączony jest do Internetu, czy ma może prywatny adres IP, czy za NAT-em masz możliwość przekierowania portu? Co znaczy "zewnętrzny serwer" - czy to jakaś aplikacja WWW działająca na tanim hostingu czy może jakiś VPS czy dedyk (wtedy możesz zainicjalizować połączenie od strony ESP)? Możliwości jest dużo, ale przy braku informacji nie licz na jakąkolwiek sensowną odpowiedź.

 

  • Lubię! 2
Link do komentarza
Share on other sites

35 minut temu, ethanak napisał:

Do tego potrzebujesz jakiejś możliwości inicjacji połączenia z serwera zewnętrznego do Twojego ESP. Da się to zrobić, ale wymaga trochę kombinacji (przekierowanie portu chociażby, przy czym np. w sieciach komórkowych nie jest to praktycznie możliwe - blokowane są połączenia przychodzące, a ich odblokowanie wiąże się z pewnymi restrykcjami, których raczej jako prywatny użytkownik nie przeskoczysz).

Cześć,

da się to przeskoczyć nawet na kartach pre-paid (raz już to robiłem). Od strony twojego urządzenia instalujesz skrypt, który co jakiś czas (np. co 3 minuty) próbuje odpalić klienta VPN a na serwerze masz server VPN do którego się podłączasz. Ponieważ, gdy to twoje urządzenie inicjuje komunikację w tą stronę porty nie są blokowane (a twój cały ruch po TCP-IP jest tunelowany). Sprawdzone praktycznie z kartami pre-paid Play - działa bez zarzutu ;).

Nie wiem czy jasno to opisałem ale to działa - niestety wymaga instalacji klienta i serwera VPN. Nie wiem, czy na ESP jest jakiś klient VPN, to może być przeszkoda do realizacji tego pomysłu (ja robiłem to na SBC Cubieboard II gdzie był pełen LInux i dostępny klient VPN).

Pozdrawiam

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

@ethanak

Dziękuje za tak szybką i obszerną odpowiedź, niestety nie mam jeszcze zbyt dużego doświadczenia w tym temacie, także gdybym palnął jakąś głupotę to przepraszam. Mówiąc serwer zewnętrzny nie miałem na myśli korzystanie z taniego hostingu, na początku myślałem właśnie o VPS i wgranie na niego odpowiedniego oprogramowania.  Mój ESP działa narazie na jednym z przydzielonych ip w sieci wewnetrznej, nie zabieralem sie jeszcze za lekture dotycząca przekierowywania portow ponieważ najpierw chciałem mieć jasny obraz jak odbywać się powinna taka komunikacja i czy w ogóle jest ona możliwa. Niestety niezbyt rozumiem kwestie dotyczącą sieci komórkowych, o której piszesz. Czy to "w skrócie" oznacza, że próba nawiązania połączenia ze wspomnianym serwerem nie będąc połączonym z żadną siecią (łącząc się za pomocą sieci komórkowej) może stanowić spory problem? Tak jak pisałem dopiero stawiam pierwsze kroki w tej dziedzinie, także prosiłbym o wyrozumiałość.

@FlyingDutch

Tobie również dziękuje za odpowiedź. Skoro robiłeś podobny projekt już wcześniej to może mógłbyś mnie naprowadzić od czego powinienem zacząć? Z jakimi zagadnieniami koniecznie się zapoznać? Byłbym bardzo wdzięczny.

 

Edytowano przez mkowsky
Link do komentarza
Share on other sites

no ale komunikacja jest zależna od możliwości. jeśli masz zewnętrzny adres ip i na roterze możesz przekierować port na swojego esp - to jest najprostsza sprawa. jeśli nie to trzeba kombinować.

poza tym przy sieci komórkowej ty ze swojego esp nie będziesz miał problemu z połączeniem z serwerem - to serwer będzie miał problem z połączemiem z esp.

zacznij jednak od analizy możliwości, wrzuć tu jakieś podstawowe informacje na temat swojej sieci - wtedy będzie można pomyśleć nad konkretnymi rozwiązaniami. w drugą stronę to trochę bez sensu.

  • Lubię! 1
Link do komentarza
Share on other sites

23 godziny temu, ethanak napisał:

@ethanak 

Z tego co mi wiadomo to mam możliwość przekierowania jednego z portów z mojego routera na ESP i taki miałem pierwotnie zamysł (serwer "komunikujący" się z moim routerem, a potem sygnał przekierowywany na port, na którym nasłuchuje ESP).

57 minut temu, ethanak napisał:

poza tym przy sieci komórkowej ty ze swojego esp nie będziesz miał problemu z połączeniem z serwerem - to serwer będzie miał problem z połączemiem z esp.

Jakkolwiek głupio to  nie zabrzmi - jeśli mój esp będzie podłączony do mojej sieci lokalnej to jaki to ma związek z sieciami komórkowymi? 

 

 

Link do komentarza
Share on other sites

przecież pytałeś o komórki to dostałeś odpowiedź, prawda?

jeśli masz zewnętrzny ip i możliwość przekierowania portu to sprawa jest praktycznie rozwiązana - aplikacja na serwerze wysyła pytanie do esp (serwer www w najprostszym przypadku), jakoś ładnie ubiera otrzymane dane (jakiś json na przykład żeby było łatwiej) w html i po sprawie.

można również przekierować zapytanie klienta bezpośrednio na esp, ale wtedy musiałbyś tam generować całą stronę wyników, co jest nie tyle trudniejsze, co wymaga więcej grzebania. poza tym może być problem z równoległymi zapytaniami; aplikacja na serwerze może uznać dane sprzed np. 10 sekund (to już musisz sobie ustalić) za aktualne i nie zawracać głowy twojemu esp.

  • Lubię! 1
Link do komentarza
Share on other sites

12 minut temu, mkowsky napisał:

 Jakkolwiek głupio to  nie zabrzmi - jeślij esp będzie podłączony do mojej sieci lokalnej to jaki to ma związek z sieciami komórkowymi? 

Jeśli internet masz od któregoś z operatorów komórkowych to z zewnątrz się z własną siecią musisz połączyć za pomocą sieci komórkowej.

 

Kiedyś zrobiłem coś podobnego. Temperaturę wysyłałem z esp "na zewnątrz" za pomocą serwera FTP. ESP łączył się do FTP i wysyłał plik txt, a komputer "z zewnątrz" pobierał ten plik z FTP. Działało przez kilka miesięcy (dłużej nie było mi to potrzebne), a serwer FTP możesz postawić praktycznie za darmo do jakiegoś hostingu np w cba.pl

 

  • Lubię! 1
Link do komentarza
Share on other sites

53 minuty temu, ethanak napisał:

przecież pytałeś o komórki to dostałeś odpowiedź, prawda?

To prawda, ale myślałem, że bezpośredni związek z siecią komórkową w tym przypadku mamy tylko w sytuacji, gdy łączymy się z serwerem od strony aplikacji (telefonu), a komunikacja serwer <--> esp odbywa się za pośrednictwem "normalnej" sieci.

 

50 minut temu, PiotrekEl napisał:

Kiedyś zrobiłem coś podobnego. Temperaturę wysyłałem z esp "na zewnątrz" za pomocą serwera FTP. ESP łączył się do FTP i wysyłał plik txt, a komputer "z zewnątrz" pobierał ten plik z FTP. Działało przez kilka miesięcy (dłużej nie było mi to potrzebne), a serwer FTP możesz postawić praktycznie za darmo do jakiegoś hostingu np w cba.pl

 

To też jakieś rozwiązanie, aczkolwiek nie wiem czy w moim przypadku zdałoby egzamin.

 

Dziękuje wszystkim za odpowiedzi, nie zostaje mi nic jak "na chłodno" wszystko uporządkować i zabrać się do pracy, pozdrawiam 🙂

Link do komentarza
Share on other sites

Przed chwilą, mkowsky napisał:

To prawda, ale myślałem, że bezpośredni związek z siecią komórkową w tym przypadku mamy tylko w sytuacji, gdy łączymy się z serwerem od strony aplikacji (telefonu), a komunikacja serwer <--> esp odbywa się za pośrednictwem "normalnej" sieci.

Z siecią komórkową masz bezpośredni związek kiedy łączysz się własną domową siecią z internetem lub z w drugą stronę. Z tą różnicą, że z zewnątrz do swojej sieci się nie połączysz bezpośrednio jeśli dostęp do internetu masz przez sieć komórkową. TJ: esp się z serwerem na zewnątrz połączy, ale serwer z zewnątrz z esp się nie połączy. 

Link do komentarza
Share on other sites

@PiotrekEl 

3 minuty temu, PiotrekEl napisał:

Z siecią komórkową masz bezpośredni związek kiedy łączysz się własną domową siecią z internetem lub z w drugą stronę. Z tą różnicą, że z zewnątrz do swojej sieci się nie połączysz bezpośrednio jeśli dostęp do internetu masz przez sieć komórkową. TJ: esp się z serwerem na zewnątrz połączy, ale serwer z zewnątrz z esp się nie połączy. 

Mowa wyłącznie o sytuacji, kiedy internet mam od jednego z operatorów telefonii komórkowej, tak?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.