The Foyer Project

With the TiVo::Perl project over, PlacebCo's research & development team (Matt^2) was in desperate need of a new time sink project. With a 15" LCD touchscreen and mini PC in the basement, and various X10 gadgets strewn about, the mission was clear: build a user interface for home automation and watching Homestar Runner.


With the purchase of a cheap LCD wall mount kit from Mounts & More, the project began in earnest. The foyer of 15 Eastview Drive was chosen as the home for the touchscreen, mainly because it provided an opportunity to hide all of the supporting equipment out of view in the basement stairwell. All cables for the LCD panel (power, serial, VGA, and audio) run through a hole cut in the wall behind the panel.

Our first attempt at driving this panel used a micro PC from the defunct Modular Systems. At 233mhz and a staggering 64MB of RAM, the system was no speed demon, but was deemed fast enough. What we quickly discovered was that the paltry graphics subsystem was incapable of driving the LCD panel at a reasonable color depth, leading to all sorts of ugliness. Additionally, the system had no audio capabilities at all. The Modular system was loud enough to be annoying, since the stairwell tended to reflect sound back to the foyer. Despite its shortcomings, this configuration served us well during our prototyping phase.

To provide a little more horsepower and resolve the audio, graphics, and noise issues, we decided to invest in a new Micro-ITX system from Case Outlet, based on a 533mhz Via EPIA board. We chose this board because it was cheap, fanless, and would use the spare PC133 RAM we already had. Because the system boots over the network rather than from a local hard disk, there are absolutely no moving parts. This system is completely silent, and only cost about $200.


Software prototyping began shortly after we got the Modular PC up and running. Matt Y had already figured out how to create a full-screen application with Perl/Tk while building his DVD Mount script, so Matt F shamelessly stole that code as a starting point.

The Foyer module serves as the framework for various plugins which provide user functionality. Each plugin is allocated a Tk Frame object in which to work, and can provide callbacks to handle various events. Plugins may also use the Foyer::Browser module to display web pages.

The X10::PowerLinc module abstracts out the interface of SmartHome's PowerLinc RS232<->X10 module. It utilizes the Win32::SerialPort module for rs232 communication, and its external interfaces accept and return simple strings such as "B 1 ON" or "B ALL_LIGHTS_OFF". It provides functionality for both sending and receiving X10 transmissions.

The HouseMaster::Server module.