www-thermferm/liveview.php

Tue, 22 Jul 2014 20:15:09 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Tue, 22 Jul 2014 20:15:09 +0200
changeset 122
e57043423e72
parent 121
03306c3bfd60
child 123
597688feda2f
permissions
-rw-r--r--

Added fermentor maintenance windows

<?php
/*****************************************************************************
 * Copyright (C) 2014
 *   
 * Michiel Broek <mbroek at mbse dot eu>
 *
 * This file is part of ThermFerm
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 *
 * ThermFerm is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with ThermFerm; see the file COPYING.  If not, write to the Free
 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 *****************************************************************************/


require_once('utilities.php');



function showunit($unit, $unr)
{
    global $my_style;

    $outstr = '';
    $air_state = $beer_state = 1;

    $sock = open_socket();
    if ($sock == false) {
	return '';
    }

    socket_write($sock, "UNIT " . $unit, 4096);
    $answer = "";
    while (1) {
	$line = socket_read($sock, 4096);
	if ($line === '')
		break;
	$answer .= $line;
    }
    socket_close($sock);

    $sock = open_socket();
    if ($sock == false) {
	return '';
    }

    socket_write($sock, "LIST UNIT", 4096);
    $answer = "";
    while (1) {
	$line = socket_read($sock, 4096);
	if ($line === '')
	    break;
	$answer .= $line;
    }
    socket_close($sock);
    $arr = explode("\r\n", $answer);

    if (startsWith($arr[0], "213")) {

	$outstr .= '    <script type="text/javascript">'.PHP_EOL;
	$outstr .= '     $(document).ready(function () {'.PHP_EOL;

	$outstr .= '       var sampleData'.$unr.' = ['.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-15 20:44\',Mode:\'NONE\',Air:20.625,Beer:23.687},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-15 21:00\',Mode:\'NONE\',Air:20.250,Beer:23.437},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-15 22:00\',Mode:\'NONE\',Air:20.375,Beer:22.812},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-15 23:00\',Mode:\'NONE\',Air:20.500,Beer:22.437},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 00:00\',Mode:\'NONE\',Air:20.437,Beer:22.250},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 01:00\',Mode:\'NONE\',Air:20.375,Beer:22.000},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 02:00\',Mode:\'NONE\',Air:20.312,Beer:21.750},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 03:00\',Mode:\'NONE\',Air:20.375,Beer:21.687},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 04:00\',Mode:\'NONE\',Air:20.312,Beer:21.562},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 05:00\',Mode:\'NONE\',Air:20.187,Beer:21.500},'.PHP_EOL;
	$outstr .= '         { Date:\'2014-07-16 06:00\',Mode:\'NONE\',Air:20.125,Beer:21.500}'.PHP_EOL;
	$outstr .= '       ];'.PHP_EOL;

	$outstr .= '       var settings'.$unr.' = {'.PHP_EOL;
	$outstr .= '         title: "Fermentation temperature '.$unr.'",'.PHP_EOL;
	$outstr .= '         description: "",'.PHP_EOL;
	$outstr .= '         padding: { left: 5, top: 5, right: 5, bottom: 5 },'.PHP_EOL;
	$outstr .= '         titlePadding: { left: 90, top: 0, right: 0, bottom: 10 },'.PHP_EOL;
	$outstr .= '         source: sampleData'.$unr.','.PHP_EOL;
	$outstr .= '         categoryAxis:'.PHP_EOL;
	$outstr .= '           {'.PHP_EOL;
	$outstr .= '             dataField: \'Date\','.PHP_EOL;
	$outstr .= '             textRotationAngle: 45,'.PHP_EOL;
	$outstr .= '             showGridLines: false'.PHP_EOL;
	$outstr .= '           },'.PHP_EOL;
	$outstr .= '         colorScheme: \'scheme01\','.PHP_EOL;
	$outstr .= '         seriesGroups:'.PHP_EOL;
	$outstr .= '           [{'.PHP_EOL;
	$outstr .= '             type: \'line\','.PHP_EOL;
	$outstr .= '             columnsGapPercent: 30,'.PHP_EOL;
	$outstr .= '             seriesGapPercent: 0,'.PHP_EOL;
	$outstr .= '             valueAxis:'.PHP_EOL;
	$outstr .= '             {'.PHP_EOL;
	$outstr .= '               description: \'Degrees C\''.PHP_EOL;
	$outstr .= '             },'.PHP_EOL;
	$outstr .= '             series: ['.PHP_EOL;
	$outstr .= '               { dataField: \'Air\', displayText: \'Air\' },'.PHP_EOL;
	$outstr .= '               { dataField: \'Beer\', displayText: \'Beer\' }'.PHP_EOL;
	$outstr .= '             ]'.PHP_EOL;
	$outstr .= '           }]'.PHP_EOL;
	$outstr .= '       };'.PHP_EOL;
	$outstr .= '       $("#fermentor_chart_'.$unr.'").jqxChart(settings'.$unr.');'.PHP_EOL;
	$outstr .= '     });'.PHP_EOL;
	$outstr .= '    </script>'.PHP_EOL;
	$outstr .= '    <div id="fermentor">'.PHP_EOL;
	$outstr .= '     <div id="fermentor_chart_'.$unr.'" style="width:720px; height:377px; float:left"></div>'.PHP_EOL;

	$set_temperature = "N/A";
	$air_temperature = "N/A";
	$beer_temperature = "N/A";

	foreach($arr as $l) {
	    $vals = explode(",", $l);
	    if (strcmp($vals[0], "MODE") == 0) {
		$mode = $vals[1];
	    }
	    if (strcmp($vals[0], "AIR_STATE") == 0) {
		$air_state = $vals[1];
	    }
	    if ((strcmp($vals[0], "AIR_TEMPERATURE") == 0) && ($air_state == 0)) {
		$air_temperature = $vals[1];
	    }
	    if (strcmp($vals[0], "BEER_STATE") == 0) {
		$beer_state = $vals[1];
	    }
	    if ((strcmp($vals[0], "BEER_TEMPERATURE") == 0) && ($beer_state == 0)) {
		$beer_temperature = $vals[1];
	    }
	}
	$outstr .= '     <div id="fermentor_panel">'.PHP_EOL;
	$outstr .= '      <div id="fermentor_selector">'.PHP_EOL;
	$outstr .= '       Mode '.$mode.PHP_EOL;
	$outstr .= '       <form>'.PHP_EOL;
	strcmp($mode, "OFF") ? $se = "" : $se = " checked";
	$outstr .= '        <input type="radio" name="mode'.$unr.'" value="OFF"'.$se.'>Off<br>'.PHP_EOL;
	strcmp($mode, "NONE") ? $se = "" : $se = " checked";
	$outstr .= '        <input type="radio" name="mode'.$unr.'" value="NONE"'.$se.'>None<br>'.PHP_EOL;
	strcmp($mode, "FRIDGE") ? $se = "" : $se = " checked";
	$outstr .= '        <input type="radio" name="mode'.$unr.'" value="FRIDGE"'.$se.' disabled>Fridge<br>'.PHP_EOL;
	strcmp($mode, "BEER") ? $se = "" : $se = " checked";
	$outstr .= '        <input type="radio" name="mode'.$unr.'" value="BEER"'.$se.' disabled>Beer<br>'.PHP_EOL;
	strcmp($mode, "PROFILE") ? $se = "" : $se = " checked";
	$outstr .= '        <input type="radio" name="mode'.$unr.'" value="PROFILE"'.$se.' disabled>Profile'.PHP_EOL;
	$outstr .= '       </form>'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_powerled">'.PHP_EOL;
	$outstr .= '       PwrLED'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_display1">'.PHP_EOL;
	$outstr .= '       '.$set_temperature.'<br>Set'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_display2">'.PHP_EOL;
	$outstr .= '       '.$air_temperature.'<br>Air'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_display3">'.PHP_EOL;
	$outstr .= '       '.$beer_temperature.'<br>Beer'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_led1">'.PHP_EOL;
	$outstr .= '       CoolLED'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_led2">'.PHP_EOL;
	$outstr .= '       HeatLED'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_led3">'.PHP_EOL;
	$outstr .= '       FanLED'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_toggle1">'.PHP_EOL;
	$outstr .= '       <form>'.PHP_EOL;
	strcmp($mode, "NONE") ? $se = " disabled" : $se = "";
	$ch = " checked";
	$outstr .= '        <input type="radio" name="cooler'.$unr.'" value="OFF"'.$se.$ch.'>Off<br>'.PHP_EOL;
	$outstr .= '        <input type="radio" name="cooler'.$unr.'" value="ON"'.$se.'>On<br>'.PHP_EOL;
	$outstr .= '        Cooler'.PHP_EOL;
	$outstr .= '       </form>'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_toggle2">'.PHP_EOL;
	$outstr .= '       <form>'.PHP_EOL;
	strcmp($mode, "NONE") ? $se = " disabled" : $se = "";
	$outstr .= '        <input type="radio" name="heater'.$unr.'" value="OFF"'.$se.$ch.'>Off<br>'.PHP_EOL;
	$outstr .= '        <input type="radio" name="heater'.$unr.'" value="ON"'.$se.'>On<br>'.PHP_EOL;
	$outstr .= '        Heater'.PHP_EOL;
	$outstr .= '       </form>'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_toggle3">'.PHP_EOL;
	$outstr .= '       <form>'.PHP_EOL;
	strcmp($mode, "NONE") ? $se = " disabled" : $se = "";
	$outstr .= '        <input type="radio" name="fan'.$unr.'" value="OFF"'.$se.$ch.'>Off<br>'.PHP_EOL;
	$outstr .= '        <input type="radio" name="fan'.$unr.'" value="ON"'.$se.'>On<br>'.PHP_EOL;
	$outstr .= '        Fan'.PHP_EOL;
	$outstr .= '       </form>'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermentor_control">'.PHP_EOL;
	$outstr .= '       <input type="button" id="fermentor_setup_'.$unr.'" value="Edit fermentor" />'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '     </div> <!-- fermentor_panel -->'.PHP_EOL;

	/* Fermentor maintenance window */
        $outstr .= '     <script type="text/javascript">'.PHP_EOL;
	$outstr .= '      function addEventListeners'.$unr.'() {'.PHP_EOL;
	$outstr .= '        $("#fermentor_setup_'.$unr.'").mousedown(function () {'.PHP_EOL;
	$outstr .= '          $("#fermmaint_window'.$unr.'").jqxWindow(\'open\');'.PHP_EOL;
	$outstr .= '        });'.PHP_EOL;
	$outstr .= '      }'.PHP_EOL;
	$outstr .= '      function createMaintenance'.$unr.'() {'.PHP_EOL;
	$outstr .= '        $("#fermmaint_window'.$unr.'").jqxWindow({'.PHP_EOL;
	$outstr .= '          height: 400, width: 800, autoOpen: false, theme: \''.$my_style.'\', '.PHP_EOL;
	$outstr .= '          position: { x:100, y:50 }, '.PHP_EOL;
	$outstr .= '          resizable: false, isModal: true, modalOpacity: 0.5, '.PHP_EOL;
	$outstr .= '          okButton: $("#fermmaint_ok'.$unr.'"), cancelButton: $("#fermmaint_cancel'.$unr.'"),'.PHP_EOL;
	$outstr .= '          initContent: function () {'.PHP_EOL;
	$outstr .= '            $("#fermmaint_ok'.$unr.'").jqxButton({ width: 65, height: 25, theme: \''.$my_style.'\' });'.PHP_EOL;
	$outstr .= '            $("#fermmaint_cancel'.$unr.'").jqxButton({ width: 65, height: 25, theme: \''.$my_style.'\' });'.PHP_EOL;
	$outstr .= '          }'.PHP_EOL;
	$outstr .= '        });'.PHP_EOL;
	$outstr .= '        $("#fermentor_setup_'.$unr.'").jqxButton({ width: 150, height: 25, theme: \''.$my_style.'\'});'.PHP_EOL;
	$outstr .= '      }'.PHP_EOL;
	$outstr .= '      $(document).ready(function () {'.PHP_EOL;
	$outstr .= '        addEventListeners'.$unr.'();'.PHP_EOL;
	$outstr .= '        createMaintenance'.$unr.'();'.PHP_EOL;
	$outstr .= '      });'.PHP_EOL;
	$outstr .= '     </script>'.PHP_EOL;
	$outstr .= '     <div id="fermmaint_window'.$unr.'">'.PHP_EOL;
	$outstr .= '      <div id="fermmaint_header'.$unr.'">'.PHP_EOL;
	$outstr .= '       Fermentor Unit '.$unr.' Maintenance'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '      <div id="fermmaint_content'.$unr.'">'.PHP_EOL;
	$outstr .= '       Content'.PHP_EOL;
	$outstr .= '       <input type="button" id="fermmaint_ok'.$unr.'" value="OK" style="margin-right: 10px" />'.PHP_EOL;
	$outstr .= '       <input type="button" id="fermmaint_cancel'.$unr.'" value="Cancel" />'.PHP_EOL;
	$outstr .= '      </div>'.PHP_EOL;
	$outstr .= '     </div> <!-- fermmaint_window -->'.PHP_EOL;
 
	$outstr .= '    </div> <!-- fermentor -->'.PHP_EOL;
    }

    return $outstr;
}



