- To hell with the pig... I'm going to Switzerland.

Harmony One, Streamzap, EventGhost and XBMC, Oh My!(Monday, March 30, 2009)

Last month, I announced that I'd finally got my media center PC up and running, and outlined quite an extensive to-do list to make the system truly usable. The first task was to get a remote control to operate the PC, and after reviewing the devices supported out-of-the-box by EventGhost, a utility that allows you to capture events on Windows (like a pressed key on a remote control) and respond appropriately (like emulating a keyboard button, which is the easiest way to control XBMC), I chose the Streamzap remote, as the lowest cost USB remote that appeared to have the necessary number of functions.

One quick note — apparently, someone has been working on direct integration between EventGhost and XBMC, however there are way too many references to "the latest beta" for me to bother with it. I prefer to stick to stable releases. And while the forum claims Harmony support, you'll probably still have all the issues between the Harmony and the Streamzap that I walk through below.

With a little tweaking, the Streamzap remote works very well with EventGhost and XBMC. I'm using the default Keymap.xml that is found in the System folder of the XBMC installation. After installing EventGhost, I exported an XML version of the configuration, which is much easier for me to work with than the GUI (though, the GUI is fairly good, as much as a GUI can be). I then heavily customized the configuration (download my evg3.xml to import into EventGhost):

  • Disabled the auto-start of all plugins but Streamzap.
  • Bring XBMC to the foreground when the system wakes up.
  • Set up macros for each Streamzap button to emulate a specific keystroke (see summary below to explain a few of the weird mappings).
  • Commented out all the other "extras" that don't apply to controlling XBMC with the remote.

At this point, it was time to replace the Streamzap and the plethora of other remotes with the Logitech Harmony One Advanced Universal Remote. Even if I wasn't obsessively trying to simply my entertainment experience, the Harmony One provides a significant step up from the Streamzap remote. While the Streamzap IR receiver provides enough distinct functions to operate XBMC, it is necessary to assign those functions to buttons that might have otherwise been designed for something else, or worse, simply given a color, which my feeble mind is incapable of remembering. So, the goal was to set up the Harmony One with logical mappings between the buttons on the remote and the functions that are actually run on the media center.

Configuring the Harmony One should have been a relatively simple task. Unfortunately, it has been cursed with the world's most feeble software utility. You know you are in for pain and suffering when the first thing an application tells you to do is to change your screen resolution. The application then goes on to be totally unusable with only the keyboard. Never mind that it is totally incompatible with Linux (and I really do prefer not to install poorly written, untrustworthy software on the Vista media center system, as I considering the stability of Windows to be tenuous at best).

Fortunately, there is a (slightly) simpler approach. After you've installed the software, you can go directly to, where you can use your browser to perform all of your vital functions — when the time comes for it to interact with the remote, your browser downloads a firmware image that the software knows how to install. That part, at least, seems to work pretty well.

So the first thing I had to do was set up a bunch of activities on the remote, so it could operate the television, the receiver, the TiVo, and the DVD player. That was fairly simple — the device catalog knew about each of these. One key point for me, is that the volume controls always go to the receiver, which allows me to overload the mute button on the Streamzap remote, for that one extra function!

Unfortunately, Logitech's device catalog fails completely when it comes to the Streamzap remote. There's an entry for the device. But not a single button press is recognized by receiver. In the end, I had to have the Harmony One manually "learn" each and every button on the Streamzap remote. That didn't take terribly long, except for the wasting of several hours figuring out that it was necessary. You need to be really careful while you're doing it, too, because I apparently mispressed a button, and had to go through the process again to fix it.

Once you have taught the remote how to send the right commands, you actually need to map the buttons to the commands. From the web interface, you need to customize your PC activity, and then click on the link to change the behaviour of the buttons. All of the buttons on your Harmony One should be listed, and you'll need to specify a device and command for each. All of the buttons are moved to the PC device, except the two volume buttons and the mute button, which go to the receiver. I also set up five "Additional Buttons", which show up on the device menu on the Harmony One's screen. A few are actually duplicates of hard buttons, but with my memory, sometimes it's hard to remember what button does what.

Here's the complete mapping of buttons to commands to keystrokes (in the order that they appeared for me on the Logitech web site):

