1

Téma: [vyřešeno] http_get problém mezi dvěmi SDS

Mám 2 SDS micro light (neaktualizovaný firmware) a nemůžu rozejít komunikaci mezi nimi.

http_get na klasicky http server je v poradku

http_get(32,123,12,23,'32.123.12.23','/sdscep?p=0&sys140=5');

a konci mi navratovou hodnotou 1024, mezi sebou koncim ale na

http_get(192,168,22,52,'192.168.22.52','/sdscep?sys140=123456');

chyba: 1026 - timeout (neobdržel jakokoliv odpověď do stanoveného času)


Případně http_get(192,168,22,52,'192.168.22.52','/sdscep?p=0&sys140=123456');
chyba 1027 - odpojeno - webový server násilně přerušil síťové spojení (reset).

Z web rozhrani http://192.168.22.52/sdscep?p=0&sys140=1234  funguje spravne a i hodnota je ulozena spravne.

Poradíte , kde mám hledat problém?

2

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Komunikace mezi zařízeními SDS pomocí http_get() určitě funguje, nicméně to pro jistotu ještě prověřím.

Máte aktuální firmware?

Detaily k této konkrétní záležitosti viz http://wiki.merenienergie.cz/index.php/ … le_control

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

3 Naposledy upravil: tola (2012-02-15 08:54:35)

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Zařízení jsem koupil minulý týden tak doufám, že je poslední.

tak firmware , alespon doufam ze je to toto znaceni je: hw SoC-ARM REV4 100Mbit DF5, ze dne 17.1.2012..

V pripade , ze zarizeni upravuji pres web tak se obcas stane, ze cekam 15 vterin nez se stranka prekresli. Nekdy musim udelat refresh.

4

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Tak vyreseno,
problem uplne nekde jinde.  Dodane zarizeni maji uplne stejne MAC adresy. Je to naprosto logicke , ze nemohou fungovat na stejne siti. Proto obe dve zarizeni fungovala dost nepochopitelne. Prosim Adminy, aby na tento problem, vice viditelne upozornili.

5

Re: [vyřešeno] http_get problém mezi dvěmi SDS

tola napsal:

Dodane zarizeni maji uplne stejne MAC adresy.

Vím o tom, je to i v návodu, hned na začátku... doufám že už to jednoho dne začnou ve výrobě nastavovat pro každé zařízení jinak...

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

6

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Prosím o radu:
Odesílám každou druhou minutou data z micra na web:

odesilani_web
{
if(odeslano==0)
{
http_get(IP1,IP2,IP3,IP4, 'xxx.xx.cz','/hodina_bazen.php?&kolektor=',kolektor, '&vstup=', vstup, '&vystup=', vystup, '&bazen=', bazen, '&cistirna=', cistirna );
odeslano = 1;
}
}

Dále chci odesílat každou minutu teploty na Macro přes sys[141] :

odeslani_macro
{
//bazen_kolektor=bazen/10*1000000+kolektor/10*1000+sys[231]+sys[232]/10; // hodnoty odeslané do macra
http_get(192,168,1,250,'192.168.1.250','/sdscep?p=0&sys141=1');//odeslání teplot a stavů do macra
wait(1000);
}

Historie vypadá ok, ale na web se nic nepřenese:
11:57:27 08.04.2012     192.168.1.250, HTTP GET OK
11:58:01 08.04.2012     88.x.x.x, HTTP GET OK
11:58:27 08.04.2012     192.168.1.250, HTTP GET OK
11:59:27 08.04.2012     192.168.1.250, HTTP GET OK
12:00:00 08.04.2012     88.x.x.x, HTTP GET OK
12:00:27 08.04.2012     192.168.1.250, HTTP GET OK
12:01:28 08.04.2012     192.168.1.250, HTTP GET OK
12:02:00 08.04.2012     88.xx.xx.xx, HTTP GET OK

Do Macra hodnotu přenesu. Pokud vymažu řádek s odesíláním do macra, tak se mi hodnoty na web přenesou.
Firmaware u obou SDS je poslední.
Poradí někdo?

7

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Jak je to myšleno se sys[65]? Po restartu programu (nahraju přes winexe) je hodnota v sys[65] == 0? Nebylo by lepší mít tam hotnotu třeba ==1.

Mám totiž v programu konstrukci na odesílání více požadavků řízných přes timeouty přes sys[3]. Všude jsou ale kontroly na dosud probíhající komunikaco po http_get - což odpovídá sys[65] == 0. Nicméně se mi po nastartování sds nenahodí ani jedna funkce.

