Wed, 20 May 2020 21:49:09 +0200
Report any online status change via websocket broadcast. When starting, load all in memory tables sorted. The websocket status on the web pages has it's own panel. Prepared the menu system for dynamic updates.
<?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);