1

Téma: Ovladani rele zpetnou odpovedi na http_get

Mám problém:  Odesílám hodnoty metodou  http_get na server. Tam mi php scrip hodnoty převezme,  uloží do proměnných atd.. a uloží do mysql.  Chtěl bych ale dálkově ovládat relé.  Mám nastaveno sys[77]=1; a  sys[78]=10; hodnoty se mi uloží do ram, pak dál zpracuju podmínkou if a else přímo k ovládání relé. Vše funkční.  Jenže vůbec nevím a nechápu, jak dostat konkrétní hodnotu do ram  [1 - 6].  Na tom mém php scriptu na serveru napsat nějakou specielní hlavičku? Nebo jaká oblast php souboru se posílá jako odpověď.  Případně jak tu oblast změnit, aby se mi do ram uložilo třeba číslo 48 nebo 49.  Pokusně si třeba změním název stránky <title>Logger</title>  a hodnoty v ram se mi změní.  nenašel jsem v tom ale žádnou logiku.  Poradí mi někdo?  Případně kde to mám nastudovat. Nikde jsem nic nenašel.
Díky
P

2

Re: Ovladani rele zpetnou odpovedi na http_get

Mělo by to být tak, že do RAM se uloží to, co se vrátí z toho PHP skriptu (response body).

Takže, pokud bude PHP skript data pouze zpracovávat a nebude v něm žádné "echo", tak odpověď serveru na request z SDS bude prázdná. Pokud v tom skritpu bude třeba:
(omlouvám se za neplatný PHP kód, ale PHP nepoužívám, takže neznám správnou synatxi - pro představu to snad stačí)

<?php 
cursor = mysql_connect('DSN');
cursor.execute("INSERT INTO tabulka (teplota) VALUES ($_GET['teplota1']");
?>

Tak pravděpodobně dojde k tomu, že se do SDS odešle jen HTTP Response code 200 ale obsah response bude prázdný. Do RAM by se tedy uložila 0 (délka odpovědi) a pak už nic.

Tento kód naopak vrátí nějaká data do SDS

<?php 
cursor = mysql_connect('DSN');
cursor.execute("INSERT INTO tabulka (teplota) VALUES ($_GET['teplota1']");
echo "AHOJ";
?>

takže do SDS by se do RAM uložilo 4 jako délka odpovědi a pak byty 65 72 79 74 což jsou desitkově kódy znaků A H O J. Samozřejmě můžete vrátit třeba "echo chr(5)" a mělo by se do prvního byte RAM uložit 1 (délka) a do druhého číslo 5.

Doufám, že nekecám a takto to funguje. Pokud ta stránka, která zpracovává požadavek z SDS, vrací kompletní HTML stránku, tak je to nanic, protože SDS si uloží začátek HTML namísto nějaké smysluplné hodnoty.

Musíte tedy mít speciální PHP soubor, který bude jen zpracovávat data ze SDS a bude vracet pár byte, které se uloží do RAM v SDS.

3

Re: Ovladani rele zpetnou odpovedi na http_get

Děkuju radimov. Pátral jsem stylem pokus omyl a zjistil to co píšeš.  Do Ram se mi uloží jen to, co si vypíšu v tom skriptu.  Takže mám zozsáhlý skrip a jen jedno echo. Teď to mám nabastlený takto: echo "1111"   Do ram se mi vypíše:

ram[0]=10  (tohle vím, sys[78]=7;  //http do ram - max pocet vracenych znaku)
ram[1]=55
ram[2]=49
ram[3]=13
ram[4]=10
ram[5]=60
ram[6]=104
ram[7]=116

a když dám echo "111"  tak na ram[2]=48 , ostatní zůstávé stejné. Chodí mi to tak, že ovládám jen Relé2. ram[2]=49 si ho zapnu a ram[2]=48 vypnu. 
Jak ale ovládat ram[1] ??
Musím docílit toho, aby jsem mohl měnit obsah ram 1 a 2.
Jdu pátrat - začnu u desítkových kódů znaků.
Díky

4

Re: Ovladani rele zpetnou odpovedi na http_get

To je nějaké podezřelé. ram[1] až ram[7] odpovídá tomuto textu:

71⏎⏎<ht

což vypadá, jakoby po nějaké číselné hodnotě a znaku CRLF začala HTML stránka. Zkusil bych to URL, které volá SDS, zavolat manuálně buď v prohlížeči, nebo ještě lépe pomocí command line curl nebo wget aby bylo jasně vidět, co ta stránka přesně vrací.

Radim

5

Re: Ovladani rele zpetnou odpovedi na http_get

echo "AHOJ"
ram[1]=56
ram[2]=13
ram[3]=10
ram[4]=13
ram[5]=10
ram[6]=65
ram[7]=72
ram[8]=79
ram[9]=74
ram[10]=13

Ve skriptu nemám žádné html značky ani jiné echo.
Pro kontrolu zadám do prohlížeče http://www.mojedomena.cz/logger_el.php?hodnota=1
Skript provede svou práci.
Vrátí se mi čistě jen AHOJ
Podívám se na zdroják F12.  A je tam tohle:

<html>
<body>AHOJ</body>
</html>

Ty html značky mi tam asi doplní sám prohlížeč.  AHOJ se mi vypisuje do ram až od ram 6.

6

Re: Ovladani rele zpetnou odpovedi na http_get

No, tak tady asi končím sad Je pravda, že ten html markup ve zdroji stránky bude doplněný prohlížečem (proto je lepší curl/wget), kde se ale bere 8 enter enter a pak teprve AHOJ, to nevím sad

Zkusil bych ještě minimalizovat ten PHP skript aby opravdu udělal jenom

<?php 
echo "AHOJ";
?>

7

Re: Ovladani rele zpetnou odpovedi na http_get

Radime děkuju
PHP skript jsem zjednodušil co to šlo.  Našel jsem tam nějaký odřádkování ještě před značkou <?php. Teď už je to vyčištěný jen samé php. Posunul jsem se , že se mi hodnoty vypisujou od ram[4].
Nabastlil jsem to takto - není to ono, ale vše funguje jak jsem potřeboval:
Přes proměnnou mi php skript vypíše echo "00"; Do ram mi hodí toto:

ram[1]=50
ram[2]=13
ram[3]=10
ram[4]=48     To je první 0 z ASCI kodu
ram[5]=48     To je druhá 0 z ASCI kodu
ram[6]=13
ram[7]=10
ram[8]=48
ram[9]=13
ram[10]=10

V SDS mám podmínku když je ram[4]=48 tak mi Relé1 vypne  ram[5]=48 - Relé2 mi vypne.

Přes proměnnou mi php skript vypíše echo "11"; Do ram mi hodí toto:

ram[1]=50
ram[2]=13
ram[3]=10
ram[4]=49     To je první 1 z ASCI kodu
ram[5]=49     To je druhá 1 z ASCI kodu
ram[6]=13
ram[7]=10
ram[8]=48
ram[9]=13
ram[10]=10

V SDS mám podmínku když je ram[4]=49 tak mi Relé1 sepne,  ram[5]=49 - Relé2 mi sepne.

Moc se mi to nelíbí, ale funguje to.
Díky, díky.
P.