1

Téma: [vyřešeno] Chyba komunikace s www serverem, http: 0

Ahoj, mám SDS MICRO DIN E, asi po 2 měsících bezproblémového provozu, kdy SDS doručovalo data na portál, se zařízení odmčelo. V konzoly vidím chybu "Chyba komunikace s www serverem, http: 0". C program jsem stáhnul z portálu a bez úpravy nahrál na SDS, nepomohlo to. FW mám aktuální 14.11.2019. Z routru kam je SDS připojený se dá volně přistoupit na internet.
Poradí někdo ? díky

Ještě přikládám log z arp.htm

[ARP:A]
210 50:D4:F7:D6:77:C5 - 192.168.0.1

[ARP:B]
210 8C:85:90:5F:4D:95 - 192.168.0.193

[HTTP-GET]
con=0 grl=295 rc=1026 timH=71147 timS=3915462163

[TCP]
[0] 192.168.0.193:17856 timew
[1] 192.168.0.193:20416 estab
[2] 192.168.0.193:52223 closed
[3] 192.168.0.193:52735 closed
[4] 192.168.0.193:53247 closed
[5] 192.168.0.193:53759 closed
[6] 192.168.0.193:54271 closed
[7] 192.168.0.193:56319 closed
[8] 192.168.0.193:55295 closed
[9] 192.168.0.193:55807 closed
[10] 192.168.0.193:56831 closed
[11] 192.168.0.193:57343 closed
[12] 192.168.0.193:57855 closed
[13] 192.168.0.193:18368 timew
[14] 192.168.0.193:18880 timew
[15] 192.168.0.193:19392 timew
[16] 192.168.0.193:50931 closed
[17] 192.168.0.193:51443 closed

2

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Jakou IP adresu má SDS a jakou ten router ?

Když z vašeho PC, připojeného do routeru, pošlete HTTP GET požadavek na ePortál, projde to ?


Podle výpisu, není http_get() funkce připojena na server, přičemž ale chce odeslat na server 295 bajtů dat. Protože se to nepovedlo, hlásí chybu 1026, což je TIMEOUT.
Tato chyba se stane když se nepovede otevřít TCP spojení na server.

To znamená, že SDS se vůbec nedaří připojit se na server. Připojuje se na správnou adresu (ase se musíte podívat do programu) ? Nechytne to někde nějak firewall ? atd.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Veřejná adresa router se změnila, asi můj poskytovatel změnil něco u nich.
Novou IP jsem nastavil v administraci zařízení na portále. SDS má interní ip http://192.168.0.174.

HTTP GET zkusím až tam budu - dobrý tip, díky.

