Autor Zpráva
bach
Profil
Jsem začátečník a nevím jak pohnout s následujícím problémem..
potřebuju na serveru spouštět tento spouštěcí soubor

digitemp_DS9097 -a -c /opt/etc/digitemp.cfg -r 1000 -s /dev/usb/tts/0

výstup z něj , pokud to pustím v konzole je zde:

Mar 21 10:19:19 Senzor 0 C: 6.19
Mar 21 10:19:20 Senzor 1 C: 21.52

Je to výstup ze sériové linky ze 2 čidel DS18B20 , kde za C: je konkrétní teplota ve stupních celsia. Jak by se tohle dalo pomocí php vykonat a vypsat na web stránku?
Např. Čidlo č.1 - 6.19 C
Čidlo č.2 - 21.52 C

Děkuji za pomoc.
Mike8748
Profil
pro spousteni programu mas prikazy exec(), system() a passthru()
ale pokud to je na hostingu tak to bude nejspis zakazany
pokud je to tvuj vlastni server, tak by nemel byt problem

dalsi moznosti je (pokuz znas protokol pouzity pro komunikaci s cidly) si celej programek digitemp prepsat do php, takze primo v php otevres seriovej port (pomoci fopen() ), a pak z nej muzes cist/zapisovat fread()/fwrite()
pak by jsi to mel trochu jednodussi na zpracovani vysledku
nightfish
Profil
použij funkci shell_exec()
a pak zřejmě nějaké regulární výrazy pro zpracování těch dat
bach
Profil
Takže už jsem to zvládnul pomocí exec....
Další problém je formát...
12:34:13 Sensor 0 7.50 °C 12:34:15 Sensor 1 9.31 °C

to první si dokážu přes substr odpočítat a vyhodnotit , ale to druhé ne...


Problém je ten , že ta teplota může vypadat třeba -10.50 °C a už to neodpočítám.
Nešlo by třeba zobrazit od prázdného znaku do prázdného znaku ?

příklad do proměnné se po vykonání příkazu načte:
12:34:13 Sensor 0 7.50 °C 12:34:15 Sensor 1 9.31 °C
ale můžou být i tyto varianty....:
12:34:13 Sensor 0 17.50 °C 12:34:15 Sensor 1 9.31 °C
12:34:13 Sensor 0 7.50 °C 12:34:15 Sensor 1 -19.31 °C
12:34:13 Sensor 0 -17.50 °C 12:34:15 Sensor 1 -11.31 °C

Jde to nějak v php udělat abych uložil do jedné proměnné č. senzoru 0 do druhé teplotu 0 a do třetí čas 0 to to samé pro senzor 1?
Nemusí to být nutně mezery umím tam dát i oddělovač viz.
12:34:13|Sensor|0|-17.50|°C|12:34:15|Sensor|1|-11.31|°C|


Děkuji
nightfish
Profil
$data = explode(" ", $vstup);

a pak $data[0] bude čas
$data[1] Sensor
$data[2] Číslo senzoru
$data[3] Teplota
$data[4] °C
5-9 bude další řádek apod.
bach
Profil
Super děkuji všem velmi......

Ještě maličkost , jak se dá udělat auto refresh třeba co minutu té konkrétní stránky v php?
Alphard
Profil
cron
nebo jestli jde o zobrazení u klienta, tak javascript nebo meta
bach
Profil
Meta je ok...všem děkuji za pomoc
bach
Profil
Chtěl bych to umět ještě natlačit do databáze SQLITE , proto se táži , jak se to dá udělat ?
Chtěl bych aby to cca co 5 minut zapsalo do databáze asi z tohoto , cron funkční mám , ale nevím co spouštět:
$output = shell_exec("/opt/bin/digitemp_DS9097 -a -c /opt/etc/digitemp1.cfg -r 1000 -s /dev/usb/tts/0");
$data = explode(" ", $output);
$data[0] bude čas
$data[1] Sensor
$data[2] Číslo senzoru
$data[3] Teplota
$data[4] °C

Děkuji chytrým hlavám za pomoc....
Joker
Profil
bach
Chtěl bych to umět ještě natlačit do databáze SQLITE , proto se táži , jak se to dá udělat?
SQL příkaz INSERT INTO tabulka... přes sqlite_query()
bach
Profil
SQL příkaz INSERT INTO tabulka... přes sqlite_query()
no avšak nevím co pouštět v cronu...tedy spíš netuším , jestli se dá pouštět php stránka , aby se to co 5 minut plnilo....
napoví někdo?
orava))
Profil *
Ako na CRONa najdes TU
budes spustat php script a tam bude sqlite_query("INSERT INTO tabulka VALUES ('$data[1]','atd')");
bach
Profil
Asi jsem osel ale nevím , jak to správně vložit, začínám se to teprve učit......
mám databázi v sqlite s názvem:
"teplomer.db"
v ní je table : "tepl" v které jsou "datum" "cas" "teplota" "cidlo"
mám naplněny proměnné:
$cidlo0
$teplota0
$cas0
$datum0

a potřebuju údaja z těchto proměnných dát do databáze.
Prosím o příkladek , jak otevřít v php databázi a jak konkrétní proměnné zapsat do db....
Děkuji TK
nightfish
Profil
$sql = sqlite_open("teplomer.db");
if (!$sql) Die("Nepodarilo se otevrit databazi.");
$res = sqlite_query($q="INSERT INTO tepl(datum, cas, teplota, cidlo) VALUES ('$datum', '$cas', '$teplota', '$cidlo')", $sql);
if (!$res) Die("Chyba pri provadeni dotazu:<br>$q<br>".sqlite_error_string(sqlite_last_error($sql)));
sqlite_close($sql);


v případě cyklického vkládání bude vhodné neotvírat a nezavírat databázi před/po každým insertem

EDIT: jo a předpokládám, že všechny sloupce v databázi jsou char nebo varchar, ne číselné (v případě, že by byly číselné, tak v části za VALUES odeber kolem příslušné proměnné apostrofy)
souki
Profil
nightfish
ty apostrofy by tam vadily?
bach
Profil
PROSÍM O POMOC znalce.......

zadal jsem to takhle:
<?
$output = shell_exec("e:\digitemp\digitemp.exe -r500 -a -s1 -c e:\digitemp\digitemp.cfg");
$data = explode("|", $output);
$cidlo0 = $data[2];
$teplota0 = $data[3];
$cas0 = $data[1];
$datum0 = $data[4];
?>

<?
$sql = sqlite_open("teplomer.db");
if (!$sql) Die("Nepodarilo se otevrit databazi.");
$res = sqlite_query($q="INSERT INTO tepl(datum, cas, cidlo, teplota) VALUES ('$datum0', '$cas0', '$cidlo0', '$teplota0')", $sql);
if (!$res) Die("Chyba pri provadeni dotazu:<br>$q<br>".sqlite_error_string(sqlite_last_error($sql)));
sqlite_close($sql);
?>

hlásí mi to tohle:
Warning: sqlite_query() [function.sqlite-query]: column datum is not unique in E:\web_www\tgroup\teplomer\sq2.php on line 38
Chyba pri provadeni dotazu:
INSERT INTO tepl(datum, cas, cidlo, teplota) VALUES ('2008-03-26', '10:02:17', '0', '17.25')
constraint failed

V čem může být problém?

datum mám type DATE , cas je type TIME , zbytek je type VARCHAR
resp. je nutné abych to měl DATE a time , nebo to může být pro datum a čas i VARCHAR?

ještě 1 dotaz pokud bych tu db nechtěl mít v témže adresáři jako php script?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0