Acpi Wakeup
Der VDR kann zu angegebenen Timern aufwachen. Dies wird durch die 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 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 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