I was asked to give a run down of the XBMC computer I am currently using. It was assembled from parts and is running openELEC.

HTPC XBMC Computer

The case looks good.

My XBMC PC is capable of:

  • Playing 1080i video with no stutter or buffering. (Both local files and files from a Windows file server)
  • Playing 1080i streams of local cable TV channels.
  • Recoding those streams DVR style.
  • Playing 720p streams of premium cable TV channels via USTVNOW. (The 720p limit is from USTVNOW, not the computer)
  • Using my surround sound system for 5.1 sound.
  • Playing older video games from Super Nintendo, NES, Game Boy, Genesis, ect.
  • Throwing some colors on the wall with a Light Pack.

Parts List:

Total Cost: $638.26

Not cheap. You get what you pay for.

Some notes on the hardware:

My previous HTPC was an ASROCK Ion 330. It was prone to overheating. A lot of this was due to the small case size. The CPU fan lay under a spinning hard drive with a 1/4 inch gap. The fan blew hot air onto a hard drive producing its own heat. This was then blown out of the case by a 25mm fan. Because of the cramped quarters I didn’t have any other options for larger fans or moving parts. While the PC never got hot enough to shutdown it did get hot enough to make me worry about.

The case on this XBMC PC is roomy. The fan from the CPU isn’t constricted. It has a 65mm case fan with room for a second. I’m using an SSD drive as they produce little to no heat. The SSD has the added benefit of being silent. The PC as a whole is quiet enough that you cannot hear it without putting your ear near the case. Even under a load it doesn’t get hot enough to spin the fans up. Idle temperature is around 40C, loaded is around 55C.

The CPU has an integrated GPU. It comes with a heat sink and fan in the box. The CPU is overkill for playing videos. I went big with the CPU because someday I plan on emulating N64 and Playstation games. Possibly even Game Cube.

The HDHomeRun is for watching cable TV. If that’s not applicable to you, then no need to buy one.

The lighting arrangement can be had in a DIY kit for $50.

Software:

Putting it all together gets you this:


My camera is unable to capture the lighting effect. Here is a video from the vendor showing how it looks.
ADAlight demo from adafruit industries on Vimeo.

 

 

Being able to run emulators on an OpenELEC computer can be tricky. It takes a fair bit of knowledge from several different areas to setup. I’m going to try to give a good overview of putting all together into a working system. By the end you’ll have a setup that allows you to play all of your old games from the comfort of your couch.

Something to consider, the build of RetroArch I’m using doesn’t have emulators for a lot of systems. Here is a list of what it can emulate.

I’m going to break this up into sections. I’m going to assume you have OpenELEC installed and working.

Getting ROMs on OpenELEC

Be sure to organize your ROMs into folders based on their console. EG: put your SNES ROMs in a snes folder, put your NES ROMs into a nes folder, and so on.

By far the easiest way to get ROMs onto your OpenELEC computer is to put them onto a flash drive and plug it in. Once plugged in use XBMC to add a new file source pointing to the flash drive.

Go to Settings and then File Manager

Go to Settings and then File Manager

Select Add Media and then Browse

Select Add Media and then Browse

Select Root File System then Media. Your drive will be one of the folder in there. Select it.

Select Root File System then Media. Your drive will be one of the folders in there. Select it.

Once you've selected your flash drive, click OK.

Once you’ve selected your flash drive, click OK.

The file source is now added and your ROMs are now easily accessible by OpenELEC/XBMC.

Getting RetroArch working on OpenELEC

Our hero and savoir, zaggash, has written a RetroArch addon for OpenELEC which makes installing all of the emulators a breeze. First thing we need to do is download a copy of the addon and install it on OpenELEC. Go to Zaggash’s site and download build appropriate for your computer.  For instance I use the Generic build. Take that file and put it on the flash drive from the previous step and then plug the flash drive back into your OpenELEC computer. Now we need to install it.

Go back to System, then select Addon Browser. From there select Install from Zip file. Navigate to the source we created in the previous step and install the emulator.retroarch ZIP file.

Now we need to add another file source that points to RetroArch. Go back to System->File Manager->Add Source->Browse. This time select Home Directory->.xbmc->addons->emulator.retroarch->bin. Call the new source Emulator Bin.

Getting ROM Collection Browser working on OpenELEC

ROM Collection Browser is also available as an addon. It gives you a nice menu in XBMC to launch your ROMS from. You can install it via addon manager without doing anything special.

Once installed start the addon. We’ll need to add your ROMs. Here is how I would do it for Game Boy Advance ROMs.

