Inhaltsverzeichnis

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