SEARCH

How-To Geek

How to Automate Your Always-On Raspberry Pi Download Box

2013-04-05_093241

We recently showed you how to turn your Raspberry Pi into a 24/7 low-power downloading machine. Now we’re back to show you how to make the system almost completely hands off with awesome automation tools.

Why Do I Want to Do This?

If you’ve been following along with our Raspberry Pi download project, at this point in the process you have a full fledged BitTorrent/Usenet machine. That’s awesome, but it’s not fully automatic. You still have to interact with the box fairly regularly to keep pointing it at new files, picking out episodes of your favorite TV shows, and so on.

After you’re done with the final segment of our Raspberry Pi download box tutorial, today’s guide on automation, you’ll have a fully automated device on your hands where all you need to do is tell it what you want and it will scout the internet for those files on your behalf.

If you haven’t been working along with us, definitely take a moment to check out How to Turn a Raspberry Pi into an Always-On BitTorrent Box and How to Turn a Raspberry Pi into an Always-On Usenet Machine.

What Do I Need?

2013-02-28_093803

Like the previous tutorials, for this tutorial we assume that you have a Raspberry Pi unit with Raspbian installed,  are able to access the device either directly via an attached monitor and keyboard or remotely via SSH and VNC, and that you have a USB drive (or drives) attached to it. In addition, we also assume that you’ve completed at least one (or both) of our tutorials on turning the Raspberry Pi into a BitTorrent and/or Usenet download machine. If you need to get up to speed in these areas, we strongly suggest reading the following guides in the order we have them listed here:

  1. The HTG Guide to Getting Started with Raspberry Pi
  2. How to Configure Your Raspberry Pi for Remote Shell, Desktop, and File Transfer
  3. How to Turn a Raspberry Pi into a Low-Power Network Storage Device
  4. How to Turn a Raspberry Pi into an Always-On BitTorrent Box
  5. How to Turn a Raspberry Pi into an Always-On Usenet Machine

The following sections of the tutorial and the tools contained therein will be of little use to you if you haven’t already set up your Raspberry Pi and have reached the can-access-BitTorrent/Usenet stage.

Once you are at that stage, however, it’s time to get down to the business of automating your entire build for hands-off downloading goodness.

Each section of the tutorial is independent of the others. If you want to automate television show snatching but not movie snatching, for example, you’re free to skip to the relevant portion of the tutorial and ignore the rest.

Finally, a small note about installing all the automation tools in this guide. We found that you can install them all on a Raspberry Pi without bogging the system down too severely. However, as each automation system tends to be a little heavy on the front end (when you first install it there is often a lot of heavy lifting to do like finding and downloading past episodes of television shows you want to watch), we’d suggest giving each installation a little breathing room in order to allow it to monopolize system resources, SABnzbd, and the USB HDD. Once you’re past the catch-up flurry everything should be fine, but unleashing all three automation apps side-by-side full bore in the beginning is really rough with the limited resources available to the Pi.

Installing the Dependencies

In order to use the tools outlined in this guide–SickBeard, CouchPotato, and Headphones–you’ll need to install a few dependencies before you get started. (We will not be addressing dependencies that are already installed with the default Rasbian distribution.)

Before anything else, we’re going to update and upgrade our apt-get installer. If you *just* followed along with our previous Raspberry Pi tutorials you can safely skip this as you’ve just recently upgraded.

At the terminal, enter the following commands:

sudo apt-get update
sudo apt-get upgrade

After you’ve updated/upgraded, it’s time to start installing the specific dependencies we need. First, all of the tools use the Git software source code management tool. Since Rasbian doesn’t ship with Git, we’ll need to install it. At the terminal, enter the following commands:

sudo apt-get install git-core

When prompted, press Y to continue the installation and the wait for a minute or two as the processes finishes. Afterwards, double check the installation by typing “git –version” at the prompt to check that git is installed. If it doesn’t return a version number, run the installer again.

In addition to Git, SickBeard (but not CouchPotato or Headphones) is dependent on Cheetah, a Python template tool. If you installed SABnzbd in the How to Turn a Raspberry Pi into an Always-On Usenet Machine guide, you already have Cheetah installed. If you only followed along with the BitTorrent guide, you’ll need to install it. At the terminal, enter the following command:

sudo apt-get install python-cheetah

After installing Git and Python-Cheetah (if you’re planning on using SickBeard for TV shows), we’re ready to get started.

Installing and Configuring SickBeard on Raspbian

2013-04-07_130612

SickBeard is a television management tool for Usenet and BitTorrent downloads–the Usenet support is significantly more mature than the BitTorrent support, but they’re both functional. In a nut shell, you tell SickBeard what TV shows you want to watch and it acts like an Internet-powered TiVo, downloading those shows for you (either from a backlog if you’re catching up or as they are released if your show collection is up to date). It’s a fantastic way to stay on top of your favorite programs.

Installing SickBeard: To install SickBeard, open up the terminal and enter the following command:

git clone git://github.com/midgetspy/Sick-Beard.git

Once the installation is complete, switch to the SickBeard directory and run SickBeard for the first time:

cd Sick-Beard
python SickBeard.py

It will appear to hang for a moment, and then you’ll see a verbose SickBeard script whiz by, and then idle. At this point, you can hop into a web browser and point it at the following address to check SickBeard out:

http://[Your PI's IP Address]:8081/home/

Configuring SickBeard: Unlike some of the tools we’ve used in the previous tutorials, SickBeard doesn’t have a configuration wizard to walk us through the setup. We’ll walk you through the important steps now.  We’ll list the relevant items you’ll want to change by their section within the Configuration portion of SickBeard’s interface.

In the Config -> General section:

Uncheck Launch Browser: We’re going to be accessing the box remotely, there’s no need for this resource-wasting option.

Under Web Interface: You can, if you wish, add a username and password to SickBeard and/or change the port number.

In the Config -> Search Settings section:

Here, we configure SickBeard to work with our Usenet and/or BitTorrent client. SickBeard really shines with Usenet and we encourage you to go that route.

Adjust Usenet Retention: The default is 500 days. If you have a premium Usenet provider, your retention should be much higher, usually 1100+ days. Check with your provider and fill in the appropriate number here.

Under NZB Search, make sure “Search NZBs” is checked, and that you’ve selected SABnzbd. Plug in the URL, username and password (if you set one), and the API key from your SABnzbd installation. Click “Test SABnzbd” when you’re done to make sure SickBeard can successfully communicate with it.

Note: If you’re set on using BitTorrent, you’ll need to check “Search Torrents” and set the watch folder for your Torrent client.

In the Config -> Search Providers section:

Here, you can select which indexes to search and input your API keys for private/pay search indexes.

Under Provider Priorities, you can check to enable providers and then drag and drop them in the list to prioritize them. By default, Womble’s Index is checked. You can check Sick Beard Index and nzbX, but the rest of them require accounts with API keys–you’ll need to visit the respective websites and go through the signup process to use them.

Note: If you turned on torrent searching in the previous step, you’ll also see TV torrent trackers listed here.

In the Config -> Post Processing section:

In the initial “Post-Processing” section, leave the “TV Download Dir” blank. We’re going to set up a helper script for SABnzbd that will take care of this function. Uncheck “Keep Original Files”; we don’t have the space on our mini Pi server to store duplicates of everything we download. Check “Move Associated Files” and “Rename Episodes” so that SickBeard will move any additional files downloaded with your TV content and rename the shows with the convention you select in the “Naming” section.

Finally, you can have SickBeard download metadata in the format that suits your media center setup. Since we use all XBMC installations, we selected XBMC for our “Metadata Type” and checked all the metadata file types we wanted SickBeard to create (like folder images and fanart).

In the Config -> Notifications section:

This section is entirely optional. You can setup notifications on your media clients (such as XBMC) and notification services such as Growl. The XBMC notifications can be extremely handy if you want a fully automated system as you can set SickBeard to force XBMC to perform library updates after new shows are downloaded.

Linking SABnzbd and SickBeard: Properly configured SickBeard and SABnzbd have a nice symbiotic relationship. You can set it up so SickBeard finds the shows, kicks the NZB files over to SABnzbd, and then SABnzbd in turn calls on a SickBeard helper script to post-process all the shows and transfer them to their appropriate folders. Once configured, the process is completely seamless.

