Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Karel.V 12. 07. 2018, 08:16:57

Název: Vypsání dat na www stránce
Přispěvatel: 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.

Název: Re:Jak vypsat data na www strance
Přispěvatel: Rafael Trifon 12. 07. 2018, 09:12:25
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.
Kód: [Vybrat]
<script>
     setTimeout(function(){ location.reload(true)}, 5000);
</script>
Název: Re:Vypsání dat na www stránce
Přispěvatel: Karel.V 12. 07. 2018, 09:19:30
A nějaký odkaz, jak na to přes ten AJAX?
Nemusí to být na jednom řádku  ;)
Název: Re:Vypsání dat na www stránce
Přispěvatel: Rafael Trifon 12. 07. 2018, 09:29:59
Odkaz např. zde: https://api.jquery.com/jquery.get/
Viděl bych to nějak takto:

Kód: [Vybrat]
<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
Název: Re:Vypsání dat na www stránce
Přispěvatel: Boo 13. 07. 2018, 08:48:28
Refresh lze udelat i bez JavaScriptu pres html <meta> tag v hlavicce, viz dokumentace: https://www.w3schools.com/tags/att_meta_http_equiv.asp
Název: Re:Vypsání dat na www stránce
Přispěvatel: Vlado 17. 07. 2018, 11:59:08
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.
Název: Re:Vypsání dat na www stránce
Přispěvatel: JednorazovyNick 17. 07. 2018, 12:54:28
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
Název: Re:Vypsání dat na www stránce
Přispěvatel: SB 17. 07. 2018, 13:22:35
...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.
Název: Re:Vypsání dat na www stránce
Přispěvatel: Jenda 17. 07. 2018, 13:56:25
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.
Název: Re:Vypsání dat na www stránce
Přispěvatel: Vlado 17. 07. 2018, 13:56:46
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.
Název: Re:Vypsání dat na www stránce
Přispěvatel: souhlas 17. 07. 2018, 13:57:02
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 ;]
Název: Re:Vypsání dat na www stránce
Přispěvatel: ET 17. 07. 2018, 17:10:33
btw: neni to univerzalni reseni a nemam odzkousene, ale opakovaneho obnovovani lze dosahnout i doplnkem do browseru  ;) (kdyby se nechtelo bastlit)
Název: Re:Vypsání dat na www stránce
Přispěvatel: Ondrej Nemecek 17. 07. 2018, 19:32:06
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).
Název: Re:Vypsání dat na www stránce
Přispěvatel: andrej 18. 07. 2018, 14:11:08
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:

zaciatok.html:
Kód: [Vybrat]
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>

koniec.html:
Kód: [Vybrat]
</ol>
</body>
</html>

napisal by som jednoduchy spajaci skript

script.sh:
Kód: [Vybrat]
#!/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:
Kód: [Vybrat]
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)
Název: Re:Vypsání dat na www stránce
Přispěvatel: Jenda 18. 07. 2018, 14:54:34
Kód: [Vybrat]
while true; do ./script.sh & sleep 5; done

Kód: [Vybrat]
while true; do ./script.sh; sleep 5; donenebo
Kód: [Vybrat]
while sleep 5; do ./script.sh; done.

Tohle tvoje dělá podivnosti se spouštěním na pozadí.
Název: Re:Vypsání dat na www stránce
Přispěvatel: andrej 18. 07. 2018, 16:02:26
Kód: [Vybrat]
while true; do ./script.sh & sleep 5; done

Kód: [Vybrat]
while true; do ./script.sh; sleep 5; donenebo
Kód: [Vybrat]
while sleep 5; do ./script.sh; done.

Tohle tvoje dělá podivnosti se spouštěním na pozadí.

eh?
toto
Kód: [Vybrat]
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 :
Kód: [Vybrat]
(while true; do touch test; sleep 5; done)&tak to mozem sledovat v druhom okne pomocou
Kód: [Vybrat]
watch -n 1 ls -la --time-style=full-iso test
ake konkretne podivnosti so spustanim na pozadi ti to robi?
Název: Re:Vypsání dat na www stránce
Přispěvatel: Jenda 18. 07. 2018, 18:31:05
Ještě jednou: napsal jsi
Kód: [Vybrat]
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 ;.
Název: Re:Vypsání dat na www stránce
Přispěvatel: Ondrej Nemecek 19. 07. 2018, 00:15:38
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:

zaciatok.html:
Kód: [Vybrat]
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>

koniec.html:
Kód: [Vybrat]
</ol>
</body>
</html>

napisal by som jednoduchy spajaci skript

(...)

Ehm, dobrý pokus, jenže tazatel psal:

Citace
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í.
Název: Re:Vypsání dat na www stránce
Přispěvatel: andrej 19. 07. 2018, 08:34:15
Ještě jednou: napsal jsi
Kód: [Vybrat]
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.
Název: Re:Vypsání dat na www stránce
Přispěvatel: andrej 19. 07. 2018, 08:58:42
ja by som si spravil staticku stranku, rozdelil ju do dvoch suborov:

zaciatok.html:
Kód: [Vybrat]
<html>
<head>
<meta http-equiv="refresh" content="5">
</head>
<body>
Hodnoty:
<ol>
(...)

Ehm, dobrý pokus, jenže tazatel psal:

Citace
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.