Start ROM Collection Browser. Hit the Menu button on your remote and select Add Rom Collection->Scrape game info and artwork online->Game Boy Advance. Now we need to select where RetroArch is, open your Emulator Bin source and select retroarch.sh.

Now it will ask you for any arguments RetroArch needs to start. Change it to: vba_next “%ROM%”

Note that vba_next is the core from RetroArch. If you’re adding different game systems the core name will change. See here for a complete list of cores: http://sourceforge.net/p/zaggxbmcaddons/wiki/Core%20List/

Once it is done scrapping the artwork for your games you should be able to launch them with the remote.

Getting a controller to work on OpenELEC

For me, this was the toughest part of the setup. I tried numerous controllers and spent a lot of time banging my head against the wall. In the end I settled on a corded SNES USB controller.

Wireless XBOX 360 controller: An XBOX 360 controller will actually work just by plugging it in, problem is that the drivers included with OpenELEC are not able to control the LED lights on the controller. Where as on an XBOX the lights will go solid in a spot to represent which player you are, on OpenELEC they continue to flash, forever. If you can deal with the flashing its all good. I’ve had thoughts of taking the controller apart and removing the LEDs.

PS3 Dual Shock 3 Sixaxis: I couldn’t get the controller to work either wired or in Bluetooth mode. In both cases the OS detects it as a HID device, but never as a joystick.

Random corded USB controllers: I’ve had good luck with my SNES USB, old Microsoft Sidewinder, and Logitech USB controllers. All of which only needed to be plugged in to work.

Once you’ve made a choice on controllers you have to let RetroArch know about it. You’ll need to SSH into your OpenELEC computer. The login is root and the password is openelec.

Once logged in:

cd .xbmc/addons/emulator.retroarch/bin/
./retroarch-joyconfig

From there follow the prompts to hit the buttons on your controller. If you don’t have a button it asks for, just hit any button. If says anything about not finding a joystick, you’re in trouble.

Once down you’ll get a bunch of lines mapping buttons to action, you’ll want to copy all of this and put it at the bottom of /storage/emulators/retroarch/config/retroarch.cfg

Also at the bottom of your retroarch.cfg file add:

input_enable_hotkey_btn = 6
input_exit_emulator_btn = 7

Replace 6 and 7 with numbers representing the buttons on your controller you want to hit that will exit a ROM you’re playing. On my controller 6 and 7 represent the Select and Start buttons.

… and that’s it. You should now be able to start Rom Collection Browser, find a game with the remote, start it, play it with a controller, then return to XBMC by hitting two buttons on the controller.

 

Getting the Free Cable addon to work under OpenELEC takes a little bit of command line work. You’ll need to install some Python modules and create some directories on your OpenELEC computer.

Here’s what you need to do to get Free Cable working:

Install the Blue Cop Repository

From that repository, install Free Cable.

Open the configuration for Free Cable and then save it as is.

SSH to your OpenELEC computer. Run the following on the command line:

wget http://www.crummy.com/software/BeautifulSoup/bs4/download/4.3/beautifulsoup4-4.3.2.tar.gz
cd beautifulsoup4-4.3.2/
python setup.py install --prefix=/storage/usr
cp -R /storage/usr/lib/python2.7/site-packages/bs4/ /storage/usr/lib/python2.7/site-packages/beautifulsoup

wget http://deron.meranda.us/python/demjson/dist/demjson-1.6.tar.gz
tar zxvf demjson-1.6.tar.gz
cd demjson-1.6
python setup.py install --prefix=/storage/usr

mkdir /storage/.xbmc/addons/script.module.free.cable.database/
mkdir /storage/.xbmc/addons/script.module.free.cable.database/lib

touch /storage/.config/autostart.sh
chmod 755 /storage/.config/autostart.sh

Once that’s done edit /storage/.config/autostart.sh and add

#!/bin/sh
export PYTHONPATH=$PYTHONPATH:/storage/usr/lib/python2.7/site-packages/

If you already have ‘#!/bin/sh’ in the file, don’t add is again.

Reboot. Free Cable should now work.

I was having trouble keeping hdhomerun_recorder always running under openELEC. Sometimes it wouldn’t start at boot, or sometimes it would randomly stop running, causing my shows not to be recorded. Below is a short Python script I came up with. It runs under CRON every five minutes. If hdhomerun_recorder isn’t running, it starts it. I have not had a problem since.

import os

find = 'hdhomerun_recorder'
start = '/storage/etc/hdhomerun_recorder/start.sh &'

f = os.popen('ps ax | grep -v grep | grep "' + find + '"')
out = f.read()
if not find in out:
  print 'Running: ' + start
  os.system(start)

