www-thermferm/devices.php

changeset 174
244de612c572
parent 173
7259ee8778e9
child 196
4d7a96c5d1ff
--- a/www-thermferm/devices.php	Fri Aug 01 22:53:58 2014 +0200
+++ b/www-thermferm/devices.php	Sat Aug 02 22:33:15 2014 +0200
@@ -30,7 +30,7 @@
     return;
 }
 
-socket_write($sock, "LIST BUS", 4096);
+socket_write($sock, "DEVICE LIST", 4096);
 $answer = "";
 while (1) {
     $line = socket_read($sock, 4096);
@@ -39,44 +39,544 @@
     $answer .= $line;
 }
 socket_close($sock);
+
+/*
+ * $arr contains the complete reply of the LIST BUS command
+ */
 $arr = explode("\r\n", $answer);
 
 
-$outstr  = build_header("ThermFerm - Devices Setup");
+if (isset($_GET['action'])) {
+    switch ($_GET['action']) {
+	case 'edit':            device_edit();
+				break;
+	default:                break;
+    }
+} elseif (isset($_POST['action'])) {
+    switch ($_POST['action']) {
+	case 'testdata':        testdata();
+				break;
+	default:                break;
+    }
+} else {
+    device_list();
+}
+
+exit;
+
+/****************************************************************************
+ *
+ */
+
+
+/*
+ * Device add
+ *
+ * @param string $_POST['Name'] The rpofile name
+ */
+function device_add() {
+
+    if ($_POST['key'] == 'Add') {
+		                                    
+	$cmd = "DEVICE ADD ".$_POST['Type'];
 
-$outstr .= '    <div id="errors">'.PHP_EOL;
-$outstr .= '    </div> <!-- errors -->'.PHP_EOL;
-$outstr .= '    <div id="etable">'.PHP_EOL;
+	$sock = open_socket();
+	if ($sock != false) {
+	    /*
+	     * Send command and absorb the result.
+	     */
+	    socket_write($sock, $cmd, 4096);
+	    while (1) {
+		$line = socket_read($sock, 4096);
+		if ($line === '')
+		    break;
+	    }
+	    socket_close($sock);
+	}
+    }
+
+    unset($_POST['UUID']);
+    unset($_POST['Name']);
+    unset($_POST['key']);
+    unset($_POST['command']);
+    load('devices.php');
+}
+
+
+
+/*
+ * Device update
+ *
+ * @param string $_POST['UUID'] The device UUID
+ * @param string $_POST['Type'] The device Type
+ * @param string $_POST['Direction'] The device IO Direction
+ * @param string $_POST['Value'] The device value
+ * @param string $_POST['Present'] The device Present state
+ * @param string $_POST['Address'] The device Address
+ * @param string $_POST['Subdevice'] The device Subaddress
+ * @param string $_POST['Gpiopin'] The device GPIO pin
+ * @param string $_POST['Description'] The device Description
+ * @param string $_POST['Comment'] The device Comment
+ * @param string $_POST['key'] The button pressed.
+ */
+function device_update() {
+    /*
+     * Build the update command
+     */
+    if ($_POST['key'] == 'Delete') {
+	$sock = open_socket();
+	if ($sock != false) {
+	    socket_write($sock, "DEVICE DEL ".$_POST['UUID'], 4096);
+	    /* Absorb response */
+	    while (1) {
+		$line = socket_read($sock, 4096);
+		if ($line === '')
+		    break;
+	    }
+	    socket_close($sock);
+	}
+    }
 
-$outstr .= '     <table class="setup">'.PHP_EOL;
-$outstr .= '      <tr class="trhead">'.PHP_EOL;
-$outstr .= '       <td class="setup">UUID</td>'.PHP_EOL;
-$outstr .= '       <td class="setup">Address</td>'.PHP_EOL;
-$outstr .= '       <td class="setup">Subdev</td>'.PHP_EOL;
-$outstr .= '       <td class="setup">Refcnt</td>'.PHP_EOL;
-$outstr .= '       <td class="setup">Comment</td>'.PHP_EOL;
-$outstr .= '      </tr>'.PHP_EOL;
+    if ($_POST['key'] == 'Save') {
+    	$sock = open_socket();
+    	if ($sock != false) {
+	    /*
+	     * Send command and absorb the result.
+	     */
+	    socket_write($sock, "DEVICE PUT ".$_POST['UUID'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "TYPE,".$_POST['Type'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "DIRECTION,".$_POST['Direction'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "VALUE,".$_POST['Value'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "PRESENT,".$_POST['Present'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "ADDRESS,".$_POST['Address'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "SUBDEVICE,".$_POST['Subdevice'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "GPIOPIN,".$_POST['Gpiopin'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "DESCRIPTION,".$_POST['Description'], 4096);
+	    usleep(20000);
+	    socket_write($sock, "COMMENT,".$_POST['Comment'], 4096);
+	    usleep(20000);
+	    socket_write($sock, '.', 4096);
+	    /* Absorb response */
+	    while (1) {
+	    	$line = socket_read($sock, 4096);
+	    	if ($line === '')
+		    break;
+	    }
+	    socket_close($sock);
+	}
+    }
+
+    unset($_POST['UUID']);
+    unset($_POST['Type']);
+    unset($_POST['Direction']);
+    unset($_POST['Value']);
+    unset($_POST['Present']);
+    unset($_POST['Address']);
+    unset($_POST['Subdevice']);
+    unset($_POST['Gpiopin']);
+    unset($_POST['Description']);
+    unset($_POST['Comment']);
+    unset($_POST['key']);
+    unset($_POST['command']);
+    load('devices.php');
+}
+
+
+
+/*
+ * Test input of a modified or new device.
+ *
+ * @param string $_POST['UUID'] Unique record UUID
+ * @param string $_POST['Type'] Device Type
+ * @param string $_POST['Direction']
+ * @param string $_POST['Value']
+ * @param string $_POST['Present']
+ * @param string $_POST['Address']
+ * @param string $_POST['Subdevice']
+ * @param string $_POST['Gpiopin']
+ * @param string $_POST['Description']
+ * @param string $_POST['Comment']
+ * @param string $_POST['key'] Key choice, Save or Cancel
+ * @param string $_POST['command'] Command used, 'add' or 'update'
+ *
+ * Return: 0 = Ok
+ *         1 = Missing data
+ *         2 = Address field too short
+ *         3 = Address/Subdevice already in use
+ *         4 = Description field too short
+ *         5 = Comment field too short
+ *        99 = Cancel key
+ */
+function test_thedata() {
+
+    global $arr;
+
+    if (isset($_POST['UUID']) && isset($_POST['Type']) && isset($_POST['Direction']) && isset($_POST['Value']) &&
+	isset($_POST['Present']) && isset($_POST['Address']) && isset($_POST['Subdevice']) && isset($_POST['Gpiopin']) &&
+	isset($_POST['Description']) && isset($_POST['Comment']) && isset($_POST['key']) && isset($_POST['command'])) {
+
+	if ($_POST['key'] == 'Cancel')
+	    return 99;
+
+	if (strlen($_POST['Address']) < 2)
+	    return 2;
+
+	if (startsWith($arr[0], "212")) {
+	    $j = 1;
+	    while (1) {
+		if (strcmp($arr[$j], ".") == 0)
+		    break;
+		$f = explode(",", $arr[$j]);
+		if (strcmp($f[0], $_POST['UUID']) && ($f[1] == $_POST['Address']) && ($f[2] == $_POST['Subdevice'])) {
+		    return 3;
+		}
+		$j++;
+	    }
+	}
+
+	if (strlen($_POST['Description']) < 2)
+	    return 4;
+
+	if (strlen($_POST['Comment']) < 2)
+	    return 5;
+
+    } else {
+	return 1;
+    }
+
+    return 0;
+}
+
+
+
+/*
+ * Test result from edit screen and do next action
+ */
+function testdata() {
+
+    $result = test_thedata();
+    $error = '';
 
-if (startsWith($arr[0], "212")) {
-    $j = 1;
+    switch ($result) {
+	case 0: if ($_POST['command'] == 'add') {
+		    device_add();
+		    return;
+		} else if ($_POST['command'] == 'update') {
+		    device_update();
+		    return;
+		}
+		break;
+	case 1: $error = 'Missing data';
+		break;
+	case 2: $error = 'The Address is too short';
+		break;
+	case 3: $error = 'The Address + Subdevice is already in use, choose another one';
+		break;
+	case 4:	$error = 'The Description is too short';
+		break;
+	case 5:	$error = 'The Comment is too short';
+		break;
+	case 99:        
+		load('devices.php');
+		break;
+    }
+
+    if ($_POST['command'] == 'add') {
+	$heading = 'ThermFerm - Add Device';
+    } else {
+	$heading = 'ThermFerm - Edit Device';
+    }
+
+    edit_screen($_POST['UUID'], $_POST['command'], $heading, $error);
+}
+
+
+
+/*
+ * Unit edit screen. Used by unit_edit(), unit_add() and testdata()
+ *
+ * @param string $UUID The record UUID (fixed).
+ * @param string $command 'add' or 'update'
+ * @param string $heading Page heading title.
+ * @Param string $error_message Blank or previous error.
+ */
+function edit_screen($UUID, $command, $heading, $error_message) {
+
+    $sock = open_socket();
+    if ($sock == false) {
+	load('devices.php');
+    }
+
+    socket_write($sock, "DEVICE GET ".$UUID, 4096);
+    $answer = "";
     while (1) {
-	if (strcmp($arr[$j], ".") == 0)
+	$line = socket_read($sock, 4096);
+	if ($line === '')
 	    break;
-	$f = explode(",", $arr[$j]);
-	$outstr .= '      <tr class="setup">'.PHP_EOL;
-	$outstr .= '       <td class="setup">'.$f[0].'</td>'.PHP_EOL;
-	$outstr .= '       <td class="setup">'.$f[1].'</td>'.PHP_EOL;
-	$outstr .= '       <td class="setup">'.$f[2].'</td>'.PHP_EOL;
-	$outstr .= '       <td class="setup">'.$f[3].'</td>'.PHP_EOL;
-	$outstr .= '       <td class="setup">'.$f[4].'</td>'.PHP_EOL;
-	$outstr .= '      </tr>'.PHP_EOL;
-	$j++;
+	$answer .= $line;
+    }
+    socket_close($sock);
+    $reply = explode("\r\n", $answer);
+
+    $outstr  = build_header($heading);
+    $outstr .= '    <div id="errors">'.PHP_EOL;
+    $outstr .= '     '.$error_message.PHP_EOL;
+    $outstr .= '    </div> <!-- errors -->'.PHP_EOL;
+    $outstr .= '    <div id="etable">'.PHP_EOL;
+    $outstr .= '     <form method="POST" action="devices.php">'.PHP_EOL;
+    $outstr .= '      <table class="editor">'.PHP_EOL;
+
+    if (startsWith($reply[0], "213")) {
+	$j = 1;
+	while (1) {
+	    if (strcmp($reply[$j], ".") == 0)
+		break;
+	    $f = explode(",", $reply[$j]);
+	    if ($f[0] == "TYPE") {
+		$type = $f[1];
+		/*
+		 * Only allow certain types to edit. Auto detected hardware cannot be changed.
+		 */
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Device Type</td>'.PHP_EOL;
+		if (($type == "W1") || ($type == "GPIO"))
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Type" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		else
+		    $outstr .= '        <td class="editfield"><input type="text" name="Type" size="50" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "DIRECTION") {
+		$direction = $f[1];
+		/*
+		 * Only devices that cannot auto detect can be changed.
+		 */
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">IO Direction and mode</td>'.PHP_EOL;
+		if ($type == "W1")
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Direction" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		else {
+		    $outstr .= '        <td class="editfield"><select name="Direction">'.PHP_EOL;
+		    if ($type == "GPIO") {
+			$se = ($f[1] == "UNDEF")?" selected":"";
+			$outstr .= '         <option value="UNDEF"'.$se.'>Undefined</option>'.PHP_EOL;
+			$se = ($f[1] == "IN_BIN")?" selected":"";
+			$outstr .= '         <option value="IN_BIN"'.$se.'>Binary input</option>'.PHP_EOL;
+			$se = ($f[1] == "OUT_BIN")?" selected":"";
+			$outstr .= '         <option value="OUT_BIN"'.$se.'>Binary output</option>'.PHP_EOL;
+			$se = ($f[1] == "OUT_PWM")?" selected":"";
+			$outstr .= '         <option value="OUT_PWM"'.$se.'>PWM output</option>'.PHP_EOL;
+		    }
+		    if ($type == "RC433") {
+			$se = ($f[1] == "UNDEF")?" selected":"";
+			$outstr .= '         <option value="UNDEF"'.$se.'>Undefined</option>'.PHP_EOL;
+			$se = ($f[1] == "OUT_BIN")?" selected":"";
+			$outstr .= '         <option value="OUT_BIN"'.$se.'>Binary output</option>'.PHP_EOL;
+		    }
+		    if ($type == "DHT") {
+			$se = ($f[1] == "UNDEF")?" selected":"";
+			$outstr .= '         <option value="UNDEF"'.$se.'>Undefined</option>'.PHP_EOL;
+			$se = ($f[1] == "IN_ANALOG")?" selected":"";
+			$outstr .= '         <option value="IN_ANALOG"'.$se.'>Analog input</option>'.PHP_EOL;
+		    }
+		    $outstr .= '        </select></td>'.PHP_EOL;
+		}
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "VALUE") {
+		/*
+		 * Only output can be changed
+		 */
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Value</td>'.PHP_EOL;
+		if (($direction == "OUT_BIN") || ($direction == "OUT_ANALOG") || ($direction == "OUT_PWM"))
+		    $outstr .= '        <td class="editfield"><input type="text" name="Value" size="50" value="'.$f[1].'"></td>'.PHP_EOL;
+		else
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Value" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "PRESENT") {
+		/*
+		 * Only devices that cannot auto detect can be changed.
+		 */
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Device Present</td>'.PHP_EOL;
+		if (($type == "W1") || ($type == "GPIO"))
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Present" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		else {
+		    $outstr .= '        <td class="editfield"><select name="Present">'.PHP_EOL;
+		    $se = ($f[1] == "UNDEF")?" selected":"";
+		    $outstr .= '         <option value="UNDEF"'.$se.'>Undefined</option>'.PHP_EOL;
+		    $se = ($f[1] == "NO")?" selected":"";
+		    $outstr .= '         <option value="NO"'.$se.'>Not present</option>'.PHP_EOL;
+		    $se = ($f[1] == "YES")?" selected":"";
+		    $outstr .= '         <option value="YES"'.$se.'>Present and Ok</option>'.PHP_EOL;
+		    $se = ($f[1] == "ERROR")?" selected":"";
+		    $outstr .= '         <option value="ERROR"'.$se.'>Present and Error</option>'.PHP_EOL;
+		    $outstr .= '        </select></td>'.PHP_EOL;
+		}
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "ADDRESS") {
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Address</td>'.PHP_EOL;
+		if (($type == "W1") || ($type == "GPIO"))
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Address" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		else
+		    $outstr .= '        <td class="editfield"><input type="text" name="Address" size="50" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "SUBDEVICE") {
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Subdevice</td>'.PHP_EOL;
+		if (($type == "W1") || ($type == "GPIO"))
+		    $outstr .= '        <td class="editfield"><input type="hidden" name="Subdevice" value="'.$f[1].'">'.$f[1].'</td>'.PHP_EOL;
+		else
+		    $outstr .= '        <td class="editfield"><input type="text" name="Subdevice" size="5" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "GPIOPIN") {
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">GPIO pin</td>'.PHP_EOL;
+		$outstr .= '        <td class="editfield"><input type="text" name="Gpiopin" size="5" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;                  
+	    }
+	    if ($f[0] == "DESCRIPTION") {
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Description</td>'.PHP_EOL;
+		$outstr .= '        <td class="editfield"><input type="text" name="Description" size="50" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	    }
+	    if ($f[0] == "COMMENT") {
+		$outstr .= '       <tr class="editor">'.PHP_EOL;
+		$outstr .= '        <td class="editname">Comment</td>'.PHP_EOL;
+		$outstr .= '        <td class="editfield"><input type="text" name="Comment" size="50" value="'.$f[1].'"></td>'.PHP_EOL;
+		$outstr .= '       </tr>'.PHP_EOL;
+	     }
+	    $j++;
+	}
+    }
+
+    $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">';
+    $outstr .= '<input type="submit" value="Delete" name="key" style="margin-left: 100px;">';
+    $outstr .= '<input type="hidden" value="testdata" name="action">';
+    $outstr .= '<input type="hidden" value="'.$command.'" name="command">';
+    $outstr .= '<input type="hidden" value="'.$UUID.'" name="UUID"></td>'.PHP_EOL;
+    $outstr .= '       </tr>'.PHP_EOL;
+    $outstr .= '      </table>'.PHP_EOL;
+    $outstr .= '     </form>'.PHP_EOL;
+    $outstr .= '    </div> <!-- etable -->'.PHP_EOL;
+    $outstr .= build_footer();
+    echo $outstr;
+}
+
+
+
+/*
+ * Edit a Device. Fetches the record data and shows the edit screen.
+ *
+ * @param string $_GET['action'] Must be 'edit'.
+ * @param string $_GET['UUID'] The UUID of the Unit.
+ */
+function device_edit() {
+    if ($_GET['action'] == 'edit') {
+	edit_screen($_GET['UUID'], 'update', 'ThermFerm - Edit Device', '');
+	return;
+    } else {
+	load('devices.php');
     }
 }
 
-$outstr .= '     </table>'.PHP_EOL;
-$outstr .= '    </div> <!-- etable -->'.PHP_EOL;
-$outstr .= build_footer();
+
+
+/*
+ * @link edit device
+ * @link add device
+ */
+function device_list() {
+    global $arr;
+
+    $outstr  = build_header("ThermFerm - Devices Setup");
+    $outstr .= '    <div id="errors">'.PHP_EOL;
+    $outstr .= '    </div> <!-- errors -->'.PHP_EOL;
+    $outstr .= '    <div id="etable">'.PHP_EOL;
+    $outstr .= '     <table class="setup">'.PHP_EOL;
+    $outstr .= '      <tr class="trhead">'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 300px;">UUID</td>'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 120px;">Address</td>'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 30px;">Sub</td>'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 30px;">Ref</td>'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 300px;">Cmt</td>'.PHP_EOL;
+    $outstr .= '       <td class="setup" style="width: 35px;">Edit</td>'.PHP_EOL;
+    $outstr .= '      </tr>'.PHP_EOL;
 
-echo $outstr;
+    if (startsWith($arr[0], "212")) {
+    	$j = 1;
+    	while (1) {
+	    if (strcmp($arr[$j], ".") == 0)
+	    	break;
+	    $f = explode(",", $arr[$j]);
+	    $outstr .= '      <tr class="setup">'.PHP_EOL;
+	    $outstr .= '       <td class="setup">'.$f[0].'</td>'.PHP_EOL;
+	    $outstr .= '       <td class="setup">'.$f[1].'</td>'.PHP_EOL;
+	    $outstr .= '       <td class="setup">'.$f[2].'</td>'.PHP_EOL;
+	    $outstr .= '       <td class="setup">'.$f[3].'</td>'.PHP_EOL;
+	    $outstr .= '       <td class="setup">'.$f[4].'</td>'.PHP_EOL;
+	    if ($f[3] == 0)
+		$outstr .= '       <td class="setup"><a href="devices.php?action=edit&amp;UUID='.$f[0].'">Edit</a></td>'.PHP_EOL;
+	    else
+		$outstr .= '       <td class="setup">Busy</td>'.PHP_EOL;
+	    $outstr .= '      </tr>'.PHP_EOL;
+	    $j++;
+    	}
+    }
+
+    $outstr .= '     </table>'.PHP_EOL;
+    $outstr .= '    </div> <!-- etable -->'.PHP_EOL;
 
+    $outstr .= '    <div id="atable">'.PHP_EOL;
+    $outstr .= '     <form method="POST" action="devices.php">'.PHP_EOL;
+    $outstr .= '      <table class="editor">'.PHP_EOL;
+    $outstr .= '      <tr class="trhead"><td colspan="3">Add new Device</td></tr>'.PHP_EOL;
+    $outstr .= '       <tr class="editor">'.PHP_EOL;
+    $outstr .= '        <td class="editname">Select Device type</td>'.PHP_EOL;
+    $outstr .= '        <td class="editfield">'.PHP_EOL;
+    $outstr .= '         <select name="Type">'.PHP_EOL;
+    $outstr .= '          <option value="NA">Not Available</option>'.PHP_EOL;
+    $outstr .= '          <option value="RC433">433 Mhz Radio Controller</option>'.PHP_EOL;
+    $outstr .= '          <option value="DHT">DHTnn type sensor</option>'.PHP_EOL;
+    $outstr .= '          <option value="I2C">I2C bus device</option>'.PHP_EOL;
+    $outstr .= '          <option value="SPI">SPI bus device</option>'.PHP_EOL;
+    $outstr .= '         </select>'.PHP_EOL;
+    $outstr .= '        </td>'.PHP_EOL;
+    $outstr .= '        <td class="editsub"><input type="submit" value="Add" name="key"></td>'.PHP_EOL;
+    $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">';
+    $outstr .= '<input type="hidden" value="UNDEF" name="Direction">';
+    $outstr .= '<input type="hidden" value="0" name="Value">';
+    $outstr .= '<input type="hidden" value="UNDEF" name="Present">';
+    $outstr .= '<input type="hidden" value="address unknown" name="Address">';
+    $outstr .= '<input type="hidden" value="0" name="Subdevice">';
+    $outstr .= '<input type="hidden" value="-1" name="Gpiopin">';
+    $outstr .= '<input type="hidden" value="Describe me" name="Description">';
+    $outstr .= '<input type="hidden" value="Comment me" name="Comment">';
+    $outstr .= '       </tr>'.PHP_EOL;
+    $outstr .= '      </table>'.PHP_EOL;
+    $outstr .= '     </form>'.PHP_EOL;
+    $outstr .= '    </div> <!-- atable -->'.PHP_EOL;
+
+    $outstr .= build_footer();
+
+    echo $outstr;
+}
+

mercurial