Acpiwakeupscript

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K (Typo)
 
Zeile 1: Zeile 1:
Ich habe ein kleines Skript geschrieben das folgendes tut.
+
;Ich habe ein kleines Skript geschrieben das folgendes tut:
-lesen der /var/lib/vdr/timers.conf datei
+
* Einlesen der /var/lib/vdr/timers.conf Datei
-ermittelt den nächsten Timer
+
* ermittelt den nächsten Timer
-setze acpi Aufwachzeit.
+
* setze acpi Aufwachzeit.
-sorge dafür, dass das EPG nicht veraltet, mit einem Standard Timer.
+
* 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-1ubuntu2''getestet.
 
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-1ubuntu2''getestet.
 
Es ist noch eine Beta-Version. Verwenden Sie es nicht, wenn Sie ihm nicht vertrauen. Verhindern Sie selbst, dass Daten verloren gehen können.
 
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:
+
;To do Liste:
  -bis jetzt werden maximal nur 80 Timer in timers.conf unterstützt.
+
* 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  
+
* 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.
  runterfährt wacht er am nächsten Tag nicht auf. So das eventuell das EPG veraltet.
+
  
 
  #! /bin/sh
 
  #! /bin/sh

Aktuelle Version vom 18. September 2012, 19:09 Uhr

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)