System Autowakeup für VDR Aufnahmen via ACPI Wakeup unter Kodibuntu 14.04.1 lts

Inhalt

Inhalt

Beschreibung

Dieser Artikel beschreibt die Einrichtung des automatischen Rechnersstarts via ACPI Wakeup.

Hersteller ohne
Autor(en) ohne
Lizenz GNU / GPL / Opne Source
OS Linux – kodibuntu 14.04.1 lts / Ubuntu Studio 14.04.3 Trusty Tahr LTS
Kernel 3.13.0-45-lowlatency #74-Ubuntu SMP PREEMPT Tue Jan 13 19:53:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Funktion io / nio
Status open / closed

Installationsumgebung / -Voraussetzung

Getestet wurde die Hardware/Software: …
mit der/den VDR Versionen: …
unter der/den Ubuntu Version(en): 14.04.1 lts …

Die Installation/Konfiguration benötigt …

Installation

Timer für Autowakeup über ACPI einrichten funktioniert nicht mit allen Rechnern und BIOS Versionen und es können eine Menge Faktoren den Start des Rechners verhindern. Sollte es nicht funktionieren ist es hilfreich das VDR-Wiki, die Howtos von MythTV, YaVDR bzw. das VDR-Forum zu durchsuchen. Viele der Probleme sind dort beschrieben und sind trotz dessen alters immer noch hilfreich.

http://www.vdr-wiki.de/wiki/index.php/ACPI_Wakeup
/Ubuntu_HD_VDR_mittels_TechnoTrend_S2-6400_-_ACPI_Shutdown/Wakeup
http://www.vdr-portal.de/board60-linux/board62-software/board95-xbmc/p814067-xbmc-shutdown-mit-aufwachfunktion-von-vdr/#post814067
http://www.mythtv.org/wiki/ACPI_Wakeup
http://forum.ubuntuusers.de/topic/vdr-shutdown-optionen/
http://www.linux.com/learn/docs/672849-wake-up-linux-with-an-rtc-alarm-clock
http://vdr-wiki.de/wiki/index.php/YaVDR/FAQ#ACPI_Wakeup

Mainboard / Installation und System auf ACPI WakeUp Funktion prüfen

sudo grep -i rtc /var/log/dmesg

[    0.096000] RTC time: 22:44:26, date: 01/02/15
[    0.910400] rtc_cmos 00:02: RTC can wake from S4
[    0.910541] rtc_cmos 00:02: rtc core: registered rtc_cmos as rtc0
[    0.910564] rtc_cmos 00:02: alarms up to one month, 114 bytes nvram
[    0.921373] rtc_cmos 00:02: setting system clock to 2015-01-02 22:44:27 UTC (1420238667)

Da sämtliche Zeiten in Sekunden ab dem 01.01.1970 UTC Zeit berechnet werden, prüfen ob das System und die Hardware Uhr auch auf UTC eingestellt sind.

Wenn UTC eingestellt ist, trifft folgendes zu:

  • Im BIOS wird UTC Zeit statt der lokalen Zeit angezeigt
  • In /etc/default/rcS ist eingetragen
    • UTC=yes
      cat /etc/default/rcS | grep UTC=
  • Ein sudo hwclock –debug gibt aus:
    • Hardware clock is on UTC time
    • Assuming hardware lock is kept in UTC time
      sudo hwclock --debug | grep UTC

Damit die User vdr und xbmc die Hardwareuhr via sudo ohne Passwort Eingabe umstellen dürfen, müssen diese in der sudoers berechtigt werden

sudo visudo 

# Allow members of group sudo to execute any command
vdr        ALL = NOPASSWD: ALL
xbmc       ALL = NOPASSWD: ALL

Löschen bereits gesetzter Timer

Ist bereits ein wakealarm gesetzt worden, so muss dieser vorher wieder gelöscht werden. Dies geschieht indem ein Event in der Vergangenheit gesetzt wird

sudo bash -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"

Test der WakeUp Funktion

indem ein Timer in 2 Minuten gesetzt wird

sudo bash -c "echo `date '+%s' -d '+ 2 minutes'` > /sys/class/rtc/rtc0/wakealarm"

Auslesen gesetzter Timer aus dem OS

sudo cat /sys/class/rtc/rtc0/wakealarm

Auslesen gesetzter Timer aus dem BIOS

sudo cat /proc/driver/rtc

Konfiguration

Runlevelscript für Auslesung VDR Timer bei Neustart oder Shutdown anlegen

(Funktioniert nur bei älteren Systemen welche die Runlevel der Reihe nach abarbeiten!)

sudo vim /etc/init.d/setAcpiWakeup
#!/bin/bash

### BEGIN INIT INFO
# Provides:        wakeup
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:    0 6
# Short-Description: Setting WakeUp Events in BIOS
### END INIT INFO

#sudo hwclock --systohc --localtime  # Hardware Uhr auf localtime
sudo hwclock --systohc --utc         # Hardware Uhr auf UTC

DEV=/sys/class/rtc/rtc0/wakealarm
TIMER=$(/usr/bin/svdrpsend -d localhost NEXT abs|grep 250 |cut -f3 -d' '|tr -d '\r')