In order to link the two together, we need to copy the helper script and edit the very tiny configuration file that accompanies it. First, enter the following command at the terminal to take you to the folder where the two files are located:

cd /home/pi/Sick-Beard/autoProcessTV

Inside that directory are the two files we care about:  autoProcessTV.py (the helper script) and autoProcessTV.cfg.sample (the sample configuration file). Let’s open the configuration file and make changes. Enter the following command:

nano autoProcessTV.cfg.sample

In the nano editor, double check that everything in the simple configuration file matches your installation. By default, the config file points at the local host, on port 8081, with no username or password. If you have changed any of the settings (such as the port number or by adding in a username/password), edit the file to reflect that. When you are done, press CTRL+X to exit. Change the filename to autoProcessTV.cfg (dropping the .sample from the end).

There are two ways to give SABnzbd access to the scripts. The lazy way is to just change the post-processing script directory in SABnzbd’s Config -> Folder section to /home/pi/Sick-Beard/autoProcessTV. If the SickBeard scripts are the only post processing tools you use, this will work fine.

Alternatively, if you want to keep all your SABnzbd scripts in one location, you can use the following command to copy them to your SABnzbd scripts folder (the folder we setup in the Usenet guide):

cp autoProcessTV.cfg autoProcessTV.py sabToSickBeard.py /media/USBHDD1/shares/SABnzbd/scripts

Either way, once you have the scripts configured and copied, you need to tell SABnzbd to use them. In SABnzbd, navigate to Config -> Categories and create a new category “tv”. In the script section select sabToSickBeard.py as your post-processing script. If you wish to create a folder where your TV downloads will be temporarily sequestered from your other downloads before being shuffled off to the permanent TV folder, you can set a Folder/Path (e.g. SickBeardTV). Make sure to hit the Add button to save your changes.

Adding Shows to SickBeard: Now that you’ve configured SickBeard, it’s time for the most important part: adding television shows to your new automated system.

First, we need to make a directory for SickBeard to store the shows. (If you already have a TV show directory set up on the external hard drive you’re using with your Pi, skip this step). At the terminal, enter the following command (altering the pathname if you’re not using the same setup we established previous tutorials):

mkdir /media/USBHDD1/shares/TV/

Now, from the main SickBeard interface, click on Add Shows (located on the secondary navigation bar in the upper left hand corner). You have two options for adding shows into the system: you can create a new entry for a new show or you can import TV shows you have already downloaded into system. Even if you don’t have an existing TV show collection to add to SickBeard, we still need to start with the “Add Existing Shows” button in order to point SickBeard at our TV show directory (regardless of whether it is empty or full).

Click on Add Existing Shows, and then under the Manage Directories tab, click New. Select your TV folder in the file explorer. After you click OK, click Set as Default and then Submit at the bottom of the page.

Once you have the default TV directory set up, you can navigate to Add Shows -> Add New Show to add a TV show to your collection. Enter a full or partial show title in the search box, search for it, and then select the show you wish to monitor and download. Click next to double check the folder it will be deposited in and next again to tell SickBeard whether you want the missing episodes to be flagged as Wanted or Skipped, as well as the video quality of the download. If everything looks good, click Add. You’ll be returned to your show list and SickBeard will create the folder for the show, download the meta data, and begin looking for episodes. (If you don’t want to wait for the timer to count down to the next episode search, you can click on Manage -> Backlog Overview to force a search immediately.)

Running SickBeard on Startup: There is one final step for the SickBeard configuration process; we’re going to add a small startup script to launch SickBeard on boot. There’s no point in having an automated TV show downloader, after all, if you have to manually start it up. We’ve created enough of these startup scripts in the previous Raspberry Pi as Download Box tutorials that we’re just going to list off the commands you need to enter without a detailed step-by-step break down.

Enter the following commands at the terminal to copy the startup script, change the permissions, and update the startup files:

sudo wget -O /etc/init.d/sickbeard/ http://www.howtogeek.com/geekers/up/sshot5161b529c109d.txt

