Home Automation Setup
I was planning to answer a question in a comment on previous post and wanted to talk about the number of xPL clients that I have running. Rather than just quoting the number, I thought I’d make a post to put my response in context.
Most of my xPL components support the hbeat schema. So I
can identify them by sending a hbeat.request message. My perl
xpl-sender command can do this:
bash$ xpl-sender --schema hbeat.request --wait 10
By default, the sender just sends the specified message and exits.
But, with the --wait parameter, it prepares to receive replies,
sends the message and waits the specified number of seconds for any
replies. The output from the above command is a summary of each
received hbeat.app reply:
xpl-stat/hbeat.app: bnz-apcups.apc -> * 5/53556/192.168.32.1
xpl-stat/hbeat.app: bnz-blue.slave -> * 5/51540/192.168.32.1
xpl-stat/hbeat.app: bnz-ccost.slave -> * 5/58435/192.168.32.1
xpl-stat/hbeat.app: bnz-dmx.slave -> * 5/44072/192.168.32.1
xpl-stat/hbeat.app: bnz-gpower.slave -> * 5/59772/192.168.32.1
xpl-stat/hbeat.app: bnz-heyu.slave -> * 5/56009/192.168.32.1
xpl-stat/hbeat.app: bnz-lcdproc.slave -> * 5/41722/192.168.32.1
xpl-stat/hbeat.app: bnz-linux.slave -> * 5/46917/192.168.32.1
xpl-stat/hbeat.app: bnz-lirc.slave -> * 5/33992/192.168.32.1
xpl-stat/hbeat.app: bnz-mpd.slave -> * 5/32798/192.168.32.1
xpl-stat/hbeat.app: bnz-ownet.slave -> * 5/46631/192.168.32.1
xpl-stat/hbeat.app: bnz-rfxcomrx.slave -> * 5/40448/192.168.32.1
xpl-stat/hbeat.app: bnz-rfxcomtx.slave -> * 5/48635/192.168.32.1
xpl-stat/hbeat.app: bnz-sendsms.slave -> * 5/47592/192.168.32.1
xpl-stat/hbeat.app: bnz-smart.slave -> * 5/43472/192.168.32.1
xpl-stat/hbeat.app: bnz-udin.slave1 -> * 5/50553/192.168.32.1
xpl-stat/hbeat.app: bnz-udin.slave2 -> * 5/52187/192.168.32.1
xpl-stat/hbeat.app: bnz-wol.slave -> * 5/33981/192.168.32.1
xpl-stat/hbeat.app: bnz-zenah.slave -> * 5/39324/192.168.32.1
xpl-stat/hbeat.app: bnz-mythtv.vz -> * 5/34473/192.168.32.6
xpl-stat/hbeat.app: bnz-smart.vz -> * 5/34298/192.168.32.6
xpl-stat/hbeat.app: bnz-xosd.vz -> * 5/34487/192.168.32.6
xpl-stat/hbeat.app: bnz-xvkbd.vz -> * 5/49051/192.168.32.6
Each summary is of the form:
message_type/schema: source-identifier -> target interval/port/ip
and each source-identifier is of the form:
vendorid-deviceid.instanceid
My vendor id (developer id) is bnz, the device id is typically the
type of the device being managed, and the instance id is typically the
hostname of the machine running the client.
There are two machines in the list vz (which is my main mythtv
box) and slave (which is the main home automation server).
(The observant may notice that there is also apc but that is
actually running on slave monitoring an APC UPS via USB but the
instance id is changed as a convinience in order to distinguish
between slave and the UPS as they both report power/battery
information.) The clients on the mythtv box are:
xpl-mythtvwhich reports the percentage utilisation of the video inputs/tuners,xpl-smartwhich reports disk temperatures so I can turn on fans to extract warm air from the server room,xpl-xosdwhich responds toosd.basicschema messages showing on-screen display text using xosd, andxpl-xvkbdwhich sends fake key presses to the active window (probably a security risk even though the keys always go to mythfrontend).
The clients on slave are:
xpl-apcupswhich reports status of my APC UPS and sends events if when the UPS switches between mains and battery and vice versa,xpl-bluewhich monitors for the presence of various bluetooth devices so that my house “knows” when different people are home,xpl-ccostwhich monitors my mains power usage (or at least it did until it got confusing when I started exporting power) and the solar power generated by the PV panels on my roof,xpl-dmxwhich sends commands to a Milford Instruments DMX Transmitter to control a Pulsar ChromaZone 12 Controller which in turn drives a number of ChromaRange lamps,xpl-gpowerwhich reports my power usage information into the Google PowerMeter API,xpl-heyuwhich uses the heyu X10 software control my mains appliances and lights,xpl-jabberwhich enables interaction via XMPP instant messages (such as Google Talk),xpl-lcdprocwhich responds toosd.basicschema messages showing text on a picoLCD-4x20-slideshow device using the [lcdproc][] protocol,xpl-linuxwhich reports Linux battery status and events, system temperature, etc.,xpl-lircwhich reports LIRC IR remote button presses (so that I can switch the kettle on or send wake-on-lan packets using a basic TV remote control),xpl-mpdwhich controls a Music Player Daemon to play music in several zones around the house,xpl-ownetwhich is an interface to an OWFS Daemon that reads from temperature/humidity sensors and writes to relay controllers on the one-wire network in my house,xpl-rfxcomrxwhich is an interface to an RFXCOM RF Receiver that reports RF messages received from various sensors, switches, etc.,xpl-rfxcomtxwhich sends RF messages via an RFXCOM RF Transmitter to control X10, HomeEasy, etc. devices,xpl-sendsmswhich sends SMS messages via any service supported by the SMS::Send Perl API (I use the service from Connection Software),xpl-smartwhich reports disk temperatures,two instances of
xpl-udinto control two UDIN USB Relay Controllers to momentarily pulse the open/close inputs of several blind and curtains,xpl-wolwhich sends wake-on-lan packets (using theetherwakecommand) to wake up devices that are shutdown in order to save power (such as my mythtv box), andzenahwhich is the brains of my house - triggering actions based on timers and incoming xPL messages.
I am also running several other clients that run in stealth mode -
that is only sending messages and not listening for or responding to
hbeat.request messages. These “inputs” include:
a web frontend,
an experimental daemon supporting the lightswitch API so that I can use existing Android (or iPhone) applications to control my house, and
some security-related inputs (that I wont be writing much about).
I’m currently trying to refactor the code to separate out the
device-related code from the xPL code and to reduce the coupling
between the web interface and the zenah “brains”. This will
probably involve a couple re-write of the zenah component and the
web interface.