www/getfermentlog.php

Sat, 18 Apr 2020 15:56:40 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 18 Apr 2020 15:56:40 +0200
changeset 657
a5ade45597d8
parent 601
112c278be803
child 836
409f8c497429
permissions
-rw-r--r--

More code cleanup

<?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);

mercurial