Acpiwakeupscript

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K
K (Typo)
 
(2 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
Ich habe ein kleines Skript geschrieben das vollgendes 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 50 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 runterfährt wacht er am nächsten Tag nicht auf. So das eventuell das EPG veraltet.
+
* 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
 
  #! /bin/sh
Zeile 19: Zeile 19:
 
  ################### Configuration ####################
 
  ################### Configuration ####################
 
  TIME_TO_BOOT=4
 
  TIME_TO_BOOT=4
  TIME_TO_DOWN=2
+
  TIME_TO_DOWN=3
DEFAULT_WAKEUP_TIME="1900"      #hhmm
+
 
   
 
   
 
  ################## Functions ########################
 
  ################## Functions ########################
Zeile 28: Zeile 27:
 
     TOMORRO=`expr $TODAY + 1` #should changed because of the last day of the month!
 
     TOMORRO=`expr $TODAY + 1` #should changed because of the last day of the month!
 
     YEAR=`date +%Y%m`
 
     YEAR=`date +%Y%m`
     NEXT_TIMER="$YEAR$TOMORRO$DEFAULT_WAKEUP_TIME"
+
    TIME="1900"
 +
     NEXT_TIMER="$YEAR$TOMORRO$TIME"
 
     echo "Default Timer is (JJJJMMDDHHhhmm): $NEXT_TIMER"
 
     echo "Default Timer is (JJJJMMDDHHhhmm): $NEXT_TIMER"
 
  }
 
  }
Zeile 36: Zeile 36:
 
   if [ `echo $(du -b /var/lib/vdr/timers.conf) | awk '{print $1}'` -gt "0" ];then
 
   if [ `echo $(du -b /var/lib/vdr/timers.conf) | awk '{print $1}'` -gt "0" ];then
 
     i=1
 
     i=1
     while [ $i -le 50 ];do                         #get the closest timer (max 50 is an improvement)
+
     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`
 
  STRING=`head -n $i /var/lib/vdr/timers.conf|tail -n 1`
 
  DATE=`echo $STRING | awk -v FS=":" '{print $3}'`
 
  DATE=`echo $STRING | awk -v FS=":" '{print $3}'`
Zeile 48: Zeile 48:
 
  MINUTES=`echo $TIME | cut -b 3-4`
 
  MINUTES=`echo $TIME | cut -b 3-4`
 
  NEW_TIMER=`echo $DATE | tr -d '[=-=][:blank:]'`$TIME
 
  NEW_TIMER=`echo $DATE | tr -d '[=-=][:blank:]'`$TIME
  if [ $NEXT_TIMER -gt $NEW_TIMER ] && [ `expr $NEW_TIMER + $TIME_TO_DOWN` -gt `date +%Y%m%d%H%M` ];then  #keep the newest, but prevent setting past timers
+
  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
      TAKE_TIMER=$i
+
      echo "TAKE_TIMER $i (JJJJMMDDHHhhmm): $NEW_TIMER"
 
      NEXT_TIMER=$NEW_TIMER
 
      NEXT_TIMER=$NEW_TIMER
 
  fi
 
  fi
 
  i=`expr $i + 1`
 
  i=`expr $i + 1`
 
     done
 
     done
 +
    echo "Now it is (JJJJMMDDHHhhmm): `date +%Y%m%d%H%M`"
 
     echo "NEXT_TIMER selected (JJJJMMDDHHhhmm): $NEXT_TIMER"
 
     echo "NEXT_TIMER selected (JJJJMMDDHHhhmm): $NEXT_TIMER"
 
   fi
 
   fi
Zeile 90: Zeile 91:
 
  set_bios_wakeup_time
 
  set_bios_wakeup_time
 
   
 
   
  echo "Please check the set of timers and make suggestions to [jonas . bergel (at) gmx (point) net]"
+
  echo "Please check the set of timers and make suggestions to (jonas - bergel (at) gmx (point) de)"
 
  exit 0
 
  exit 0
  
--[[Benutzer:Jonasbergel|jonasbergel]] 15:19, 16. Okt 2008 (CEST)
+
--[[Benutzer:Jonasbergel|jonasbergel]] 13:19, 15. März 2009 (CEST)
  
 
[[Kategorie:Wakeup]][[Kategorie:Skripte]]
 
[[Kategorie:Wakeup]][[Kategorie:Skripte]]

Aktuelle Version vom 18. September 2012, 20: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)