What you see here is the act of a desperate man who got sick of trying to make XBMC’s PVR support work. I tried for several days to get tvheadend to work with my HDHomeRun. In the end I gave up and went my way. What you see may be a mess to setup but it works very well for me.

When all setup XBMC will have a directory full or playlist files representing your channels/streams. The playlist files will be named after the channel they represent along with the current and next show that is going to play.

Here is a video to show what I mean:

Quick note on my setup; I have an HDHomeRun receiving QAM channels from Cox cable. These channels come in as by product of the Internet service I receive. Via Cox and the HDHomeRun I receive local network stations. I also have an USTVNOW account for basic cable channels. Why do I use USTVNOW instead of getting basic cable from Cox? USTVNOW is about $10 a month cheaper and receives more channels.

Installation is a crazy mess. I didn’t expect to release this but I figured at the least the USTVNOW streams will be useful to someone.

I did all of this under openElec. XBMCbuntu works. Other Linux based installs should work. Windows will probably work if you install Python and something similar to CRON.

Prerequisites:

For USTV: Just make sure you have the USTVNOW plugin working. XBMC HUB Article About It

For HD Home Run: Make sure its connected to your network and can view some channels. Have hdhomerun_config working. (Part of libhdhomerun: Download It

Installation:

  • Download this repo. (Direct link to zip)
  • Unzip it and copy everything into /storage/dean. If you’re the picky sort this is where you begin to change pathnames. For narcissistic reasons I’m going to assume you’ve put everything in /storage/dean.
  • Make a directory: /storage/Streams. This is where all your stream files will go. Add that directory as video source in XBMC.

USTVNOW Streams

  • We’re going to add a script to the USTVNOW addon to download a list of channels and turn them into stream files (.strm). We’re going to place this in CRON so it updates itself.
  • Edit /storage/dean/ustvnow_stream_grabber.py and change the email and password variables to your USTVNOW credentials.
  • Move /storage/dean/ustvnow_stream_grabber.py to the directory your USTVNOW addon resides in. For me its /storage/.xbmc/addons/ustvnow/
  • Make sure it works by running /storage/dean/ustvnow.sh. After that you should see a bunch of stream files in /storage/Streams. Each file should represent one of your USTVNOW channels.
  • Add a cron job so that /storage/dean/ustvnow.sh is ran every thirty minutes. Example in /storage/dean/crontab.

Go to your stream video source in XBMC. You should be able to play each file in there.

HDHomeRun Streams

  • We’re going to build stream (.strm) files for each channel your HDHomeRun receives.
  • On a Windows box open up HDHomeRun Setup and look at the tab that shows all of your channels, Digital Cable for me.
  • Write down the channel numbers and what channel they represent. (FOX, ABC, ect)



  • Two options now. Build the stream files by hand or use HDHomeRun Stream Builder to do it for you.
  • If you’re doing it by hand and pretending we’re working on the file for CBS in Fort Smith, AR:
  • Create a file named KFSMDT.strm
  • Open the file up and add this: hdhomerun://103D1F0E-0/tuner0?channel=auto:92&program=1
  • Notice a few things you’ll need to change.
  • 103D1F0E-0 is the ID of my tuner. You’ll need to change it to your tuner’s ID.
  • tuner0 is the first tuner on my HDHomeRun. The second tuner is tuner1. I watch TV on tuner0. I record TV on tuner1.
  • channel=auto:92&program=1 represents CH92 – 1 from HDHomeRun Setup. Change the 92 and the 1 as appropriate for your channels.
  • Save the file and put it in /storage/dean/Streams-default
  • Repeat this for every channel your HDHomeRun receives.
  • HDHomeRun Stream Builder will automate all of this for you, but it is a PITA to setup. (As if all the above hasn’t been)
  • If you don’t care about having the currently playing show in the file name, copy the all the .strm file you made into /storage/Streams and call it done. Just like the USTVNOW streams they should play as if they were any other video file.

Getting the currently playing show to be in the HDHomeRun stream’s file name

  • Theory behind this is that we’re going to use mc2xml to download TV scheduling information, parse it, and rename our stream files using the info.
  • Get mc2xml working for your zip code. There is a copy in /storage/dean/mc2xml-local
  • For me the command line is ./mc2xml -c us -g 72714 -d 72 -f (72714 is my zip code)
  • Have cron run /storage/dean/update_xmltv.sh once a day. Example in /storage/dean/crontab
  • Have cron run /storage/dean/update_streams.sh every thirty minutes. Example in /storage/dean/crontab
  • Now your stream files in /storage/Streams should be all renamed with the current show playing.