1 Naposledy upravil: Simi (2014-01-26 22:16:57)

Téma: HTTP Get maximální délka

Vyřešeno.

2

Re: HTTP Get maximální délka

Muzu vedet, o co slo?

Zajimalo by me, jak dlouhe muze byt pole text[], jaka muze byt maximalni hodnota sys[78] a moc bych uvital nejaky priklad, jak zpracovat kompletni odpoved nejakeho www serveru, kdyz je delsi nez pole text[]. Tusim, ze v SDS-C to bude neco ve stylu "http_get(); uloz_do_text_co_muzes; zpracuj; vratil_http_server_jeste_neco; uloz_do_text_co_muzes; zpracuj; ...". Ale neprisel jsem na to, jak spravne krmit sys[77] a sys[78], aby se to chovalo, tak jak chci.

3

Re: HTTP Get maximální délka

Mně se zdálo, že správně nefunguje HTT GET, když je tam moc proměnných. Nakonec se ukázalo, že jsem tam měl překlep. Příspěvek nešel úplně smazat, tak jsem pouze napsal vyřešeno. Pouřítí sys[77] a sys[78] by to mělo fungovat, ale nezkoušel jsem. Kde to potom chceš ukládat? Na flash? Já bych asi postupně ve smyčce volal HTTP GET s parametry a venkovní server by postupně generoval odpovědi tak,  by do pole TEXT vešly. Stejně si nedovedu představit, k čemu potřebuješ v zařízení takové množství textu. Ono je to spíš myšleno obráceně - zařízení posílá data, která se ukládají na serveru.

4

Re: HTTP Get maximální délka

Cozpak o to, ono to sys[77] a sys[78] nejak funguje, ale nepobral jsem z dokumentace, jak presne.
Domnival bych se treba, ze zavolam http_get, v sys[77] nastavim, ze to chci do text[], pomoci sys[78] reknu "a ted mi dej X bajtu", v ram[0] se podivam, kolik jich ve skutecnosti prislo, zpracuji je, pokud jich bylo sys[78], tak znovu zavolam sys[78] ("dej mi dalsich X bajtu")... Ale asi se to ma pouzivat nejak jinak.

Na co to potrebuju?
Uplne konkretne na to, ze mam regulator Siemens RVS a k nemu web server Siemens OZW. A ten web server mi je schopen na http dotaz prozradit stav nekterych velicin toho regulatoru. A na SDS Micro/Macro mam nevyuzite binarni vystupy (zatimco v RVS uz jsem pouzil vse, co slo rozumne pouzit), tak jsem si rikal, ze by SDS koukalo pres OZW na stav RVS a podle prectenych hodnot by neco spinalo. A z toho OZW v nekterych pripadech potrebuji precist docela dlouhou odpoved.

5

Re: HTTP Get maximální délka

V té dokumentaci je to jasně popsané. Prvních sys[78] bajtů odpovědi je vloženo do pole ram[] anebo text. žádné postupné volání tam není. I když by do firmware by mohl dodělat zahoď prvních X znaků. Takže jestli je ta odpověď delší než 512 znaků, tak asi musí přijít na řadu nějaký mezistupeň, že zařízení nebude volat přímo ten Siemens, ale nějaký např PHP skript, který bude posílat postupně data, které si přečte z toho Siemens.

6

Re: HTTP Get maximální délka

Obavam se, ze tak jak pises, se to nechova. Zkousim tahat pomerne velkou html straku (pres deset kilobajtu) a kdyz nastavim sys[78]=cca 100, tak se do text[] ulozi skutecne prvnich cca 100 bajtu. Ale pri cisle vetsim nez cca 200 je v text[] konec toho html. Jakoby tam byla nejaka finta... Pro me to bohuzel znamena, ze pro http odpoved delsi nez par set bajtu budu skutecne muset pouzit nejaky meziprvek nebo uz primo ten "meziprvek" (bylo by to nejspis nejake Raspberry) pouzit pro regulaci.

Mimochodem pri mych vcerejsich experimentech se mi dvakrat podarilo SDS zatuhnout takovym zpusobem, ze se vyresetovalo a snizilo stav citace pulsu z eletkromeru (!). (Pritom jsem teoreticky nastavoval pouze vyse jmenovanych par registru sys[], volal hhtp_get() a koukal do text[] a ram[].) Jakoby pri beznem resetu (vypojeni SDS z elektriky) si to pamatovalo posledni stav tesne pred resetem, ale pri hodne blbem resetu jakoby se vracelo k nejake hodnote, kterou si uklada nekam pouze jednou za cas.

7

Re: HTTP Get maximální délka

Hmmm, tak ted jsem zkusil jeste jednou vyndat napajeni ze SDS a i pri beznem resetu se stav citace vraci nekam k nejake kdysi ulozene hodnote. To je vlastnost nebo nejaka moje chyba?

8

Re: HTTP Get maximální délka

Já se v tom zase tak dokonale neorientuji. Já to mám jako meteostanici, takže měřením energie se nezabývám. Ale načítat klasickou html stránku, kde jsou ruzné tagy, tak to mi připadá špatné. Ten PHP skript (stránka volana http get)  musí vygenerovat vždy dvojici proměnná a hodnota anebo jenom hodnoty a ne HTML kod.

9

Re: HTTP Get maximální délka

Me to zase prijde na jedno brdo. Poslu http_get, server vrati nejakou hromadu bajtu a co si v tom najdu, to je moje vec, jenom holt okolo toho musim vic programovat.

10

Re: HTTP Get maximální délka

Máte aktuální firmware ? Zkuste aktuální BETA FW (viz jiné vlákno na tomto fóru).

kotel448 napsal:

... Zkousim tahat pomerne velkou html stranku ...

Maximální velikost stažených dat je 1440 bajtů (včetně hlavičky HTTP atd.). Nedávno se prováděla aktualizace firmware tak, aby byly podporovány i HTTP servery které posílají data po malých kouscích. Možná to dělá právě ten váš server, a máte starý firmware.

Nápad s offsetem nezní špatně, ale naráží na požadavek aby server vždy vracel přesný formát dat...

kotel448 napsal:

Mimochodem pri mych vcerejsich experimentech se mi dvakrat podarilo SDS zatuhnout takovym zpusobem, ze se vyresetovalo a snizilo stav citace pulsu z eletkromeru (!). (Pritom jsem teoreticky nastavoval pouze vyse jmenovanych par registru sys[], volal hhtp_get() a koukal do text[] a ram[].) Jakoby pri beznem resetu (vypojeni SDS z elektriky) si to pamatovalo posledni stav tesne pred resetem, ale pri hodne blbem resetu jakoby se vracelo k nejake hodnote, kterou si uklada nekam pouze jednou za cas.

SDS ukládá do pevné paměti stav počítadel co 12 hodin. Pokud dojde k výpadku napájení nebo resetu, načte se po zapnutí zařízení poslední uložený stav z pevné paměti.

Pouze ty SDS, které mají záložní baterii (v tuto chvíli SDS-TTCPRO), o data nepřijdou "nikdy".

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

11 Naposledy upravil: kotel448 (2014-02-27 20:44:20)

Re: HTTP Get maximální délka

Dekuji za odpoved.
Firmware mam ten posledni oficialni. Beta firmware zkusim pozdeji.

Uz dost odbocujeme od puvodniho tematu, ale to ukladani po 12 hodinach neni uplne super. Nabizi se nasledujici moznosti:
* Ukladat si to do flash sam a casteji. Pri restartu sds-c kouknout, jestli nahodou ve flash nemam vyssi cisla nez primo v registrech citacu a pokud ano, tak nastavit registry citacu podle flash pameti.
* Stahnout si po resetu posledni hodnoty citacu z eportal.merenienergie.cz, kam je obvykle posilam kazdych 15 minut.
* A nejhezci reseni je samozrejme Vami navrhovana baterka. Jde to nejak vyresit i ve stavajicich sds micro/macro?:
  * Samozrejme muzu SDS napajet z UPS.
  * Nebo muzu mit paralelne k napajecimu ss. napeti baterku/akumulator odpovidajiciho napeti.
  * Nebo se muzu pokusit o neco, jako mate v SDS-TTCPRO? Jestli jsem dobre pochopil nejakou dokumentaci, tak procesor jede na napeti 3,3 V. Slo by tedy nekam na desticku privest svoji baterku o podobnem napeti? Ze po dobu vypadku napeti nepujde cvakat relatkami, mi nevadi.

12

Re: HTTP Get maximální délka

Koupit SDS které má baterii v sobě (SDS-TTCPRO), nebo použít externí UPS:
viz http://wiki.merenienergie.cz/index.php/SDS_SIMPLE_UPS
viz http://wiki.merenienergie.cz/index.php/SDS_UPS

Záložní baterie v SDS-TTCPRO neudržuje procesor v chodu (ten potřebuje 3V3 ale baterie má 3V0 a méně),
tato baterie udržuje pouze zálohovanou RAM v procesoru.

Postupně budou předělány i ostatní SDS na nové procesory, tak aby tam záložení baterie byla,
ale to není otázka nejbližších dnů.

Další možnost je ukládat si hodnoty na Interner (eportál) a pak si je zpětně načíst (podle časové značky),
popř. ukládat si je sám v SDS-C do DataFlash (ale právě do ní se to ukládá co 12h aby se neopotřebovala).

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

13

Re: HTTP Get maximální délka

A byl prosim popis (pokud existuje), jak formulovat url v http_get, abych si v SDS-C mohl stahnout posledni hodnoty citacu z eportalu?
Napadlo me, ze bych mohl pouzit url pro export stavu citacu (http://eportal.merenienergie.cz/akce.php?typakce=exportcsv&typdat=s3), ale nevim, jak tam zakomponovat jmeno a heslo. Zkousel jsem uid, jake se pouziva pro nastenku (ext-board.php), ale nefungovalo mi to.

14

Re: HTTP Get maximální délka

Tak se mi asi na treti pokus podarilo nahrat beta firmware. (Myslel jsem si, ze mi nahravani fw padalo z toho duvodu, ze jsem nemel odpovidajici sdsc.exe, ale asi to bylo spis nejakymi vypadky v tcp/ip, protoze kdyz jsem dal jumper na rstd a pripojil se notebookem primo k sds, tak to proslo.)

Nicmene http_get se chova stale stejne divne.
* Kdyz nastavim do sys[78] hodnotu vyssi nez 511, tak tam zustane 32.
* Kdyz po mem webserveru od Siemense chci sys[78]=255 bajtu nebo mene, tak http_get skutecne vrati prvnich 255 bajtu nebo mene.
* Kdyz po mem webserveru od Siemense chci sys[78]=256 bajtu nebo vic, tak http_get vrati poslednich 115 bajtu.

Aby nedoslo k nejake mylce, tak se pokousim cist data z www serveru takhle:

    sys[64] = 30;
    sys[77] = 2;  /// Vysledek do text[].
    sys[78] = 255;
    http_get(192, 168, 13, 253, '192.168.13.253', '/main.app?user=...&pwd=...&section=faults');
label ozw_cekej:
    if (sys[64] == 0) goto ozw_error;  /// Vyprsel timeout.
    if (sys[65] == 0) goto ozw_cekej;  /// Nula neni v dokumentaci?

    if ((sys[65] != 1024) || (sys[75] != 200)) goto ozw_error;  /// http nevratilo odpoved nebo http odpoved neni 200.

    echo('sys[78]: ', sys[78], ', ram[0]: ', ram[0]);
    goto ozw_skip_error;
label ozw_error:
    echo('Chyba komunikace s www serverem, sys[65]: ', sys[65], ', sys[75]: ', sys[75]);
label ozw_skip_error:

Zkompiluju, nahraju, kouknu "na konzoli", ze to probehlo, na vysledek v text[] potom koukam pres url http://192.168.1.250/get_txt[0]

15

Re: HTTP Get maximální délka

Můžete udělat záchyt paketů z webserveru pomocí Wiresharku ? Tzn. otevřít v prohlížeči několi různých stránek z OZW na PC a současně mít spuštěný Wireshark. Záchyt se pak dá uložit na disk (pcap soubor).
Soubor .pcap mi pak pošlete na sds@an-d.cz .

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

16

Re: HTTP Get maximální délka

jenom na to nesmite pouzit switch, ale nejaky stary hub. Na switchi toho moc nenachytate