V kódu který jsem stáhnul z portálu je ... http_get(77,93,211,207,'eportal.merenienergie.cz',' ...
ping na 77.93.211.207 mi nejprojde nikde, ani na jiný síti - vždy timeout.


ping 77.93.211.207
PING 77.93.211.207 (77.93.211.207): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

4

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

fanysoft napsal:

V kódu který jsem stáhnul z portálu je ...
ping na 77.93.211.207 mi nejprojde nikde, ani na jiný síti - vždy timeout.

Právě teď jsem to zkusil u sebe na PC a komunikace na právě tuto IP mi funguje.

77.93.211.207 =>

HTTP/1.1 200 OK
Date: Fri, 19 Jun 2020 16:57:02 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 741
Connection: close
Content-Type: text/html; charset=windows-1250
...

Ping nefunguje ale to asi tak má záměrně správce serveru nastaveno, to já nevím.

Takže odhaduji že to musí být asi něco po cestě.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Používám SDS-MIKRO pro ovládání WiFi spínačů Sonoff (se softwarem Tasmota). Používám příkaz http_get, kterým spínač zapínám a vypínám:

Vypni_klimu
{
echo('Vypinam klimu');
sys[77]=2;
http_get(192,168,1,249,'192.168.1.249','/cm?cmnd=Power%20Off');
Http_komunikace();
echo('Klima:',text[0]);
}

V logu SDS se správně zobrazí:

Vypinam klimu
Server hlasi 200 OK    - HOTOVO
Klima:f{"POWER":"OFF"}

Ve verzi firmware 17.1.2019 vše funguje správně. Nyní jsem se rozhodl upgradovat na nejnovější firmware 4.8.2020 a příkaz se zacyklil. Program se v tomto bodě zastaví a trvá to více, než minutu, než pokračuje dále. V logu SDS vidím toto:

Vypinam klimu
Chyba, www server nedostupny nebo nevratil 200 OK - konkretni htfp kod je:0
Klima:f{"POWER":"OFF"}

Příkaz ve skutečnosti proběhne správně a vrátí i správnou odpověď od WiFi spínače. Jen interní smyčka příkazu probíhá do vypršení timeoutu (více, než minutu) a nedočká se návratové hodnoty 200.
Zkusil jsem SDS downgradovat verzi firmware na 17.1.2019 a vše zase běží správně. Bohužel nemám k dispozici verze firmware mezi těmito dvěma, abych vyzkoušel, mezi kterými verzemi došlo k této změně chování.

6

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

podívám se na to, můžete sem prosím dát arp.htm (co tam je v tu chvíli jak to čeká)

plus (aspoň výsek) programu který používáte, ať to můžu zreplikovat

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

7

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

arp.htm:

NETWORK

[ARP:A]

207 CC:50:E3:1C:09:3E - 192.168.1.249
209 50:C7:BF:06:DE:00 - 192.168.1.1


[ARP:B]

210 E8:2A:44:DA:D0:E3 - 192.168.1.18
206 00:25:36:C6:7D:0C - 192.168.1.187
205 00:08:9B:DE:AC:56 - 192.168.1.161


[HTTP-GET]

connecting=0, connected=1, closing=1, forceclose=0, abrt=1, tout=0
TX: tosend=76 sptr=76 last=0 left=0
IP: 192.168.1.249 : 80
sys75=0 sys77=2 sys78=18

osi7_retcode=0 hlf=10
http_timeout=27137 smtp_timeout=173233

TCP conns

[0] 192.168.1.18:3300 estab [HTTP-GET]
[1] 192.168.1.18:3044 closed
[2] 192.168.1.18:48611 closed
[3] 192.168.1.18:48867 closed
[4] 192.168.1.18:60897 closed
[5] 192.168.1.18:61409 closed
[6] 192.168.1.18:61665 closed
[7] 192.168.1.18:61921 closed
[8] 192.168.1.18:45281 closed
[9] 192.168.1.18:65248 closed
[10] 192.168.1.18:18656 closed
[11] 0.0.0.0:0 closed
[12] 0.0.0.0:0 closed
[13] 0.0.0.0:0 closed
[14] 0.0.0.0:0 closed
[15] 0.0.0.0:0 closed
[16] 0.0.0.0:0 closed
[17] 0.0.0.0:0 closed
[18] 0.0.0.0:0 closed
[19] 0.0.0.0:0 closed
[20] 0.0.0.0:0 closed
[21] 0.0.0.0:0 closed
[22] 0.0.0.0:0 closed
[23] 0.0.0.0:0 closed
[24] 0.0.0.0:0 closed
[25] 0.0.0.0:0 closed
[26] 0.0.0.0:0 closed
[27] 0.0.0.0:0 closed
[28] 0.0.0.0:0 closed
[29] 0.0.0.0:0 closed
[30] 0.0.0.0:0 closed

8

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Výsek kódu:
kód obsahuje příliš mnoho frází "http" a "www", které byly nahrazeny "h**p" a "w*w", jinak nešlo vložit do příspěvku

pro vysvětlení - program nejprve komunikuje po sériové lince RS485 s jiným zařízením protokolem MODBUS-RTU, přečte odpověď, přečtené hodnoty zpracuje a ovládá relé na desce SDS, později byl přidán externí WiFi spínač Sonoff.

label cekam_na_h**p:

 // stala se nejaka chyba ? (1025, 1026, atd. . . . )
 if (sys[65] > 1024) goto chyba_w*w_serveru;

 // zatim pracuje, takze cekam dale
 if (sys[65] != 1024) goto cekam_na_h**p;

 // takze mame vysledek (1024)

 // overime navratovou hodnotu
 if (sys[75] != 200) goto chyba_w*w_serveru;

 // je to 200 OK
 echo('Server hlasi 200 OK    - HOTOVO');

 // vse hotovo
 goto final;

label preskocit_protoze_chyba_DNS:
 // obsluha chyby - napø. provést chybové hlášení na konzoli

 echo('Chyba, nelze provest DNS preklad.');

 goto final;

label chyba_w*w_serveru:
 // obsluha chyby - w*w server

 echo('Chyba, w*w server nedostupny nebo nevratil 200 OK - konkretni h**p kod je: ',sys[75]);

 goto final;

label moc_brzo_musim_jeste_cekat:
 // 1029

 echo('Volani h**p_get bylo moc brzo, protoze se jeste nedokoncila predchozi zavolana funkce.');

 goto final;

label jina_chyba:
 // jina chyba

 echo('Jina chyba: ',sys[65]);

 //
label final:

}

Zapni_klimu
{
 echo('Zapinam klimu');
 sys[77]=2;
 h**p_get(192,168,1,249,'192.168.1.249','/cm?cmnd=Power%20On');
 h**p_komunikace();
 echo('Klima:',text[0]);
}