sudo chmod 755 /etc/init.d/sickbeard

sudo update-rc.d sickbeard defaults

That’s all there is to it, now you’re ready to go! Add old shows you wish you would have watched, add shows you’re currently watching, add shows that haven’t even aired yet but you’d like to watch. SickBeard will seamlessly and automatically download them all for you.

Continue reading to learn how to setup CouchPotato for automated movie downloading.

Installing and Configuring CouchPotato on Raspbian

2013-04-07_163201

If you’re exhausted from all that configuring in the previous section, take heart. SickBeard is by far the most complicated tool to configure in our roundup today. Let’s get started with CouchPotato–the movie equivalent to SickBeard’s automated TV downloading.

Installing CouchPotato: We’ve already installed all the dependencies, so let’s get right down to grabbing the source code from Git. At the terminal, enter the following command:

cd /home/pi
git clone http://github.com/RuudBurger/CouchPotatoServer.git
python CouchPotatoServer/CouchPotato.py

After you run the Python script, the cursor will just idle. If instead you get a crash dump, you’ll need to make a quick edit to allow you to turn on the web daemon and startup wizard. Only make this edit if the script crashes. At the terminal, enter the following command:

nano /home/pi/CouchPotatoServer/couchpotato/runner.py

In the script, page down until you see this section and add the line we’ve bolded:

config = {
'use_reloader': reloader,
'port': tryInt(Env.setting('port', default = 5000)),
'host': Env.setting('host', default = ''),
'ssl_cert': Env.setting('ssl_cert', default = None),
'ssl_key': Env.setting('ssl_key', default = None),
'host': Env.setting('host', default = "0.0.0.0"),
}

Save your changes and rerun the script. Once the script has run successfully, you can point your browser at the following address to get started:

http://[Your PI's IP Address]:5050/wizard/

Just like with SickBeard, we’re going to walk you through the basic setup. The relevant commands are listed by section.

Configuring CouchPotato: You can skip the Welcome section. We have no existing CouchPotato database to import (if you’re moving and old CouchPotato install to your new Raspberry Pi download box, follow the instructions and point the wizard at your old data.db)

In the General section, you can set a username and password, as well as change the port number if you wish. Uncheck “Launch Browser”.

2013-04-07_161500

In the Downloaders section, you need to either 1) set CouchPotato up to communicate with SABnzbd or 2) specify a watched folder for your torrent files to make it work with Deluge. We’re setting it up to work with SABnzbd: go ahead and leave the host alone and insert your SABnzbd API key (the same one you used for SickBeard).

You can also specify a SABnzbd category. In order to really automate the whole process, we highly recommend this step–by enabling a specific CouchPotato category, it helps the automatic renamer/file mover to work smoother.

In the Providers section, select the providers you wish CouchPotato to use. Just like with SickBeard, you’ll need to put in the login details/API keys for premium providers.

In the Renamers section, you can set up automatic file renaming/moving. This is a fantastic feature. Set the To folder to specify where you want the movies to go, check cleanup, and specify a From folder (this should be the same folder you assigned to the Movies tag in SABnzbd).

In the Automation section, you can install a GreaseMonkey script or bookmarklet that makes adding wanted movies to your CouchPotato installation from your browser easy peasy.

When you’re all done, review your settings and click the giant green button at the bottom. Although the startup wizard covers just about every relevant setting, there is one area you may want to take a peek at. The startup wizard doesn’t prompt you to set up notifications. To do so, click on the gear in the upper right hand corner and then click on Notifications in the navigation sidebar. There, just like in SickBeard, you’ll be able to turn on push notifications to a variety of systems including XBMC units, desktops with Growl notifications enabled, and even set up email notices.

Configuring CouchPotato to Start at Boot: At this point, we know you’re excited to get started plugging in your must-see movies to CouchPotato, but we have one little step left to complete before we move on. We need to set up the startup files to ensure CouchPotato launches at boot.

Open up the terminal and enter the following commands:

cd ~/
sudo cp CouchPotatoServer/init/ubuntu /etc/init.d/couchpotato
sudo chmod 755 /etc/init.d/couchpotato
sudo update-rc.d couchpotato defaults

At this point you’re all done with the configuration, and you can get down to business with your new CouchPotato installation.

Installing and Configuring Headphones on Raspbian

2013-04-07_201615

The final automation tool in our trifecta of automation goodness today is Headphones: as SickBeard is to TV and CouchPotato is to Movies, Headphones is to–you guessed it–music.

Installing Headphones: To get started, open up the terminal and enter the following command:

git clone https://github.com/rembo10/headphones.git

python headphones/Headphones.py

Configuring Headphones: Like SickBeard, there’s no installation wizard, but the settings menu is straight forward enough.  Click on the gear in the upper right hand corner of the Headphones interface to access the settings menu. We’ll go through each relevant sections one by one.

In the Web Interface section, you can add a login/password, change the port number, and turn on the Headphones API (necessary for some third party helper apps).

In the Download settings section, you need to point Headphones at your SABnzbd installation using the same information you used for SickBeard and CouchPotato (the host with port number, username and password if enabled, as well as the API key). Don’t forget to take advantage of the category function and then specify a sub-folder in your SABnzbd download folder for music. You can also, like the other automation apps, configure Headphones to use torrents if you wish.

In the Quality and Post Processing section, you can set the quality based on your preferred bit rate (or set it for lossless quality). You can also set the post processing features like automatic embedding of album art, sorting to folders, and automatic file renaming.

Finally, under Advanced Settings, there are a plethora of settings you can tinker with (although we would advise you to read carefully before wantonly toggling things on and off). You can change the renaming format, enable automatic re-encoding of audio formats, and enable notifications.

The most important setting under the Advanced Settings menu for a new Headphones user is the “Musicbrainz Mirror” option way down in the lower right corner. Leave it as it is, but if you find you’re consistently getting “fetch failed” errors when searching for artists and albums, you’ll need to come back to this section and select an alternate mirror.

When you’re all done tinkering, make sure to press Save Changes at the bottom and then Restart in the upper right hand corner for the changes to take effect.

The only other major configuration step you might consider is, if you already have a lot of music on the external drive you’re using with your Pi, setting Headphones to manage your collection. You can do so by clicking on Manage in the main navigation bar and pointing Headphones at the appropriate directory.

Configuring Headphones to Start at Boot: At this point, you’re ready to start searching and using Headphones, but like with our previous automation tools, we’re going to enable automatic startup on boot. To do so, enter the following commands at the terminal:

cd ~/headphones
sudo nano init.ubuntu

Inside the init.ubuntu files, we’re going to make two quick changes. Yes, at the top of the file it warns sternly against editing the file (but we live on the edge, and more importantly, we’re not using a dedicated user account just for headphones, so we have to make this change).

Scroll down line 29 and 30:

## HP_USER=         #$RUN_AS, [...]
## HP_HOME=         #$APP_PATH, [...]

Edit out the comment ## marks on those two lines and insert the following user name and home directory:

HP_USER=pi         #$RUN_AS, [...]
HP_HOME=/home/pi/headphones       #$APP_PATH, [...]

Press CTRL+X to exit, save your work, and then enter the following commands at the prompt:

sudo cp init.ubuntu /etc/init.d/headphones
sudo chmod 755 /etc/init.d/headphones
sudo update-rc.d headphones defaults

Headphones is now set to run on boot and the final piece of your download automation triple-attack has been put into play.


At this point, your Raspberry Pi box is a start-to-finish downloading beast that barely needs any care or feeding. We’ve walked you through installing a Usenet and BitTorrent client and with this final installment you now have three handy automation tools to make your Raspberry Pi download box has hands off as a tiny, low-power, headless micro server can be.

That said, there’s always more fun to be had with the tiny put powerful Pi–sound off with your Raspberry Pi build ideas and we’ll do what we can to bring them to life.

Jason Fitzpatrick is warranty-voiding DIYer and all around geek. When he's not documenting mods and hacks he's doing his best to make sure a generation of college students graduate knowing they should put their pants on one leg at a time and go on to greatness, just like Bruce Dickinson. You can follow him on if you'd like.

  • Published 04/9/13

Enter Your Email Here to Get Access for Free:

Go check your email!