www/getfermentlog.php

Thu, 20 Jun 2019 13:55:12 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 20 Jun 2019 13:55:12 +0200
changeset 419
99a7f2a6976e
parent 296
69fadd1aded2
child 601
112c278be803
permissions
-rw-r--r--

Added packaging volume and add water or liquer to the beer after fermentation. Auto divide changing volumes between bottles and fusts. Upgrade the database in the crontask. Added these fields to the packaging tab screen.

<?php

require_once('config.php');

if (isset($_GET["code"]))
	$code = $_GET["code"] . ' ' . $_GET["name"];
else
	$code = "TB0015 Winterbier-2";

$filename = 'log/fermentation/' . $code . '.log';
/*
 * From Stackoverflow, the fastest way to count the lines in a file.
 */
$file = new \SplFileObject($filename, 'r');
$file->seek(PHP_INT_MAX);
// $file->key() = lines in the file.

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;

//echo $code . '.log lines=' . $file->key() . ' interval=' . $GRAPH_INTERVAL[$graphstep] . ' graphstep=' . $graphstep . PHP_EOL;

/*
 * 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);
//echo $lines . ' lines' . PHP_EOL;

mercurial