function liveview()
{
    $outstr  = PHP_EOL;

    $sock = open_socket();
    if ($sock !== false) {
	socket_write($sock, "LIST", 4096);

	/*
	 * Multiple reads until the remote closed the connection
	 */
	$answer = "";
	while (1) {
	    $line = socket_read($sock, 4096);
	    if ($line === '')
		break;
	    $answer .= $line;
	}
	socket_close($sock);
	$arr = explode("\r\n", $answer);

	$outstr .= '   <div id="jqxTabs">'.PHP_EOL;
	$outstr .= '    <ul>'.PHP_EOL;
	if (startsWith($arr[0], "212")) {
	    $i = 1;
	    while (1) {
		if (strcmp($arr[$i], ".") == 0)
			break;
		$parts = explode(",", $arr[$i]);
		$outstr .= '     <li style="margin-left: 30px;">'.$parts[2].'</li>'.PHP_EOL;
		$i++;
	    }
	}
	$outstr .= '    </ul>'.PHP_EOL;

	if (startsWith($arr[0], "212")) {
	    $i = 1;
	    while (1) {
		if (strcmp($arr[$i], ".") == 0)
		    break;
		$parts = explode(",", $arr[$i]);
		$outstr .= showunit($parts[1], $i);
		$i++;
	    }
	}
	$outstr .= '   </div> <!-- jqxTabs -->'.PHP_EOL;
    }

    return $outstr;
}



?>

mercurial