[ vladakru @ 21.02.2016. 20:54 ] @
prijavljuje mi gresku kada treba da se explode time iz fajla u prilogu \ Undefined offset: u obelezenim redovima u skripti, zato :( ????
Code:
<html>

<?php

## Put todays date into a variable for later use...

$date= date("d-m-Y");

## Tell PHP the location of our datafile for the current date...
## file_get_contents() retrieves the contents and places it into a 
## variable as a string.

$txt_file= file_get_contents('temp_log_' .$date. '.txt');

## Do a little error checking and display a message if the text 
## file is missing...

if(!$txt_file) {
echo "<br>ERROR - There is no information for this date.";

## If the file is present lets get going...

} else {

## Retrieve each row from the file.  The explode() function
## in this instance is using each new line ("\n") as a delimiter
## and assigning the entire file to a variable ($rows)...
 
$rows= explode("\n", $txt_file);

## As the explode() function will treat the last line as a new 
## record, we need to remove the last record (which is a blank line).  
## array_pop() does this for us automatically...

array_pop($rows); 

## Setup two blank arrays for our data.  One for the time and one
## for the temperatures...

$temp=array();
$time=array();

## Now we use a foreach statement to parse each row so that we can 
## process them and sort our data. We assign each row to a 
## variable ($data)...

foreach($rows as $row => $data)
{

## Break down the individual record using (,) as delimiter.

$total= explode(",", $data);

## Extract the time from the record and make it loo pretty...

$t= explode(":", $total[1]);
$time[]= "$t[0]:$t[1]";                                    #   <--- OVDEEEEEEEEEEEEE

## Extract the temperature data from the record...
## floor() rounds the number down to the nearest integer.  
## We then multiply this by 100 and divide the rounded down 
## figure by 100.  This gives our temperature in a huma 
## readable fashion with the correct decimal places... 

$temp[]= floor($total[2] * 100) / 100;                     #   <--- OVDEEEEEEEEEEEEE

## Notice that within this foreach statement I have 
## used the two variables $temp & $time with [] appended 
## to the end.  Doing this saves our new, re-fashioned 
## readings back to the variable turning it into an array of 
## all the data...

## then we end the foreach statement...

}

## Now we use the implode function to accumulate each row 
## that we have processed and save it back to an array.  
## We use (,) as our delimiter again...

$tempa= implode(",", $temp);
$timea= implode(",", $time);

## We have two, human-readable, arrays of data that we can 
## now pass to our graph...
}
?>




<head>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
        $('#container').highcharts({
            chart: {
                type: 'line',
                marginRight: 130,
                marginBottom: 25
            },
            title: {
                text: 'Todays Temperature Chart',
                x: -20 //center
            },
            subtitle: {
                text: 'Source: My Raspberry Pi',
                x: -20
            },
            xAxis: {
                categories: [<?php echo $timea; ?>]
            },
            yAxis: {
                title: {
                    text: 'Temperature'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                valueSuffix: ''
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: [{
                name: 'Celcius',
                data: [<?php echo $tempa; ?>]
            }]
        });
    });
</script>

</head>

<body>

<script src="charts/js/highcharts.js"></script>
<script src="charts/js/modules/exporting.js"></script>
<div id="container" style="width: 800px; height: 400px; margin: 0 auto"></div>


</body>


</html>


a iz txt fajla vuce ove podatke
Code:
21-02-2016 05:30:01,18.687
21-02-2016 06:00:02,18.437
21-02-2016 06:30:01,18.125
21-02-2016 07:00:01,17.875
21-02-2016 07:30:01,17.687
21-02-2016 08:00:01,17.375
21-02-2016 08:30:02,17.5
21-02-2016 09:00:01,16.562
21-02-2016 09:30:02,14.812
21-02-2016 10:00:01,15.062
21-02-2016 10:30:01,17.0
21-02-2016 11:00:01,18.625
21-02-2016 11:30:01,19.5
21-02-2016 12:00:01,19.625
21-02-2016 12:30:01,19.812
21-02-2016 13:00:01,20.687
21-02-2016 13:30:01,20.687
21-02-2016 14:00:01,20.812
21-02-2016 14:30:02,20.5
21-02-2016 15:00:01,20.5
21-02-2016 15:30:01,20.562
21-02-2016 16:00:01,20.5
21-02-2016 16:30:01,20.25
21-02-2016 17:00:01,20.562
21-02-2016 17:30:02,19.937
21-02-2016 18:00:01,19.875
21-02-2016 18:30:01,19.812
21-02-2016 19:00:01,19.812
21-02-2016 19:30:02,20.125
21-02-2016 20:00:01,20.125
21-02-2016 20:30:01,19.875
21-02-2016 21:00:01,19.937

[ Nemke_BG @ 21.02.2016. 22:32 ] @
var_dump-uj sadrzaj $t i $total kroz svaki krug, pa ces videti zasto to radi.
[ Tpojka @ 21.02.2016. 22:38 ] @
Pogledaj da nije zbog toga sto se nisi rijesio datuma prije nego sto obradjujes vrijeme.
[ vladakru @ 22.02.2016. 10:17 ] @
ma ja se nikako ne snalazim sa ovom php-om, kao pocetnik gledam kao tele u sarena vrata :)

