How to ensure Set-Top-Box (STB) is Powered On?
STB - in most cases, Set Top Boxes are the boxes the Cable/DishTV companies leave at your place with a remote control for you to flip channels. STBs are external, and in case of models like mine, there appeared to be no reliable method to ensure that it is powered on (Like in case of small power disruption. The computer would probably boot back up, but what about the dumb STB?. Read more about the uncertainity here in this thread. Or, here.)
I initially proposed something naive like this (alt link here) and went on to finalize this working script.
Requisites:
You will need ffmpeg and jp2a installed. On my Ubuntu 7.10, they were installed by running:
sudo apt-get install jp2a ffmpeg |
check_stb (link)
#! /bin/bash # Authored by Evuraan_AT_gmail_DOT_com # ABSOLUTELY NO WARRANTY, to the extent permitted by # applicable law. # YMMV. # Use at your own risk. pvr="/dev/video0" t="$RANDOM-$RANDOM" out="/tmp/$t.mpg" mark="1727" blank="0" say="/usr/bin/logger -p info -t mythstb-check" POWEROFF="0" POWERON="0" wakeup="/usr/local/bin/irsend SEND_ONCE blaster1 POWER" info="/usr/local/bin/irsend SEND_ONCE blaster1 DISPLAY" send_power_on() { $say "`date` STB seems to be turned off, last count was $blank, attempting to Power it on" & $wakeup 1>/dev/null 2>/dev/null || : sleep 2 } scan_images(){ for i in `echo /tmp/$t*.jpeg` do if [ -s "$i" ] then #blank="`jp2a $i --invert --size=72x24 | sed -e 's/./& \n/g'|grep -c "M"`" blank="`jp2a $i --invert --size=72x24 | sed 's/W/M/g' | sed -e 's/./& \n/g'|grep -c "M"`" rm -f "$i" 1>/dev/null 2>/dev/null || : else : fi [ "$blank" -gt "$mark" ] && export POWERON="100" [ "$blank" -le "$mark" ] && export POWEROFF="100" done if [ "$POWERON" -eq "100" -a "$POWEROFF" -ne "100" ] then # its off send_power_on else # power is on, non blank frames $say "`date` STB seems to be turned on, last count was $blank" : fi } purge_stuff(){ [ -f "$out" ] && rm -f "$out" 1>/dev/null >/dev/null || : } #ivtv-tune -c 3 -d "$pvr" 1>/dev/null 2>/dev/null & cd /tmp $info & dd if="$pvr" of="$out" bs=64K count=2 1>/dev/null 2>/dev/null if [ -s "$out" ] then ffmpeg -i $out -f image2 -vcodec mjpeg /tmp/$t%d.jpeg 1>/dev/null 2>/dev/null [ -s "/tmp/${t}1.jpeg" ] && scan_images else $say "`date` Unable to query $pvr, as it seems to be in use." : fi purge_stuff & |
The Idea:
The idea is pretty simple - read from your ivtv device using dd. ffmpeg then converts them into jpeg files (1 per frame). jp2a analyses each of those frames to check whether they're blank or not.
Implementation:
I placed this in my channel change script (example ), so mythtv ensures that the STB is powered on before changing channels. You can also cron it, but it is better to call this in the beginning of your channel change script, as that way, you have a higher chance of unhindered read access to $pvr.
This can be downloaded to your machine as:
wget http://evuraan.info/evuraan/check_stb.txt -O /tmp/check_stb
To suite specific needs/situations, one may accordingly need to change the parameters pvr, mark and wakeup.
Feedbacks are welcome.