Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Karel.V 12. 07. 2018, 08:16:57
-
Dobrý den všem tadý.
Bych se chtěl zeptat, když mam v raspberry 5 teplotních čidel.
Hodnotný se ukládají do 5 textových souboru.
Udělal jsem na ně symlink, takže mam na ně přistup z /var/www/
Vypsat hodnoty přes PHP - fread jsem už zkoušel.
Jak složité by bylo ty hodnoty vypisovat tak, aby se třeba co 5 vteřin aktualizovaly?
Děkují Karel.
-
Bude nutné použít JavaScript. Následující kód refreshne stránku po 5 sekundách (5000 ms), tím by se měly znovu načíst hodnoty za serveru. Čistší by samozřejmě bylo použít AJAX, aby se nenačítala celá stránka, ale pouze data, která se mění. To by se mi však nevešlo do jednoho řádku :)
Považuj to spíš za takové postrčení k cíli.
<script>
setTimeout(function(){ location.reload(true)}, 5000);
</script>
-
A nějaký odkaz, jak na to přes ten AJAX?
Nemusí to být na jednom řádku ;)
-
Odkaz např. zde: https://api.jquery.com/jquery.get/
Viděl bych to nějak takto:
<script>
setInterval(function(){
$.get( "teplota/cidlo1.php", function( data ) {
$( "#teplota1" ).html( data );
});
}, 5000);
</script>
teplota/cidlo1.php je url, kde bude dostupná teplota z 1. čidla
#teplota1 je id html elementu, kde se bude zobrazovat teplota
Využívá se knihovna jQuery
-
Refresh lze udelat i bez JavaScriptu pres html <meta> tag v hlavicce, viz dokumentace: https://www.w3schools.com/tags/att_meta_http_equiv.asp
-
Hlavne to nerieš cez meta http-refresh, to ti obnoví celú stránku a to je trápne. Krok číslo 1. - vieš to ukladať inam? Napríklad do databázy a nie do piatich rôznych súborov? To je totiž nezmysel číslo jedna.
-
Ahoj, me "tohle bastleni" nedavno taky chytlo :) Ale v mem pripade uplne postacuje meta http-refresh, protoze data z cidel nacitam jednou za pet minut v ruznych intervalech a na te www strance mam data jen z tech cidel. Takze ji necham pomoci meta tagu aktualizovat celou jednou za dve minuty ;) A to jeste premyslim, ze bych interval mereni prodlouzil z peti na patnact minut a refresh www umerne taky. Muzu se zeptat, co a kde meris, ze "potrebujes" aktualizaci co pet sekund? Opravdu me to zajima, protoze me napadlo akorat to, ze delas nejakou sondu na "propecenost steaku", kde jde opravdu o vterinky ;D
-
...Krok číslo 1. - vieš to ukladať inam? Napríklad do databázy a nie do piatich rôznych súborov? To je totiž nezmysel číslo jedna.
Pochopil jsem to tak, že v každém souboru je JEDINÁ, aktuální hodnota (soubor může ležet např. v tmpfs). Zde je DB na hovno.
-
Pochopil jsem to tak, že v každém souboru je JEDINÁ, aktuální hodnota (soubor může ležet např. v tmpfs). Zde je DB na hovno.
Pro domácí bastlení to asi nevadí, ale jinak je to nespolehlivé - když přepisuješ obsah souboru, tak se typicky nejdřív zkrátí na nulovou velikost a až potom se v něm objeví nový obsah (lze to obejít tím, že vytvoříš nový soubor celý a pak ho přejmenuješ). Takže tam máš race, kdy ti webserver může naservírovat prázdný soubor.
-
Bez DB musíš preprogramovávať frontend s každým novým čidlom, nemáš históriu teplôt, a pod. Súbor je k hovnu. Obzvlášť zvlášť súbor pre každé čidlo, obzvlášť s jedinou hodnotou.
-
Ahoj, me "tohle bastleni" nedavno taky chytlo :) Ale v mem pripade uplne postacuje meta http-refresh, protoze data z cidel nacitam jednou za pet minut v ruznych intervalech a na te www strance mam data jen z tech cidel. Takze ji necham pomoci meta tagu aktualizovat celou jednou za dve minuty ;) A to jeste premyslim, ze bych interval mereni prodlouzil z peti na patnact minut a refresh www umerne taky. Muzu se zeptat, co a kde meris, ze "potrebujes" aktualizaci co pet sekund? Opravdu me to zajima, protoze me napadlo akorat to, ze delas nejakou sondu na "propecenost steaku", kde jde opravdu o vterinky ;D
taky jsem si rikal, ze pri mereni teploty mit refresh 5 vterin je celkem zajimave, ale proc ne, treba pripravuje nejakou platformu, kde jde predevsim o performance ;]
-
btw: neni to univerzalni reseni a nemam odzkousene, ale opakovaneho obnovovani lze dosahnout i doplnkem do browseru ;) (kdyby se nechtelo bastlit)
-
Pochopil jsem to tak, že v každém souboru je JEDINÁ, aktuální hodnota (soubor může ležet např. v tmpfs). Zde je DB na hovno.
Pro domácí bastlení to asi nevadí, ale jinak je to nespolehlivé - když přepisuješ obsah souboru, tak se typicky nejdřív zkrátí na nulovou velikost a až potom se v něm objeví nový obsah (lze to obejít tím, že vytvoříš nový soubor celý a pak ho přejmenuješ). Takže tam máš race, kdy ti webserver může naservírovat prázdný soubor.
Nebo může ten soubor zamykat (ale zase si zadělává na problém, pokud se soubor z nějakého důvodu neodemkne).
-
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:
zaciatok.html:
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>
koniec.html:
</ol>
</body>
</html>
napisal by som jednoduchy spajaci skript
script.sh:
#!/bin/bash
cd /var/www/html/senzory/
cat zaciatok.html > index.html
for FILENAME in val1 val2 val3 val4 val5
do
echo "<li>" >> index.html
cat /var/www/html/senzory/$FILENAME >> index.html
echo "</li>" >> index.html
done
cat koniec.html >> index.html
kde /var/www/html/senzory/val1..5 su tie nalinkovane hodnoty.
Potom by som napisal nekonecny updatovac (ulozit tam kde je script.sh)
updatovac.sh:
while true; do ./script.sh & sleep 5; done
Potom treba len spustit updatovac.sh a v browseri otvorit http://server/senzory/
Vyhody: ziadny javascript na klientovi (meta refresh tag funguje na vsetkom); ziadne desiatky (php) alebo stovky (nodejs, java) megabajtov na aplikacny server na serveri; samostatne konfigurovatelny refresh klientov; samostatne konfigurovatelny refresh suboru na serveri; minimalizmus
Nevyhody: update serveroveho suboru pobezi aj ked ho ziadny klient nebude chciet precitat; potreba spustit updater (da sa nalinkovat do nejakeho systemoveho startup scriptu)
-
while true; do ./script.sh & sleep 5; done
while true; do ./script.sh; sleep 5; done
nebo
while sleep 5; do ./script.sh; done
.
Tohle tvoje dělá podivnosti se spouštěním na pozadí.
-
while true; do ./script.sh & sleep 5; done
while true; do ./script.sh; sleep 5; done
nebo
while sleep 5; do ./script.sh; done
.
Tohle tvoje dělá podivnosti se spouštěním na pozadí.
eh?
toto while true; do date; sleep 5; done
bez problemov bezi.
pre test behu na pozadi zmenim vypis na touch suboru a ked to spustim na pozadi :
(while true; do touch test; sleep 5; done)&
tak to mozem sledovat v druhom okne pomocou watch -n 1 ls -la --time-style=full-iso test
ake konkretne podivnosti so spustanim na pozadi ti to robi?
-
Ještě jednou: napsal jsi
while true; do ./script.sh & sleep 5; done
. Pokud jsi chtěl testovat návratovou hodnotu, tak tam mělo být &&, pokud jenom spustit další příkaz, tak ;.
-
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:
zaciatok.html:
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>
koniec.html:
</ol>
</body>
</html>
napisal by som jednoduchy spajaci skript
(...)
Ehm, dobrý pokus, jenže tazatel psal:
Vypsat hodnoty přes PHP - fread jsem už zkoušel.
Tazatel chce, aby se ta stránka sama aktualizovala.
Tam je IMHO ajax nejlepší a současně dostatečně primitivní řešení.
Anebo ten refresh, což je trochu old-school, ale pořád funkční řešení.
-
Ještě jednou: napsal jsi
while true; do ./script.sh & sleep 5; done
. Pokud jsi chtěl testovat návratovou hodnotu, tak tam mělo být &&, pokud jenom spustit další příkaz, tak ;.
ach... sorry, copy/paste programming. samozrejme mas pravdu - staci tam ; alebo ako si napisal while sleep 5 je este krajsie.
-
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:
zaciatok.html:
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>
(...)
Ehm, dobrý pokus, jenže tazatel psal:
Vypsat hodnoty přes PHP - fread jsem už zkoušel.
Tazatel chce, aby se ta stránka sama aktualizovala.
IMHO meta refresh bude stranku automagicky aktualizovat, takze podmienka splnena.
Na jeden riadok deklarativneho kodu, ziadny js, pobezi to uplne vsade a nema sa tam co pokazit.
Tam je IMHO ajax nejlepší a současně dostatečně primitivní řešení.
Ak pripustime ze na klientovi moze byt AJAX (javascript) tak sa to da napisat na par riadkov javascriptu bez pouzitia dalsich kniznic (no jquery, plz!). V tom pripade by script.js len cyklicky vytvaral tu datovu cast napriklad do data.html. Do suboru zaciatok.html by som pridal ten AJAXovy obnovovac, html subory zaciatok.html a koniec.html by som spojil do index.html, medzi ne este vlozil jeden DIV s idckom a tento potom naplnal z data.html spominanym AJAXom. Nepobezi to bez javascriptu ale bude to rovnako funkcne.