I wanted to be able to set up my rotor positions without having to revert to unplugging and re-plugging a standard sat receiver, and just do everything from the command line, so I resurrected an old
project of mine:
http://www.alcrypto.co.uk/satmap/
This has a python command line utility called 'diseqctool.py' which allows you to not only steer your dish, but also to search for specific feeds and center the dish on the strongest signal. I use this
in conjunction with the GOTOX steering mode. Source code lives here:
https://github.com/AdamLaurie/satmap
Running the command with no arguments gives you the help:
$ ./diseqctool.py
Usage: ./diseqctool.py <COMMAND> [ARG(s)] ... [<COMMAND> [ARG(s)] ... ]
Commands:
ADAPTER <#> Set DVB adapter no (Default is 0)
DEMUX <DEVICE> Set DVB Demux device (default is '/dev/dvb/adapter0/demux0')
EAST <'STEP'|'TIME'> <#> Drive EAST for # steps or seconds (TIME 0 drives to end stop)
FE <DEVICE> Set DVB Front End device (default is '/dev/dvb/adapter0/frontend0')
FIND <FREQ> <'H'|'V'> <RATE> <'EAST'|'WEST'> Find and centre on active signal
FREQ <FREQ> Set Frequency in Hz (default is 10700000)
GOTO <#> Goto stored satellite position #
INFO Show Front End device info
LIMIT <'EAST'|'WEST'> Set EAST or WEST motor drive end stops
POLARITY <'H'|'V'> Set Horizonal or Vertical polarity (default is 'H')
POWER <#> Power up positioner motor for # seconds
SCAN <TYPE> <'EAST'|'WEST'> <STEPS> <LOGFILE> Perform frequency scan and log results
SIGNAL Show current status of receiver
STATUS Show current status of positioner motor
STEER <DEGREES> <'EAST'|'WEST'> Steer to angle - e.g. 13.0 EAST for HotBird
STOP Stop positioner motor
STORE <#> Store current position as satellite #
SYMBOL <RATE> Set Symbol Rate (default is 22000000)
TUNE Tune DVB Receiver (default is 10700000 Hz, Horizontal, Symbolrate 22000000)
WEST <'STEP'|'TIME'> <#> Drive WEST for # steps or seconds (TIME 0 drives to end stop)
Commands will be executed sequentially and must be combined as appropriate.
Note that not all cards provide power all the time, so you may need to bracket
steering commands with POWER to enable motor - e.g.
./diseqctool.py power 5 west step 50 power 30
Timings will vary with equipment, but as there is no way for Diseqc 1.x compliant
hardware to tell when a positioning command has finished, you must ensure that
power is made available for the maximum possible duration of any movement. EAST/WEST
STEP command are self powering (# + 1 seconds).
and here is an example of setting up a satellite (Hotbird at 13.0 East):
First, go to your tvheadend control panel and disable your sat receiver card so that the python script can control it.
Now we can check that we can talk to the card (I have 4 TV tuners and a sat receiver, so my sat card is adapter number 4):
$ ./diseqctool.py adapter 4 info
Setting adapter to 4 (/dev/dvb/adapter4) OK
Device: /dev/dvb/adapter4/frontend0
Name: STV090x Multistandard
Type: QPSK (DVB-S)
Min Freq: 950.000 MHz (10700000)
Max Freq: 2150.000 MHz (12750000)
Freq Step: 0.0 MHz
Freq Tolerance: 0.0 MHz
Min Symbol Rate: 1 MSym/s (1000000)
Max Symbol Rate: 45 MSym/s (45000000)
Symbol Rate Tolerance: 0 ppm
Notifier Delay: 0 ms
Capabilities: Auto inversion
Auto FEC
QPSK
2G modulation
The first thing I'll do is steer to a known position - this could either be a satellite that's already configured, or as in this case, the specific location the satellite should be - 13.0 degrees east:
$ ./diseqctool.py adapter 4 power 5 steer 13.0 east power 30
Setting adapter to 4 (/dev/dvb/adapter4) OK
Powering motor for 5 seconds - OK
Steering to 13.00 EAST - OK
Powering motor for 30 seconds - OK
Note that I apply power before and after the STEER command to ensure the rotor is active throughout.
Now I can start looking for the new satellite... First I find it on SatBeams:
http://www.satbeams.com/channels
and pick a frequency that is likely to be transmitting. It doesn't need to be FTA as we only want to lock onto the signal, not decrypt it.
In this case, there is a transponder on 11727000 with vertical polarity and a symbol rate of 27500000...
I know that my satellite dish is not correctly zeroed, and that I'm pointing about 28 steps East, so I will search Westward for my new bird:
$ ./diseqctool.py adapter 4 find 11727000 v 27500000 west
Setting adapter to 4 (/dev/dvb/adapter4) OK
Finding transponder with frequency 11727000 WESTwards
Found after 23 steps
signal strength: 33422
signal strength: 33422
signal strength: 33422
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 34078
signal strength: 33422
signal strength: 33422
signal strength: 33422
strongest signal was 34078
seeking back to that level...
stepping another 5 steps to centre
I also know from previous tests that I have about 6 steps per degree, so if the number of steps is getting too high for the satellite's actual position, I can abort and try again on a different frequency.
Now we seem to have found the satellite, we can verify it by looking at some data:
$ ./diseqctool.py adapter 4 freq 11727000 polarity v symbol 27500000 tune signal
Setting adapter to 4 (/dev/dvb/adapter4) OK
Setting Frequency to 11727000 - OK
Setting Polarity to Vertical - OK
Setting Symbol Rate to 27500000 - OK
Tuning receiver to 11727000 Hz, Vertical, Symbolrate 27500000 - OK
Status: Signal detected
Carrier detected
FEC is stable (VITERBI)
Found sync bytes
Signal locked
BER: 0
SNR: 20359
STRENGTH: 33422
Frequency: 1127000
Spectral Inversion: Auto Inversion
Symbol Rate: 27500000
FEC: FEC Auto
$ dvbsnoop -adapter 4 0x0010|grep -i orbital
Orbital_position: 304 (= 13.0)
and we can see that we have a good signal, and in the dvbsnoop data our orbital position is indeed 13.0, so we're definitely looking at the right satellite!
Finally, I store the new sat in position 13:
$ ./diseqctool.py adapter 4 store 13
Setting adapter to 4 (/dev/dvb/adapter4) OK
Storing position as satellite no. 13 - OK
and I can go back to my tvheadend config, set up a new network for Hotbird 13 and a GOTOX sat feed for it and we're done!
I hope this is useful, and please feel free to send me any feedback via the github page.
cheers,
Adam