main
{
 ...
 if (_tmicro<sys[3] && sys[65]!=0) microdata();
 if (_tmacro<sys[3] && sys[65]!=0) macrodata();
 if (_tmacro2<sys[3] && sys[65]!=0) macro2data();
 ...
}

Abych nezapomněl... poslední BETA + MACRO smile

8

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Firmware novější než 2.11.2012 (včetně) po zapnutí nastaví sys[65] (OSI7 status code) na hodnotu 0xFFFF.
Pak až zavolání některé z SDS-C OSI7 funkcí to nastaví na 0 a pak následně na provozní či výsledné hodnoty.
Snad to pomůže (a doufám že to nezmění funkci už existujících programů - J@M ověř to prosím).

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

9

Re: [vyřešeno] http_get problém mezi dvěmi SDS

karel napsal:

Poradí někdo??

Před zavolání (kterékoliv) funkce http_get (to samé i pro jiné OSI7 funkce jako je smtp_send), je potřeba otestovat sys[65], a to na takovou hodnotu, která ukáže, že předchozí funkce byla úspěšně dokončena.
Lépe řečeno, je to vhodnější provést po zavolání funkce (http_get), tj. zahájit odeslání dat (zavoláním http_get) a hned potom čekat na hodnotu v sys[65]. Dokud tam nebude očekávaný výsledek (nebo chybový kód), tak nepokračovat dále (nevolat další http_get).

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] http_get problém mezi dvěmi SDS

Adame. Můžeš prosím otestovat kód níže? Jen jsem to vypreparoval z delšího programu. Kdyby tam něco nesedělo, dolaď si to aby to běželo. Jde mi tu funkci microdata{}. Ta je celá OK. Chvíli je vše v pohodě, ale po páru průchodech se jakoby zapamatuje poslední číslo v ram[303] - tedy při přechodu mezi desítkami, stovkami,  tisícema...

Čte do data z jiného SDS(micra) z prvních 4 teplotních čidel. To poslední je venku. Dělá to poslední beta na macru.

toto je při teplote cca 0.5st. Ale poslední osmička se tam jakoby přidává z posledního přetečení. Vznikne z toho pak teplota 3.78, 5.08, 4.38 místo 0.37, 0.50, 0.43. Mrkni na výpis níže. Nevím, asi bude problém v převodu atoi do sys[62].

mikro 378
mikro 508
mikro 438
mikro 438
mikro 508
mikro 508
mikro 508
mikro 438
mikro 508
mikro 378
mikro 508
mikro 688
mikro 758
mikro 818
mikro 938




var _ram;         //identifikace ram
var _pom;         //pomocna promenna
var _poz;         //pomocna promenna - pozice
var _tmicro;      //cas dalsiho nacteni hodnot z micra
var _microtimeout;//cas pro dalsi nacteni teplot z micra

microdata
{
  //port 300, odpoved do text[], delka 32zn.
  sys[76]=300;
  sys[77]=2;
  sys[78]=32;
  //prvni 4 teploty
  http_get(192,168,1,300,'192.168.1.300','/get_sys[310]?rn=4');
  //pockam az probehne funkce do konce
  label microdata_wait:
  if (sys[65] == 0) goto microdata_wait;
  //pokud je problem
  if ((sys[65] != 1024)||(sys[75] != 200)) goto microdata_err;
  //zpracovani vysledku
  //echo (ram[0]);
  //echo (text[0]);
  _pom=0;
  _poz=0;
  _ram=300;
  label microdata_for:
   if (text[_pom]==124) {
    text[_pom]=0x00;
    atoi(text[_poz]);
    ram[_ram]=sys[62];
    _ram++;
    _poz=_pom+1;
   }
   _pom++;
  if (_pom<=ram[0]) goto microdata_for;
  //posledni hodnota
  atoi(text[_poz]);
  ram[_ram]=sys[62];

  echo (ram[300]);
  echo (ram[301]);
  echo (ram[302]);
  echo ('mikro ', ram[303]);

  label microdata_err:
  //timeout pro dalsi cteni
  _tmicro=sys[3]+_microtimeout;
}

init
{
 _microtimeout=6000;        //60sek
 _tmicro=0;                 //ihned
}

main
{
  //nacte data z micra
  if ((_tmicro<sys[3] && sys[65]!=0) || _tmicro==0) microdata();
}

11

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Můžeš to spustit ještě jednou, a vypsat pokaždé i ten obsah text[] po přijetí z http_get() - to pak pěkně ukáže, kde je problém.

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

