1

Téma: uživatelská stránka

chci si zkusit vytvořit vlastni uživatelskou  stranku zařízení ,
samotné nahrání uživatelské stránky je popsáno dost detailně a asi nebude problém,
ale není mi zcela jasné co se bude odehrávat pak:
- co se mi po nahrání vlastní stránky zobrazí  po připojení k zařízení (původní originální stránka nebo ta moje)?
- pokud ta originální tak jak se dostanu na tu svoji?
- pokud ta moje tak jak se dostanu na originální?
- nedojde nahráním vlastní stránky k přepsání originální?
- pokud ano, jak se dá zpět nahrát originální?

2

Re: uživatelská stránka

Dotaz je v sekci pro Micro takže předpokládám chcete přehrát / nahrát svoji stránku, ta bude na adrese xxx.xxx.xxx.xxx/usetr.htm
takže k přepsání stránky s "klasickou" administrací samozřejmě nedojde - Vaše stránka bude jenom "bonus" v souběhu s normální administrací, při každém novém nahrání této user.htm stránky dojde k přepsání původní - v simulátoru, kterým budete uploadovat onu htm taky uvidíte volné místo - na to pozor..
jinak originální "iživatelskou" stránku lehce zobrazíte na oné adrese xxx.xxx.xxx.xxx/usetr.htm a při zobrazení jejího zdrojového kódu lehce překopírujete do texťového editoru, případně stáhnete flashgetem či přímo do NVU, frontpage a podobně

3

Re: uživatelská stránka

Jméno user stránky si můžete libovolně nastavit v nahrávacím programu.

Firmware umožňuje zobrazit stránku jako hned první stránku po zadání čisté IP adresy (tzn. když ji pojmenujete jako index.htm viz detaily v návodu na WiKi). Pozor verze do února 2012 toto neumí.

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

4

Re: uživatelská stránka

