Well, at least a small part of it. Asterisk can run external programs via the commands System and TrySystem. Combine this with such things as X10 devices and Asterisk can control appliances. While experimenting with Asterisk I wanted a visual feedback without having to flip between sessions. So I dug out my old X10 modules and figured out how to work them through Asterisk. My setup consists of a small serial port dongle, a receiver/controller unit and a lamp controller. The biggest obstacle to overcome is permissions on the serial device. I run Asterisk as the user and group asterisk for security reasons. Since I use that particular serial port for other purposes I wanted to keep the permissions as they were. And since I'm paranoid I did not want the control program to run setuid or setgid. The solution was a small setgid Perl script that only allows X10 modules to be turned on and off on the predetermined serial port. I'm using the BottleRocket Debian package. It uses the link /dev/firecracker as the default device. The Perl script x10 is installed in /usr/local/bin/ and is setgid to dialout. The serial port is set to allow the dialout group write permissions. The command br and $action should be changed if you use a different X10 controller. There are two parts of my Asterisk extensions.conf file that utilize the x10 script and allow an authorized caller to control my X10 modules. The first part is the subroutine/context that prompts the user and runs the x10 script. The second part is the extension that is called to run the subroutine/context. See the file controlx10.conf. Controlling Asterisk from within Asterisk is even simpler. It's simply a matter of running the asterisk program with the options -rx and the action for Asterisk to perform. If the action consists of two words, like stop now, it must be wrapped in double quotes. See the file controlasterisk.conf. The files referenced in this post can be found on my SDf Asterisk page.