koliko vidim skripta prvo generise datum na osnovu koga proverava da li se pod tim datumom nalazi fajl iz kod treba da izvuce vec generisan datum, vreme, temeperaturu i veze ih za odredjene varijable koje ce nadalje da se koriste u javascript grafikonu.

meni sve to deluje kao ok ali i dalje ne iscrtava nista...
[ ntesic @ 27.02.2016. 21:15 ] @
Jel ti u provom prolazu kroz petlju daje gresku ili posle toga?
[ martimysteria @ 27.02.2016. 23:10 ] @
pozdrav,
ako razumem stvar,
tebi datum i vreme daju podniz,
koji explode treba da razbije u 2 podatka,zasebno.

da li bi onda ,ova dva reda koji ti prave problem trebalo da imaju indexe 0 i 1 ,ako podniz ima 2 elementa?
$t= explode(":", $total[1]);
$time[]= "$t[0]:$t[1]"; # <--- OVDEEEEEEEEEEEEE

## Extract the temperature data from the record...
## floor() rounds the number down to the nearest integer.
## We then multiply this by 100 and divide the rounded down
## figure by 100. This gives our temperature in a huma
## readable fashion with the correct decimal places...

$temp[]= floor($total[2] * 100) / 100;

znaci $total[0] i $total[1]

mislim da zato generise undefined offset.
pozdrav
[ Mister Big Time @ 28.02.2016. 23:53 ] @
Samo bih dodao da upisivanje datuma i vremena u bilo kom human readable formatu u log fajlove je zlocin. Sta npr. ako saljes te logove nekome na analizu ko se nalazi u Australiji? Kako ce on tumaciti vreme na taj nacin, ako ne zna gde se nalazi server koji je to generisao tj. u kojoj vremenskoj zoni?
Za log fajlove jedini ispravan format reprezentacije trenutnog vremena i datuma odnosno trenutka u vremenu jeste UNIX epoch tj. timestamp.

Na taj nacin ne samo da se olakasava parsiranje (koje naravno u runtime-u prikazuje human readable datum i vreme u kom god formatu) vec se i osigurava da ko god na planeti otvori takav log fajl moze nedvosmisleno i lako da utvrdi u kom trenutku se nesto dogodilo, i da to prikaze u svojoj lokalnoj time zoni.


F-ja u PHP-u koja vraca trenutni timestamp izrazen u sekundama je time(). Vidim da mnogi developer-i prave cirkus oko prvo generisanja vremena, a zatim konvertovanja i ostalih peripetija.
Kasnije sa date() je lako prikazati human readable oblik u bilo kom formatu.

Opis sloga:
UNIX epoch / timestamp # runtime
Code:

1455633125#1.361
1455633125#0.007
1455633126#0.007
1455633134#1.258
1455633134#0.006
1455633134#0.007
1455633167#0.032
1455633170#0.768
1455633170#0.008
1455633170#0.007
1455633183#0.009
1455633184#0.006
1455633184#0.008
1455633192#0.010
1455633192#0.008
1455633192#0.007
1455633331#0.018
1455633331#0.007
1455633331#0.007
1455633339#1.170
1455633339#0.007
1455633340#0.007
1455633353#1.736
1455633357#2.192
1455633358#1.374
1455633359#0.007
1455633360#0.007
1455633370#0.956
1455633378#1.657
1455633378#0.007
1455633378#0.007
1455633385#1.820
1455633385#0.007
1455633385#0.007
1455633389#1.351
1455633389#0.007
1455633389#0.007
1455633393#1.268
1455633394#0.007
1455633394#0.006
1455633406#2.346
1455633406#0.007
1455633406#0.006
1455633453#1.341
1455633453#0.007
1455633453#0.007
1455633493#1.354
1455633493#0.007
1455633493#0.007
1455633500#1.328
[ vladakru @ 29.02.2016. 12:49 ] @
ma meni je nebitno u kom je formatu, skripte sam copy/paste i koristim ih samo ja za moje potrebe.

