Difference between revisions of "Script - SKY channel changer"

From MythTV Official Wiki
Jump to: navigation, search
m (SKY channel changer script moved to Script - SKY channel changer: Created a "scripts" howto section which this should be apart of.)
Line 7: Line 7:
 
* sleep 2 seconds to let the channel change happen
 
* sleep 2 seconds to let the channel change happen
 
* send a couple of BACKUPs to clear the show info banner
 
* send a couple of BACKUPs to clear the show info banner
 +
 +
You can achieve faster and more reliable channel changes on sky hardware by using a wired solution instead of infra-red. The [[UK_Television#Sky.2FSky.2B_Box]] page lists several options.
  
 
<pre><nowiki>
 
<pre><nowiki>

Revision as of 21:17, 6 May 2008

Here's a channel changer script for Sky in the UK. It cooperates with SKY dog remover script.

My box occasionally misses a digit so this is thorough:

  • send a couple of BACKUPS to clear things out.
  • wait a second
  • do it again
  • sleep 2 seconds to let the channel change happen
  • send a couple of BACKUPs to clear the show info banner

You can achieve faster and more reliable channel changes on sky hardware by using a wired solution instead of infra-red. The UK_Television#Sky.2FSky.2B_Box page lists several options.

#!/usr/bin/perl -w

use ir;

my $chan=join(" ", split(//,$ARGV[0]));

get_lock || die "No lock : $!\n";

print "Sending $chan\n";
system "irsend SEND_ONCE SKY BACKUP BACKUP $chan";
sleep 1;
system "irsend SEND_ONCE SKY BACKUP BACKUP BACKUP";
sleep 1;
system "irsend SEND_ONCE SKY BACKUP BACKUP $chan";
sleep 2;
system "irsend SEND_ONCE SKY BACKUP";

clear_lock;

I install this as /usr/local/bin/change_channel

It uses ir.pm:

# a couple of useful utility functions for locking during IR activity
use Fcntl;

my $MAX_TRIES = 10;
my $LOCK_FILE="/tmp/ir_lock";

sub get_lock() {
  my $tries = 0;
  while (-f $LOCK_FILE && $tries < $MAX_TRIES ) {
    sleep 1;
    $tries ++;
  }
  return 0 if $tries == $MAX_TRIES ;
  sysopen(IR_LCK, $LOCK_FILE, O_RDWR | O_EXCL | O_CREAT) || return 0;
  return 1;
}

sub clear_lock() {
    close IR_LCK;
    unlink($LOCK_FILE);
}

1;

This is installed as /usr/local/lib/site_perl/ir.pm

Ask if you have any problems --David Greaves