ESP8266 trvale spojení s web serverem

Odpovědět
michalc
Příspěvky: 11
Registrován: 27 led 2020, 19:40
Reputation: 0

ESP8266 trvale spojení s web serverem

Příspěvek od michalc » 11 kvě 2022, 01:01

Zdravím,
dělám přes ESP8266 ovládání vrat přes RFID nebo přes web. Mám web server, na kterém je PHP a mariaDB, tento web server je dostupná z venku ale na vnitřní síťi se s ESP nevidí, ESP8266 je připojen na vnitřní síti, je možné komunikovat se serverem ale ESP nemá venkovní IP adresu. Chtěl bych přes mobil ovládat, přes ESP vrata. JE možné nějak poslat přes webový server, ze zobrazené stránky na mobilu ovládat vrata a pokud ano tak jakým způsobem?

Děkuji moc za rady

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP8266 trvale spojení s web serverem

Příspěvek od kiRRow » 11 kvě 2022, 14:44

HTTP Server je na vnitřní síti spolu s ESP8266, ale nevidí se ? To je nějaké divné, ne ? - Nebo tu popsanou topologii chápu špatně ...

No řešení je zprovoznit tak aby na sebe ESP a HTTP Server viděli - ty se připojíš na HTTP Server a kliknutím na tlačítko tam zanecháš vzkaz pro ESP že má otevřít. ESP se pak bude třeba každých 10s koukat na HTTP Server a ptát se jestli tam nemá vzkaz, po jeho přečtení je třeba ten vzkaz smazat, nebo ho označit jako provedený a neopakovat.

Další možnost je přímo na ESP spustit HTTP Server a proroutovat veřjnou IP routeru na neveřejnou IP ESP. Tady ale bude problém to udělat pořádně zabezpečené. U první možnosti zůstane ESP schované za routerem a na HTTP Serveru je výrazně vyžší výpočetní výkon.

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: ESP8266 trvale spojení s web serverem

Příspěvek od martinius96 » 11 kvě 2022, 22:45

Je to presne tak, ako to popísal kiRRow.

Najľahšia možnosť je prevádzkovať ESP ako klienta (webclient).
S ESP sa ako klient cyklicky budeš pripájať k serveru a načítavať určitý výstup, ktorý ti vygeneruje PHP súbor, alebo to bude hodnota v .txt súbore, ktorého obsah načítaš. Iný klient - napríklad smartfón cez ktorý chceš otvoriť bránu spustí php skript, ktorý do .txt súboru nastaví napríklad OPEN. S ESP tento payload načítaš a ak zistíš, že je hodnota OPEN, otvoríš bránu. Následne vykonáš ďalší request z ESP na .php subor, ktorým nastavíš hodnotu v .txt súbore na CLOSED. Server nemôže kontaktovať tvojho klienta pri zmene v súbore (jednak preto, že klient má lokálnu IP adresu a nie je z internetu dostupný a taktiež, že je to klient-->server architektúra komunikácie). Máš teda jedno centrálne webové rozhranie, kde sa pripájajú obaja klienti.

Možno pre real-time komunikáciu by bolo v tvojom prípade vhodnejšie použiť MQTT a dáta načítavať priamo z topicu, kedy je to do pár milisekúnd po prijatí dát do topicu, ktorý odoberáš. Je to ale pracnejšie implementovať najmä ak to máš na vlastnom hardvéri a nie ako cloudovú službu.

Hodnota môže byť RAW plaintext, alebo štruktúra, napríklad JSON, XML...
Výhodou štruktúry je najmä to, že si tam môžeš definovať aj rôzne iné parametre, ktoré môžeš využiť, napríklad dĺžka otvorenia brány, aktuálny čas...
Príklad JSON štruktúry:
Obrázek

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: ESP8266 trvale spojení s web serverem

Příspěvek od gilhad » 12 kvě 2022, 02:03

