1

Téma: Proměnné sys140-sys147

Mám SDS Macro, firmware 17.3.

Nastavení proměnných sys140-147 z vlastní webové stránky je v pořádku, mám ale problém jak je opět načíst.
Uvádíte:XML s výpisem vzdálených proměnných SDS-C : 192.168.1.250/usys.xml. Stránka ale nejde načíst, hodí mi to chybu 404 soubor nenalezen. Jaký jiným způsobem je načtu, abych je před editací ve své stránce viděl?

Něco jako /control, ale ve vlastním designu.
Dík.

2

Re: Proměnné sys140-sys147

Samozřejmě vlastní verzi /control lze provést, v tom nevidím problém.

usys.xml určitě funguje pro SDS MICRO, pro SDS MACRO potřebujete firmware z 1.5. nebo novější.

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

3

Re: Proměnné sys140-sys147

Díky, dal jsem nový firmware, usys.xml funguje.

4 Naposledy upravil: jkmbprg (2011-05-10 09:28:25)

Re: Proměnné sys140-sys147

Dobry den. Chtel jsem se zeptat jestli v dohledne dobe zvysite pocet sdilenych promennych z dosavadnich osmi.
Uz ted vidim, ze jich budu potrebovat vic, proto se ptam jestli mam vymyslet nejaky komplikovany protokol  nebo radeji pockat.

V te souvislosti bych se jeste zeptal:

- Ma SDS MACRO  uzivatelsky pristupnou nezapominajici pamet dataflash? Jak k ni mohu pristupovat z programu v SDS C?

- Jak zjistim velikost pole ram[]?

A konecne posledni dotaz: Kdy bude navod k tvorbe vlastnich stranek? Neco se da odhadnout z prikladu ktery mate, ale navod by byl jiste uplnejsi.

Dekuji.

5

Re: Proměnné sys140-sys147

Vracím se ještě k svému starému dotazu: je možno modifikovat control?
Tahat stav proměnných z usys.xml a editované je ukládat z user.htm se mi zdá trochu komplikované, ideální by bylo upravit si control ... Jde to ?
Díky.

6

Re: Proměnné sys140-sys147

Základní návod na tvorbu uživatelských stránek je na Wiki - každopádně prohlídkou příkladů (viz např. odkaz na merenienergie.cz) je určitě dobrá cesta.

Nahrání uživatelské stránky do zařízení je jednoduché, používá se k tomu ten stejný program jako pro nahrání SDS-C programu.

Rozšíření počtu sdílených proměnných je otázkou do budoucnosti, zřejmě na to dojde. Každopádně, pokud používáte proměnné jen pro přenos stavové informace (zap/vyp) (tedy ne pro přenos číselných údajů apod.), tak můžete využít každou z proměnných po jednotlivých bitech, a tím významě rozšířit počet přenesených údajů (až na 248 zap/vyp údajů při 8 proměnných každá po 32 bitech s využitím 31 bitů - protože 32. bit je znaménkový a obtížně se nastavuje).

Stránka /control je napevno uložena ve firmware. Proto je nutné použít ideálně uživatelskou stránku.
Nicméně, v další verzi firmware budou přidány snazší a příjemější metody, jak ze zařízení vytáhnout hodnotu jakékoliv položky v sys[] nebo ram[] atd.

Velikost pole ram[] je poměrně omezena, v této verzi firmware (duben 2011) na 128 položek.
Teprve zvažujeme jak to bude rozšířeno.

Přístup k dataflash bude v některé z příštích verzí firmware, ještě se zvažuje zda-li přes vyhrazenou funkci nebo přes pole nebo jako kombinace (zřejmě jako kombinace, kdy se načte/uloží stránka řekněme 256 bajtů, a s daty půjde pracovat pomocí pole).

Informace o nových funkcích budou zveřejněny, jakmile to bude uděláno (sledujte changelog u odkazů pro stáhnutí firmware na wiki).

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

7

Re: Proměnné sys140-sys147

Ten navod na Wiki v podstate neni, jen jak stranku nahrat do pocitace a odkaz na demo.
To ale pouziva veci (jako "cgi_dys") ke kterym neni dokumentace. Takze je to takovy pokus omyl.

Vim ze mohu pouzivat promenne po bitech, ale chci vyuzit SDS MACRO k rizeni vytapeni a chtel bych predavat casy a teploty, a tech se do osmi promennych moc nevejde. Co se da delat, zatim to do programu napisu natvrdo a pockam az to bude.

8

Re: Proměnné sys140-sys147

Máte pravdu, na Wiki toho moc není. Nahrál jsem si demo do SDS, sice mi to ukazuje hodnoty z čidel, které mám zapojené, ale ze zdrojového kódu jsem opravdu nepochopil, jakým způsobem se dostávají data z SDS.  Chtěl bych stránku upravit, ale vážně nevím jak na to. Upozorňuju ale, že jsem pokročilý amatér...
Je někde nějaký popis toho dema http://85.207.251.59:1013/user.htm?
Díky za radu.

9

Re: Proměnné sys140-sys147

Zatím detailní popis není.

Demo využívá pravidelných dotazů na zařízení SDS,
jedná se o webovou tzv. DOM aplikaci.
Obecných návodů pro DOM je všude plno, snad to aspoň takto trochu pomůže.

Takže demo co 1 sec pošle dotaz na SDS, a obratem odbrží sadu hodnot. Ta se potom analyzuje, a protože se ví, která hodnota co konkrétné znamená, tak se to nasype do zobrazeného textu stránky.

Když pak zmáčknete tlačítko, je vytvořen specifický dotaz na zařízení SDS, a je odeslán na SDS. Zařízení si to pak přebere a provede potřebnou činnost (např. sepnutí relé).

To co je použito v tom demu, je identické s tím, co je použito ve webovém rozhraní zařízení. Proto např. pokud potřebujte vědět, kterou pozici v textu vráceném z SDS má např. teplota z externího čidla, zjistíte to podíváním se na kód stránky "status" v základním webovém rozhraní.
Toto píšu jen tak narychlo, zatím bez bližších detailů, v plánu je to pěkně sepsat a dát na WiKi.

Samozřejmě to jak je to provedeno v tom demu, to není jediný možný způsob.
Stejně tak můžete realizovat stránku, která bude pravidelně přebírat hodnoty z SDS-C, a to pomocí analýzy stránky "echo.htm", kam pomocí funkce echo() můžete zapsat libovolné hodnoty... atd.

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

10

Re: Proměnné sys140-sys147

Já jsem z toho byl napřed taky jelen. Pak jsem si ale uvědomil, že je to úplně stejné jak bez SDS.
Když neberu v potaz použití cgi_dys (které taky nevím co znamená), tak mi stačí znát v PHP práci s XML  Jestli totiž zpracovávám svůj vlastní XML anebo XML, který mi poskytne SDS, tak je to úplně jedno. Zrovna tak jestli získávám data z nějaké cizí stránky anebo z SDS, tak je to stejné. Navíc v SDS si můžu nastavit vlastní formát odpovědi pomocí echo.
Pak třeba v PHP file_get_contents a pak nějaký regulární výraz preg_match na parsování hodnot a následně je vypsat do stránky. A nastavování hodnot? Stejně jak když se v PHP obsluhuje formulář.
Akorát je fakt lepší použít AJAX, aby se stránka nemusela reloadovat - javascrip (jquery).

11

Re: Proměnné sys140-sys147

Zkusím to to trochu rozebrat a objasnit. Snad to pomůže při navrhování dalším

Demo stránka používá DOM object který je spouštěn stále dokola v nastaveném čas.intervalu. Data se načítají z informací vracených z MACRA a přes další funkce naplňovány do objektů na stránce. Další popis ve zdojovém kódu...

*** funkce sdsps() se nahodí v loadu stránky <body onLoad="sdsps();"> 
function sdsps(){
   req=false;
   reqE=false;
   reqS=false;
   *** DOM objekty
   if(window.XMLHttpRequest){
    req=new XMLHttpRequest();
    reqE=new XMLHttpRequest();
    reqS=new XMLHttpRequest();
   }
   else if (window.ActiveXObject){
    req=new ActiveXObject("Microsoft.XMLHTTP");
    reqE=new ActiveXObject("Microsoft.XMLHTTP");
    reqS=new ActiveXObject("Microsoft.XMLHTTP");
   }
   if (req){ 
    *** zde je vytažen obsah stránky 192.168.1.250/cgi_dys?rand=xxx
    *** rand zde zohledňuje kešování systému - bez toho by zde byly stále stejné hodnoty
    req.open("GET", "cgi_dys?rand="+Math.random(), true);
    *** spustí se funkce reqComplete() popis níže
    req.onreadystatechange = reqComplete;
    req.send(null); 
   }
   if (reqE){
    *** zde je vytažen obsah stránky 192.168.1.250/cgi_dyeA?rand=xxx
    *** rand zde zohledňuje kešování systému - bez toho by zde byly stále stejné hodnoty
    reqE.open("GET", "cgi_dyeA?rand="+Math.random(), true);
    *** spustí se funkce reqCompleteE() popis níže
    reqE.onreadystatechange = reqCompleteE;
    reqE.send(null); 
   }

Stránka 192.168.1.250/cgi_dys?rand=123 vrací data v této podobě...

21215916|ovládá:SDS-C - neaktivní (off)|ovládáno:ručně - neaktivní (off)|ovládáno:ručně - neaktivní (off)|ovládáno:ručně - neaktivní (off)|1000Hz, vyp|výstup neaktivní|VYP VYP VYP VYP |VYP VYP VYP VYP |488|bez senzorů|bez senzorů|0.000 V|0.000 V|0.000 V|0.000 V|nepoužito|08:39:31 06.08.2011|

Následující funkce načte tento obsah to objektů na stránce

  function reqComplete(){
   if(req.readyState == 4){
    if(req.status == 200){
     *** naplnění pole daty, parsováno znakem "|"
     var rE=req.responseText.split("|");
     *** objekty naplněny správnými údaji z jednotlivých indexů pole viz níže
     *** indexy, tedy obsah 192.168.1.250/cgi_dys?rand=123 se mohou lišit dle FW zařízení
     *** předpokláse ale zpětná kompatibilita, tedy nové položky budou vždy na konci
     document.getElementById("cas").innerHTML=rE[17];
     document.getElementById("rele1").innerHTML=rE[1];
     document.getElementById("rele2").innerHTML=rE[2];
     document.getElementById("rele3").innerHTML=rE[3];
     document.getElementById("rele4").innerHTML=rE[4];
     document.getElementById("teplota").innerHTML=rE[10];
     document.getElementById("AD0").innerHTML=rE[12];
     document.getElementById("AD1").innerHTML=rE[13];
     document.getElementById("AD2").innerHTML=rE[14];
     document.getElementById("AD3").innerHTML=rE[15];
     document.getElementById("tep2").innerHTML=rE[11];
     document.getElementById("opto").innerHTML=rE[8];
    }
   }
  }

Stránka 192.168.1.250/cgi_dyeA?rand=xxx a k ní přidružená funkce pracuje podobně. Zde se jedná o data z S0 vstupů.

html zápis objektů s ID identifikátory na které přistupují výše uvedené funkce mohou vypadat následovně

ČAS<label id="cas">00:00:00</label>
AKT.VÝKON<label id="vykon">0.0 kW</label>
CELK.VÝKON<label id="celkovy">0.0 kWh</label

12

Re: Proměnné sys140-sys147

Díky j@m za skvělý návod na user.htm.

Řeším ještě jeden problém. Je možno obdobným způsobem udělat sidebar gadget v W7? Takže nechat user.htm na velký přehled všech hodnot a gadget jen třeba na teploty. Když v sidebaru zkouším data z adresy http://192.168.1.250/xml.xml  tak to nefunguje, kde mám chybu????V user.htm mi to parsování funguje. Díky moc za radu.

 var timer_on=true;

  function ReloadXML()
  {
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","http://192.168.1.250/xml.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;

//rele
    document.getElementById("rele1").innerHTML=
    xmlDoc.getElementsByTagName("relay_1")[0].childNodes[0].nodeValue;
    document.getElementById("rele2").innerHTML=
    xmlDoc.getElementsByTagName("relay_2")[0].childNodes[0].nodeValue;
    document.getElementById("rele3").innerHTML=
    xmlDoc.getElementsByTagName("relay_3")[0].childNodes[0].nodeValue;
    document.getElementById("rele4").innerHTML=
    xmlDoc.getElementsByTagName("relay_4")[0].childNodes[0].nodeValue;

13

Re: Proměnné sys140-sys147

A je z daného počítače, na kterém to selže, stránka dostupná ?

Tzn. když do prohlížeče dáte http://192.168.1.250/xml.xml , zobrazí se XML soubor?

Pokud ano, pak je problém tento: SOP - http://en.wikipedia.org/wiki/Same_origin_policy

Pokud ne, tak je špatně IP adresa - např. pokud nejste na stejné podsíti... ale to už asi nevyřešíme bez znalosti umístění zařízení a počítače. Pak by řešením bylo použít ve skriptu veřejnou adresu zařízení.

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

14

Re: Proměnné sys140-sys147

Tak jsem to již vyřešil. Sidebar funguje v IE a je samozřejmě problém s kešováním v IE. Změna adresy s názvem, jak je udělána v demu user.htm: "cgi_dyeA?rand="+Math.random() nefunguje, xml.xml s ? vyhazuje chybu. A jiný stoprocentní způsob , jak zabránit kešování v IE, jsem nenašel. Takže načítám hodnoty způsobem stejným jako jsou v demu, pomocí url+náhodného čísla . Další problém u gadget sidebaru byl v zabezpečení v IE, kde místní stránky jsou v zóně zabezpečení Počítač a nejde v této zóně jednoduše povolit skriptování - musí se nastavit v registrech. A poslední problém byl v nutnosti umístit gadget ne v Program Files/Windows Sidebar/,ale do složky Appdata/Local..../Sidebar. Nakonec vše funguje, sidebar je efektní... Díky všem za rady.

15

Re: Proměnné sys140-sys147

Info po delší době vývoje - doporučuji nahrát nový FW a používat funkci get_sys[]. Funguje spolehlivě a může být i s ?rand="+Math.random()