Home Automation Software for the X10 FireCracker kit
- What is the X10 FireCracker kit?
The X10 Firecracker kit is a simple wireless X10 home
automation system, consisting of a lamp module, an appliance
module/radio receiver, a hand held wireless transmitter and a
wireless transmitter that plugs into a standard RS-232 serial
port. Using either the handheld transmitter or the serial
port transmitter, a user can turn on or off any of up to 256
appliances, and brighten/dim any of those that happen to be
lamps and plugged into the special lamp modules. Each
appliance to be controlled must be plugged into its own
module, and each module is set (by turning dials on the front)
to a unique address by which it is identified. Software can
also be downloaded from X10 to control the modules from a
- Where do I get an X10 FireCracker kit?
X10 is the company that
produces the FireCracker (and other home automation gizmos and
gadgets). The FireCracker has been offered in several
"special deals" for $5.90 (for "administrative costs"),
apparently with the idea that once you get one of these you
will want to buy many more X10 toys. Beware if you visit
their site, however: every day is a "one time deal" day (don't
be taken in by their sales tactics; another "incredible deal"
will be up tomorrow), and any email address you give them will
get lots of email advertisements from them. People have had
problems getting off these mailing lists in the past; I
believe they've fixed this, but if you have a crud email
account, by all means use that one if you buy anything.
- How do these things work?
For the X10 FireCracker, this is
actually a two-step process. First the computer sends signals
to the "Dynamite" interface (using the DTR and RTS lines of
the serial port), which are transmitted by radio signals to
the special receiver/appliance module. This module then sends
special pulses through the 110V line into which it is plugged
to other modules (or intercepts the message itself). The
module to which the message is addressed receives the message
and turns on/off an appliance, or dims/brightens a lamp.
There are also special shutters, garden hose and other modules
to allow you to control many other things around the house;
all work pretty much the same way. Note: Some USB
serial ports (even some laptop serial ports) do not provide
enough power for the Firecracker to work. I've not seen this
problem with desktop serial ports (built-in or mutli-port
- Can I receive messages with the Dynamite interface from other modules?
Unfortunately, no. The Dynamite interface is a transmitter
only. There are other computer-controlled X10 interfaces
however that will let you communicate both ways; they cost a
bit more however. Look at X10's
site for more information on these products.
- What is BottleRocket?
BottleRocket is a command-line interface for Unix systems to
use the FireCracker kit. It is easy to use, has all of the
major (non-gui) functionality of the Windows interface, is easy
to call from scripts and the backend code is made to be easily
linked into other programs.
- What platforms does BottleRocket run on?
BottleRocket has been developed primarily on Linux, but has
been verified to work with FreeBSD and NetBSD. It also works
with Digital Unix (4.0D tested, although not extensively); it
should be quite easy to port to other systems (if anything need
be done at all), although may require a number of changes to
work on anything other than an Intel 80x86-based machine (due
primarily to timing issues). One person is reportedly even
working on a Palm Pilot port.
- Are there any GUI interfaces available for BottleRocket?
Yes; several people have worked on GUI interfaces, ranging from
TCL/TK based, to WWW based, and there's a Qt program that
incorporates the BottleRocket back end. See the Contributed source/utilities section for
BottleRocket is currently available only via the web. I
definitely recommend always getting the latest version, as
there are still bugs being worked out and new features put in
(and vice-versa). Note that the current "native"
BottleRocket command names are very likely to change in the
near future (I like to keep backwards compatability, but as
the package is still new, things will probably change a lot).
The next version will also support a lot of x10-amh style
arguments, and things may move over to that format.
Version 0.04c is the latest. If you're still below 0.04,
please upgrade as there have been security fixes (as well as
lots of new features) added. 0.04a fixes some problems with
usage information being misleading, a fix to br_cmd.h where
an extern variable was misnamed, and code cleanups. (Thanks
to Christian Gafton for sending in patches).
This version adds better timing (ideas taken from
"firecracker" by Chris Yokum), include fixes for Solaris, and
possibly support for machines without DTR (rewiring the line
to TX will be necessary; no promises it works). Also, people
experiencing IO errors should try adding -DUSE_CLOCAL in the
DEFS section in the Makefile after running configure (Note:
you cannot use a device connected through the pass-through at
the same time if you do this)... If anyone tries this, please
let me know if it works. There are probably also a few other
minor fixes; I've been playing with this one on and off for a
Also, there's now a super-alpha level patch to the tree with
a BottleRocket Perl module; it's on the betas page (yes, I use
"betas" quite loosely). If you decide to play with this, I
suggest you get the 0.05b2 source tree and make it from there.
0.05b2 still has the segfault problem in br (this won't affect
the perl module) but I'll get a new version up soon.
Version numbers indicate major new features, letters indicate bug fixes.
Download the current version(0.04c)
BottleRocket version 0.05b3
BottleRocket version 0.04b6
BottleRocket version 0.04b5
BottleRocket version 0.04c
BottleRocket version 0.04b
BottleRocket version 0.04a
BottleRocket version 0.04
BottleRocket version 0.03a
BottleRocket version 0.03
BottleRocket version 0.02b
BottleRocket version 0.02a
BottleRocket version 0.02
BottleRocket version 0.01 (initial release)
RedHat 6.0 RPMs (compliments of Christian Gafton):
Note: The MLUG server was compromised recently; as a result I've
temporarily removed the binary RPM (I'm probably being paranoid, but
I want to be careful about this.) Should have a new copy up soon.
BottleRocket 0.04 Source RPM
RPM spec file
RedHat 6.0 RPMs (compliments of Doug Schaapveld):
Doug was kind enough to build a spec file for Bottlerocket (to
build a new RPM). As soon as I get time I'll build a new rpm with
the spec file. In the mean time here the spec file for those that
BottleRocket 0.04 Source RPM
Debian Potato DEB (put together by Ashley Clark):
BottleRocket 0.04c DEB for i386
BottleRocket 0.04c + DEB files in source format (tgz)
BottleRocket Perl module version 0.02
Version 0.04 -> 0.04a
patch for 0.04
Patch for 0.02
for command-line tty selection by Jonathan Stroud
If you want to check out the newest stuff, see the
betas page. It has the latest fixes, support
for other systems, features and (usually) new bugs.
- BlueLava -- a web and wap cgi-based interface to X10
- WebX10 -- An shtml interface for BottleRocket/other X10 programs by Rudi Pittman
- CGI-x10 -- A CGI based interface for BottleRocket by Brian Wilson
- RocketLauncher -- A TCL/TK front end for BottleRocket by Chris Kuster
- Q10 -- This isn't a GUI for br itself; it's a program all of its own, by Dave Marotti
- wmx10 -- A WindowMaker/Afterstep program (also standalone) by Josh Hawkins
- Control -- A map-based TCL interface by Clif Flynt
- GX10 -- A GTK based interface by Kevin Fox
If you wish to write your own programs to communicate with the
Dynamite interface, check out the specs at this url
(Thanks to Joseph Wardell for supplying me with this
If you want to use BottleRocket's backend for your own
projects, feel free to do so. The source is released under
license. You're under no obligation to contact me before
releasing source based on BottleRocket, although I would
appreciate an email just so that I can see what kinds of
projects people are doing with this code. My email address is
The backend interface basically consists of one function:
x10_br_out(); you pass it an open filedescriptor for the
serial port the device is connected to, a device address
(unsigned char; top 4 bits are for the housecode of the
device, bottom 4 for the device ID) and a command. Check
br_cmd.h in the distribution for more info.
People Involved with the Project
These are some of the major contributors to BottleRocket. If
I've left your name out, I sincerely apologize; drop me a note
and I'll be sure to add you to the list.
- lots of code including command-line options and x10-amh compatability, bug fixes
- added autoconfiguration, info on NetBSD compatability, bug fixes
- more info on NetBSD, bug fixes
- security, porting info and bug fixes
- previous Bottlerocket maintainer
- current maintainer
Other Home Automation Resources
There are quite a few home automation resources on the web.
Perhaps one of the most definitive for Linux is Neil Cherry's
site. I haven't been checking many of the other HA sites
for a while, so I don't have any other urls to post yet 8) But
if you have a link you'd like me to put here, email it to me
and I'll put it up.
Since the initial release, a lot of changes have happened.
I'll do my best to recount them by version number.
- Version 0.04: Lots of changes here. Autoconfiguration support
added, much improved x10-amh compatability, all devices
on/off, all lamps on/off commands added, security fixes, code
cleanups, formatting repairs.
- Version 0.03a: Numerous little silly bugs fixed; (left out
some quotes in example for defining an alternate serial port,
fixed a type clash, other small things).
- Version 0.03: Added some initial x10-amh compatability, repeat
command option, command line/environment variable setting of
which serial port to use.
- Version 0.02b: Fixed problem with telling fprintf that errno
was a string; segfault fix.
- Version 0.02a: Fixed #include files (was including internal
glibc stuff that made things really unportable)
- Version 0.02: Moved command processing into seperate files,
added Makefile (woo hoo!), some tweakable #defines for
- Version 0.01: Initial Release, consisted of br.c and README
There are still lots of things that need to be done. I plan on
adding an /etc/x10_users file to specify users that are allowed
to use the program, a configuration file (where the port to be
used can be set, aliases can be set for device addresses,
timing parameters can be tweaked, etc.), possibly a daemon mode
allowing actions to be scheduled for certain times, improved
compatability with other programs... and lots of other nifty
To contact me please send me email to:
(I'm the current maintainer but not the original author).
Feel free to contact me with any questions, bug reports,
requests for features, bug fixes, code (!). If I'm a bit slow
to reply, I apologize, but I tend to be really busy. If you
don't hear from me within several days, please email