Wed, 06 May 2020 14:14:14 +0200
Removed the last compressed css file. Reworked all mash steps, implemented deconction steps. Added calculations for infuse amounts and decoctions amounts. The mash steps are now manually sorted in the editor grids to have full control over the steps order. Display errors in red in the grid. Updated beerxml export, the product checklist and print output of the products and recipes for all these mash steps changes.
<?php require_once('config.php'); if (isset($_GET["code"])) $code = $_GET["code"] . ' ' . $_GET["name"]; else $code = "TB0015 Winterbier-2"; $filename = 'log/fermentation/' . $code . '.log'; if (! file_exists($filename)) { header("Content-type: application/json"); echo '{}'; exit; } /* * From Stackoverflow, the fastest way to count the lines in a file. */ $file = new \SplFileObject($filename, 'r'); $file->seek(PHP_INT_MAX); define ('MAX_INTERVALS', 10); $GRAPH_INTERVAL = array ( 0, 1, 5, 15, 30, 60, 120, 240, 480, 720 ); $GRAPH_DATALINES = array ( 0, 800, 3200, 12000, 24000, 48000, 96000, 192000, 384000, 768000 ); for ($graphstep = 1; $graphstep <= MAX_INTERVALS; $graphstep++) { if ($file->key() < $GRAPH_DATALINES[$graphstep]) break; } if ($graphstep > MAX_INTERVALS) $graphstep = MAX_INTERVALS; /* * 2014-11-15 18:39,BEER,PRIMARY,20.312,19.750,-1.500,20.5,18.6,18.8,35,12345,0,67890,Whatsup * | | | | | | | | | | | | | | * datetime + | | | | | | | | | | | | | * mode --------------+ | | | | | | | | | | | | * stage -------------------+ | | | | | | | | | | | * temp air -----------------------+ | | | | | | | | | | * temp beer -----------------------------+ | | | | | | | | | * temp chiller ---------------------------------+ | | | | | | | | * temp room -------------------------------------------+ | | | | | | | * setpoint low ---------------------------------------------+ | | | | | | * setpoint high -------------------------------------------------+ | | | | | * heater power ------------------------------------------------------+ | | | | * heater usage ----------------------------------------------------------+ | | | * cooler power --------------------------------------------------------------+ | | * cooler usage ------------------------------------------------------------------+ | * event --------------------------------------------------------------------------------+ */ $heater_l = 0; $cooler_l = 0; $handle = @fopen($filename, "r"); if ($handle) { $lines = 0; while (($buffer = fgets($handle, 4096)) !== false) { $buffer = preg_replace( "/\r|\n/", "", $buffer); $row = explode(",", $buffer); if ($row[1] != 'Mode') { $hr = intval(substr($buffer, 11, 2)); if ((($graphstep == 1)) || (($graphstep == 2) && ((substr($buffer, 15, 1) == '0') || (substr($buffer, 15, 1) == '5'))) || (($graphstep == 3) && ((substr($buffer, 14, 2) == '00') || (substr($buffer, 14, 2) == '15') || (substr($buffer, 14, 2) == '30') || (substr($buffer, 14, 2) == '45'))) || (($graphstep == 4) && ((substr($buffer, 14, 2) == '00') || (substr($buffer, 14, 2) == '30'))) || (($graphstep == 5) && (substr($buffer, 14, 2) == '00')) || (($graphstep == 6) && (substr($buffer, 14, 2) == '00') && (($hr % 2) == 0)) || (($graphstep == 7) && (substr($buffer, 14, 2) == '00') && (($hr % 4) == 0)) || (($graphstep == 8) && (substr($buffer, 14, 2) == '00') && (($hr % 8) == 0)) || (($graphstep == 9) && (substr($buffer, 14, 2) == '00') && (($hr % 12) == 0))) { // echo $hr . ' ' . $row[1] . ' ' . $buffer; $lines++; $heat_used = $cool_used = 0; if ($row[10] && ($row[10] != "NA") && ($heater_l > 0)) { $heat_used = round((intval($row[10]) - $heater_l) * 100 / ($GRAPH_INTERVAL[$graphstep] * 60)); } if ($row[12] && ($row[12] != "NA") && ($cooler_l > 0)) { $cool_used = round((intval($row[12]) - $cooler_l) * 100 / ($GRAPH_INTERVAL[$graphstep] * 60)); } // echo $GRAPH_INTERVAL[$graphstep] . ' ' . $heat_used . ' ' . $cool_used . PHP_EOL; if (($heat_used <= 100) && ($cool_used <= 100)) { $logs[] = array( 'date' => $row[0], 'air' => $row[3], 'beer' => $row[4], 'chiller' => $row[5], 'room' => $row[6], 'tlo' => $row[7], 'thi' => $row[8], 'heater' => $heat_used, 'cooler' => $cool_used, 'event' => $row[13] ); } if ($row[10] && ($row[10] != "NA")) $heater_l = intval($row[10]); if ($row[12] && ($row[12] != "NA")) $cooler_l = intval($row[12]); } } } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); } header("Content-type: application/json"); echo json_encode($logs);