datavalidator.php (2308B)
1 <?php 2 /** 3 * Validates the temperature against the average of the last 30 rows for the given station name. 4 * 5 * @param string $station The station name to validate against. 6 * @param float $temperature The temperature value to validate. 7 * @param Redis $redis The Redis connection object. 8 * @return float Returns the correct temperature. 9 */ 10 function validate_temperature($station, $temperature, $redis) { 11 // Return the correct temperature validated with last 30 values. 12 13 //Deze checkt of het de eerste value is en maakt 2 queues aan en knalt de waardes erin. 14 if(!$redis->exists('values'.$station)) { 15 $redis->lpush('values'.$station, $temperature); 16 $redis->lpush('average'.$station, $temperature); 17 return 0; 18 } 19 //Als het aantal values de 30 nog niet bereikt heeft, berekend hij gewoon het gemiddelde en voegt de value toe aan de queue 20 else { 21 if($redis->llen('values'.$station) < 3) { 22 $avg = ($redis->rpop('average'.$station) * $redis->llen('values'.$station) + $temperature) / ($redis->llen('values'.$station) + 1); 23 $redis->lpush('average'.$station, $avg); 24 $redis->lpush('values'.$station, $temperature); 25 return 0; 26 } 27 //Bij 30 values zal de volgende value eerst gecheckt worden met het bekende gemiddelde en eventueel aangepast worden. 28 //Daarna zal deze toegevoegd worden aan de value en average queue. De laatste waarde zal eruit gehaald worden. 29 else { 30 $current_avg = $redis->lIndex('average'.$station, 0) ?: 0.000000000000001; 31 if(abs(($temperature - $current_avg) / $current_avg) > 0.2) { 32 $temperature = $current_avg; 33 $new_avg = (($redis->rpop('average'.$station) * 3) - $redis->rpop('values'.$station) + $temperature) / 3; 34 $redis->lpush('average'.$station, $new_avg); 35 $redis->lpush('values'.$station, $temperature); 36 return -1; 37 } 38 else { 39 $new_avg = (($redis->rpop('average'.$station) * 3) - $redis->rpop('values'.$station) + $temperature) / 3; 40 $redis->lpush('average'.$station, $new_avg); 41 $redis->lpush('values'.$station, $temperature); 42 return 1; 43 } 44 } 45 } 46 }