Server nemôže kontaktovať tvojho klienta pri zmene v súbore (jednak preto, že klient má lokálnu IP adresu a nie je z internetu dostupný a taktiež, že je to klient-->server architektúra komunikácie
Jestliže na serveru běží něco, co ten soubor mění (nebo prostě nějak reaguje na žádost o změnu toho souboru) a ty nad tím máš kontrolu (což u toho php skriptu tak nějak předpokládám, že michalc má), tak to samozřejmě může současně s/místo změny souboru udělat cokoli, například informovat ESP na lokální síti.

Těch způsobů je spousta, od "zatahání za nožičku" například přez nějaké rozhraní, složitějši komunikaci, spuštění dedikovaného skriptu/programu nebo třeba vyžádání si http odpovědi od toho ESC - kde běžící server může být silně zjednodušený, ale vracet aktuální a plánovaný stav vrat.

Kromě toho to může dělat i cokoli běžícího z cronu (čímž můžeš efektivně oddělit výkon a oprávnění), nebo třeba přez inode kontrolující stav souboru, nebo nějaký primitivní pseudo-filesystem.

Je to jen otázka, co od toho člověk požaduje a co umí a kolik práce tomu chce věnovat. (A taky vhodnosti, výhod a nevýhod jednotlivých takových řešení)

Naopak ESP na lokální síti je právě z toho serveru velmi snadno dostupné - že se se serverem zrovna nevidí je IMHO spíš dáno špatným nastavením, nebo způsobem komunikace.

michalc
Příspěvky: 11
Registrován: 27 led 2020, 19:40
Reputation: 0

Re: ESP8266 trvale spojení s web serverem

Příspěvek od michalc » 12 kvě 2022, 12:10

Dobrý den,
V příloze jsem se snažil nakreslit jak to mám udělané. ESP web server vidí ale pokud bych se měl odrazovat z web serveru na ESP, tak to nepůjde (asi to je prave to co nevím jak udělat). Obě zařízení jsou na jiném místě. Šlo by udělat spojení napr. i přes websocket?
Defakto bych pro použití u vrat potreboval aby reagovali skoro okamžitě.
Dekuji za rady.
Přílohy
image.jpg

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: ESP8266 trvale spojení s web serverem

Příspěvek od gilhad » 12 kvě 2022, 12:34

Pak jen že by se to ESP průběžně dotazovalo serveru co a jak (a případně mu při tom předávalo data, jak to vypadá u něj)

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP8266 trvale spojení s web serverem

Příspěvek od kiRRow » 12 kvě 2022, 15:00

Pokud máš veřejnou IP adresu můžeš ESP zpřístupnit z venku pomocí NAT. Na routeru si najdeš něco jako NAT, Port Forwarding, Virtual Server ... pokaždé se to jmenuje jinak dle výrobce. Nastavuje se tam venkovní příchozí port, na jakou IP se to má přesměrovat uvnitř sítě a vnitřní port. Cokoliv pak pošleš na VeřejnaIP:PORT bude posláno routerem na VnitřníIPESP:PORT.

Nevýhodou je že kdokoliv z internetu pak uvidí tvé ESP. Internet je plný robotů co neustále zkouší co má kdo slabě zabezpečené. Musel bys na firewallu na routeru zakázat všem kromě tvého webového serveru, aby tento port, nebo konkrétní vnitřní IP mohli kontaktovat. A celé to má vlastně smysl jen pokud tvůj web server na internetu podporuje PHP funkci cUrl. Ta umožňuje posílat HTTP požadavky a zpracovávat jejich výsledky.

Pak by to šlo tak, že na web serveru někde na internetu běží stránka, stisk tlačítka spustí script, který kontaktuje web server na ESP, ESP na to bude reagovat otevřením brány a vygenerováním stránky, která scriptu na webserveru potvrdí, že ESP obdržel požadavek.

edit : Seznam portů, které nelze použít jako příchozí - Prohlížeče je odmítají otevřít jako zakázané porty

Kód: Vybrat vše

1,      // tcpmux
7,      // echo
9,      // discard
11,     // systat
13,     // daytime
15,     // netstat
17,     // qotd
19,     // chargen
20,     // ftp data
21,     // ftp access
22,     // ssh
23,     // telnet
25,     // smtp
37,     // time
42,     // name
43,     // nicname
53,     // domain
69,     // tftp
77,     // priv-rjs
79,     // finger
87,     // ttylink
95,     // supdup
101,    // hostriame
102,    // iso-tsap
103,    // gppitnp
104,    // acr-nema
109,    // pop2
110,    // pop3
111,    // sunrpc
113,    // auth
115,    // sftp
117,    // uucp-path
119,    // nntp
123,    // NTP
135,    // loc-srv /epmap
137,    // netbios
139,    // netbios
143,    // imap2
161,    // snmp
179,    // BGP
389,    // ldap
427,    // SLP (Also used by Apple Filing Protocol)
465,    // smtp+ssl
512,    // print / exec
513,    // login
514,    // shell
515,    // printer
526,    // tempo
530,    // courier
531,    // chat
532,    // netnews
540,    // uucp
548,    // AFP (Apple Filing Protocol)
554,    // rtsp
556,    // remotefs
563,    // nntp+ssl
587,    // smtp (rfc6409)
601,    // syslog-conn (rfc3195)
636,    // ldap+ssl
993,    // ldap+ssl
995,    // pop3+ssl
1719,   // h323gatestat
1720,   // h323hostcall
1723,   // pptp
2049,   // nfs
3659,   // apple-sasl / PasswordServer
4045,   // lockd
5060,   // sip
5061,   // sips
6000,   // X11
6566,   // sane-port
6665,   // Alternate IRC [Apple addition]
6666,   // Alternate IRC [Apple addition]
6667,   // Standard IRC [Apple addition]
6668,   // Alternate IRC [Apple addition]
6669,   // Alternate IRC [Apple addition]
6697,   // IRC + TLS
10080,  // Amanda

pavelve
Příspěvky: 27
Registrován: 23 zář 2018, 10:10
Reputation: 0

Re: ESP8266 trvale spojení s web serverem

Příspěvek od pavelve » 13 kvě 2022, 09:46

Řešil bych to přes MQTT. Veřejných serverů, které jsou pro pár zařízení zdarma, je celkem hodně.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: analytik a 6 hostů