Kousek jsem pokročil ve tvorbě vlastní user stránky. Hodně se mi  líbí demo stránka, kterou jsem našel v odkazech, kdy se stiskem tlačítka pošle do patřičného registru nějaké číslo. Chtěl bych toto doplnit ještě o heslo a to tak, že by zústalo číslo předvolené pod tlačítkem a nebo již předepsané v poli a za něj by se dopsalo heslo. Výsledkem by mělo být, že by se do registru odeslalo třeba pětimístné číslo, s tím že první číslice by kódovala požadavek a za ní by následovalo heslo.
Při mých skoro nulových znalostech javaskriptu, jsem si myslel, že po zvládnutí nějakých základních výpočtů a pod to hravě zvládnu, ale nedaří se mi.
Jedná se o tuto část javascriptu:

   }
  }

  function sdsc_S(sysn,val){
   if(sub){
    sub.open("GET", "sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
   else {
    getSub();
    sub.open("GET", "sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   };
.
.
.
.


   <fieldset name="fset">
    <legend name="leg"> relé 1</legend>
    <div class=ovl>
     <label name="lbl" for="r1"> RELÉ 1</label>
     <input type="button" value="On" onclick="javascript:sdsc_S(141,1);">
     <input type="button" value="Off" onclick="javascript:sdsc_S(141,0);">
     <input type="button" value="Reset" onclick="javascript:sdsc_S(141,2);">
    </div>

  Můžete mi někdo poradit jak tam "přidat" heslo?

5

Re: uživatelská stránka

krevla napsal:

Výsledkem by mělo být, že by se do registru odeslalo třeba pětimístné číslo, s tím že první číslice by kódovala požadavek a za ní by následovalo heslo.

O jaké "heslo" jde ?

Můžete sem napsat vzorovou URL která by se měla do SDS odesílat ?

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

6

Re: uživatelská stránka

adamn napsal:
krevla napsal:

Výsledkem by mělo být, že by se do registru odeslalo třeba pětimístné číslo, s tím že první číslice by kódovala požadavek a za ní by následovalo heslo.

O jaké "heslo" jde ?

Můžete sem napsat vzorovou URL která by se měla do SDS odesílat ?

Nerozumíme si - já chci jen zabezpečit, aby mi někdo po "nabourání se" na zařízení nemohl něco přepnout. Chci tedy mít v zařízení stránku s tlačítky jejichž odkliknutí odešle předdefinované číslo do registru, ale kvůli bezpečnosti, bych chtěl, aby bylo možno před tlačítko zapsat číselné heslo, které ověřím  programem v zařízení, že je správné. Např mám tlačítko ON, které pošle do nějakého sys např 2, ale navíc bych chtěl mít poličko do kterého vyplním heslo např 3333 a vysledkem by bylo, že zařízení po kliknutí na ON odešle 33332   nebo 23333 a já si v programu odfiltruji 3333 a provedu něco.
Zatím jsem to obešel tak, že heslo ukládám do jednoho registru a do ostatních posílám číslo, které program dále zpracovává. Program si nejdříve ověři, že v registru s heslem je uloženo správné heslo a teprve pak povolí provést pokyn sepnutí. Heslo se po minutě programem vymaže.

7

Re: uživatelská stránka

Řešil jsem to takhle:

function sdsc_S(sysn,val){
    if (!sub){getSub();};
    aa=document.getElementById("sys140").value;  //heslo
    sub.open("GET", "sdscep?sys140="+aa, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
    sub1.open("GET", "sdscep?sys"+sysn+"="+val, true);
    sub1.onreadystatechange=reqCompleteR1;
    sub1.send(null);
   }

...čili 2x nakopírovat potřebné funkce, odesláním nastavené hodnoty např v poli pro sys[141] se odešle i heslo. To pak kontrolovat před akcí v c-programu.

...někde v main{

//akce
if (sys[141]==1) {
 //hesla
 if (sys[140]==123 || sys[140]==321 {
  if (sys[231]==0) {
   sys[231]=255;
  }
 }
}
sys[140]=0;
sys[141]=0;

8

Re: uživatelská stránka

Pořád se trápím s vlastním řešením a není mi jasné proč mi nechodí níže uvedený skript. Kliknutím na OK1 se mi

přenese do registru 888888, ale když kliknu na tlačítko OK2, tak se mi nepřenese 22222 ale zase 888888. Pokud by

se toto podařilo rozchodit, tak by šlo velmi jednoduše zaheslovávat všechny příkazy.

  function sdsc_S(sysn,val){
   if(sub){
    sub.open("GET", "sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
   else {
    getSub();
    sub.open("GET", "sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   };
  }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  <fieldset name="fset">
    <legend name="leg">test registru </legend>
    <div class=ovl>
     <label name="lbl" for="sys146">posilam osmicky</label>
     <input class="txt50" type="text" id="sys146" name="sys146" value="888888" maxlength="8">
     <input type="button" value="OK1" onclick="javascript:sdsc_S_ev(146);">
</div>
  <div class=ovl>
<label name="lbl" for="sys146">posilam dvojky</label>
  <input class="txt50" type="text" id="sys146" name="sys146" value="22222" maxlength="8">
<input type="button" value="OK2" onclick="javascript:sdsc_S_ev(146);">
    </div>

9

Re: uživatelská stránka

Nechápu proč tam máš text.pole a chceš měnit tlačítkem ???
Buď : jedno text.pole můžeš vypsat 8888 nebo 2222 a jedno OK
Anebo jenom dvě tlačítka :

<label name="lbl" for="sys">Zmena sys xxx</label>
     <input type="button" value="Dej8" onclick="javascript:sdsc_S(146,8888);">
     <input type="button" value="Dej2" onclick="javascript:sdsc_S(146,2222);">
SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

10

Re: uživatelská stránka

2 krevla:

Ten kód ti nebude fungovat, jelikož máš v obou odkaz na id=sys146. Script pak neví který má být použit a pžedpokládám, že vezme ten první. Změn id objektů a bude to OK.

<input type="text" id="sys146" value="888888">
<input type="button" value="OK1" onclick="javascript:sdsc_S_ev(146);">

<input type="text" id="sys147" value="22222">
<input type="button" value="OK2" onclick="javascript:sdsc_S_ev(147);">

Pokud bys to chtěl cpát do jednoho sys (např.146) musíš si poupravit function sdsc_S_ev.

11

Re: uživatelská stránka

Taky mne  napadlo, že může být problém ve stejném id a něco jsem zkoušel změnit, ale pořád to nešlo. Každopádně to večer vyzkouším znova a dám vědět. Samozřejmně, že bych to chtěl cpát do jednoho registru, ale jak si upravit funkci nevím.

12

Re: uživatelská stránka

Stačí např tohle:

function sdsc_S_to146(sysn){
    if (!sub){getSub();};
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "sdscep?sys146="+aa, true);
    sub.onreadystatechange=reqSetComplete;
    sub.send(null);
   }

a pak:

<input type="text" id="sys146" value="888888">
<input type="button" value="OK1" onclick="javascript:sdsc_S_to146(146);">

<input type="text" id="sys147" value="22222">
<input type="button" value="OK2" onclick="javascript:sdsc_S_to146(147);">

13

Re: uživatelská stránka

Zkouším to, ale nechodí mi to. Nepřenese se ani jedno číslo.
mám to na stránce uloženo takto:

 function reqCompleteR(){
   if(sub.readyState==4){
    if(sub.status==200){;}
   }
  }

function sdsc_S_to146(sysn){
    if (!sub){getSub(){
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "sdscep?sys146="+aa, true);
    sub.onreadystatechange=reqSetComplete;
    sub.send(null);
 }
   else {
    getSub();
 aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "sdscep?sys146="+aa, true);
    sub.onreadystatechange=reqSetComplete;
    sub.send(null);
  };
   }

a pak

  <fieldset>
    <legend>Aktuální čas</legend>
    <div class=ovl>
     Aktuální čas<label class=data id="cas">not synchronized</label>
    </div>
   </fieldset>

  <fieldset name="f1set">
    <legend name="leg">test registru</legend>
    <div class=ovl>
  <input type="text" id="sys146" value="888888">
<input type="button" value="OK1" onclick="javascript:sdsc_S_to146(146);">

<input type="text" id="sys147" value="22222">
<input type="button" value="OK2" onclick="javascript:sdsc_S_to146(147);">

</div>

14 Naposledy upravil: videoservis (2012-05-24 19:08:41)

Re: uživatelská stránka

A máte to uložené v SDS Macru jako user.html, nebo to platí pro Micro a tu stránku html máte někde na ploše ? Pokud je to Micro a externí html, měla by tam být IP adresa zřízení před tím povelem sdscep?... ("GET", http://xxx.xxx.xxx.xxx/sdscep?sys[něco]xxxxx)

15

Re: uživatelská stránka

videoservis napsal:

A máte to uložené v SDS Macru jako user.html, nebo to platí pro Micro a tu stránku html máte někde na ploše ? Pokud je to Micro a externí html, měla by tam být IP adresa zřízení před tím povelem sdscep?... ("GET", http://xxx.xxx.xxx.xxx/sdscep?sys[něco]xxxxx)


Používám toto, snad to někomu pomůže..

<script type="text/javascript">
function go106(id) {


 var temp = new Image()
  temp.src = "[url]http://192.168.1.250/sdscep?p=0&sys140=[/url]" + id;
  }
  </script>
  <script language="JavaScript">
  <!--
    function na_call(str)
       { eval(str); }
       // -->
       </script>
<input type="submit" name="off" value="230 Vyp" OnClick="na_call('go106(11)');"></form>
<input type="submit" name="on" value="230 Zap" OnClick="na_call('go106(10)');">
<input type="submit" name="on" value="Test AKU" OnClick="na_call('go106(21)');">

L.

16

Re: uživatelská stránka

Je to Micro, ale stránka není na ploše, ale je uložena v zařízení.

17

Re: uživatelská stránka

Předpokládám, že všechny okolní rutiny (getsub, ...) jsou také v kódu. Jinak se mi zdá, že je vše OK. Říká něco chybová konzole javascriptu, případně v IE dole vlevo žlutý vykřičník?

18 Naposledy upravil: videoservis (2012-05-25 12:22:59)

Re: uživatelská stránka

Takhle Vám to začíná :
Zkouším to, ale nechodí mi to. Nepřenese se ani jedno číslo.
mám to na stránce uloženo takto:

function reqCompleteR(){
   if(sub.readyState==4){
    if(sub.status==200){;}
   }
  }

.............

ale tady máte tohle :

function sdsc_S_to146(sysn){
    if (!sub){getSub(){
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "sdscep?sys146="+aa, true);
    sub.onreadystatechange=reqSetComplete;
    sub.send(null);
  }


a mělo by to vypadat takto :

sub.onreadystatechange=reqCompleteR;

všechny "reqSetComplete" nahraďte v této části kodu tímto "reqCompleteR"
nebo přejmenujte "function" na reqSetComplete"

19

Re: uživatelská stránka

videoservis napsal:

ale tady máte tohle :

a mělo by to vypadat takto :

Já si myslím že by to mělo vypadat takto:

function sdsc_S_to146(sysn)
{
 if (!sub) { getSub(); };
 if (sub)
 {
  aa=document.getElementById("sys"+sysn).value;
  sub.open("GET", "sdscep?sys146="+aa, true);
  sub.onreadystatechange=reqCompleteR();
  sub.send(null);
 }
}

Vidíte kde je tam rozdíl ?

Nejprve se program ptá na ne-existenci "sub", viz if (!sub). Pokud "sub" neexistuje, provede se zavolání funkce getSub(). Potom se program znovu ptá na existenci "sub", viz if (sub). Pokud existuje (tj. buď už existoval z předchozího zavolání sdsc_S_to146(), nebo byl právě vytvořen, viz getSub()), je provedeno odeslání, tj. "aa" se naplní hodnotou, a ta je nakonec pomocí "sub.send()" odeslána.

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

20

Re: uživatelská stránka

JJ pravda. Toho jsem si ani já nevšiml. V úvodu jsem psal:

function sdsc_S_to146(sysn){
    if (!sub){getSub();};
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "sdscep?sys146="+aa, true);
    sub.onreadystatechange=reqSetComplete;
    sub.send(null);
   }

...a už jsem nečekal editaci závorek

21 Naposledy upravil: videoservis (2012-05-28 23:26:41)

Re: uživatelská stránka

Já to mám takhle a funguje to :

var sub=false;
  function getSub(){
   sub=false;
   if(window.XMLHttpRequest){
    sub=new XMLHttpRequest();
   }
   else if(window.ActiveXObject){
    sub=new ActiveXObject("Microsoft.XMLHTTP");
   }
  }

  function reqCompleteR(){
   if(sub.readyState==4){
    if(sub.status==200){;}
   }
  }

  function sdsc_S(sysn,val){
   if(sub){
    sub.open("GET", "[url=http://192.168.0.60/sdscep?sys\+sysn+\=]http://192.168.0.60/sdscep?sys\"+sysn+\"=[/url]"+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
   else {
    getSub();
    sub.open("GET", "[url=http://192.168.0.60/sdscep?sys\+sysn+\=]http://192.168.0.60/sdscep?sys\"+sysn+\"=[/url]"+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   };
  }

  function sdsc_S_ev(sysn){
   if(sub){
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "[url=http://192.168.0.60/sdscep?sys\+sysn+\=]http://192.168.0.60/sdscep?sys\"+sysn+\"=[/url]"+aa, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
   else {
    getSub();
    aa=document.getElementById("sys"+sysn).value;
    sub.open("GET", "[url=http://192.168.0.60/sdscep?sys\+sysn+\=]http://192.168.0.60/sdscep?sys\"+sysn+\"=[/url]"+aa, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   };
  }

Jak je to tedy s tou funkcí "reqCompleteR" ? Když on volá "reqSetComplete" ? (Toto je v DEMO skriptu vzorového příkladu)

22

Re: uživatelská stránka

Samozřejmě by měly být funkce spárované. V demu používám více takových procedur req485Complete(), reqReleComplete(), reqPWMComplete(), ..., reqSetComplete()...  Každá dělá něco jiného. Ale všechny chyby tohoto rázu by měla vyplivnout chybová konzola javascriptu.

23

Re: uživatelská stránka

Na ten středník jsem přišel také, ale dál mi to vypisuje chybu :

Zpráva: Přístup byl odepřen.

Řádek: 174
Znak: 5
Kód: 0
Řádek 174 jsem vyznačil v níže uvedené fci.
Problém se objevil až s přidáním fce function sdsc_S_to146
Zkoušel jsem i nahrazení reqComplete za reqCompleteR, ale to nepomohlo

 function sdsps(){
   req=false;
   regE=false;
   if(window.XMLHttpRequest){
    req=new XMLHttpRequest();
    reqE=new XMLHttpRequest();
   }
   else if (window.ActiveXObject){
    req=new ActiveXObject("Microsoft.XMLHTTP");
    reqE=new ActiveXObject("Microsoft.XMLHTTP");
   }
   if (req){
174    req.open("GET", "cgi_dys?rand="+Math.random(), true);
    req.onreadystatechange = reqComplete;
    req.send(null); 
   }
   if (reqE){
    reqE.open("GET", "cgi_dyeA?rand="+Math.random(), true);
    reqE.onreadystatechange = reqCompleteE;
    reqE.send(null); 
   }
   t=setTimeout("sdsps()",2000);
  };

24

Re: uživatelská stránka

krevla napsal:

Na ten středník jsem přišel také, ale dál mi to vypisuje chybu :

Zpráva: Přístup byl odepřen.

Podle mne tam není uvedena celá adresa.

Např.

req.open("GET", "http://192.168.1.250/cgi_dys?rand="+Math.random(), true);
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

25

Re: uživatelská stránka

adamn napsal:

Podle mne tam není uvedena celá adresa.

Např.

req.open("GET", "http://192.168.1.250/cgi_dys?rand="+Math.random(), true);

Když to je nahrané v zařízení jako user.html, tak by to mělo fungovat i bez IP adresy.
IP adresu tam dávám, když to testuju jako externí stránku. Ale jako externí stránka mi to funguje jen v IE, ne v Chromu - tam mi to také píše "přístup odepřen" k těm get funkcím.