odesilani dat

Poradte prosim,
posilam ze sveho zarizeni

http_get(88,86,113,152,'hrdlickovi.wz.cz','/data.php?teplota=22', ;

na sve stranky, ale na strankach se nic nezobrazi


ale pokud zadam primo.

www.hrdlickovi.wz/data.php?teplota=123

tak se hodnota na strankach zmeni.

Myslim, ze je problem v IP adrese serveru, nebo nasmerovani na me stranky. Ale nevim jak dal.
oprva, samozrejme s CZ

www.hrdlickovi.wz.cz/data.php?teplota=123
Tipl bych si, že ta funkce se používá jinak:

http_get('http://hrdlickovi.wz.cz/data.php?teplota=22');

Kromě toho se IP adresa píše s tečkami a vůbec není rozumné adresovat svoji doménu přes IP adresu, protože ta se může kdykoli změnit.
Prikladam program ktery funguje.

Jen to chci posilat na svuj




odesli_S0_na_portal
{

//provedeme DNS překlad
dns_resolv('portal.merenienergie.cz');

//nachystame timeout pro http
sys[64] = 45; //sekund

//pockam az probehne funkce do konce
label cekam_na_dns:

//vyprsel cas drive nez dostaneme preklad?
if (sys[64] == 0) goto nemam_dns;

//otestujeme úspěch DNS překladu (512 = hotovo OK)
if (sys[65] == 512) goto mam_dns_preklad;

//cekame dale...
goto cekam_na_dns;

label nemam_dns:

//nemam uspesny DNS, takze to udelam s rucni IP (ziskano rucne)
http_get(77,93,211,207,'portal.merenienergie.cz','/data.php?devid=', '00890001D', '&T0imp1=', sys[493], '&T1imp1=', sys[526], '&T0imp2=', sys[494], '&T1imp2=', sys[527], '&T0imp3=', sys[495], '&T1imp3=', sys[528]);
goto cekat_na_http;

label mam_dns_preklad:
//mam DNS preklad - pouziju to !
http_get(sys[66],sys[67],sys[68],sys[69], 'portal.merenienergie.cz','/data.php?devid=', '00890001D', '&T0imp1=', sys[493], '&T1imp1=', sys[526], '&T0imp2=', sys[494], '&T1imp2=', sys[527], '&T0imp3=', sys[495], '&T1imp3=', sys[528]);

//pockam az probehne funkce do konce
label cekat_na_http:

//nachystame timeout pro http
sys[64] = 45; //sekund

label cekam_na_http_smycka:

//vyprsel cas drive nez skonci http?
if (sys[64] == 0) goto chyba_www_serveru;

//mam uz odpoved od http ?
if (sys[65] == 0) goto cekam_na_http_smycka;

//pokud server má problém:
if ((sys[65] != 1024)||(sys[75] != 200)) goto chyba_www_serveru;

//neni problem, takze ok
echo('S0 odeslano na server, OK.');

//vse hotovo
return;

label chyba_www_serveru:
//obsluha chyby - www server

echo('Chyba komunikace s www serverem, http: ', sys[75]);

}

main
{
echo('Start programu.');

label opakovat:

odesli_S0_na_portal();

//pockame patnact minut - pozor neni presne v 0,15,30,45 ale je to co 15 minut od okamziku zapnuti zarizeni !
//pokud chcete presne "v celou" ctvrthodinu, pouzijte jiny program (ke stazeni viz nase WiKi)

//nastav 6*60 sekund
sys[64] = 360;
label cekej:
if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;

}


if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;

}
To asi nebude PHP. Co je to za jazyk? Ten fungující program vypadá dost podivně.
Je to zřejmě ořezané PHP. Je to zařízení které posílá naměřená data na server.

http://www.merenienergie.cz/
S PHP to má jen velmi málo společného. Už existence příkazu goto (o kterém jsem dosud v PHP neměl tušení), existence klíčového slova label, názvů proměnných bez "$", jiných definic funkcí a celkově jiném stylu programování svědčí o jiném jazyku. Spíš nějaký dialekt C.

Bohužel o tom zařízení nevím skoro nic, takže asi neporadím. Možná by se hodilo zjistit, jestli vůbec nějaká data dorazí, například vypsáním pole $_GET[].
Spíše bych hádal na jazyk Ruby. Ale ten tady na WZ nebude fungovat. Tady je pouze jazyk PHP.
Hlavním poznávacím znakem PHP je zápis proměnné do $ a ohraničení <?php ..kod.. ?>. Pokud toto tam není, pak se nejedná o PHP a ani o žádnou napodobeninu a nebude zde fungovat.
To je klientský program, který je umístěn v tom čidle. Tady na WZ bude serverová část a ta už je doufám napsána v normálním PHP, i když jsem ji dosud neviděl.
Ale jak čtu, tak ten skript vlastně není spuštěn zde na WZ.

Jakýkoli GET dotaz na WZ musí směrovat přes DNS adresu. IP adresa ze své podstaty nebude fungovat, protože je zde aplikován virtualhost. To jest že přes jednu IP adresu lze mít více DNS adres. Laicky - jednu IP adresu sdílí několik stovek adres. Kdybys zadal jen IP adresu, tak se nasměruje pouze na centrální místo a ne na uživatelskou adresu.

