====== Acpi Wakeup ====== Der VDR kann zu angegebenen Timern aufwachen. Dies wird durch die [[vdr:scripte:vdrpoweroff|Vdrpoweroff]] gesteuert. Daher ist es wichtig die Angaben, wie der VDR herunterfahren soll, in dieser Datei richtig angzugeben. ===== Hardwareuhr ===== Das BIOS hat eine RTC (RealTimeClock), diese wird über die Batterie auf dem Mainboard auch dann mit Strom versorgt wenn der VDR ausgeschaltet ist. So kann man die Uhrzeit der RTC abrufen hwclock --debug Die Ausgabe sieht ungefähr so aus: hwclock von util-linux-ng 2.17.2 Benutze /dev interface to clock. Letzte Abweichungskorrektur vorgenommen bei 1333552484 Sekunden nach 1969 Letzte Kalibrierung vorgenommen bei 1333552484 Sekunden nach 1969 Hardwareuhr geht nach UTC Zeit Die Hardwareuhr läuft vermutlich in UTC. Warte auf Uhrtick… … erhielt Uhrtick Zeit gelesen aus Hardwareuhr: 2012/04/04 15:19:34 Zeit der Hardwareuhr: 2012/04/04 15:19:34 = 1333552774 Sekunden seit 1969 Mi 04 Apr 2012 17:19:34 CEST -0.110406 Sekunden Man sieht dass sich die aktuelle Uhrzeit des VDR's in der **Mitteleuropäischen Sommerzeit** befindet (letzte Zeile "CEST"). Die BIOS Uhrzeit der RTC hat hier eine Abweichung von 2 Stunden. Das bedeutet dass sich die Uhrzeit der RTC im **UTC** (Universal Time Coordinated) befindet. Im Winter hat die RTC ein Abweichung von 1 Stunde. Die Ausgabe der letzten Zeile hat dann die **Mitteleuropäische Zeit** ("CET"). Man muss die Systemzeit des Linux auf die lokale Zeit stellen, damit die Aufwachzeiten der Timer korrekt ausgewertet werden. Dies tut man in der Datei ''/etc/default/rcS''. Hier setzt man den Parameter **"UTC"** auf **"yes"**. Danach muss ein Reboot erfolgen. Beispiel: # /etc/default/rcS # # Default settings for the scripts in /etc/rcS.d/ # # For information about these variables see the rcS(5) manual page. # # This file belongs to the "initscripts" package. TMPTIME=0 SULOGIN=no DELAYLOGIN=no UTC=yes <---Muss auf yes stehen VERBOSE=no FSCKFIX=no ===== Timertest ===== Um einen Aufwachtest einfach auszuprobieren, setzt man die Aufwachzeit für das BIOS manuell. Diese kann allerdings bereits gesetzt sein und würde ein erneutes setzen nicht erlauben. Daher resettet man die Aufwachzeit und setzt diese dann neu. Wichtig ist, dass die Aufwachzeit in Sekunden seit dem **01.01.1970** angegeben wird. Hier die Befehle dazu: echo 0 > /sys/class/rtc/rtc0/wakealarm date +%s -d "Wed Apr 04 17:45:00 MEST 2012" > /sys/class/rtc/rtc0/wakealarm Hier habe ich einfach eine Uhrzeit mit 5 Minuten in der Zukunft gesetzt. Ob nun die Aufwachzeit angenommen und eingestellt ist, prüft man mit diesem Befehl: cat /proc/driver/rtc Die Ausgabe sieht in etwa so aus: rtc_time : 15:42:22 rtc_date : 2012-04-04 alrm_time : 15:45:20 alrm_date : 2012-04-04 alarm_IRQ : no alrm_pending : no 24hr : yes periodic_IRQ : no update_IRQ : no HPET_emulated : no BCD : yes DST_enable : no periodic_freq : 1024 batt_status : okay Hier werden alle relevanten Angaben (RTC Uhrzeit, Aufwachzeit mit jew. Datum) ausgegeben. Ab jetzt kann der VDR mit diesem Befehl heruntergefahren werden. shutdown -h now Er sollte dann in ca. 5 Minuten aufwachen. Wenn der VDR in dieser Zeit aufwacht dann ist alles für ein korrektes Aufwachen, seitens des Mainboards/BIOS, gesetzt. Falls sich nichts tut, dann das autom. Uhrzeitstellen des Systems verhindern. vi /etc/init/hwclock-save.conf Hier die **exec-Zeile** auskommentieren. Zusätzlich kann es sein dass man im BIOS den Parameter "HPET" ausschalten muss (falls vorhanden). Zusätzlich übergibt man dem Kernel auch die Anweisung "HPET" nicht zu benutzen. vi /etc/default/grub Hier diese Zeile: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" erweitern in GRUB_CMDLINE_LINUX_DEFAULT="hpet=disable quiet splash" **WICHTIG:** Funktioniert erst nach einem Reboot. ===== Berechtigungen ===== Der VDR läuft aber nicht als Benutzer "root" sondern als "vdruser". Dieser Benutzer hat aber nicht die Rechte die Befehle die oben und in der [[vdr:scripte:vdrpoweroff|Vdrpoweroff]] stehen, auszuführen. Daher setzen wir noch folgende Angaben in der ''/etc/sudoers'' visudo Inhalt einfach unten einfügen: vdruser ALL=(ALL) NOPASSWD: /usr/local/bin/vdrpoweroff.sh,/sbin/shutdown,/sbin/reboot,/sbin/poweroff,/usr/sbin/ntpdate,/sys/power/state,/sbin/hwclock,/bin/chmod,/sys/class/rtc/rtc0/wakealarm,/proc/driver/rtc,/bin/sh,/usr/sbin/pm-suspend,/usr/sbin/ethtool,/usr/bin/killall,/usr/bin/pkill Nun kann die [[vdr:scripte:vdrpoweroff|Vdrpoweroff]] erstellt werden. ===== Sonstige erfahrungen ===== Dies sind gesammelte Werke und können sich mittlerweile erübrigt oder geändert haben. Getestet mit ubuntu 10.04.1 und standard Kernel Tests aus [[http://www.vdr-wiki.de/wiki/index.php/ACPI_Wakeup]] Gigabyte GA-MA78GM-S2H (rev.1.1) BIOS F5 ACPI-i.o.=ja systohc-bug-free=? ->getest mit 2.6.27.7 rtc_cmos und hpet=disable Gigabyte GA-MA78GM-S2H (rev.1.0) BIOS F11 ACPI-i.o.=ja systohc-bug-free=ja ->HPET Support Disabled und Power-On by Alarm Disabled im BIOS, Ubuntu 10.04.1 Standard-Kernel, funktioniert mit 1x schreiben nach wakealarm. Folgende Befehle auch mit dem vdruser testen und ggf. in ///etc/sudoers// ergenzen Zugriff auf RTC wakealram prüfen. sudo find /sys/class/rtc/rtc0/wakealarm Bios Uhrzeit auf UTC Zeit stellen. sudo hwclock --systohc --utc Manuellen Test durchführen. Wakealarm löschen. sudo bash -c "echo 0 > /sys/class/rtc/rtc0/wakealarm" Wakealarm setzen auf 5 Min. später. sudo bash -c "echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm" Gesetzten Timer prüfen. sudo cat /proc/driver/rtc Wert alrm_time zeigt die UTC Uhrzeit an wann der VDR aufwachen wird Ausgabe: rtc_time : 18:04:21 rtc_date : 2010-10-24 alrm_time : 18:09:08 alrm_date : 2010-10-24 alarm_IRQ : yes alrm_pending : no 24hr : yes periodic_IRQ : no update_IRQ : no HPET_emulated : no DST_enable : no periodic_freq : 1024 batt_status : okay VDR herunterfahren und warten. shutdown -h now