case $1 in
        start)
                echo
                echo 'SMURF :-) !!!'
                echo
                ;;
        stop)
                if [[ '$TIMER' =~ " " ]]; then
                        bash -c "echo 0 > $DEV" && echo No VDR Timer exist, proceed with shutdown && exit
                else
                        DATE=/bin/date
                        if [[ $DATE =~ "CEST" ]]; then
                                #WAKEUPTIME=`echo "$TIMER + 2 * 60 * 60 -300" | bc`;
                                WAKEUPTIME=`echo "$TIMER + 60 * 60 -300" | bc`;
                        else
                                #WAKEUPTIME=`echo "$TIMER + 60 * 60 -300" | bc`;
                                WAKEUPTIME=`echo "$TIMER -300" | bc`;
                        fi

                        echo 0 > $DEV
                        bash -c "echo "$WAKEUPTIME > $DEV""
                        bash -c "echo "$WAKEUPTIME > $DEV"" # Manche Mainboards benötigen die Weckzeit zweimal
                        #echo $TIMER  > $DEV
                echo BIOS Event set to:
                cat /proc/driver/rtc
                echo
                echo Next Startup Event set in:
                cat /sys/class/rtc/rtc0/wakealarm
                echo "seconds since UTC midnight 1 January 1970 :-)"
                echo

                fi
                ;;
        status)
                echo
                echo BIOS Event actual set to:
                cat /proc/driver/rtc
                echo
                echo Next Startup Event set in:
                cat /sys/class/rtc/rtc0/wakealarm
                echo "seconds since UTC midnight 1 January 1970 :-)"
                echo
                exit 0
                ;;
        clear)
                echo
                echo Clearing BIOS Event...
                bash -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"
                echo
                echo BIOS Event cleared:
                cat /proc/driver/rtc
                echo
                echo Next Startup Event set in:
                sudo cat /sys/class/rtc/rtc0/wakealarm
                echo "seconds since UTC midnight 1 January 1970 :-)"
                exit 0
                ;;

        *)
                echo "Usage: /etc/init.d/setAcpiWakeup.sh {start|stop|status|clear}"
                exit 1
                ;;
esac

Event Status anzeigen

sudo /etc/init.d/setAcpiWakeup status

Event Status setzen auf nächsten Start 5 Min vor VDR Timer

sudo /etc/init.d/setAcpiWakeup stop

Event Status löschen

sudo /etc/init.d/setAcpiWakeup clear

Event Status starten (nur für Schlümpfe .-)

sudo /etc/init.d/setAcpiWakeup start

Script ausführbar machen und in den Runlevel 6 (Rebot) und 0 (Shutdown) verlinken

sudo chmod +x /etc/init.d/setAcpiWakeup 
sudo ln -s /etc/init.d/setAcpiWakeup /etc/rc6.d/K01setAcpiWakeup 
sudo ln -s /etc/init.d/setAcpiWakeup /etc/rc0.d/K01setAcpiWakeup

Die Berechtigungen an der Hardware-Uhr-Datei werden bei jedem Start zurückgesetzt, daher müssen diese bei jedem Start neu gesetzt werden

sudo vim /etc/init/set_perm_wakealarm.conf 

start on startup
task
script
chmod 777 /sys/class/rtc/rtc0/wakealarm
end script

Verhindern dass die Hardwareuhr auf OS Zeit gesetzt wird

sudo mv /etc/init/hwclock-save.conf ~/Downloads/

Zum Test wird ein Timer in den nächsten Min gesetzt, das System neu gestartet und das BIOS ausgelesen.

Einfaches Script für setzen eines WakeUpEvents über Kodi

http://www.kodinerds.net/index.php/Thread/24008-Aufwachen-aus-Standby-f%C3%BCr-vorprogrammierte-Aufnahmen/?postID=94569#post94569

Anlagen des Scripts

sudo vim /usr/bin/setwakeup.sh

#!/bin/sh
#$1 is the first argument to the script. It is the time in seconds since 1970
#this is defined in mythtv-setup with the time_t argument
echo 0 > /sys/class/rtc/rtc0/wakealarm #this clears your alarm.
echo $1 > /sys/class/rtc/rtc0/wakealarm #this writes your alarm

Script ausführbar machen

sudo chmod +x /usr/bin/setwakeup.sh

Sicherstellen dass Kodi User das Script ohne Passwort aufrufen dürfen

sudo visudo 

# Members of the admin group may gain root privileges
%xbmc ALL = NOPASSWD: /usr/bin/setwakeup.sh, /usr/sbin/pm-suspend

Nun im Kodi unter Optionen > LiveTV > Einergiesparen in der Option Setze den Weckbefehl (cmd [timestamp]) den Scriptnamen mit vorrangestellten sudo eintragen

sudo setwakeup.sh

Beim neu- oder herunterfahren des Rechners ruft kodi nun das Script gefolgt von egültigen TimCode. Der Timecode berechnet sich aus der eingestellten Zeit Vor der der Aufnahme aufwachen xx min.
http://kodi.wiki/view/Settings/Live_TV#Power_saving

Troubleshooting

  • Bei manchen Boards muss der HPET (High Precision Event Timer) der CPU deaktiviert im BIOS werden. Sollte das nicht helfen kann ein übergeben des Parameters hpet=disable an den Kernel (via Grub) helfen. Beim ASUS P6H68 reichte eine deaktivierung im BIOS aus.
  • Unter Ubuntu wird die Zeit der Hardwareuhr bei jedem Herunterfahren des Systems auf die Zeit des OS gesetzt. Dies muss deaktiviert werden, da ansonsten die Zeiten nicht stimmen.
    grep "hwclock-save" /etc/init/*
    sudo mv /etc/init/hwclock-save.conf ~/Downloads/

Fazit

Das Erstellen eines Events beim runterfahren des Systems über das Runlevel ist in aktuellen Ubuntu Versionen problematisch, da der VDR bereits beendet ist wenn das Script versucht den Timer auszulesen. Teilweise funktioniert das, eben immer dann wenn der VDR “zufällig” noch läuft.

ToDo

  • Script läuft nur händisch, läuft VDR beim runterfahren auch noch um den Timer auszulesen?
  • Scipt schreiben für wakeup via kodi

Quellen

Print Friendly, PDF & Email

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.