Harmony ButtonCommandKey StrokeNotes
MenuMenuCBring up context menu.
ExitExitEscGo back to previous menu.
Up ArrowVolumeUp+ (Plus)Increase PC volume — sometimes the volume level of the PC is out of whack with the volume of the other components, so this is helpful for fine tuning. Note that this is the arrow button between the Menu and Info buttons.
Down ArrowVolumeDown- (Minus)Decrease PC volume. Note that this is the arrow button between the Exit and Guide buttons.
InfoRecordIBring up media info.
GuideYellowTabToggle video full screen mode. This got an "Additional Button" entry on the LCD.
Volume UpAV Receiver - VolumeUpThe Harmony One volume controls are directed at the AV Receiver.
Volume DownAV Receiver - VolumeDown
MuteAV Receiver - Mute
LeftLeftLeftSee below for my note on XBMC skip back and skip forward within a playing video, the way you would with TiVo.
Channel UpChannelUpPageUp
Channel DownChannelDownPageDown
PrevRedBackspaceNavigate back to parent directory.
RewindRewindRPlays the video in reverse. This is sort of sketchy in XBMC — see the note below on TiVo style skipping.
Skip BackPreviousTrack, (Comma)Go to previous track.
RecordN/AXBMC isn't going to be recording anything.
PlayPlaySpacePlay is also accessed via the P key, however it seems that Play and Pause are more consistently used as a toggle, so both are mapped to the space bar. Also, it ensures that pressing play from a directory listing works the way you'd expect.
Fast ForwardForwardFPlays the video faster.
Skip ForwardNextTrack. (Period)Go to the next track.
StopStopXQuits playing the current media.
1Num11The number buttons are mapped to the numbers, though I haven't actually used the number buttons in XBMC, so conceivable, these commands could be used for additional functions via the "Additional Buttons" feature on the Harmony One — in which case I wouldn't map the number buttons to those functions, unless you're really good at remembering what they do.
PlusBlueQQueue up the selected media. This got an "Additional Button" entry on the LCD.
EMute\ (Backslash)Toggle application full screen — at least in theory. I haven't actually got this to work for me, yet. This got an "Additional Button" entry on the LCD.
N/AGreenSBring up XBMC shutdown menu, in case you want to do something other than the default shutdown function. This got an "Additional Button" entry on the LCD.
N/APowerEndExecute the default XBMC shutdown function, which for me, causes the PC to sleep. See my note below on waking it up. This got an "Additional Button" entry on the LCD.

Here are the noteworthy items that merit further discussion. I've become very used to the "skip back a few seconds" feature of my TiVo, and it took me a while to figure out how to do it with XBMC. It turns out that during video play back, the left and right arrow buttons do a skip back and skip forward, with a default interval of 30 seconds. For skipping forward, that's just about right for a commercial, but for skipping back after you've missed a few seconds of dialog, or whatever, is way too much. It turns out that this can be configured via the AdvancedSettings.xml file, which you need to create in your UserData folder. It took me a while to figure out that this is NOT the UserData folder under the XBMC directory, but rather (at least on Vista) the UserData folder in your user directory. For other platforms, see the FAQ for that platform. I created a version of the file that contains two sections. One with the actual customizations, called "video", and a bogus section called "videoAllSettings" which contains the all of the possible video settings, along with their defaults, for my own future reference. The only really meaningful customization is changing timeseekbackward from -30 to -5. (Download my advancedsettings.xml and copy it to the appropriate UserData folder.)

The other noteworthy item is that the Streamzap IR receiver doesn't have the ability to wake the PC from S3 sleep. It should have the ability to do so. The documentation from Streamzap says that the receiver "doesn't provide enough power" to do so, but that's nonsense. If you have your BIOS configured to allow a USB device to wake the computer from S3 sleep, then the IR receiver should stay fully powered, and the hardware should watch for a "power on" command. Unfortunately, I'm not sure if that's something they can fix with a driver update, or not. Depressingly, my proposed workaround is both expensive and complicated. Currently, I wake the PC from sleep by sending a magic wake-on-LAN packet from my laptop. This is only temporary. I am in the process of setting up a full Insteon-based home automation system. One of the niftier Insteon devices, is the IRLinc IR receiver. This will allow me to (at least in theory) configure the Harmony One to send commands to the home automation system. Since I'll be routing all of the home automation commands through a central server using the Insteon PowerLinc Serial Modem, I can just have the server watch for the "turn media center on" command, and issue the magic wake-on-LAN packet. This would be a total deal-breaker for the Streamzap, if I weren't already planning on adding these other components.

If that's way too much for you to deal with, your other choices are leaving the PC on all the time, or using a more sophisticated IR controller, such as the Microsoft Windows MCE Remote (which I actually wanted, but couldn't verify actual continued support for from Microsoft).

So that's what I have for you for now. Stay tuned as more details emerge.

—Brian (3/30/2009 01:16 AM)


One step I forgot... the Streamzap remote installs a program called "zremote.exe" that is used handle interactions with your PC, in the absence of a better solution. You'll want to turn that off, using the "msconfig" utility.

-- Brian (4/1/2009 1:13 AM)

Brian, thanks a ton for posting this -- I found it via google search just as I was setting up my own xbmc rig, and I'm sure you saved me hours of time. Works just like you described. Thanks!

-- Bruce (4/14/2009 12:29 AM)

Have you heard of usb-uirt?

-- MoonUnit (6/24/2009 3:01 AM)

(I don't know if you plan on checking back, but...) Yes, I'm familiar with USB-UIRT, a custom built unit being sold by Jon Rhees. That's probably an even better solution than the StreamZap remote, however, I chose the StreamZap for several reasons: first, I wanted a solution that included a remote control -- since I had no idea how the Harmony One would work, I wanted to have a remote control that I could teach it with; second, while I'm sure Jon is both honest, and talented, he's only one man, and for this particular project I decided to go with the product with a corporation standing behind it, and's customer protections; finally, the StreamZap was half the price. For a future project, I might choose the USB-UIRT, but that's why I made the decision I did, at the time.

-- Brian (6/24/2009 9:36 AM)

(no html)

Disclaimer: Opinions on this site are those of Brian Ziman and do not necessarily
reflect the views of any other organizations or businesses mentioned.