vdr-plugin-acpiwakeup: shutdownscript-Argumente?

  • Hallo,


    ich bin gerade dabei, mein ACPI-Wakeup einzurichten.
    Irgendwie steige steige ich noch nicht durch, wie der Shutdown funktionieren soll.


    Mein Kernel ist Version 2.6.24-24-server (Ubuntu Server), ACPI_Schnittstelle ist /proc/acpi/alarm.
    Ein

    Code
    1. echo "+00-00-00 00:05:00" > /proc/acpi/alarm
    2. shutdown -h now


    weckt den VDR bereits wie gewünscht auf.


    Ärmel hoch: Aus den e-tobi-Quellen habe ich nun das Plugin vdr-plugin-acpiwakeup installiert, in der vdr-addon-acpiwakeup.conf ACPI aktiviert und bin nun gerade dabei, das Shutdownscript "S90.acpiwakeup" Schritt für Schritt zu verstehen (ich habs im Anhang nochmal drangehängt). Dort stoße ich auf die Zeile


    Code
    1. TIMER=$1


    Heißt also, diesem Script wird wohl die nächste Timeraufnahme als Argument übergeben, und dann der ACPI-Wakeup entsprechend gesetzt. Im Syslog erscheint auch

    Code
    1. Dec 21 21:54:46 vdr vdr-shutdown: executing /usr/share/vdr/shutdown-hooks/S90.acpiwakeup as shell script
    2. Dec 21 21:54:46 vdr vdr-shutdown: executing /usr/share/vdr/shutdown-hooks/S90.custom as shell script


    Was ich nicht verstehe: Woher bekommt dieses shutdown-Script die nächste Timer-Aufnahme? Irgendetwas muss doch erstmal die timers.conf auslesen und die nächste Aufnahme bestimmen, so wie das z.b. beim ACPI Wakeupscript der Fall ist. (http://www.vdr-wiki.de/wiki/index.php/Acpiwakeupscript)


    Wäre super, wenn Ihr mir dabei helfen könntet - ich schätze mal, wenn das händische ACPI-Wakeup bereits funktioniert, sollte das mit Plugin ja auch hinzubekommen sein.


    Danke im Voraus - Grüße,
    Simon


    #!/bin/sh
    #
    # VDR shutdown hook for ACPI - Tobias Grimm <vdr@e-tobi.net>
    # --------------------------
    #
    # This shutdown hook sets the wakeup time for the next timer using
    # ACPI.
    #


    if [ "`basename $0`" != "testwakeup" ] ; then
    # read arguments for acpi-wakeup from conf-file
    . /etc/vdr/vdr-addon-acpiwakeup.conf
    WAKEUP_FILE="/var/cache/vdr/acpiwakeup.time"


    # take care of UTC setting
    if [ -f /etc/default/rcS ]; then
    UTC=$(egrep "^[^#]*UTC=" /etc/default/rcS | tail -n1 | cut -d= -f2)
    fi


    LOG="logger -t vdr-addon-acpiwakeup "
    else
    UTC=$UTC
    WAKEUP_FILE=$WAKEUP_FILE
    LOG="nop"
    fi



    nop()
    {
    # No Operation
    echo -n ""
    }


    if [ "$UTC" = "yes" ]; then
    TIME_FUNCTION="gmtime"
    else
    TIME_FUNCTION="localtime"
    fi


    # Defaults:
    [ -z "$ACPI_ENABLED" ] && export ACPI_ENABLED="yes"
    [ -z "$ACPI_REGULAR_DAYS" ] && export ACPI_REGULAR_DAYS="0"
    [ -z "$ACPI_REGULAR_TIME" ] && export ACPI_REGULAR_TIME="00:00"
    [ -z "$ACPI_START_AHEAD" ] && export ACPI_START_AHEAD="5"


    [ -z "$ACPI_ALARM" ] && export ACPI_ALARM="/proc/acpi/alarm"
    [ -z "$WAKEALARM" ] && export WAKEALARM="/sys/class/rtc/rtc0/wakealarm"


    TIMER=$1 ====>>> WOHER WIRD DIESER TIMER ÜBERGEBEN?


    TimeToString()
    {
    echo $(perl -e "(\$s,\$mi,\$h,\$d,\$mo,\$y,\$t,\$t,\$t)=\
    $TIME_FUNCTION($1); printf(\"%04d-%02d-%02d %02d:%02d:%02d\",\
    \$y+1900,\$mo+1,\$d,\$h,\$mi,\$s);")
    }


    AcpiError()
    {
    $LOG "No writeable $ACPI_ALARM or $WAKEALARM found. ACPI needed!!!"
    echo "ABORT_MESSAGE=\"ACPI not installed, shutdown aborted!\""
    exit 1
    }


    ResetWakeupTimeKernelLte2_6_22()
    {
    # I don't really now right now, how to disable
    # the wakeup, so just set it to 00:00:01 !!!!
    SetWakeupTimeKernelLte2_6_22 \
    "`date -d '00:00:01' +'%s' | sed 's/_/ /'`"
    return $?
    }


    SetWakeupTimeKernelLte2_6_22()
    {
    # convert time_t to YYYY-MM-DD HH:MM:SS
    TIME_TO_SET=`TimeToString $1`


    if [ -w $ACPI_ALARM ]; then
    $LOG "Writing to $ACPI_ALARM"
    echo "$TIME_TO_SET" >$ACPI_ALARM
    # Set it once more - some boards require this!
    echo "$TIME_TO_SET" >$ACPI_ALARM
    return $?
    else
    return 1
    fi
    }


    ResetWakeupTimeKernelGte2_6_23()
    {
    if [ -w $WAKEALARM ]; then
    $LOG "Writing to $WAKEALARM"
    echo 0 >$WAKEALARM
    return $?
    else
    return 1
    fi
    }


    SetWakeupTimeKernelGte2_6_23()
    {
    if [ -w $WAKEALARM ]; then
    if ResetWakeupTimeKernelGte2_6_23 ; then
    $LOG "Writing to $WAKEALARM"
    echo "$1" >$WAKEALARM
    return $?
    fi
    fi
    return 1
    }



    ResetWakeupTime()
    {
    $LOG "Resetting ACPI alarm time"
    ResetWakeupTimeKernelLte2_6_22 || \
    ResetWakeupTimeKernelGte2_6_23 || \
    AcpiError
    }


    SetWakeupTime()
    {
    $LOG "Setting ACPI alarm time to: `TimeToString $1`"
    SetWakeupTimeKernelLte2_6_22 "$1" || \
    SetWakeupTimeKernelGte2_6_23 "$1" || \
    AcpiError


    # remember wakeup time for stop script
    echo `TimeToString $1` >$WAKEUP_FILE
    }


    IsRegularDayOfWeek()
    {
    local day
    for day in $ACPI_REGULAR_DAYS ; do
    if [ "$day" = "`date -d \"@$1\" +%u`" ] ; then
    return 0
    fi
    done
    return 1
    }


    if [ $ACPI_ENABLED = "yes" ]; then
    # check if we should wake up before the next timer:
    if [ "$ACPI_REGULAR_DAYS" != "0" ]; then
    REGULAR_TIMER=$(date -d "$ACPI_REGULAR_TIME" +%s)
    if [ $REGULAR_TIMER -lt $(date +%s) ] ; then
    REGULAR_TIMER=$(($REGULAR_TIMER + 24 * 60 * 60))
    fi
    while ! IsRegularDayOfWeek $REGULAR_TIMER ; do
    REGULAR_TIMER=$(($REGULAR_TIMER + 24 * 60 * 60))
    done


    if [ $TIMER -eq 0 ] || [ $TIMER -gt 0 -a $REGULAR_TIMER -lt $TIMER ] ; then
    TIMER=$REGULAR_TIMER
    fi
    fi
    if [ $TIMER -gt 0 ]; then
    MIN_START_AHEAD=$((`date +%s` + 60 * $ACPI_START_AHEAD))
    if [ $MIN_START_AHEAD -gt $TIMER ]; then
    $LOG "Can not set wakeup time less than $ACPI_START_AHEAD minutes ahead."
    echo "ABORT_MESSAGE=\"Wakeup in less than $ACPI_START_AHEAD minutes, aborting!\""
    exit 1
    fi


    # adjust wakeup time by ACPI_START_AHEAD
    TIMER=$(($TIMER - 60 * $ACPI_START_AHEAD))
    fi


    if [ $TIMER -eq 0 ]; then
    ResetWakeupTime
    else
    SetWakeupTime "$TIMER"
    fi


    else
    $LOG "ACPIWakeup functionality is disabled"
    fi

  • VDR sucht den nächsten Timer selbst heraus und stellt ihn dem Skript zur Verfügung. Vgl. cShutdownHandler::CallShutdownCommand in shutdown.c.

  • Ich klinke mich hier mal ein, wenn es recht ist.


    Ich nutze hier Ubuntu 9.10 mit VDR 1.7.10 vom VDR-Team und versuche gerade ACPI-Wakeup zum laufen zu bringen.
    Bisher habe ich das obige ACPI-Wakeup Plugin installiert und auch getestet, ob mein System per ACPI Alarm aufwacht.


    Setze ich manuell eine Alarmzeit per


    Code
    1. date +%s -d "Fri Jan 01 23:30:00 MET 2010" > /sys/class/rtc/rtc0/wakealarm


    wacht das System problemlos zur angegebenen Zeit auf.


    Setze ich jedoch einen Timer im VDR und fahre diesen runter, wacht das system nicht auf.
    Es sieht so aus als wenn keine Aufwachzeit durch den VDR gespeichert wird.
    Woran könnte das liegen?

    Mein LinuxVDR Bastelsysten:
    --------------------
    Ahanix Viper MCE-301, Asrock B85M PRO4, Intel Pentium G3250 @ Scythe Shuriken, 4GB Kingston HyperX Savage, Corsair Force 3 & Samsung Spinpoint M7, Asus BR04B2T, Technotrend S2-1600, Powered by Seasonic S12-II 330 @ NB-BlackSilentFan XL2
    Stromverbrauch: 15 Watt Idle (Gnome Desktop), 22-24 Watt FullHD Videos (mit VLC)

    - Registered Linux-User Nr.:# 341407
    - Registered VDR-User Nr.:# 821

  • Na, dann stehst Du ja schon kurz vor dem Ziel - ich vermute, dass der Shutdown-Hook nicht richtig funktioniert.


    Ich habe mir zum Debuggen das Shutdown-Hook-Script S90.acpiwakeup verboser gemacht, sodass es im Syslog protokolliert, was es warum macht.
    Du findest es im Anhang. (Achtung: ich bin mir nur nicht mehr sicher, ob ich nicht die ein oder andere Funktion rausgeworfen habe, weil sie nicht auf meinen Kernel zutrifft - aber als Anhaltspunkt dürfte es Dir mehr als dienen).


    Öffne eine Konsole und lasse dort ein "tail -f /var/log/syslog" laufen.
    Im Script entfernst Du die Raute aus der letzten Zeile; damit bekommt der shutdown-wrapper von den hooks einen Returncode > 0, der ihm sagt, dass beim Shutdown irgendwas nicht mit rechten Dingen zuging und bricht den Shutdown ab. Spart etwas Zeit :-)


    Dann setz Timer und beobachte, was das Script ins syslog schreibt wenn Du den vdr "runterfährst".


    Hast Du auch in der vdr-addon-acpiwakeup.conf ACPI aktiviert?


    # Activate/deactivate ACPIWakeup with yes/no:
    ACPI_ENABLED=yes



    Grüße,
    Simon

  • Hmm...


    also das Einzige was mir in /var/log/messages ausgespuckt wird, wenn ich den VDR herunterfahre ist das hier:


    Code
    1. Jan 2 01:17:45 Viper vdr: [12623] [xine..put] cXinelibOsdProvider: shutting down !


    Aber das wird dir nicht weiterhelfen. ;)


    Vielleicht verstehe ich auch was falsch und ich muss noch irgendwas anpassen?
    Ich habe das Paket vdr-addon-acpiwakeup installiert und dann in /etc/vdr/vdr-addon-acpiwakeup.conf
    ACPI_ENABLED=yes gesetzt.


    Dann habe ich den VDR gestoppt und die Datei /usr/share/vdr/shutdown-hooks/S90.acpiwakeup durch deine ersetzt und dort die # vor der letzten Zeile (exit 2) entfernt.
    Anschließend habe ich den vdr neu gestartet, dann sudo tail -f /var/log/messages gemacht und über ein zweites Terminal den VDR heruntergefahren, aber mehr als die Zeile da oben wurde mir wie gesagt nicht ausgespuckt...

    Mein LinuxVDR Bastelsysten:
    --------------------
    Ahanix Viper MCE-301, Asrock B85M PRO4, Intel Pentium G3250 @ Scythe Shuriken, 4GB Kingston HyperX Savage, Corsair Force 3 & Samsung Spinpoint M7, Asus BR04B2T, Technotrend S2-1600, Powered by Seasonic S12-II 330 @ NB-BlackSilentFan XL2
    Stromverbrauch: 15 Watt Idle (Gnome Desktop), 22-24 Watt FullHD Videos (mit VLC)

    - Registered Linux-User Nr.:# 341407
    - Registered VDR-User Nr.:# 821

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von X-Dimension ()

  • Wird denn der shutdown-wrapper bei Dir überhaupt ausgeführt? Der ist dafür verantwortlich, dass die Hooks gestartet werden.


    Code
    1. Dec 27 07:35:00 vdr vdr: [4616] executing '/usr/lib/vdr/vdr-shutdown.wrapper 1261918980 23280 11 "Taxi, Taxi" 0'


    Wie Du siehst, bekommt er den Unix-Timestamp der nächsten Timeraufnahme übergeben (1261918980). Dieser wird dann weitergereicht an die Hooks.


    Die "verbose"-Version des acpi-hooks müsste im Syslog sowas wie folgt protokollieren:


    Grüße,
    Simon

  • Ich weiß nicht... wie finde ich das heraus?

    Mein LinuxVDR Bastelsysten:
    --------------------
    Ahanix Viper MCE-301, Asrock B85M PRO4, Intel Pentium G3250 @ Scythe Shuriken, 4GB Kingston HyperX Savage, Corsair Force 3 & Samsung Spinpoint M7, Asus BR04B2T, Technotrend S2-1600, Powered by Seasonic S12-II 330 @ NB-BlackSilentFan XL2
    Stromverbrauch: 15 Watt Idle (Gnome Desktop), 22-24 Watt FullHD Videos (mit VLC)

    - Registered Linux-User Nr.:# 341407
    - Registered VDR-User Nr.:# 821

  • Code
    1. Dec 27 07:35:00 vdr vdr: [4616] executing '/usr/lib/vdr/vdr-shutdown.wrapper 1261918980 23280 11 "Taxi, Taxi" 0'


    Na, eben sowas ähnliches muss im Syslog (/var/log/syslog) protokolliert sein. Ohne wrapper kein wakeup.


    Grüße,
    Simon

  • Das Shutdown Script scheint nur gestartet zu werden wenn ich den VDR per VDR Shutdown herunterfahre. Fahre ich Ubuntu herunter oder stoppe den VDR Dienst, passiert nichts.


    In den Logs habe ich nun folgendes Gefunden:



    Allerdings hat er da den Shutdown Vorgang abgebrochen.

    Mein LinuxVDR Bastelsysten:
    --------------------
    Ahanix Viper MCE-301, Asrock B85M PRO4, Intel Pentium G3250 @ Scythe Shuriken, 4GB Kingston HyperX Savage, Corsair Force 3 & Samsung Spinpoint M7, Asus BR04B2T, Technotrend S2-1600, Powered by Seasonic S12-II 330 @ NB-BlackSilentFan XL2
    Stromverbrauch: 15 Watt Idle (Gnome Desktop), 22-24 Watt FullHD Videos (mit VLC)

    - Registered Linux-User Nr.:# 341407
    - Registered VDR-User Nr.:# 821

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von X-Dimension ()

  • Beim stoppen des VDR wird meines Wissens auch kein shutdown-wrapper ausgeführt.
    (Du wirst zum Ausschalten ja auch irgendwann gern die Fernbedienung nehmen wollen, oder? Wenn dabei das Script ausgeführt wird, ists ja ausreichend)


    Ich fürchte, Du musst Dich genauso durchpflügen, wie ich es gemacht habe - bei mir hat es danach funktioniert:
    Kopiere das script an eine andere Stelle (dann bleibt das original unangetastet) und mach es per chmod ausführbar. Dann ruf es mit einenm gültigen Timestamp einer bevorstehenden Aufnahme auf und prüfe, ob alles sauber arbeitet. Wenn Du, von oben beginnend, immer ein "exit" einbaust, und diverse DInge per echo ausgibst, kannst Du Schritt für Schritt prüfen, ob irgendwo ein Fehler passiert.


    (Tröste Dich: danach weisste wenigstens, wie das Script funktioniert :streichel )


    Grüße,
    Simon

  • bei mir funktioniert das wakeup auch nicht


    Code
    1. sudo date +%s -d "Mon Jan 04 10:45:00 MET 2010" > /sys/class/rtc/rtc0/wakealarm -bash: /sys/class/rtc/rtc0/wakealarm: Permission denied laurent@FERNSEH-PC:~$


    nicht mal die manuelle eingebe funktioniert.

  • wakeupalarm habe ich in vdr umgetauft und die manuelle eingabe funktioniert.


    also meine bios uhr habe ich minus 1 stunde eingestellt damit sie im vdr korrekt dargestellt wird. muss ich sonst noch was ändern?

  • ich habe den besitzer und name der gruppe in vdr getauft

  • Zitat

    ACPI-Wakeup im BIOS aktiv? Versuch mal genau die gegenteilige Einstellung; bei manchen scheint genau das dann zu gehen.


    wenn der pc durch manuelle ingabe im terminal startet muß die bios einstellung doch ok sein ? oder sehe ich das falsch?


    was für rechte hat "wakealarm" auf deinem system?

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von dippes ()

  • dippes : Sorry, das hatte ich überlesen. Hm.
    Dann arbeitet der Shutdownhook nicht richtig.Wird der shutdownwrapper ausgeführt?
    Was taucht im syslog auf?
    Hast Du mal die verbose-Version des Scripts versucht? Ich habe mir damit sehr viel leichter getan.


    Grüße,
    Simon


    P.S.: Ich komme an meinen vdr gerade nicht hin.... sorry.

  • ich habe es gerade nochmal probiert und es hat funktioniert :lol2, danke