Takže ve tvém případě musíš zavolat pouze adresu hrdlickovi.wz.cz, případně plnou http://hrdlickovi.wz.cz/data.php?teplota=123. Cokoli jiného nebude fungovat nebo se odešle jinam.
Když se na to podíváš pořádně, tak 5. parametr je název domény. Předpokládám, že funkce http_get() v klientském programu ho strčí do hlavičky Host: v dotazu a tím by to mělo projít.

Jenže nemáme možnost ten dotaz analyzovat, takže jenom věštím.
Stejně je mi divné, že v tuto hodinu dodávají solární panely vodu s teplotou 62 °C.
To jsou zatím jen čísla. Měřím doma teploty...
a chci je práve zobrazovat.
Tento program mi běží doma v zařízení a má posílat data na WZ.
Jde jen o ty řádky http_get.

pokud to takto zadám. Server píše zpět chyba 302
302 je přesměrování. Ještě se podívej na hlavičku Location: Pokud tam najdeš http://i.wz.cz/404.html, tak máš buď chybně název skriptu (ten je ovšem správně), anebo ten klientský program neumí správně poskládat dotaz HTTP 1.1 s atributem Host:

Dělal jsi něco s .htaccess?
nedělal
http://cz2.php.net/manual/en/function.http-get.php

funkce je součástí knihovny PECL, ta také a WZ funguje?
Fatal error: Call to undefined function http_get() ...

Asi ne. Ale to není problém tohoto dotazu.
Možná sem můj problém nepatří, protože na serveru je asi vše ok.

mám zápis do souboru.txt, který potom čtu.

Pokud zadám hodnotu ručně

http://www.hrdlickovi.wz.cz/data.php?T01=122

tak se mi do souboru zapiše a na serveru je vlastně vše ok.

Ale pokud se jej pokouším posílat ze zařízení tak to nejde.

jak funguje toto? /3w/wz.cz/h/hrdlickovi
to je nějaká přímá cesta?
To je přímá cesta, ale rozhodně bych ji nedával natvrdo do skriptu. Je lepší jako cestu použít výsledek funkce

realpath(dirname($_SERVER['SCRIPT_FILENAME']));
Promin, nejsem v php odborník. V PLC ale ano:-)

kam to mám zadat. jako skript do stránky?
Ano, do skriptu, který zapisuje výsledky do souboru. Tímto způsobem zjistíš absolutní cestu k němu.

Také bys mohl zapisovat výsledky místo do souboru, do databáze, např. SQLite. Bude se s tím pak lépe pracovat. Varuji před použitím MySQL na WZ, má časté výpadky.

Pokud zůstaneš u zápisu do souboru, dělej každý záznam jako zápis _jednoho_ řetězce. Při konkurenčním zápisu by se ti jinak mohla pomíchat data.
Napsalo mi to tu samou cestu co jsem psal.
Chtěl bych to zkusit rozchodit zde na WZ.
Pak si koupím vlastní domenu s pevnou IP.
S databazí také počítám, budu potřebovat i grafy. Ale jsem opravdu začátečník, tak v tom plavu.
Ale už mám knížku "PHP pro úplné začátečníky" :-)
Díky za rady.
"program ktery funguje." je napsan v jakem jazyce?
"Je to zřejmě ořezané PHP." ne, to neni php kod. V php kodu se promenne zapisuji s dolarem, pokud to nejsou konstanty. zapis s label/goto php take nezna v takovemto tvaru. Funkce se zapisuje slovem function. Dukaz je manual: (starsi verzi manualu jsem nekoukal)
http://php.net/manual/en/function.http-get.php
http://php.net/manual/en/control-structures.goto.php
Zkus tam pridat error_reporting, jestli to udajne php hlasi nejake chyby?

Cili, kdyz to neni php, tak ten problem je neresitelny.

/3w/wz.cz/h/hrdlickovi
realpath(dirname($_SERVER['SCRIPT_FILENAME']));
// to je realna cesta na serveru (tve slozky nebo scriptu)
Nevim, k cemu ti muze byt dobra?

"Ale pokud se jej pokouším posílat ze zařízení tak to nejde."
Co se pokousis ze zarizeni posilat?
Mozna bych zkusil funkci: http://www.php.net/manual/en/function.http-get-request-headers.php

Jaka je tedy cesta?
nejaky tvuj pc -> otevre adresu http://www.hrdlickovi.wz.cz/data.php?T01=666 -> data.php to zpracuje a prida radek
nejaky tvuj pc -> otevre adresu nevis jakou -> tvuj php to nezpracuje, protoze nic nedostal, asi, nebo dostal chybne udaje

Cili z meho pohledu neni problem v tom php ale v tom tvem pc, ktere posila nespravne udaje asi na nespravnou adresu? Nebo proste jen chybne udaje. Pro zacatek bys tedy mel zkusit zapisovat vsechny udaje, jestli se neco posila.
print_r($_GET);
print_r($_REQUEST);
peta:

Absolutní cesta na serveru je nutná při otvírání některých databází, např. SQLite nebo DBA. Může to fungovat i bez absolutní cesty, ale není to pravidlem.

Problém je řešitelný, i když to není PHP. Existuje mnoho zajímavých programovacích jazyků. Pokud ten jazyk umí HTTP 1.1, tak se to vyřešit dá.

Jeho PC posílá správné údaje, ale to speciální zařízení už ne. Funkce print_r() nic neřeší, protože to zařízení nemá monitor, který by výsledek zobrazil. Proto je nutné výsledek zaznamenat přímo na serveru.