sto se tice problema kada stavim

Code:
$time[]= "$t[0]";

daje mi sate

a sa

Code:
$time[]= "$t[1]";

daje mi minute,

u izvornoj skripti to je spojeno
Code:
$time[]= "$t[0]:$t[1]";
ali dzabe kad daje gresku.
[ martimysteria @ 29.02.2016. 17:58 ] @
pozdrav,
@vladakru
ne znam razlog zbog koga si ignorisao post koji sam ti napisaom ali nema ni veze,
ja sam scriptu koju si ovde stavio pokrenuo i prikazivala mi je gresku u apache2 logu - "Undefined offset".
izmenio sam code ,kao sto sa ti vec napisao u postu , i postavio
Code:
 
$total[0]
$total[1]


jer ovaj niz $total ima samo 2 elementa , dakle index 0 i 1 .
sa ovom izmenom, meni scripta n edaje gresku, i kada sam na kraju dodao
Code:

print_r($timea);


dobio sam niz koji je ,ja mislim ,korektan.

da bih mogao da vidim kako to izgleda u tom grafiku, potrebno je da imam lokalno i javascript koji je u scripti referenciran.
Code:

<script src="charts/js/highcharts.js"></script>
<script src="charts/js/modules/exporting.js"></script>

sve u svemu,dobio si odgovor m zasto scripta ne radi.indexi u nizu su pogresni, i niz $total izlazi iz opsega,

pozdrav
[ vladakru @ 29.02.2016. 19:49 ] @
Citat:
pozdrav,
@vladakru
ne znam razlog zbog koga si ignorisao post koji sam ti napisaom ali nema ni veze,


izvini

a gde da stavim ?
Code:

$total[0]
$total[1]
[ Tpojka @ 29.02.2016. 19:58 ] @
Vec sam pomenuo: kad napravis explode() na dva elementa (od kojih je drugi temperatura), prvi ti i dalje sadrzava datum i vrijeme. Rijesices se datuma jos jednim $dat_tim = explode(' ', $t[0]). $dat_tim[1] ti je varijabla nad kojom upotrebljavas dalji (a koji je i @martimysteria predlozio) kod.
[ martimysteria @ 29.02.2016. 21:17 ] @
pozdrav,
@vladakru ,sasvim je ok ako zelis da samo nateras scriptu da ti zavrsi posao,bez suvisnih rasprava.
dakle , u mom editoru ,ovo je linija 48,izgleda ovako
Code:

$t= explode(":", $total[1]);

treba da stoji ovako :
Code:

$t= explode(":", $total[0]); 


sldeca linija koju treba da izmenis kod mene je broj 58, i izgleda ovako:
Code:

$temp[]= floor($total[2] * 100) / 100;

treba da bude :
Code:

$temp[]= floor($total[1] * 100) / 100;


$total je niz, sto vidis u scripti.broj u zagradi [2] , predstavlja index, tj mesto koje zauzima taj element u nizu.$total niz ima 2 elementa , (jedan je datum,drugi vreme).u programiranju se index niza racuna od 0 , a ne od 1 . dakle 0,1,2... a ne 1,2,3,4 (ovo vazi za php i vecinu jezika, ne mogu da se setim gde nizovi pocinju od 1,sad nije vazno).posto je u scripti stajalo $total[2], to je onda pristup 3.em elementu niza koji ne postoji i niz ti je izleteo iz opsega (0,1).
napomena, obrati paznju da u folderu gde ti je ova scripta treba da imas jos 2 foldera sa javascriptom : charts/js/highcharts.js i charts/js/modules/exporting.js.
nadam se da je jasno,
pozdrav


[ vladakru @ 01.03.2016. 08:50 ] @
hvala na pomoci,
sad mi uz pomoc
Code:
print
lepo ispisuje $timea i $tempa ali nece da iscrtava grafikon??

deo php-a sa skriptom za grafikon
Code:
<head>



<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
        $('#container').highcharts({
            chart: {
                type: 'line',
                marginRight: 130,
                marginBottom: 50
            },
            title: {
                text: 'Todays Temperature Chart',
                x: -20 //center
            },
            subtitle: {
                text: 'Source: My Raspberry Pi',
                x: -20
            },
            xAxis: {
                categories: [<?php echo $timea; ?>]
            },
            yAxis: {
                title: {
                    text: 'Temperatura Â°C'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                valueSuffix: ''
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: [{
                name: '°C',
                data: [<?php echo $tempa; ?>]
            }]
        });
    });
</script>

</head>

<body>

<script src="charts/js/highcharts.js"></script>
<script src="charts/js/modules/exporting.js"></script>
<div id="container" style="width: 800px; height: 400px; margin: 0 auto"></div>
</body>

u root je folder charts sa svim folderima JS i modulima
[ martimysteria @ 01.03.2016. 18:25 ] @
pozdrav,
ovde slabo stojim,mnogo ...
jedino sto mi pada korisno na pamet ,a stvar otezava to sto nemam te dodatne javascripte, jeste ,iako zvuci smorno jako je korisno, da instaliras FireBug Extension za Firefox, da ga ukljucis i pogledas kakv izvestaj ces dobiti.ne znam da li vec imas instaliran.
ako nemas ,ultra je prosto , a trebace ti kad vec koristis scripte i aplikacije za web.pogledaj na youtubu,
ja sam vec probao ,i prijavljuje mi gresku u ovom redu

Code:

SyntaxError: missing ] after element list
      xAxis: {
               categories: [<?php echo $timea; ?>]   ####  ovde $timea izbaci niz ciji elementi imaju blank u sebi i to pravi problem za citac, javascript kaze da ovde ne sme da bude blank u nizu
           },

valjda ce se javiti neko sa javascriptom
pozdrav,
[ vladakru @ 01.03.2016. 19:32 ] @
delimicno sam resio problem sa greskama time sto sam ispravio nacin upisivanja podataka u file iz koga se cupaju podaci,
umesto
Code:
21-02-2016 05:30:01,18.687
dodao sam zarez izmedju datuma i vremena
Code:
21-02-2016,05:30:01,18.687
, sada ne izbacuje nikakvu gresku ali nece da ucita grafikon.
neko resenje koje sam isprobao je da mu u X osi ispisuje samo casove (bez minuta)
Code:
$time[]= "$t[0]";
i tada ucita grafikon.

evo ga ceo root folder sa skriptama. (virus free)
[ vladakru @ 01.03.2016. 20:13 ] @
FireBug kaze
Code:
SyntaxError: missing ] after element list
    

categories: [00:00,00:30,01:00,01:30]

    
[ Tpojka @ 01.03.2016. 21:02 ] @
Upravo si svima posl'o podatke od FTP-a.
Promijeni ih. Pazi sta zipujes i saljes online.

U prvom primjeru nemas zareze na kraju redova.
U temp_log.txt fajlu imas.
Kod za jedan ne moze raditi na drugom.

Kao sto sam i rekao moras uraditi explode po praznom polju.
A sada si ubacio zarez umjesto space-a tako da se gubi taj koncept jer niz dobija vise elemenata samim explode-om po zarezu.
array_pop($row) ti skida posljednji red podataka, a ne praznu liniju.
Debug-uj kod liniju po liniju - ako ti je greska (lupam) na 54 liniji vidi sta je na 53 pa uradi var_dump($toga_sto_imas);exit;
Dogovori se koji su ti ulazni podaci, jer ako ih mijenjas prijedlozi u odgovorima na temi (uglavnom) ne vrijede vise.

Pozdrav.
[ vladakru @ 01.03.2016. 22:11 ] @
konacno je ovo zadnje sto sam stavio. ftp nema veze. jel ce neko da mi hakuje "malinu" ;)
[ Tpojka @ 01.03.2016. 23:33 ] @
Evo ti php:

Code (php):

<html>

<?php

## Put todays date into a variable for later use...

$date= date("d-m-Y");

## Tell PHP the location of our datafile for the current date...
## file_get_contents() retrieves the contents and places it into a
## variable as a string.

$txt_file= file_get_contents('temp_log.txt');

## Do a little error checking and display a message if the text
## file is missing...