Vypni_klimu
{
 echo('Vypinam klimu');
 sys[77]=2;
 h**p_get(192,168,1,249,'192.168.1.249','/cm?cmnd=Power%20Off');
 h**p_komunikace();
 echo('Klima:',text[0]);
}

Vzdalene_rele
{
 var ofs;
  ofs=300;
  if (R1 > 0) {NTPR1=sys[4]+ofs; T1=ofs;}
  if (R3 > 0) {NTPR2=sys[4]+ofs; T2=ofs;}
  if (R4 > 0) {NTPR2=sys[4]+ofs; T3=ofs;}
  if (T1 > 0) {X1 = 1;} else {X1 = 0;}
  if (T2 > 0) {X2 = 1;} else {X2 = 0;}
  if (T3 > 0) {X3 = 1;Zapni_klimu();} else {X3 = 0;Vypni_klimu();}
 //echo('Offset: ',ofs);
}

 // -------  volani vlastnich procedur sem  -------
echo('RS485 write cti stav');
echoinline('RS485 read:');
Vyprazdni_buffer();
text[0]=0x01;
text[1]=0x03;
text[2]=0x00;
text[3]=0x0A;
text[4]=0x00;
text[5]=0x01;
text[6]=0xA4;
text[7]=0x08;
serial_write(0, 0, 8);
//serial_text_out(0x01, 0x03, 0x00, 0x0A, 0x00, 0x01, 0xA4, 0x08);
wait(100);
Prijem_zpravy();
echo();
if ( comm_status == 0 ) Cti_RS485();
Vzdalene_rele();
echo('T1:',T1);
echo('X1:',X1);
echo('T2:',T2);
echo('X2:',X2);
echo('T3:',T3);
echo('X3:',X3);

9

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Váš program očekává že mu protistrana odpoví

sys[77]=2;

nicméně nevidím nikde co máte v sys[78] - a tady bude právě ten problém.
SDS stále čeká na X bajtů odpovědi (kde X je právě vámi nastavený obsah sys[78]), ale pokud protistrana neodpoví plným počtem (X nebo více), tak SDS stále čeká a čeka... až dojde k timoutu (vypršení ochranného času).

connecting=0, connected=1, closing=1, forceclose=0, abrt=1, tout=0

znamená, že http komunikace je hotová (connected = 1 a closing = 1, tzn. stále ještě připojeno a chceme se odpojit).

Řešení (dle návodu co je na wiki) je buď:

(a)

sys[77]=0; // nečekat na odpověď a hned po úspěšném odeslání get a potvrzení (200) ukončit spojení

(b)

sys[77]=2; // čekat na odpověď a uložit do pole ram
sys[78]=X; // počet znaků odpovědi které vždy určitě přijdou

Ale pokud odpověď nezpracováváte, tak použijte (a).


Ve výsledku bychom tam čekali (po skončení komunikace) toto

connecting=0, connected=0, closing=0, forceclose=0, abrt=0, tout=0

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

10

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Tak bohužel, nastavil jsem sys[77]=0; sys[78]=0; a v aktuální verzi firmware (4.8.2020) komunikace http_get po timeoutu havaruje s kódem 0. Se starší verzí firmware (17.1.2019) vše funguje bez problémů.
Mohl bych poprosit o zaslání starších firmwarů, abych vyzkoušel mezi kterými verzemi došlo k této změně?

11

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Ještě jsem zapoměl dodat, že používám zařízení s kódem firmware D0000001 MICRO.

12

Re: [vyřešeno] Chyba komunikace s www serverem, http: 0

Podle uvedených informací se stane to, že komunikace mezi SDS a protistranou je ukončena přes TCP RST (a nikoliv přes TCP FIN). Toto ukončení provedla protistrana.

Tato informace by měla být vidět i v logu (historii), tzn. na stránce webové administrace SDS - zkuste se tam podívat a potvrdit to.

Dále.

Zkuste to chování protistrany ověřit následovně:
- připojte protistranu tak, aby jste se na webserver dostali ze svého PC
- spusťte Wireshark a dejte logovat síťový provoz, zadejte filtr "TCP"
- otevřete stránku (dle příkladu výše: 192.168.1.249/cm?cmnd=Power%20On )
- sledujte výpis Wiresharku
- pokud se i tam ukáže že HTTP TCP stream byl ukončen TCP RST, namísto TCP FIN, tak je jasná chyba v kódu web serveru
(nebo uložte záznam do .pcap souboru a pošlete mi to na: sds (zavináč) an-d.cz )

Aktualizovaný FW už při TCP RST správně nastaví výsledek do SDS-C. Funkcionalita je ověřena (odpovídá i záchyt pcap), takže problém je vyřešen.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !