www/getfermentlog.php

Wed, 20 May 2020 21:49:09 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 20 May 2020 21:49:09 +0200
changeset 684
ccb9f24d0fe9
parent 601
112c278be803
child 836
409f8c497429
permissions
-rw-r--r--

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

mercurial