if(!$txt_file) {
echo "<br>GRESKA - Nema informacije o datumu.";

## If the file is present lets get going...

} else {

## Retrieve each row from the file.  The explode() function
## in this instance is using each new line ("\n") as a delimiter
## and assigning the entire file to a variable ($rows)...

$array = explode("\n", $txt_file);

foreach ($array as $k => $v)
{
     $rows[$k] = explode(',', rtrim($v, ','));
//   array_pop($rows[$k]);
}

## Setup two blank arrays for our data.  One for the time and one
## for the temperatures...

$temp= array();
$time= array();

## Now we use a foreach statement to parse each row so that we can
## process them and sort our data. We assign each row to a
## variable ($data)...

foreach($rows as $row => $data)
{

     ## Break down the individual record using (,) as delimiter.

     //$total= explode(",", $data);
     
//   var_dump($data);exit;

     ## Extract the time from the record and make it loo pretty...

     $t = explode(":", $data[1]);
     
     

     $time[$row] = $t[0] . ':' . $t[1];            ###
     
//   var_dump(number_format($data[2], 1));exit;
       
     ## Extract the temperature data from the record...
     ## floor() rounds the number down to the nearest integer.  
     ## We then multiply this by 100 and divide the rounded down
     ## figure by 100.  This gives our temperature in a huma
     ## readable fashion with the correct decimal places...
     
//   var_dump($data[2]);exit;

     $temp[$row] = number_format($data[2], 1);
     
//   var_dump($temp);
//   exit;

     ## Notice that within this foreach statement I have
     ## used the two variables $temp & $time with [] appended
     ## to the end.  Doing this saves our new, re-fashioned
     ## readings back to the variable turning it into an array of
     ## all the data...

     ## then we end the foreach statement...

}

## Now we use the implode function to accumulate each row
## that we have processed and save it back to an array.  
## We use (,) as our delimiter again...
#$dat_tima = implode(",", $dat_tim)
//$tempa= implode(",", $temp);
//$timea= implode(",", $time);

$tempa = json_encode($temp);
$timea = json_encode($time);

//echo $tempa;exit;

## We have two, human-readable, arrays of data that we can
## now pass to our graph...
}


?>




<head>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
        $('#container').highcharts({
            chart: {
                type: 'line',
                marginRight: 130,
                marginBottom: 50
            },
            title: {
                text: 'Todays Temperature Chart',
                x: -20 //center
            },
            subtitle: {
                text: 'Source: My Raspberry Pi',
                x: -20
            },
            xAxis: {
                categories: <?php echo $timea; ?>
            },
            yAxis: {
                title: {
                    text: 'Temperatura °C'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                valueSuffix: ''
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: [{
                name: '°C',
                data: <?php echo $tempa; ?>
            }]
        });
    });
</script>

</head>

<body>

<script src="charts/js/highcharts.js"></script>
<script src="charts/js/modules/exporting.js"></script>
<div id="container" style="width: 800px; height: 400px; margin: 0 auto"></div>
<p align="center"><font face="Arial" size="5"><strong> >>> Raspberry Pi Termometar <<< </strong></font></p>

</body>

</html>
 


Trimuj sta ti ne treba od komentara. Im'o si offset zbog array_pop funkcije koja ti je odstranjivala posljednji element niza.
A sada se moras igrati sa dokumentacijom highchart-a da vidis za ispis. Ili postavi u JS forum pitanje.
[ vladakru @ 02.03.2016. 07:57 ] @
Citat:
Tpojka: Evo ti php:


skripta radi, hvala, ali mi pravi problem sa temperaturom, ispisuje je sa navodnicama a treba bez njih.
[ vladakru @ 02.03.2016. 11:43 ] @
firebug mi kaze da ovako ocita podatke
Code:
data: ["22.5","22.5","22.4","22.2","22.1"]

a treba ovako bez navodnika
Code:
data: [22.5,22.5,22.4,22.2,22.1]
[ Tpojka @ 02.03.2016. 14:59 ] @
Upotrijebi svoju kalkulaciju za temperaturu. Ova sto sam predlozio ne radi pos'o:

Code (php):

//   $temp[$row] = number_format($data[2], 1);
     $temp[$row] = floor($data[2] * 100) / 100;
 
[ vladakru @ 02.03.2016. 15:38 ] @
sa mojom kalkulacijom radi.
ali ne znam zasto zadnja vrednost u grafikonu je nula pa mi grafikon na kraju "padne"
mislim da zato sto vreme stampa dvotacku : pa kad se na kraju odstampa dvotacka onda vrednost za temperaturu upise nulu, kako to da resim?

[Ovu poruku je menjao vladakru dana 02.03.2016. u 17:14 GMT+1]