Hallo Leute,
die Scripte für den Daily Timer inklusive EPG Scan hatte ich für das Hardware-Wakeup Projekt gemacht. Gegenüber vielen anderen Scripten wird hier jeder Transponder nur einmal angesprungen.
Ich habe mir zunächst mal die VDR Sourcen angeschaut um sehen, was der Meister gemacht hat.
Bei zwei Karten gibts da nicht viel zu tun. Sobald eine sekundäre Karte frei ist, werden nach 60 Sekunden alle Kanäle im Abstand von 20 Sekunden einmal angewählt. Dabei werden Kanäle auf Frequenzen die schon mal gewählt wurden übersprungen (nach RTL werden RTL2 und SuperRTL übersprungen).
Bei nur einer Karte gibt es zwei Probleme. Es wird zunächst die "Zeit bis EPG Scan (h)", also mindestens eine Stunde, gewartet. Dann muß die Karte auch noch frei sein. Leider musste ich feststellen, das schon das Plugin osdteletext die Karte belegt. Also wären hier diverse Patches an der Originalsoftware nötig. Da wohl nur die wenigsten den VDR selbst compilieren habe ich mich dann doch dagegen und für ein simples Script entschlossen.
Hier also die Früchte der Arbeit:
README:
Scripts für Hardware-Wakeup von Frank Jepsen
---------------------------------------------
Die Scripte sind unter der c't Distribution entwickelt und getestet,
sollten sich aber auch unter anderen Distributionen oder mit NVRAM einsetzen lassen.
shutdown90.wakeup-module.sh
-> nach /usr/share/vdr/shutdown-hooks kopieren
Bei anderen Distributionen mit "-s" an VDR übergeben oder
bei LinVDR in poweroff.pl einbauen, vielleicht so:
system(sprintf("/usr/share/vdr/shutdown90.wakeup-module.sh %s", $Next));
Parameter:
# Comport an dem hw-wakeup angeschlossen ist
WAKEUP_PORT=/dev/ttyS0
# LIRC vorher abschalten
KILL_LIRC=yes
# Minuten, die der PC vor Beginn der Aufnahme gestartet werden soll
MIN_PRE_TIMER=5
# Wer z.B. die Auto-Timer-Funktion von VDR verwendet, kann hier die maximale
# Auszeit (in Minuten) einstellen, nach der sich der Rechner wieder
# einschaltet, auch wenn bis dahin kein Timer aktiv ist.
# (0 = Keine Max. Auszeit verwenden)
MAX_POWEROFF_TIME=0
# Wenn folgende zwei Zeilen auskommentiert werden wird
# der VDR jeden Tag um 4:30 gestartet und macht einen EPGScan
DAILY_TIMER_STD=4
DAILY_TIMER_MIN=30
epgscan.sh
-> nach /usr/share/vdr kopieren
In runvdr vor starten des VDR folgenden Befehl einfügen:
/usr/share/vdr/epgscan.sh &
Macht einen EPG Scan, wenn es zwischen DAILY_TIMER bis DAILY_TIMER + EPG_STARTMIN
gestartet wird. Nach einer Wartezeit von EPG_WAIT_BEFORE_START werden alle
Sender zwischen 1 und EPG_MAX_CHANNEL einmal für EPG_TIME_PER_CHANNEL eingeschaltet.
Anschließen wird der VDR wieder runtergefahren.
Parameter:
# Zeit in der EPGScan aktiviert wird DAILY_TIMER bis DAILY_TIMER + EPG_STARTMIN
EPG_STARTMIN=5
# Wartezeit vom Starten des EPGScan Scrips bis der VDR hochgefahren
# ist und mit dem Umschalten begonnen werden kann
EPG_WAIT_BEFORE_START=30
# EPGScan von Kanal 1 bis 50
EPG_MAX_CHANNEL=50
# Zeit zwischen den einzelnen Umschaltvorgängen
EPG_TIME_PER_CHANNEL=20
vdr-addon-hw-wakeup.conf
-> nach /etc/vdr kopieren
hier sind die Parameter der Scripte shutdown90.wakeup-module.sh und
epgscan.sh enthalten
testwakeup.sh
zum Testen des Wakeup-Moduls
svdrpsend.pl
-> nach /usr/share/vdr kopieren
ist Bestandteil der c't Distribution aber in anderen vielleicht
nicht vorhanden
Alles anzeigen
epgscan.sh:
#!/bin/bash
#!/bin/bash
# epgscan.sh by Frank Jepsen
#
# Scans for EPG Data on first channels via svdrpsend.pl
#
# Add a call like this to the start of the runvdr script:
# /usr/share/vdr/epgscan.sh &
#
# You can test by adding any single parameter e.g. "test"
# By doing this only a scan is performed
CONFFILE="/etc/vdr/vdr-addon-hw-wakeup.conf"
VDRCONFFILE="/etc/vdr/setup.conf"
SVDRPSEND="/usr/share/vdr/svdrpsend.pl"
CHANNELCONF="/etc/vdr/channels.conf"
LOGFILE="/var/log/epgscan.log"
LOG()
{
logger -t epgscan $1
}
LOGF()
{
logger -t epgscan -f $1
}
# read arguments from conf-file
if [ -e $CONFFILE ]; then
LOG "Using ConfFile $CONFFILE."
. $CONFFILE
else
LOG "ConfFile $CONFFILE not found. Using defaults."
fi
# Get old Channel
OldChannel=`cat $VDRCONFFILE | grep "^CurrentChannel" | awk -F= '{print$2}'`
[ -z "$EPG_MAX_CHANNEL" ] && export EPG_MAX_CHANNEL="50"
[ -z "$EPG_TIME_PER_CHANNEL" ] && export EPG_TIME_PER_CHANNEL="20"
[ -z "$EPG_STARTMIN" ] && export EPG_STARTMIN="5"
[ -z "$EPG_WAIT_BEFORE_START" ] && export EPG_WAIT_BEFORE_START="30"
# Testmode
if [ "$1" ]
then
LOG "Testmode"
DAILY_TIMER_STD="0"
DAILY_TIMER_MIN="0"
TESTMODE="1"
fi
if [ -z $DAILY_TIMER_STD ] || [ -z $DAILY_TIMER_MIN ]
then
LOG "No Daily Timer specified."
else
# only start within EPG_STARTMIN minutes after DAILYTIMER
NOW=$((`date +%s`))
DAILYTIMER=`expr $NOW / 86400 \* 86400 - 7200 + $DAILY_TIMER_STD \* 3600 + $DAILY_TIMER_MIN \* 60`
if [ $TESTMODE ] || [ $NOW -gt $DAILYTIMER ]
then
DAILYTIMER=`expr $DAILYTIMER + $EPG_STARTMIN \* 60`
if [ $TESTMODE ] || [ $DAILYTIMER -gt $NOW ]
then
# Let VDR start completely before starting to scan
sleep $EPG_WAIT_BEFORE_START
Channel="0"
for Freq in `cat $CHANNELCONF | egrep -v -e "^:" | awk -F: '{print$2}' `
do
Channel=`expr $Channel + 1`
LOG "Channel:$Channel Freq:$Freq"
if [ -z ${ScannedFreq[$Freq]} ]; then
$SVDRPSEND CHAN $Channel > $LOGFILE
LOGF $LOGFILE
ScannedFreq[$Freq]="1"
sleep $EPG_TIME_PER_CHANNEL
fi
if [ $Channel -eq $EPG_MAX_CHANNEL ]; then
break
fi
done
# switch to previous channel
$SVDRPSEND CHAN $OldChannel > $LOGFILE
LOGF $LOGFILE
sleep 5
# shutdown VDR
if [ -z $TESTMODE ]
then
$SVDRPSEND HITK Power > $LOGFILE
LOGF $LOGFILE
fi
else
LOG "Not started in DailyTimer StartWindow"
fi
else
LOG "Not started in DailyTimer StartWindow"
fi
fi
Alles anzeigen
Aktuelle Scripte findet ihr hier: http://www.jepsennet.de/vdr/html/download.html
Tschüß Frank