--- a/www-thermferm/units.php Sat Aug 02 22:33:15 2014 +0200 +++ b/www-thermferm/units.php Sun Aug 03 22:49:33 2014 +0200 @@ -29,7 +29,7 @@ load('index.php'); } -socket_write($sock, "LIST", 4096); +socket_write($sock, "UNIT LIST", 4096); $answer = ""; while (1) { $line = socket_read($sock, 4096); @@ -76,7 +76,7 @@ if ($_POST['key'] == 'Add') { - $cmd = "ADD UNIT ".$_POST['Name']; + $cmd = "UNIT ADD ".$_POST['Name']; $sock = open_socket(); if ($sock != false) { @@ -113,17 +113,11 @@ /* * Build the update command */ - if ($_POST['key'] == 'Delete') - $update_cmd = "DEL UNIT ".$_POST['UUID']; - else - $update_cmd = "XXXXXXX ".$_POST['UUID'].",".$_POST['Name']; - + if ($_POST['key'] == 'Delete') { $sock = open_socket(); if ($sock != false) { - /* - * Send command and absorb the result. - */ - socket_write($sock, $update_cmd, 4096); + socket_write($sock, "UNIT DEL ".$_POST['UUID'], 4096); + /* Absorb response */ while (1) { $line = socket_read($sock, 4096); if ($line === '') @@ -131,9 +125,54 @@ } socket_close($sock); } + } + + if ($_POST['key'] == 'Save') { + $sock = open_socket(); + if ($sock != false) { + /* + * Send command and absorb the result. + */ + socket_write($sock, "UNIT PUT ".$_POST['UUID'], 4096); + usleep(20000); + socket_write($sock, "NAME,".$_POST['Name'], 4096); + usleep(20000); + socket_write($sock, "VOLUME,".$_POST['Volume'], 4096); + usleep(20000); + socket_write($sock, "AIR_ADDRESS,".$_POST['AirAddress'], 4096); + usleep(20000); + socket_write($sock, "BEER_ADDRESS,".$_POST['BeerAddress'], 4096); + usleep(20000); + socket_write($sock, "HEATER_ADDRESS,".$_POST['HeaterAddress'], 4096); + usleep(20000); + socket_write($sock, "COOLER_ADDRESS,".$_POST['CoolerAddress'], 4096); + usleep(20000); + socket_write($sock, "FAN_ADDRESS,".$_POST['FanAddress'], 4096); + usleep(20000); + socket_write($sock, "DOOR_ADDRESS,".$_POST['DoorAddress'], 4096); + usleep(20000); + socket_write($sock, "TEMP_SET_MIN,".$_POST['TempSetMin'], 4096); + usleep(20000); + socket_write($sock, "TEMP_SET_MAX,".$_POST['TempSetMax'], 4096); + usleep(20000); + socket_write($sock, "IDLE_RANGE_L,".$_POST['IdleRangeL'], 4096); + usleep(20000); + socket_write($sock, "IDLE_RANGE_H,".$_POST['IdleRangeH'], 4096); + usleep(20000); + + socket_write($sock, ".", 4096); + while (1) { + $line = socket_read($sock, 4096); + if ($line === '') + break; + } + socket_close($sock); + } + } unset($_POST['UUID']); unset($_POST['Name']); + unset($_POST['Volume']); unset($_POST['key']); unset($_POST['command']); load('units.php'); @@ -159,7 +198,10 @@ global $arr; - if (isset($_POST['UUID']) && isset($_POST['Name']) && isset($_POST['key']) && isset($_POST['command'])) { + if (isset($_POST['UUID']) && isset($_POST['Name']) && isset($_POST['Volume']) && isset($_POST['AirAddress']) && + isset($_POST['BeerAddress']) && isset($_POST['HeaterAddress']) && isset($_POST['CoolerAddress']) && + isset($_POST['FanAddress']) && isset($_POST['DoorAddress']) && isset($_POST['TempSetMin']) && isset($_POST['TempSetMax']) && + isset($_POST['IdleRangeL']) && isset($_POST['IdleRangeH']) && isset($_POST['key']) && isset($_POST['command'])) { if ($_POST['key'] == 'Cancel') return 99; @@ -223,7 +265,7 @@ $heading = 'ThermFerm - Edit Unit'; } - edit_screen($_POST['UUID'], $_POST['Name'], $_POST['command'], $heading, $error); + edit_screen($_POST['UUID'], $_POST['command'], $heading, $error); } @@ -232,12 +274,51 @@ * Unit edit screen. Used by unit_edit(), unit_add() and testdata() * * @param string $UUID The record UUID (fixed). - * @param string $Name The Unit Name. * @param string $command 'add' or 'update' * @param string $heading Page heading title. * @Param string $error_message Blank or previous error. */ -function edit_screen($UUID, $Name, $command, $heading, $error_message) { +function edit_screen($UUID, $command, $heading, $error_message) { + + /* + * Get list of devices, we need it later + */ + $sock = open_socket(); + if ($sock == false) { + load("units.php"); + return; + } + + socket_write($sock, "DEVICE LIST", 4096); + $answer = ""; + while (1) { + $line = socket_read($sock, 4096); + if ($line === '') + break; + $answer .= $line; + } + socket_close($sock); + $devices = explode("\r\n", $answer); + + /* + * Get current unit data + */ + $sock = open_socket(); + if ($sock == false) { + load("units.php"); + return; + } + + socket_write($sock, "UNIT GET ".$UUID, 4096); + $answer = ""; + while (1) { + $line = socket_read($sock, 4096); + if ($line === '') + break; + $answer .= $line; + } + socket_close($sock); + $reply = explode("\r\n", $answer); $outstr = build_header($heading); $outstr .= ' <div id="errors">'.PHP_EOL; @@ -246,14 +327,179 @@ $outstr .= ' <div id="etable">'.PHP_EOL; $outstr .= ' <form method="POST" action="units.php">'.PHP_EOL; $outstr .= ' <table class="editor">'.PHP_EOL; - $outstr .= ' <tr class="editor">'.PHP_EOL; - $outstr .= ' <td class="editname">UUID</td>'.PHP_EOL; - $outstr .= ' <td class="editfield">'.$UUID.'</td>'.PHP_EOL; - $outstr .= ' </tr>'.PHP_EOL; - $outstr .= ' <tr class="editor">'.PHP_EOL; - $outstr .= ' <td class="editname">Unit Name</td>'.PHP_EOL; - $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$Name.'"></td>'.PHP_EOL; - $outstr .= ' </tr>'.PHP_EOL; + + if (startsWith($reply[0], "213")) { + $i = 1; + while (1) { + if (strcmp($reply[$i], ".") == 0) + break; + $f = explode(",", $reply[$i]); + + if ($f[0] == "NAME") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Unit Name</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "VOLUME") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Unit Volume</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="Volume" size="5" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "AIR_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Air Sensor Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="AirAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if ($g[5] == "IN_ANALOG") { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "BEER_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Beer Sensor Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="BeerAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if ($g[5] == "IN_ANALOG") { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "HEATER_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Heater Switch Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="HeaterAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "COOLER_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Cooler Switch Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="CoolerAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "FAN_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Fan Switch Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="FanAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if (($g[5] == "OUT_ANALOG") || ($g[5] == "OUT_BIN")) { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "DOOR_ADDRESS") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Door Sensor Address</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><select name="DoorAddress">'.PHP_EOL; + $outstr .= ' <option value="">Not Assigned</option>'.PHP_EOL; + if (startsWith($devices[0], "212")) { + $j = 1; + while (1) { + if (strcmp($devices[$j], ".") == 0) + break; + $g = explode(",", $devices[$j]); + if ($g[5] == "IN_BIN") { + ($f[1] == $g[0]) ? $se = " selected" : $se = ""; + $outstr .= ' <option value="'.$g[0].'"'.$se.'>'.$g[1].' '.$g[4].'</option>'.PHP_EOL; + } + $j++; + } + } + $outstr .= ' </select></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "TEMP_SET_MIN") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Min. temp setting</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="TempSetMin" size="5" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "TEMP_SET_MAX") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Max. temp setting</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="TempSetMax" size="5" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "IDLE_RANGE_L") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Idle Range Low</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="IdleRangeL" size="5" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + if ($f[0] == "IDLE_RANGE_H") { + $outstr .= ' <tr class="editor">'.PHP_EOL; + $outstr .= ' <td class="editname">Idle Range High</td>'.PHP_EOL; + $outstr .= ' <td class="editfield"><input type="text" name="IdleRangeH" size="5" value="'.$f[1].'"></td>'.PHP_EOL; + $outstr .= ' </tr>'.PHP_EOL; + } + $i++; + } + } $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname"><input type="submit" value="Save" name="key"></td>'.PHP_EOL; $outstr .= ' <td class="editfield"><input type="submit" value="Cancel" name="key">'; @@ -278,27 +524,9 @@ * @param string $_GET['UUID'] The UUID of the Unit. */ function unit_edit() { - - global $arr; - if ($_GET['action'] == 'edit') { - - if (startsWith($arr[0], "212")) { - $j = 1; - while (1) { - if (strcmp($arr[$j], ".") == 0) - break; - $f = explode(",", $arr[$j]); - if (strcmp($f[0], $_GET['UUID']) == 0) { - edit_screen($f[0], $f[1], 'update', 'ThermFerm - Edit Unit', ''); - return; - } - $j++; - } - } else { - load('units.php'); - } - + edit_screen($_GET['UUID'], 'update', 'ThermFerm - Edit Unit', ''); + return; } else { load('units.php'); } @@ -357,6 +585,7 @@ $outstr .= ' <td class="editname">Unit Name</td>'.PHP_EOL; $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value=""></td>'.PHP_EOL; $outstr .= ' <td class="editsub"><input type="submit" value="Add" name="key"></td>'.PHP_EOL; + $outstr .= '<input type="hidden" value="0.0" name="Volume">'; $outstr .= '<input type="hidden" value="testdata" name="action">'; $outstr .= '<input type="hidden" value="add" name="command">'; $outstr .= '<input type="hidden" value="00000000-0000-0000-0000-000000000000" name="UUID">';