12

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Aha, tak opravdu už je to špatně v text (posl.hodnota)... Takže se ta ukončovací nula nejak spatne zapise. To by mělo jít lehce odladit s programem se 3mi příkazy v SDS.

2981|2487|3068|9310
ram: 2981, 2487, 3068, 9310
2956|2487|3068|9370
ram: 2956, 2487, 3068, 9370
2962|2487|3062|9310
ram: 2962, 2487, 3062, 9310
2956|2481|3062|9180
ram: 2956, 2481, 3062, 9180
2943|2475|3056|9430
ram: 2943, 2475, 3056, 9430

13

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Ještě prosím odstranění chyby http_get vs text[]. Předpokládám drobná oprava ;-)

14

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Napiš mi ten krátký program na kterém to můžu otestovat - ať si to můžu pustit u sebe.
V čem tam přesně je ten problém - že http_get() špatně zapisuje ukončovací nulu ? Potřebuju detailní popis problému... ať to můžu řešit.

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

15

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Chyba je pri prechudu mezi rady(1234->900 nikoliv 9000).
Dej program do jednoho sds, v druhem na IP ...251, port 300 nastav sys[140-143]. sys[143] na 1234, pak na 900 a je to tam (pismenko navic).

var _ram;         //identifikace ram
var _pom;         //pomocna promenna
var _poz;         //pomocna promenna - pozice
var _tmicro;      //cas dalsiho nacteni hodnot z micra
var _microtimeout;//cas pro dalsi nacteni teplot z micra

microdata
{
  //port 300, odpoved do text[], delka 32zn.
  sys[76]=300;
  sys[77]=2;
  sys[78]=32;
  //prvni 4 teploty
  http_get(192,168,1,251,'192.168.1.251','/get_sys[140]?rn=4');
  //pockam az probehne funkce do konce
  label microdata_wait:
  if (sys[65] == 0) goto microdata_wait;
  //pokud je problem
  if ((sys[65] != 1024)||(sys[75] != 200)) goto microdata_err;
  //zpracovani vysledku
  //echo (ram[0]);
  echo ('text[0]:', text[0]);
  _pom=0;
  _poz=0;
  _ram=300;
  label microdata_for:
   if (text[_pom]==124) {
    text[_pom]=0x00;
    atoi(text[_poz]);
    ram[_ram]=sys[62];
    _ram++;
    _poz=_pom+1;
   }
   _pom++;
  if (_pom<=ram[0]) goto microdata_for;
  //posledni hodnota
  atoi(text[_poz]);
  ram[_ram]=sys[62];

  echo ('r300:', ram[300], ', r301:', ram[301], ', r302:', ram[302], ', r303:', ram[303]);

  label microdata_err:
  //timeout pro dalsi cteni
  _tmicro=sys[3]+_microtimeout;
}

init
{
 echo ('start programu test http_get');
 _microtimeout=1000;        //10sek
 _tmicro=0;                 //ihned
}

main
{
  //nacte data z micra
  if ((_tmicro<sys[3] && sys[65]!=0) || _tmicro==0) microdata();
}

start programu test http_get
text[0]:1400|1410|1420|1234
r300:1400, r301:1410, r302:1420, r303:1234
text[0]:1400|1410|1420|1234
r300:1400, r301:1410, r302:1420, r303:1234
text[0]:1400|1410|1420|1234
r300:1400, r301:1410, r302:1420, r303:1234
text[0]:1400|1410|1420|9004
r300:1400, r301:1410, r302:1420, r303:9004
text[0]:1400|1410|1420|9004
r300:1400, r301:1410, r302:1420, r303:9004
text[0]:1400|1410|1420|9004
r300:1400, r301:1410, r302:1420, r303:9004
text[0]:1400|1410|1420|9876
r300:1400, r301:1410, r302:1420, r303:9876
text[0]:1400|1410|1420|9876
r300:1400, r301:1410, r302:1420, r303:9876

16

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Podle toho jak je FW v SDS udělaný, se máš řídit podle ram[0], kam se zapíše (po každém úspěšném provedení http_get) počet přijatých znaků. Taky pozor na nastavení max. počtu přijatých znaků, na to je zase jiný sys[].

BETA FW 8.11.2011 (a novější) tam teď zapíše 0x00 za poslední přijatý znak - vyzkoušej to a dej vědět, jestli to pomohlo (a jestli se nerozbilo něco jiného).

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

17

Re: [vyřešeno] http_get problém mezi dvěmi SDS

Je to OK. Testováno 2 dny a vše v pořádku. Díky za úpravu.