CARMA dish array


A feedhunter's visualisation tool.


In the nineties, I  ran a company called AL Digital, with my partners Ben Laurie and Dominic Hawken. Our business involved, amongst other things, recording voice-overs and other audio for AV projects, and so we built ourselves a studio in our Chiswick office. Dominic was also a musician, and he had various projects going on which involved visiting bands and other musicians, so we decided we needed a Green Room for them to hang out in. This, of course, needed some form of entertainment in it, so we had a TV with a playstation and satellite feed etc. Since we had a flat roof, and as Chiswick is on a slight hill and we were the tallest building around, we had  a clear view of the sky from East to West, so we decided to put up a steerable dish for the satellite instead of one that only pointed at Astra as would have been normal...

While setting up the satellite channels, we quickly discovered the joys of 'feedhunting'. This is the process of steering your dish to every satellite it can see, and searching for 'feeds'. A 'feed' is a channel that is being used by the broadcasters to provide raw footage back to the studio, and is not intended for direct consumer consumption. For example, an outside broadcast van at a boxing match would 'feed' the fight back to the studio via a dedicated transponder, where it would have all the graphics and cuts between cameras added before broadcast.  It could also be a test channel, or a private service that would not normally be listed in your TV guide.

However, the process was time consuming and frustrating. Basically, it's like tuning your old analogue TV for the first time, only with thousands of channels to choose from. You point the dish at a satellite and tell the receiver to scan for transponders/channels, and then flick through them looking for something 'interesting'. After doing this for several hours you'll be ready for the loony bin (or a cold shower)!

Happily, the receiver was reasonably high-end and had an external interface so it could be computer controlled. Unhappily, it was a proprietary interface and the manufacturers were reluctant do disclose it's inner workings, but we eventually found a distributor that had a converter which made it into RS232 serial, and we were in business... The protocol allowed us to send tuning and steering commands, and read back signal characteristics so we were able to automate the whole process up to a point. Effectively, we could steer the dish and search for signals.

Ben wrote some code that produced this graphic by pointing the dish at each possible location and scanning all available frequencies:


The X-Axis is the stepper motor position, and the Y-Axis the frequency in MHz. The red represents a signal with LOCK, and white signal a without LOCK.

This, then, is a 'map' of what our dish can see. Each column represents a satellite, and each blob within the column a transponder.

The beauty of this is that you can now instantly see what's going on instead of having to punch meaningless numbers into a receiver and hope for the best. For example, at 5230 we can see a series of transponders that runs almost uninterrupted from 10.7MHz to 12.9MHz. This is clearly a commercial satellite with lots of channels. Compare that to the ones at 5150 or 5560: these both only have one transponder at around 11.7MHz, so are, by the nature of the fact that they are out there on their own, 'interesting', and would be almost impossible to find with traditional feedhunting methods.  We still had to go and inspect each 'interesting' signal by hand, but it was a good start.

We planned to create an interface that allowed you to point and click at the interesting blobs which would then automatically steer and tune, but 'real' work got in the way, and the project stalled. Eventually we moved out of the Chiswick office, and the kit was dismantled and forgotten.

A good ten years later, I saw Jim Geovedi's talk 'Hacking a bird in the sky'. In it, he calls for anyone with similar experiences to come forward and talk about them, and it reminded me of this project, so I decided to see if I could revive it. The kit was long gone, and in any case things had moved on technically, so I decided to start again and see what could be done with modern hardware. As luck would have it, my own home satellite receiver (a Dreambox 7020) turned out to be an embedded Linux box, and therefore gave me access to the same kind of data as the RS232 interface on our original receiver. A visit to my local TV supplier followed, and I soon had a steerable dish on my roof and was ready to go.

After some experimentation I figured out how to drive the Dreambox via it's HTTP user interface, and wrote some code that did a similar job to the original project, but produced a 3D model as the basis of the GUI:

3D skymap

One of the things that came out of the Dreambox version was the ability to receive not only Video & Audio, but also Data, and in 2008 I gave a talk at DEFCON 16 that explained this in a bit more detail. Updated slides are here.

However, this also proved to be a somewhat unsatisfactory approach: the Dreambox is a PowerPC running Tuxbox Linux, so tools need to be cross-compiled and copied across, which makes development slow/painful. You also need to disable the main processes to stop it constantly trying to tune to whatever channel it thinks you are currently watching, so you're constantly having to reconfigure/reset it and generally fight for control. Again, a reasonable start, but not the ideal solution, so, again, the project languished.

In early December 2009, news started to break of video feeds being leaked from combat UAVs in Iraq (Wall Street Journal article). This would be the kind of feed I would describe as 'interesting', so my curiosity was once again aroused...

During the Christmas 2009 break, I decided to take another look, only this time using a dedicated DVB card for a PC. That would allow me to have complete control, and I should be able to do  anything I liked. I looked around, and the hardware/software available is very comprehensive (see LinuxTV), so this was clearly the way to go. I was going to take a similar approach to the Dreambox version, in that I would use existing tools to provide me with data and just write a front end visualiser, but I soon found limitations that basically meant I would need to modify those tools to perform specific functions, so I would again be fighting against my environment, which was Bad(tm).

So 'skymap' was born...


The main objective is to recreate the original project, coded entirely in python, and without depending on too many existing abstraction layers. Even though there are probably libraries out there that would provide me with a python DVB API, I prefer to write it from scratch, as that leads to a much better understanding of what goes on at the low level. By writing longhand code 'idiot style', as I normally do, it will also be much clearer what is going on (I hope! :)

What I plan to end up doing is:



Code can be found here:

This version scans the frequency range supported by your hardware, at the maximum resolution supported by your hardware. It will output a file called "test.txt", which can be viewed with the very basic GUI. In the GUI, click on a coloured section to see what it is.

If you are able to beta-test, please get in touch and send me feedback! adam (at)


Anything that's supported by the DVB API should be fine, but for the impatient, this is the kit I'm using. It's not necessarily the best, it's just what I happened to end up with, so if you find better combinations please let me know!

  Receiver card: Hauppauge WinTV-NOVA-SE2
  Dish (the bigger the better!): 90cm Dish
  LNB: Single Sat LNB
  Dish Motor:  Diseqc Motor


satmap gui screenshot
Jan 2010 - current version of gui with a single satellite scan (Astra 2D)

external links - Figure out which satellites have beams onto your location. - and if your dish can see them.

Copyright (c) 2010 Adam Laurie. Page last updated Friday 26th February, 2010.