http://www.sosdg.org License: GPLv2 URL: http://www.gnu.org/licenses/gpl-2.0.txt ChangeLog: 0.1-boihme (3/11/2009) = Initial release, modified slightly from script made for home use 0.2-boihme (3/12/2009) = added new arrays for Home Codes and added somewhat working Dim features. Still some broken code commented out for now. 0.3 (3/13/2009) = UTF-8, code cleanups thanks to a quick refresher on PHP syntax, CSS code for nicer (IMHO) output, added global controls. For some odd reason, All Devices On/Off doesn't seem to affect the appliance module... Merge in some code I was reserving for my home X10 setup with mainline... So, no need to have -boihme fork. 0.4 (3/14/2009) = Replaced print_r() with a foreach to print out debug from command, make errors not completely fatal, setting $tilt will prevent command from actually running on the system, comments, more interface tweaks Known Issues: * My code sucks. I know. * My CSS sucks. I know. */ // You can edit stuff in this section to customize parts of the script // This is the location of bottlerocket $brloc="/usr/bin/br"; // Show debugging info, including command line and output. Turn off if you need pretty output $debug=1; // This is the section where you can define home codes and their associated modules. $comments = array ( "A" => array( 1 => "Receiver Outlet", 2 => "LED Living Room", 3 => "Ceiling Fan Light Living Room" ) ); // This is not really meant to be user modified - this is the standard X10 home codes // Though, if you really wanted to, this is defined as: // "Home Code" => "Display Name" // Change display name to whatever you want, but don't mess with the home code field. $hcarray = array ("A"=>"A","B"=>"B","C"=>"C","D"=>"D","E"=>"E","F"=>"F","G"=>"G","H"=>"H","I"=>"I", "J"=>"J","K"=>"K","L"=>"L","M"=>"M","N"=>"N","O"=>"O","P"=>"P"); // The internal version number and name, change if you modify this from the stock $program_name="PHP-BottleRocket/SOSDG"; $interface_version="v0.4"; // Define this script as the actions for POST $selfscript=$_SERVER['PHP_SELF']; // If we are working with a device number, make sure it's an integer and not a string if (!empty($_REQUEST[device])) { $device=(int)$_REQUEST[device]; } // Process homecode if present in POST, if not, assume first load & 'A' if (!empty($_REQUEST[homecode])) { if (ereg("^[A-P]$",$_REQUEST[homecode])) { $homecode=$_REQUEST[homecode]; } else { $inputerr="Error: invalid homecode"; } } else { $homecode='A'; } // If we have debug on, then we add some fun output adjustments if (debug) { $debugcmd=" -vvv "; } // DIm POST request if (!empty($_REQUEST[dimact])) { $dim=(int)$_REQUEST[dim]; if (is_int($device)) { $cmddev=$device; } else { $inputerr="Error: Invalid device ID"; } $cmdline=stripslashes(strip_tags(escapeshellcmd("$brloc $debugcmd --house=$homecode --dim=$dim,$device"))); } // Device/Lamp On/Off POST request if (!empty($_REQUEST[action])) { $action=$_REQUEST[action]; unset($dim); unset($cmdline); if ($action == "On") { $cmdact=" --on="; } elseif($action == "Off") { $cmdact=" --off="; } else { $inputerr="Error: Invalid action"; } if (is_int($device)) { $cmddev=$device; } else { $inputerr="Error: Invalid device ID"; } $cmdline=stripslashes(strip_tags(escapeshellcmd("$brloc $debugcmd --house=$homecode $cmdact$cmddev"))); } // All Lights On/Off POST Request if (!empty($_REQUEST[AllLight])) { unset($cmdline); unset($cmdact); $alllight=$_REQUEST[AllLight]; if ($alllight == "On") { $cmdact=" --lamps_on"; } elseif ($alllight == "Off") { $cmdact=" --lamps_off"; } else { $inputerr="Error: Invalid action"; } $cmdline=stripslashes(strip_tags(escapeshellcmd("$brloc $debugcmd --house=$homecode $cmdact"))); } // All Devices On/Off POST Request if (!empty($_REQUEST[AllDevice])) { unset($cmdline); unset($cmdact); $alllight=$_REQUEST[AllDevice]; if ($alllight == "On") { $cmdact=" --ON"; } elseif ($alllight == "Off") { $cmdact=" --OFF"; } else { $inputerr="Error: Invalid action"; } $cmdline=stripslashes(strip_tags(escapeshellcmd("$brloc $debugcmd --house=$homecode $cmdact"))); } // If we have some error, set tilt, and display error if (!empty($inputerr)) { echo "$inputerr
\n"; $tilt=1; //exit(1); } // Run the actual command and put the output into $output so if we // are in debug mode, we can do something with it. Don't run the command // if we see that the tilt bit is set. if (!empty($cmdline) && empty($tilt)) { exec("$cmdline", $output); } ?> X10 Home Control Interface
\n"; echo "\n"; echo "\n"; echo "\n"; } ?>
All Lamps:      All Devices:
# Action Dim Level Comment
$homecode $counter
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo ""; echo "\n"; echo "
".$comments[$homecode][$counter]."

Command Line: $cmdline
"; if (is_array($output)) { foreach( $output as $lineout){ echo "$lineout
"; } } echo "

"; } ?>

 


Copyright © Brielle Bruns of The Summit Open Source Development Group
This program is licensed under the GPLv2 license.