That's great. I didn't realize Mr. House did so much. We'll help in any way possible. I added some more detailed information about our DCE protocol and put it in our documentation: newbielink:http://plutohome.com/support/index.php?section=document&docID=51 [nonactive].
DCE (Data, Commands & Events), is the mechanism through which all the devices communicate and share data and send each other commands & events. It is socket-based, and will run on any platform. We don't have any good PERL guys here (we're all C++), but it should work just fine.
I'm not sure the best way to do it, though. Here are the issues: Our DCEGen tool makes it really comfortable to create new devices. You just use the pluto-admin web-site, add a device, specify what data it needs, commands it implements, and events it fires. It builds a C++ project for you already, with a gcc Makefile, an MS VS.net project file. All the classes are derived from common classes in our DCE library which implements the protocol. The generated code is really very simple--it's basically just some switch blocks that handle receiving commands in the form of a message with an ID, and calling a virtual function, which the programmer implements. The DCE library (the base classes) are not too complex, either. The main object is the Message class, which contains the actual command or event, and knows how to serialize itself into a stream of binary data and be sent across a socket.
The most elegent solution would be to re-write everything in PERL from the ground up. But then there would be quite a bit of work to do since the DCE Library, the Socket code, the Message class, etc. would need to be re-written. Also, there would need to be a new version of the DCE generator since, if you're going to implement lots of devices, you won't want to have to do everything by hand.
But there might be an easier solution if PERL and C++ are able to work together. I don't know PERL at all, and one of my colleagues here who knows it somewhat said it can be difficult to get them to work together. However, if you know a way, here's what we could do... We could modify DCEGenerator so that when it outputs a C++ program for the DCE Device, rather than just function stubs for the C++ programmer, it instead calls a function in the PERL program. The trickier part would probably getting the PERL program to call member functions in the C++ class to fire events. However, if we got that to work, then theoretically we could just go into the database, create a new Device that had the same data, commands and events as the existing Mr. House one, and DCE Generator would make a C++ wrapper that worked with the PERL module.
We can handle any modifications to the DCE Generator and the C++ classes if you tell us how it should work. To see the C++ code, go to Downloads and get "Pluto Disk Drive Source". It's a really simple DCE Device which is an interface for a cd/dvd drive. Disk_Drive.h and .cpp are the files which DCE Generator created, and the programmer implelemented. You can see in the header that the device was given 1 data paremeter ("Drive"), and so it has members Set_Drive and Get_Drive. It has some members to call to fire events: Media_Inserted, and it has functions to implement its commands: Eject_Disk, Start_Burning, etc. Is there a way to use the same structure and just call your own PERL command handlers, and have your PERL program call our C++ event methods?
As far as Debian... The code is not OS or distro specific. It's mainly scripts to automate tasks for non-techies. Our product was intended to be used as an appliance where the user may have no clue about computers. So, for example, if the homeowner adds a new family member to the system using the Pluto Admin site, it will create a new user, export a "personal" files folder for that user as a samba share, create an email account for him, create a personal web home page for him, and so on. The Debian-specific scripts are those that automate every possible task for a total non-computer user. So, if you want a 'closed box' appliance that does nothing but Pluto, and automates absolutely everything, without ever logging in to the console, you will need to use a Debian platform for now. But, aside from these scripts, there is nothing Debian-specific.