ESP8266 a připojení klienta k externímu serveru

Odpovědět
jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

ESP8266 a připojení klienta k externímu serveru

Příspěvek od jankop » 18 led 2021, 21:22

Má napsaný sketch, který čte vlhkostní senzor a odesílá data na server tmep.cz pro uchování a zobrazení. Chtěl jsem ho vyšperkovat a tak jsem udělal ještě webové rozhraní na kterém se zobrazují lokálně data také. A je tam i signalizace, když se externí server nepodaří konektovat. Ale naprosto mi to nefungovalo. Pořád to spokojeně odesílalo data do zdi. Po několika bezesných nocích jsem zjistil, že to dělá můj router ASUS. Pokud ztratí spojení WAN, tak všechny požadavky přebírá a nějakým způsobem na ně reaguje. Běžné metody kontroly if (!client.connect(host, 80) tedy selhávají. Po velkém pátrání jsem našel napůl fungující metodu, jak tuto vlastnost na routeru přes CLI vypnout, ale nejsem si jist, jestli je to natrvalo nebo jen do restartu routeru. Teď ho nemůžu otočit. Ale jde mi především o to, aby byl program funkční i když nějaký router (Asus to dělá asi každý) nebude modifikován.
Ptám se tedy, jestli při konektu serveru klientem pošle server něco, podle čeho by bylo možné ho identifikovat. Po konektu následuje již můj požadavek GET s odesílanými parametry a server tmep.cz neposílá rozumný identifikátor, podle kterého bych ho byl schopen určit.
Program zatím nepřikládám, protože je už trochu košatý, ale klidně ho sem strčím. Je vcelku inspirativní a obsahuje skvěle funkční OTA, které je k nezaplacení.
Pokud máte nějaký nápad, budu velice rád.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od KamilV » 18 led 2021, 21:38

Hele to je dost divný. Jakým způsobem ten ASUS na ty požadavky "reaguje"? To jako vrátí HTTP200 a nějakou response, která je tak moc stejná jako od reálného serveru?

Jinak když si uděláš na začátku třeba jen HEAD request na tmep.cz, v hlavičkách se vrátí např:

Kód: Vybrat vše

server: Apache
x-powered-by: Nette Framework
Pochybuju, že v Asus routeru bude apache s Nette, takže třeba i podle tohoto by se dalo identifikovat, že Ti neodpovídá cílová služba...

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od jankop » 18 led 2021, 21:56

Na GET odpoví server wanduck kódem 301. Ale chtěl jsem to detekovat ještě před odesláním dat. Buď zkusím testnout ten HEAD request, nebo bude dělat detekci až na odpověď 200. Ta by měla snad přijít jen z legálního serveru.
Dík za radu.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od KamilV » 18 led 2021, 22:42

IMHO není jiná cesta, než do serveru ťuknout a přečíst si, co odpoví, A nejmenší ťukanec je HEAD, protože odpadají data té response.
Samotný otevřený socket žádnou identifikaci nevrací, resp. stejně bys nevěděl, s kým na druhé straně komunikuješ.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od jankop » 18 led 2021, 23:06

Asi máš pravdu, něco teď zkouším, ale nějak se mi to nedaří. Ovšem ten HEAD asi nepoužiju, udělám to opravdu až tím parsováním odpovědi 200 OK. Jen jsem čekal, že v response bude url serveru, ale nakonec se bez toho obejdu.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od KamilV » 19 led 2021, 08:08

Jen ta spolehlivost bude taková nic moc, protože 200 OK vrátí v podstatě libovolný webserver.
API tmep.cz nevrací žádný JSON nebo XML? Nejjistější totiž je nespoléhat jen na HTTP stav, ale z response se ujistit, že data byla v pořádku přijata. Ale takovou response musí generovat server - tedy napsat autorovi, zda by mohl vracet třeba nějaký kontrolní součet nebo tak.

Pak už by bylo celkem "jisté", že to chodí tam kam má :)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od jankop » 19 led 2021, 09:22

To máš pravdu, na druhé straně je tam pevná URL a když to z ní vrátí 200 OK, tak se dá očekávat, že zaslané parametry došly kam měly. Vrací to text, který je pod tabulkou. To mám pro testování. Patří tam i ta nula, to je nějaký parametr, po jeho významu jsem zatím nepátral. Teď řeším problém, že jednou za čas se odezva serveru prodlouží z cca 100ms na téměř přesných 5s. Zjišťuju jak trvají jednotlivé bloky, ale z millis() jsem musel přejít na micros() protože ten procesor je docela rychlej. Nenašel jsem žádné prodlevy v algoritmech tak hledám problém všude možně. Našel jsem si funkci server.setNoDelay(true);, ale zatím mi ji kompiler nebere. Musím zjistit proč. Má to být v podstatě dektivace algoritmu, který pozdržuje krátké datové segment pro omezení provozu na netu. Fakt je ten, že některé informace je těžko vydolovat z té haldy balastu.
web01.png

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266 a připojení klienta k externímu serveru

Příspěvek od jankop » 22 led 2021, 12:31

Dovolím si poznámku k těm ASUS routerům, které v případě požadavku na stránku, která je nedostupná, provedou redirekt na interní chybovou stránku.
To může někdy přinášet problémy, ale pozitiva vesměs žádná. Hledal jsem konečné řešení docela dlouho, tak ho tady prezentuji.
U starších routerů ASUS je pro vypnutí třeba:
1. Administrace/System/ povolit telnet
2. Přihlásit se telnetem přes správné heslo
3. Zadat příkaz: nvram set web_redirect=0
4. Pak je vhodné zase Telnet zakázat

U novějších ASUS routerů je to jednodušší:
1. Administrace/System/Enable WAN down browser redirect notice vypnout
Krásný den přeji

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů