Posts Tagged ‘ TiVo

TiVo Runarounds, Issues, and Problems

For the past few years, I have been a happy TiVo Premiere user. I own two of the boxes, a regular Premiere box as well as an XL4 Elite box. Until recently, everything was fine, until the XL4 took a major dive….

Chronology:

My XL4 started randomly missing channels, no idea why, so I call my cable company, Time Warner.

TWC sends a technician out to look at the problem. He told me everything seems alright, but since he got into a crash in his van earlier in the week, he was in a loaner van with no equipment to check anything for me. Wasted time…

It is still not working, so TWC sends out a “2nd level” technician. He replaced my cable card and tuning adapter, problem still persisted. He was able to isolate the problem to when a tuner changed channels between a switched and non-switched channel. Still no resolution.

TWC sends out their “senior technician”….he redoes some wiring, double checks that everything looks good, problem still persists….he was able to enlighten me to the fact that when a channel doesn’t come in, the TiVo will show in its diagnostics that it is trying to tune into an analog channel when in fact it should be digital. This happens with switched and non-switched channels. He told me he has seen this problem a few times around Austin, and it has only been a problem with TiVo XL4 boxes.DSC00560

So, the Time Warner is convinced everything is good on their end. By this point, I have gone through 3 cable cards and 3 tuning adapters….still no fix in sight

So, I called TiVo tech support. They think everything is fine, but ask me to RMA by XL4 for a new one. But but but, they wanted to charge me $50 to do it…..I was not so happy that TiVo wanted to charge me money to swap out a defective box that was still under warranty….so after further negotiation, I was able to get a new box free of charge.

Fast forward 3 days. New box arrives, same problem. I call TiVo, we spend an hour on the phone troubleshooting….technician admits he does not know what is wrong, but the replacement box I had received was re-manufactured, so it may be bad as well. They ship me a new XL4 off the line.

Today….new XL4 arrives….I hook it up, get it set up, problem still persists. I called TiVo Earlier today….the tech on the phone told me “My signal to the box was too high and that was the problem”. Ok, no problem…..I introduced some artificial degradation on the line by splitting it a few times. Signal went down from 100 to 88, and SNR went from 38db to 34db. Problem still persisted. I called TiVo again tonight, they finally admitted it is an issue that their engineering team is working on and there is no solution in sight.

So, 3 TWC appointments, 3 cable cards, 3 tuning adapters, 3 TiVos, and countless hours spent on the phone and my TiVo XL4 still does not work.

Update 09/04/13:

I have called TiVo tech support every 2 days for the past week. I finally found out that my problem was escalated earlier this week. I asked them what that really meant, the rep replied that “it means we have no idea what is going on, but we are going to look into it further.”….Fantastic, I’m still stuck with a broken DVR. TiVo tried to convince me it was an environmental problem in my home, but given that my regular TiVo Premiere box works perfectly in every outlet in the house and only the XL4 fails, seems to anyone with logical deduction skills that the issue lies in the software or hardware in the XL4 box. Furthermore, I asked TiVo if there was a way that I could somehow replace my XL4 with any other model comparable and pay some kind of fee to do so….the rep was quite rude and insisted it was not possible, and told me that I was stuck with my broken DVR until further notice. So much for customer service.

I know my situation may be isolated, but I cannot in good faith give any kind of recommendation to a company that not only sells a defective product, but then tries to defend its perfection in the face of overwhelming evidence, then cannot provide any kind of resolution for my issue, then refuses to provide me with any kind of other solution even when I offer financial compensation on my behalf (which shouldn’t even be required) to solve the problem.

Automapping channel numbers to TiVo commands from the Ubuntu command line

In a previous post, I described how to control your TiVo from the Linux command line. I wanted to take it a bit further and make it easier to enter numeric IR codes to my TiVo. With some pointers from Alex Lambert, I came up with a solution that works on my Ubuntu 12.04 laptop.

I am assuming you followed the instructions in the previous post and have created the following symlinks:

lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM0 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM1 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM2 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM3 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM4 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM5 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM6 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:24 NUM7 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:25 NUM8 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:25 NUM9 -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 23:32 ENTER -> tivoircode

Now, the goal here is that simply entering the command such as “1695” will send the sequence NUM1;NUM6;NUM9;NUM5 to the TiVo. This can be accomplished using the same facility that Ubuntu uses to suggest packages to install when you issue a command from a package that is not currently installed. To do this, add the following to your ~/.bashrc:

function is_integer() {
    s=$(echo $1 | tr -d 0-9)
    if [ -z "$s" ]; then
        return 0
    else
        return 1
    fi
}

command_not_found_handle() {
        if is_integer $1; then
                for NUM in `echo $1 | fold -w1`
                do
                        NUM$NUM
                done
#               ENTER
        else
                if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/bin/python /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
                   /usr/bin/python /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
                else
                   printf "%s: command not found\n" "$1" >&2
                   return 127
                fi
                fi

        fi
}

Now, when you enter an numeric integer value on your bash session, it will send it to your TiVo as a series of IR codes for each digit in the number. You can uncomment the final ENTER command if you wish for the enter button to be pressed when a number is finished being entered on the TiVo, but that is up to you. This function copies the body of the command_not_found_handle default function from /etc/bash.bashrc that ships with Ubuntu, so that non-integer commands are sent through the old mechanism and no functionality is lost.

Happy TiVo’ing

Remote control of a TiVo from the Linux command line

I’m a huge fan of TiVo brand DVRs, so much so that I own two of them for myself. That being said,  most of the time that I am watching TV, I also have my laptop open with me. Since I run Linux on my laptops, I knew there had to be a way to write a set of shell scripts to allow me to use my always open terminal to easily manipulate my TiVo.

This is the solution that I came up with:

Assume that ~/bin is on your PATH

Create ~/bin/tivoircode with the following contents:

#!/usr/bin/env python

#simple python script to send remote IR commands to a TiVo DVR
#this script should never be called directly, but rather via
#symbolic links to it
#
#Written by Charlie Meyer <charlie@charliemeyer.net>
#December 2012

import socket
import sys
import time
import os.path

#set this to the ip address of the tivo to control
tivo_address = "192.168.1.101"

sock = None

def connect():
    global sock
    global tivo_address
    try:
        sock = socket.socket()
        sock.settimeout(5)
        sock.connect((tivo_address, 31339))
        sock.settimeout(None)
    except Exception, msg:
        print msg

def disconnect():
    global sock
    sock.close()

def send_code(code):
    if not sock:
        connect()
    try:
        sock.sendall("IRCODE "+code+"\r")
        time.sleep(0.1)
    except Exception, msg:
        print msg

times = 1;
if(len(sys.argv) > 1):
    times = int(sys.argv[1])

for i in range(0,times):
    send_code(os.path.basename(sys.argv[0]))

disconnect()

This is the base script from which all others will inherit. Obviously you will need to change the variable at the top of the file to point to the IP address of the TiVo which you want to control.

Now, here comes the fun part. There are a series of symbolic links that need to be made. The name of the link is the raw IR code that is sent to the TiVo, and they all link back to the master script we just created. I have not added all of the remote functions to my environment, but rather only the ones that I regularly use:

lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:48 CLEAR -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:50 PAUSE -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:51 REPLAY -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:51 RIGHT -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:52 LEFT -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:52 UP -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:52 DOWN -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:54 PLAY -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:54 INFO -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:55 SELECT -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 21:56 ADVANCE -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:02 TIVO -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:03 WINDOW -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:04 CHANNELUP -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:04 CHANNELDOWN -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:04 THUMBSDOWN -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  3 22:04 THUMBSUP -> tivoircode
lrwxrwxrwx 1 chuck chuck   10 Dec  4 18:04 GUIDE -> tivoircode

To create each one of these, use the ln command, such as:

ln -s tivoircode PLAY

to link PLAY to tivoircode

You should now be able to use the command PLAY in your terminal to cause the TiVo to emulate a regular infrared remote control pressing the play button.

Based on research done online, the following IRCODE commands can be symlinked to my tivoricode script and work properly (should be self-explanatory):

UP
DOWN
LEFT
RIGHT
SELECT
TIVO
LIVETV
THUMBSUP
THUMBSDOWN
CHANNELUP
CHANNELDOWN
RECORD
DISPLAY
DIRECTV
NUM0
NUM1
NUM2
NUM3
NUM4
NUM5
NUM6
NUM7
NUM8
NUM9
ENTER
CLEAR
PLAY
PAUSE
SLOW
FORWARD
REVERSE
STANDBY
NOWSHOWING
REPLAY
ADVANCE
DELIMITER
GUIDE

I wanted to make it a little easier for me, since typing PLAY is probably harder than actually just pressing the play button on the physical remote. To solve this, I created a set of bash aliases that map shorthand commands to the symbolic links we just created. Here is what I added to my ~/.bashrc at the bottom:

#TiVO commands
alias info="INFO"
alias cl="CLEAR"
alias pa="PAUSE"
alias pu="PAUSE"
alias replay="REPLAY"
alias rw="REPLAY"
alias re="REPLAY"
alias down="DOWN"
alias d="DOWN"
alias up="UP"
alias u="UP"
alias left="LEFT"
alias l="LEFT"
alias right="RIGHT"
alias r="RIGHT"
alias play="PLAY"
alias pl="PLAY"
alias select="SELECT"
alias sel="SELECT"
alias ff="ADVANCE"
alias skip="ADVANCE"
alias tivo="TIVO"
alias zoom="WINDOW"
alias zm="WINDOW"
alias chup="CHANNELUP"
alias chu="CHANNELUP"
alias pgu="CHANNELUP"
alias pgup="CHANNELUP"
alias chdn="CHANNELDOWN"
alias chd="CHANNELDOWN"
alias pgdn="CHANNELDOWN"
alias pgd="CHANNELDOWN"
alias thumbsup="THUMBSUP"
alias thup="THUMBSUP"
alias thu="THUMBSUP"
alias thumbsdown="THUMBSDOWN"
alias thdn="THUMBSDOWN"
alias thd="THUMBSDOWN"
alias guide="GUIDE"
alias gu="GUIDE"

Now, i can use my TiVo from the konsole (via yakuake) that I always have running using commands such as `ff 6` to fast forward 6×30 seconds, `rw 3` to rewind 3×8 seconds, `pu` to pause, `pl` to play, etc etc etc

shoutout to Alex Lambert for his help pointing out some of the obvious to me