Acpiwakeupscript
Aus VDR Wiki
- Ich habe ein kleines Skript geschrieben das folgendes tut
- Einlesen der /var/lib/vdr/timers.conf Datei
- ermittelt den nächsten Timer
- setze acpi Aufwachzeit.
- sorge dafür, dass das EPG nicht veraltet, mit einem Standard Timer.
Es verwendet die ACPI aufwachen Funktionalität des Kernels. Ich habe es mit ubuntu 8/04, Standard-Kernel 2.6.24-19-generic, vdr-1.6.0-1ubuntu2getestet. Es ist noch eine Beta-Version. Verwenden Sie es nicht, wenn Sie ihm nicht vertrauen. Verhindern Sie selbst, dass Daten verloren gehen können.
- To do Liste
- bis jetzt werden maximal nur 80 Timer in timers.conf unterstützt.
- wenn kein Timer eingestellt ist und wenn Computer wiederum am letzten Tag des Monats herunterfährt, wacht er am nächsten Tag nicht auf. So das eventuell das EPG veraltet ist.
#! /bin/sh
#
# vdr-shell-acpiwakeup:
# usage execute as root via a contab or runlevel
#
################### Configuration ####################
TIME_TO_BOOT=4
TIME_TO_DOWN=3
################## Functions ########################
get_default_timer(){ #default timer to keep epg up to date
TODAY=`date +%d`
TOMORRO=`expr $TODAY + 1` #should changed because of the last day of the month!
YEAR=`date +%Y%m`
TIME="1900"
NEXT_TIMER="$YEAR$TOMORRO$TIME"
echo "Default Timer is (JJJJMMDDHHhhmm): $NEXT_TIMER"
}
get_next_wakeup_timer()
{
if [ `echo $(du -b /var/lib/vdr/timers.conf) | awk '{print $1}'` -gt "0" ];then
i=1
while [ $i -le 80 ];do #get the closest timer (max 80 is an improvement) sould be something like: for line in file do...
STRING=`head -n $i /var/lib/vdr/timers.conf|tail -n 1`
DATE=`echo $STRING | awk -v FS=":" '{print $3}'`
if [ `echo $DATE | grep M` ] || [ `echo $DATE | grep D` ] || [ `echo $DATE | grep F` ] || [ `echo $DATE | grep S` ];then #yet no week days in timers!
echo "Do not use days of timers, yet!"
DATE=`date +%Y-%m-%d`
echo "To prevent loosing a timer I will use fallback date: $DATE (today)"
fi
TIME=`echo $STRING | awk -v FS=":" '{print $4}'`
HOUR=`echo $TIME | cut -b 1-2`
MINUTES=`echo $TIME | cut -b 3-4`
NEW_TIMER=`echo $DATE | tr -d '[=-=][:blank:]'`$TIME
if [ $NEXT_TIMER -gt $NEW_TIMER ] && [ `expr $NEW_TIMER - $TIME_TO_DOWN - $TIME_TO_BOOT` -gt `date +%Y%m%d%H%M` ];then #keep the newest, but prevent setting past timers
echo "TAKE_TIMER $i (JJJJMMDDHHhhmm): $NEW_TIMER"
NEXT_TIMER=$NEW_TIMER
fi
i=`expr $i + 1`
done
echo "Now it is (JJJJMMDDHHhhmm): `date +%Y%m%d%H%M`"
echo "NEXT_TIMER selected (JJJJMMDDHHhhmm): $NEXT_TIMER"
fi
}
convert_timer_to_acpi_format()
{
#convert NEXT_TIMER to acpi format
YEAR=`echo $NEXT_TIMER | cut -b 1-4`
MONTH=`echo $NEXT_TIMER | cut -b 5-6`
DAY=`echo $NEXT_TIMER | cut -b 7-8`
HOUR=`echo $NEXT_TIMER | cut -b 9-10`
MINUTES=`echo $NEXT_TIMER | cut -b 11-12`
if [ $MINUTES -le $TIME_TO_BOOT ];then
HOUR=`expr $HOUR - 1`
MINUTES=`expr $MINUTES + 60 - $TIME_TO_BOOT`
else
MINUTES=`expr $MINUTES - $TIME_TO_BOOT`
fi
BIOS_STRING="$YEAR-$MONTH-$DAY $HOUR:$MINUTES:00"
}
set_bios_wakeup_time()
{
echo $BIOS_STRING > /proc/acpi/alarm
echo $BIOS_STRING > /proc/acpi/alarm
echo -n "BIOS ACPI TIME WAS SET TO: "
cat /proc/acpi/alarm
}
#################### Main #############################
get_default_timer
get_next_wakeup_timer
convert_timer_to_acpi_format
set_bios_wakeup_time
echo "Please check the set of timers and make suggestions to (jonas - bergel (at) gmx (point) de)"
exit 0
--jonasbergel 13:19, 15. März 2009 (CEST)