1

Téma: Opět DNS

Mně se zdá, že to DNS stále nepracuje správně.
Když je připojený kabel do zástrčky ethernetu, tak DNS funguje.
Když ale připojím zařízení na napájení bez ethernetu a po chvíli připojím kabel, tak to skončí na:

cekam na odpoved, dns-server-ip:192.168.1.20

Je to trochu špatné, když se zařízení připojuje někde na odlehlém místě a není jisté, jestli v té době jede internet.

main
{
 echo('[0] start');
  // s čím začínáme
  echo('[1] sys[65]=', sys[65]);
  dns_resolv('www.wwwwwww.cz');
  cekam_na_dns:
    // dokud se něco nestane (sys[65] se nastaví na nějakou hodnotu)
    if (sys[65]==0) goto cekam_na_dns;
  echo('[2] sys[65]=', sys[65]);
  // takže:
 cekam_na_odpoved:
    if (sys[65]==514)
    {
      echo('cekam na odpoved, dns-server-ip:', sys[70],'.',sys[71],'.',sys[72],'.',sys[73]);
      wait(1000);
      goto cekam_na_odpoved;
    }

 echo('[3] hotovo,dns-server-ip:', sys[70],'.',sys[71],'.',sys[72],'.',sys[73]);
 echo('[3] sys[65]=', sys[65]);
 echo('RESOLV: ', sys[66],'.',sys[67],'.',sys[68],'.',sys[69]);
 // hotovo, výsledek je v sys[66] až sys[69]

2

Re: Opět DNS

No ono to má problémy s internetem asi i další.
Ukládám data do flash pro případ výpadku internetu. Když tedy nasimuluji výpadek vytažením kabelu a pak ho po čase vrátím, tak níže periodicky volaná funkce už nic neodešle a hlásí :

Chyba HTTP1026-->0

 web
  {
  http_get(sys[66],sys[67],sys[68],sys[69],'www.wwwww.cz','/pocasi_test/stanice_unix1.php?date=',datum,'&teplota1=',t,'&heslo=heslo);
    label cekam_na_http:
    if (sys[65] == 0)
    {
     // echo ('Cekam na HTTP1');
      goto cekam_na_http;
    }
    //pokud server má problém:
    if ((sys[65] != 1024)||(sys[75] != 200))
    {
      echo ('Chyba HTTP',sys[65],'-->',sys[75]);
      //goto chyba_www_serveru;
      goto hlavni_smycka;
    }

 }

3

Re: Opět DNS

OK, zkuste dnešní BETA firmware pro MACRO, je tam aktualizace pro DNS. Jsem zvědav jestli bude fungovat.

HTTP chyba 1026 znamená přerušení HTTP GET funkce kvůli vypršení času na provedení komunikace (timeout), což odpovídá tomu, že byl odpojen Ethernetový kabel ze zařízení.
Konkrétní program SDS-C by si měl poradit se všemi možnými chybovými stavy, viz http://wiki.merenienergie.cz/index.php/OSI7_status_code

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

4

Re: Opět DNS

Já mám MicroLightE, může to tam přijít?

5

Re: Opět DNS

Použijte BETA firmware pro SDS MICRO, je k dispozici.

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

6

Re: Opět DNS

Poslední beta firmware a pořád píše: dns_resolv() OK:512 - takže OK.

7 Naposledy upravil: Simi (2014-01-14 20:41:42)

Re: Opět DNS

Mně se to chová pořád stejně i po nahrání nového beta firmware. Tedy, když je kabel v ethernetu a pak napájení, DNS projde. Když to udělám opačně. Nejprve napájení a pak ethernet, tak to uvízne na :

cekam na odpoved, dns-server-ip:192.168.1.20

Dál se to nedostane.

8

Re: Opět DNS

Funkce dns_resolv() může být ve stavu sys[65]==514 tak dlouho, dokud nedostane odpověď. Je proto potřeba hlídat celkovou dobu, po kterou je tento stav platný (a přerušit pokud se změní na 512 nebo 513), viz: http://wiki.merenienergie.cz/index.php/OSI7_status_code - pokud dojde k "vypršení" času, tak se DNS překlad nepovedl a je potřeba to zkusit později znovu (a lze provést záchrannou situaci v takovém případě, jako je například zkusit jiný server nebo pevnou IP adresu atd.). To hlídání času si musí provést každý ve svém SDS-C programu sám, protože jen tak lze poskytnout skutečně univerzální řešení (každý bude chtít čekat různě dlouhý čas).

Správný kousek programu pro použití dns_resolv() je k dispozici na této stránce: http://wiki.merenienergie.cz/index.php/Sdsc_sysf

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

9

Re: Opět DNS

Díky, DNS tedy funguje. Jak ještě prosím upravit funkci web, aby to po vytažení kabelu a opětovném připojení fungovalo?
Teď vyskočí při chybě z funkce web do main a pak po 5 minutách se znova zavolá funkce web a stále hlásí chybu: Chyba HTTP1026-->0

web
  {
  http_get(sys[66],sys[67],sys[68],sys[69],'www.wwwww.cz','/pocasi_test/stanice_unix1.php?date=',datum,'&teplota1=',t,'&heslo=heslo);
    label cekam_na_http:
    if (sys[65] == 0)
    {
     // echo ('Cekam na HTTP1');
      goto cekam_na_http;
    }
    //pokud server má problém:
    if ((sys[65] != 1024)||(sys[75] != 200))
    {
      echo ('Chyba HTTP',sys[65],'-->',sys[75]);
      //goto chyba_www_serveru;
      goto hlavni_smycka;
    }

 }

10

Re: Opět DNS

Jde prosím http_get napsat tak, aby pracovalo po odpojení a připojení kabelu? Děkuji.

11

Re: Opět DNS

Tady je plnohodnotný příklad (otestováno dnes na SDS-IO6 s aktuálním BETA firmware).

Tento příklad představuje celý SDS-C program, upravte si IP adresu a URL a nahrajte ho do zařízení. Pak sledujte konzolu, popř. log vašeho web serveru (přístupy).

// test
var i, pokus;

test
{

 sys[77] = 1;

 echo(' ');
 echo('[1] HTTP GET... pokus: ', pokus); pokus++;
 
 //nemam uspesny DNS, takze to udelam s rucni IP (ziskano rucne) 
 http_get(192,168,1,111,'192.168.1.111','/echo.htm');
 goto cekam_na_http;  

 //pockam az probehne funkce do konce
label cekam_na_http:
 if (sys[65] == 0) goto cekam_na_http; 
 
 //pokud server má problém:
 if ((sys[65] != 1024)||(sys[75] != 200))
 {
   echo('Chyba komunikace s www serverem ',sys[65],', http: ', sys[75]);

   return;
 };

 // OK

 i = 0;
 echo('[2] PRIJEM ', sys[75],':  ram[0]=',ram[i]);

}

main
{
  echo('[0] Start programu.');
  
  pokus = 0;

opakovat:

  test();

 //pockame 10 sec
 sys[64] = 10;
label cekej:
 if (sys[64] != 0) goto cekej;

 //znovu
 goto opakovat;

}

Pokud dojde k vytažení Eth kabelu (nebo k jakékoliv jiné chybě, která způsobí nedostupnost serveru), spustí se timeout uvnitř http_get() a ten po určitém čase (45 sec) tuto funkci ukončí s patřičnou chybou. Potom musí SDS-C program funkci http_get() zavolat znovu atd.
Po obnovení provozního stavu vše začne fungovat jak má, s maximálním zpožděním 45sec + zpoždění dané opakovací periodou konkrétního SDS-C programu.

Tady je výpis konzole zařízení SDS-IO6, které provádí tento ukázkový program: (pokus 2 až 5 byl stav kdy byl vytažen Eth kabel)

[0] Start programu.
 
[1] HTTP GET... pokus: 0
[2] PRIJEM 200:  ram[0]=8
 
[1] HTTP GET... pokus: 1
[2] PRIJEM 200:  ram[0]=8
 
[1] HTTP GET... pokus: 2
Chyba komunikace s www serverem 1026, http: 0
 
[1] HTTP GET... pokus: 3
Chyba komunikace s www serverem 1026, http: 0
 
[1] HTTP GET... pokus: 4
Chyba komunikace s www serverem 1026, http: 0
 
[1] HTTP GET... pokus: 5
Chyba komunikace s www serverem 1026, http: 0
 
[1] HTTP GET... pokus: 6
[2] PRIJEM 200:  ram[0]=8

[1] HTTP GET... pokus: 7
[2] PRIJEM 200:  ram[0]=8
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

12

Re: Opět DNS

Díky moc. Já jsem udělal dvě chyby :
1. DNS - myslel jsem, že když se na začátku provede překlad, tak platí pořád. Ono to není pravda, po vytažení kabelu  a
opětovném zapojení se musí provést znova.

2. Skok pomocí "goto" z vlastní funkce do main asi není dobrý nápad (přetečení zásobníku ??). Možná by to mohl hlídat kompilátor?