Velice rád bych to řešil, ale zasekávám se už na prvním kroku - a to je nasimulování této situace.
Pokud by někdo mohl udělat záchyt komunikace právě v době kdy se toto děje / stane (určitě to nebude snadné udělat, chce to vybavení), a poslat mi .pcap soubor, bylo by to ideální.
---
Dívali jste se na příklad na http://wiki.merenienergie.cz/index.php/Sdsc_sysf ?
Pokud sys[65] vrátí 1029, tak to znamená, že neskončila předchozí činnost (jakákoliv OSI7 funkce, tj. třeba ještě nedoběho odesílání emailu, předchozí http-get dotaz, atd.) a proto se tento aktuální požadavek nevyřídil = to znamená, že když dostanete 1029, tak to teď "neprošlo" (ani nezačalo) a máte to zkusit za chvíli znovu.
Je potřeba programovat podle návodů a dokumentace.
Tady jsou vypsány všechny případy, kdy volání funkce http_get() vrátí sys[65]=1029:
* když není dostupný Ethernet (výpadek na PHY/MAC - např. odpojený kabel, mrtvý externích switch atd.)
* když právě probíhá odesílání emailu (toto nelze přerušit, musí to doběhnout a až pak lze dělat další OSI7 požadavek)
* když právě probíhá http-get (tj. ještě neskončil ten poslední co jste spustili, musí nejprve doběhnout)
* pokud se čeká na odeslání SNMP TRAP paketu (tohle je obvykle tak rychlé, že se to zde neuplatní)
---
Aktuální vnitřní stav http_get() lze vidět na stránce arp.htm
(tj. webové rozhraní SDS, typická adresa: 192.168.1.250/arp.htm ).
Zkuste se tam podívat v okamžiku kdy vám to dělá problémy, snad to něčemu napoví.
Text: [HTTP-GET] con=0 grl=0 rc=0 tim=0
Kde:
* con = stav připojení (když je zde nenulová hodnota, tak požadavek na nový http_get skončí ihned jako 1029)
* grl = kolik ještě zbývá odeslat bajtů dat na server (tj. zbývající velikost původního GET požadavku)
* rc = OSI7 result code - toto se zapisuje do sys[65]
* tim = bezpečnostní timeout
Bezpečnostní timeout je neustále a trvale zvyšován, a to o 1 za každou milisekundu.
Bezpečnostní timeout je nulován:
- při začátku SDS-OSI7 funkce (tj. například každým zavoláním http_get funkce, která ale není předčasně zrušena chybou 1029).
- v okamžiku otevření TCP spojení na server
- v okamžiku platné TCP komunikace (přijaty nové data, odeslány data, nebo TCP ACK nebo retransmit).
Pro http_get je (stav ve verzi FW do a včetně 8/2017) nastaven bezpečnostní limit na 45 sekund.
To znamená, jakmile hodnota bezpečnostního timeout překročí 45000, tak dojde ke zrušení činnosti (např. přerušení právě prováděného http_get, nebo odesílání emailu atd. - platí pro všechny SDS-OSI7 funkce).
Do některého nového FW přidám možnost číst tuto hodnotu jako jeden ze sys[] indexů, zatím to tam není (a není to potřeba, bude to k dispozici prakticky jen pro informaci a debug).
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !