LinHES Forums http://forums.linhes.org/ |
|
Script for identifying HDHomeRun cable lineup changes http://forums.linhes.org/viewtopic.php?f=3&t=18220 |
Page 1 of 1 |
Author: | hari [ Sat Apr 26, 2008 3:39 pm ] |
Post subject: | Script for identifying HDHomeRun cable lineup changes |
Comcast did it to me again - moved the broadcast HD channels around, so I had to rescan them using mythtv-setup. I wrote a script that I run every morning to scan the channels, and compare to an existing list. Any differences are printed out. So hopefully, this will allow me to know if I need to rescan before I find out by getting a zero length recording. To use it, you would first create a reference scan file named scan0.txt.old using Code: hdhomerun_config FFFFFFFF scan /tuner0 scan0.txt.old This takes about 10 minutes. Keep this file around. Then when you want to run this script, create another scan file using hdhomerun_config, then use the two scan file names as arguments to this script. Code: hdhomerun_config FFFFFFFF scan /tuner0 scan0.txt python compare_scan.py scan0.txt.old scan0.txt Any differences get printed out like this: Code: Didn't find 101 1 67.2 MPT Sel Didn't find 101 2 13.1 PN-2 Didn't find 101 3 67.3 MPT V-M Didn't find 101 6 67.1 MPTHD Comments and improvements are welcome. Code: #!/usr/bin/env python
import os import string import sys class Channel: def __init__(self, channel, program, name): self.channel= int(channel) self.program = int(program) self.name = name def __cmp__(self, other): if (self.channel < other.channel): return -1 if (self.channel > other.channel): return 1 if (self.program < other.program): return -1 if (self.program > other.program): return 1 return cmp(self.name, other.name) def str(self): return str(self.channel) + " " + str(self.program) + self.name def read_channel_scan(file): f = open(file) lines = f.readlines() f.close() channels = [ Channel(0, 0, '0') ] for l in lines: this_line = l.split() if (this_line[0] == "SCANNING:"): channel_str = this_line[2] this_channel = channel_str[0:-1].split(':')[1] if (this_line[0] == "PROGRAM:"): this_line = l.split(':') this_program = this_line[1] if (len(this_line) > 2): this_name = this_line[2][:-1] hdchan = this_name.split()[0] if (hdchan != "0.0" and hdchan != "1008.0"): channels.append(Channel(this_channel, this_program, this_name)) channels = channels[1:] channels.sort() return channels def write_channel_scan(channels, file): f = open(file, "w") for c in channels: f.write(c.str()+"\n") f.close() def compare_channel_scan(channels0, channels1): if (len(channels0) != len(channels1)): print "lists are of different lengths: ", len(channels0), ", ", len(channels1) for c0 in channels0: found = 0 for c1 in channels1: if (c0 == c1): found = 1 break if (found == 0): print "Didn't find ", c0.str() if __name__ == "__main__": # Create channel scan if (len(sys.argv) < 3): print 'Usage:' print '\tTo compare two scan files:' print '\t\t', sys.argv[0], ' scan0.txt.old scan0.txt' if (len(sys.argv) == 3): channels0 = read_channel_scan(sys.argv[1]) channels1 = read_channel_scan(sys.argv[2]) compare_channel_scan(channels0, channels1) |
Author: | Too Many Secrets [ Sat Apr 26, 2008 4:11 pm ] |
Post subject: | |
This looks real nice. Have you tried running it from cron maybe with the idle.sh script? I was thinking of bumping any changes to an email. That way I don't have to babysit the script, but it tells me when it needs my attention. |
Author: | hari [ Sun Apr 27, 2008 10:37 am ] |
Post subject: | |
I do run it from a cron job on my main desktop. Since the HDHomeRun is just a device on the network, you don't have to run this script from the myth box! |
Page 1 of 1 | All times are UTC - 6 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |