Witam!
Proszę o pomoc w rozwiązaniu następującego problemu. Do bazy MySQL zapisuję co 1 minutę wynik pomiaru wilgotności powietrza. Za pomocą skryptu php pobieram dowolną ilość danych np. 17 i koduję je do formatu JSON. Skrypt, który napisałem działa bardzo dobrze.
[(http://meteososnowiec.pl/data_wilgotnosc_testy.php)]
<?php
$wynik_data = mysql_query("SELECT czas_datetime FROM tab_czujniki_2 ORDER BY czas_datetime DESC LIMIT 1");
if(mysql_num_rows($wynik_data) > 0) {
$r = mysql_fetch_assoc($wynik_data);
$datan = $r['czas_datetime'];
$daten = new DateTime($data);
$daten->modify('-15 min');
$minus_data = $daten->format("Y-m-d H:i:00");
}
$sth = mysql_query("SELECT czas_unix, wilgotnosc FROM tab_czujniki_2 WHERE czas_datetime >= '$minus_data' ORDER BY czas_datetime ASC") or die('Błąd zapytania');
$rows = array();
$rows['name'] = 'Wilgotnosc';
while($r = mysql_fetch_array($sth)){
$rows['data'][] = array(1000*($r['czas_unix']),$r['wilgotnosc']);
}
$result = array();
array_push($result,$rows);
print json_encode($result, JSON_NUMERIC_CHECK)
?>
Chciałbym jednak zmienić jego działanie, ale nie bardzo wiem jak podejść do tematu.
Założenia algorytmu:
- Pobieram z bazy MySQL dowolną ilość rekordów np. 17: (czas1, wil1), (czas2, wil2), (czas3, wil3), (czas4, wil4), (czas5, wil5), ..., (czas17, wil17).
- Z każdych pięciu, kolejnych rekordów obliczam średnią wilgotność: (wil1+wil2+wil3+wil4+wil5)/5 itd. Z 17 rekordów powstaną więc 3 średnie.
- Średnie mają być wyliczane tak długo jak będzie 5 lub więcej rekordów. Z 17 rekordów pozostaną więc 2 rekordy niepoddane uśrednianiu.
- Każdej średniej ma zostać przypisany czas rekordu środkowego w każdej piątce np. średniej z pierwszej piątki przypisany zostanie czas3.
- Teraz wyliczone średnie z przypisanym czasem koduję do formatu JSON jak w przedstawionym wyżej skrypcie.
Dziękuję i pozdrawiam