Fri, 22 Aug 2014 17:12:42 +0200
Added framework for a simulation of a fridge with heater to use as controlled fermentor
<?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. *****************************************************************************/ function open_socket() { $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!($sock === false)) { if (socket_connect($sock, "localhost", 6554)) { socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 15, 'usec' => 0)); } else { socket_close($sock); } } return $sock; } /* * @param string $command to send to the server. * Return: string with the complete reply from the * server. This can be a multiline reply. */ function send_cmd($command) { $sock = open_socket(); if ($sock == false) { return ""; } socket_write($sock, $command, 4096); $answer = ""; while (1) { $line = socket_read($sock, 4096); if ($line === '') break; $answer .= $line; } socket_close($sock); return $answer; } /* * @param string array of $commands to send to the server. * Return: string with the complete reply from the * server. This can be a multiline reply. */ function send_array($command) { $sock = open_socket(); if ($sock == false) { return ""; } foreach($command as $cmd) { socket_write($sock, $cmd, 4096); usleep(20000); /* Give server time to recognize lines */ } $answer = ""; while (1) { $line = socket_read($sock, 4096); if ($line === '') break; $answer .= $line; } socket_close($sock); return $answer; } /* * @param string $command to send to the server. * Return: 0 = Ok. * 1 = Server responden with an error. */ function send_cmd_check($command) { $answer = send_cmd($command); if (strlen($answer) && (($answer[0] == '1') || ($answer[0] == '2'))) return 0; return 1; } /* * @param array $command to send to the server. * Return: 0 = Ok. * 1 = Server responden with an error. */ function send_array_check($command) { $answer = send_array($command); if (strlen($answer) && (($answer[0] == '1') || ($answer[0] == '2'))) return 0; return 1; } function startsWith($haystack, $needle) { return !strncmp($haystack, $needle, strlen($needle)); } function build_header($heading) { $outstr = '<!DOCTYPE html>'.PHP_EOL; $outstr .= '<html>'.PHP_EOL; $outstr .= ' <head>'.PHP_EOL; $outstr .= ' <meta http-equiv="content-type" content="text/html; charset=utf-8" />'.PHP_EOL; $outstr .= ' <title>'.$heading.'</title>'.PHP_EOL; $outstr .= ' <link type="text/css" href="css/style.css" rel="stylesheet" media="all" />'.PHP_EOL; $outstr .= ' </head>'.PHP_EOL; $outstr .= ' <body class="default">'.PHP_EOL; $outstr .= ' <div id="jqxWidget">'.PHP_EOL; $outstr .= ' <div id="header">'.PHP_EOL; $outstr .= ' <form action="maintenance.php" style="margin:30px; float:right">'.PHP_EOL; $outstr .= ' <input type="submit" style="width: 150px; height: 25px;" value="Maintenance Panel" />'.PHP_EOL; $outstr .= ' </form>'.PHP_EOL; $outstr .= ' </div> <!-- header -->'.PHP_EOL; $outstr .= ' <div id="content">'.PHP_EOL; return $outstr; } function build_footer() { $outstr = ' </div> <!-- content -->'.PHP_EOL; $outstr .= ' </div> <!-- jqxWidget -->'.PHP_EOL; $outstr .= ' </body>'.PHP_EOL; $outstr .= '</html>'.PHP_EOL; return $outstr; } /* * Goto URL. Works also after headers have been sent. */ function load($url) { echo' <script> if (top.location != self.location) { top.location = "'.$url.'" } {location.href="'.$url.'";} </script>'; }