PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : set_timer für VDR einrichten



ContiTech
13.11.10, 09:50
Hallo,

ich versuche nun schon seit Tagen meinen VDR zum automatischen Aufwachen zu bringen.

Erster Anlauf über ACPI ist gescheitert, da Board zu alt.
Zweiter Anlauf mit NVRAM-Wakeup wollte ebenfalls nicht laufen und hatte den Nachteil, dass mein Board einen Reboot benötigt.

Also habe ich mich entschieden einen Versuch mit der Methode und dem Skript "set_timer" aus dem NVRAM-Wakeup Paket zu versuchen.

Ich bin nach dieser Anleitung vorgegangen: http://www.vdr-portal.de/board/thread.php?threadid=55324#post527032

Der Anleitung bin ich 1:1 gefolgt.
Nun erhalte ich folgende Fehlermeldungen wenn ich meinen VDR programmiere, bzw. über "poweroff" (auf meiner Tastatur via "v") ausschalten möchte:
No special shutdown configured +
Shutdown abgebrochen

Ich habe bereits gestöbert und gelesen, aber da sind einfach zu viele Fragen für mich offen.

Als erstes kam mir der Gedanke mit fehlenden Rechten.
Ich starte den VDR unter einen anderen User wie den VDR (VDR als User) selber.
Habe aber den VDR als Root gestartet und das gleiche versucht. Ergebnis ist ident !
Daran kann es wohl nicht liegen denke ich mal.

Hier chronologisch, gem. der Anleitung (s. oben), die Auszüge aus den jeweiligen Konfigdateien:

/etc/init.d/bootmisc.sh

/usr/bin/set_timer --> Merkwürdig hier ist, dass in /usr/bin das Skript nicht liegt (s. weiter unten) und zum anderen wird in der
/usr/share/vdr/shutdown-hooks/S90.nvram-wakeup auf /usr/sbin verwiesen. Da stimmt doch etwas nicht, oder ?

/etc/default/rcS

TMPTIME=0
SULOGIN=no
DELAYLOGIN=no
UTC=yes
VERBOSE=no
FSCKFIX=no
RAMRUN=no
RAMLOCK=no
HWCLOCKACCESS=no
HWCLOCKPARS="--directisa"
Hier bin ich mir nicht sicher ob die Einträge wirklich alle notwendig sind. Vor allem der letzte könnte von NVRAM stammen.
Lt. Anleitung wird nur HWCLOCKACCESS=no gesetzt.

/etc/vdr/vdr-nvram-wakeup.conf

# Set to "yes" to enable nvram-wakeup for VDR
ENABLED="yes"

Wo ich mir auch unsicher bin ist hier:

# SPECIALSHUTDOWN="lilo -R PowerOff ; shutdown -r now"
SPECIALSHUTDOWN=""
Muss da etwas angegeben sein ?
Vielleicht hier schon der Fehler ???

/etc/sudoers

Defaults env_reset
# User privilege specification root
ALL=(ALL) ALL
wohnchris Wohnzimmer = NOPASSWD: /usr/sbin/xfsm-shutdown-helper
# set_timer
vdr ALL=NOPASSWD: /usr/sbin/set_timer
Der Eintrag mit "wohnchris ..." ist für das Abmelden aus XFCE4 heraus.

/usr/share/vdr/shutdown-hooks/S90.nvram-wakeup

# NVRAMCMD=/usr/sbin/nvram-wakeup
# set_timer - discription from "http://www.vdr-portal.de/board/thread.php?threadid=55324#post527032"
NVRAMCMD="sudo /usr/sbin/set_timer"


# $LOG "$NVRAMCMD -ls $TIMER $COMMANDLINE"
# $NVRAMCMD -ls $TIMER $COMMANDLINE
# set_timer - discription from "http://www.vdr-portal.de/board/thread.php?threadid=55324#post527032"
$LOG "$NVRAMCMD $1 $2"
$NVRAMCMD $1 $2
Wie in der Anleitung beschrieben.

In dem Zusammenhang: Was hat es mit den "hooks" auf sich ?
Das habe ich nun schon sehr häufig bei Debian gesehen.

Die RTC Zeit im BIOS habe ich auf den 31. um 23.59 und 59 sek. gestellt.

Das Skript timediff habe ich nicht finden können. Wird aber lt. diesem Artikel benötigt: http://www.linux-magazin.de/Heft-Abo/Ausgaben/2004/08/Weckdienst/(offset)/8

Wenn ich in der "vdr-nvram-wakeup.conf" ENABLED="yes" setze, alle anderen Möglichkeiten sind dabei auskommentiert, dann möchte der VDR nach einer Zeit x sich ausschalten.

Auch seit meiner Versuche mit "set_timer" schaltet sich der VDR nun nicht mehr nach der Nachlaufzeit + ca. 1/2 Stunde selbstständig aus wie zuvor, nein, ER läuft nun weiter !

Was mir weiterhin verdächtig vorkommt ist das fehlende "vdrshutdown" Skript welches ich unter /usr/share/doc/nvram-wakeup/examples/ gefunden habe.
Das sollte doch eigentlich unter /usr/local/bin oder so ähnlich liegen, oder ?
Für mich sieht das so aus, als ob überhaupt kein Shutdownscript gezogen wird.

Auch das fehlende timediff Skript ist merkwürdig. So kann "set_timer" nicht funktionieren (lt. Artikel), ... oder wird timediff erzeugt ?

ContiTech
13.11.10, 10:02
Hallo,

ich habe folgendes jetzt gemacht:

Das Skript "set_timer" habe ich nach /usr/sbin kopiert.

In der /etc/init.d/bootmisc.sh habe ich den Eintrag entsprechend auf /usr/sbin angepasst.

In der /etc/vdr/vdr-nvram-wakeup.conf habe ich für den Eintrag SPECIALSHUTDOWN="" folgendes ergänzt: SPECIALSHUTDOWN="shutdown -r now" und
# Set to "yes" to enable nvram-wakeup for VDR
ENABLED="yes" gesetzt.

Jetzt erhalte ich zwar nicht mehr die Fehlermeldungen, aber ein Test Timer hat leider auch nicht den gewünschten Erfolg des automatischen Aufwachens gebracht.

In dem Skript set_timer steht folgendes:

# The System should not update the hardware clock in the shutdown process.
# In Debian Woody set HWCLOCKACCESS=no in /etc/default/rcS
--> Nun verwende ich aber Debian Lenny und habe genau das gemacht. Ist das für Lenny falsch und wenn ja, was muss ich dann tun ?

Weiterhin steht dort:

# The wake up time must be set to 23:59:59 the day must be set to 31
# if your board supports a month setting for the wakeup, set it to July
Klingt jetzt nicht wie eine Bedingung und sollte auch ohne den Monat Juli funktionieren, da mein Board das mit dem Monat nicht unterstützt.

Hier wieder der Hinweis auf das vdrshutdown Skript:

# in vdrshutdown replace:
# $NVRAMCMD -ls $1
# by
# $PATH_TO_SET_TIMER/set_timer $1 $2

... und wo muss ich folgendes eintragen:

# and add the following line to your start script before vdr is started
# $PATH_TO_SET_TIMER/set_timer
--> Wäre das schon /etc/init.d/bootmisc.sh ?

Hier die Rede von time_diff:

# files to use:
TIME_DIFF=/video/time_diff

Wo bekomme ich diese den nun her ?

In folgendem Wiki, wird etwas zu der ctVDR Version geschrieben: http://www.vdr-wiki.de/wiki/index.php/C%27t-VDR_-_Set_timer
In der /usr/share/vdr/shutdown-hooks/shutdown90.custom.sh steht ein bisserl was anderes wie in der Anleitung (s. erster Beitrag) die ich benutzt habe.

Grundsätzlich benutze ich den VDR nicht mit root Rechten !!!

Stimmt das was ich bisher gemacht habe grundsätzlich ?

ContiTech
13.11.10, 19:26
Ich komme nicht wirklich weiter, da zu viele Widersprüche aus meiner Sicht sind.

Benutzt keiner dieses Skript zum automatischen Aufwachen ?

buzz768
14.11.10, 10:46
/video/time_diff ist kein Script, set_timer speichert dort etwas. Das Verzeichnis /video muss natürlich existieren oder du änderst TIME_DIFF entsprechend. Ich würde set_timer erst einmal manuell testen. Die beiden Parameter sind in VDRs INSTALL-Datei erklärt, das Script erwartet beide, nutzt aber nur den zweiten.


The first one is the time (in UTC) of the next timer event or plugin wakeup
time (as a time_t type number), and the second one is the number of
seconds from the current time until the next timer event.

ContiTech
14.11.10, 15:27
Hallo buzz768,

ich habe das Verzeichnis video unter /var/lib/video gefunden.
Dieses nutzt auch der VDR zur Ablage div. Daten.
Da könnte es dann wohl auch hin gehören.

Wenn ich Dich richtig verstanden habe, dann müsste ich in dem Skript set_timer diesen Eintrag auf
TIME_DIFF=/var/lib/video/time_diff ändern, richtig ?

Wie kann ich set_timer manuell testen ?
Ich bin leider nicht so bewandert in derartigen Themen.
Kann ich set_timer auf der Konsole aufrufen und Parameter übergeben ? Kannst Du mir bitte ein Bsp. geben.

Hier spricht der Autor von einer Datei: http://www.linux-magazin.de/Heft-Abo/Ausgaben/2004/08/Weckdienst/(offset)/8

Daraus bestimmt Zeile 7 die Differenz zur Normalzeit und speichert sie in der Datei »/etc/timediff«. Diese Differenz muss »correcttime« beim nächsten Start zur dann aktuellen Systemzeit hinzuaddieren, um wieder die Normalzeit zu erreichen - das klappt allerdings nur, wenn die Systemzeit in der Vergangenheit liegt.
Verstehe ich nicht wirklich (wäre mir aber auch egal wenn es funktioniert:-).

Was hat es mit dem vdrshutdown Skript auf sich (s. weiter oben) ?

Benutzt Du selber dieses Skript für den VDR ?

buzz768
14.11.10, 20:27
/usr/sbin/set_timer 1 600

simuliert einen Timer in 10 Minuten, das Script setzt die Hardwareuhr dann so


/sbin/hwclock --set --date Tue Jul 31 23:54:59 2001

Den Rechner anschließend Herunterfahren, er sollte in ca. 5 Minuten wieder erwachen, sofern die Weckzeit im Bios auf 23:59:59 steht. In /var/lib/video/time_diff wird die Differenz zur tatsächlichen Zeit gespeichert, anhand dieses Wertes muss set_timer beim Booten wieder die richtige Zeit stellen, also den Eintrag in bootmisc.sh oder so belassen. Ich kenne mich mit dem VDR bei Debian nicht aus und nutze das Script selber nicht, habe mir das nur einmal angeguckt, verwende selbst ACPI-Wakeup.

ContiTech
15.11.10, 19:36
Wenn ich
set_timer 1 600 ausführe, dann erhalte ich folgendes:


Wohnzimmer:~# set_timer 1 600
/usr/sbin/set_timer needs the time command from nvram-wakeup

Folgendes steht in dem Skript set_timer:


# programs to use:
HWCLOCK=/sbin/hwclock
TIME=/usr/local/sbin/time

In /usr/local/sbin gibt es kein Skript namens time.

Also habe ich den Pfad auf /usr/bin angepasst wo das Skript time liegt.

Führe ich erneut den Aufruf aus, erhalte ich folgendes:


Wohnzimmer:~# set_timer 1 600
/usr/bin/time: cannot run 1588204975: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+72minor)pagefaults 0swaps
/usr/bin/time: cannot run 996616499: No such file or directory
Command exited with non-zero status 127
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+72minor)pagefaults 0swaps

Wie kann ich erreichen, dass set_timer die Übergabe nicht von nvram-wakeup erwarte ?
Was hat es mit dem Skript time auf sich ?

buzz768
15.11.10, 20:18
Im Script steht


# The time command from nvram-wakeup is needed (set the path bwlow)

/usr/bin/time ist nicht das time command von nvram-wakeup.

ContiTech
16.11.10, 20:34
Das dachte ich mir ja auch schon mit "time".

Eben deswegen habe ich danach gesucht.

Nur der Verweis auf das Verzeichnis
TIME=/usr/local/sbin/time würde nichts bringen, da dort nichts ist.
Also was tun ?

Nochmals die Frage:


Wohnzimmer:~# set_timer 1 600
/usr/sbin/set_timer needs the time command from nvram-wakeup

Wie kann ich den Aufruf absetzen ?

buzz768
16.11.10, 20:52
# pacman -Qo /usr/sbin/time
/usr/sbin/time ist in nvram-wakeup 1.1-2 enthalten

Enthält das Debian-Paket das Binary nicht?

ContiTech
16.11.10, 20:58
time ist ein Deb-Paket, was aber meines Erachtens nichts mit nvram-wakeup zu tun hat. Das müsste ich ja dann in den Sourcen finden, oder ?
Vielleicht hat das time was set_timer meint
TIME=/usr/local/sbin/time auch mit dem time was ich als Paket meine nichts zu tun.

Wenn Du mal bei den Sourcen von nvram-wakeup (http://ftp.de.debian.org/debian/pool/main/n/nvram-wakeup/nvram-wakeup_1.1.orig.tar.gzhttp://ftp.de.debian.org/debian/pool/main/n/nvram-wakeup/nvram-wakeup_1.1.orig.tar.gz) schaust, dann gibt es dort zwei Dateien die vielleicht passen könnten:


time.8

time.c

Erstere sieht für mich eher wie eine Beschreibung aus. Zweite ist ein Skript.

Die muss ich auf dem Rechner mal suchen gehen. Aber liegen beide nict da, wo set_timer sie erwartet.

buzz768
16.11.10, 21:10
Vielleicht hat das time was set_timer meint auch mit dem time was ich als Paket meine nichts zu tun.

Korrekt. Benutzt du für VDR nicht die Pakete von e-tobi (http://www.e-tobi.net/repositories/repositories.html)? Da gibt es auch ein nvram-wakeup, ich kann da leider nicht hineingucken. Sonst müsstest du nvram-wakeup halt selbst kompilieren. Quellen entpacken und im Verzeichnis nvram-wakup-1.1 einmal "make" aufrufen, time dann nach /usr/local/sbin/ kopieren.

ContiTech
17.11.10, 20:19
Ja, ich benutze die Pakete von e-tobi.

Habe das richtige "time" wohl gefunden und von /usr/bin nach /usr/local/sbin kopiert. In /usr/bin habe ich umbenannt.


TIME=/usr/local/sbin/time damit sollte das nun passen.

Was ich jetzt seit ein paar Tagen habe: Rechner fährt hoch und die Systemzeit ist jedes mal komplett verstellt. Scheinbar immer auf 00:00 Uhr (UTC=23:00 Uhr).

Verstehe ich nicht ganz.

Das ist seit dem ich auf der Konsole versucht habe
set_timer 1 600 abzusetzen.

Mir fehlt aber noch die Nr. mit dem vdrshutdow Skript und die diversen Anpassungen in der aus "set_timer" die dort beschrieben sind.

buzz768
17.11.10, 23:12
Hast du dein /usr/local/sbin/time zum Test mal aufgerufen? Ausgabe sollte so aussehen


$ /usr/local/sbin/time
Usage: /usr/local/sbin/time <time>
where <time> is number of seconds since epoch

oder mit dem erforderlichen Parameter


$ /usr/local/sbin/time $(date +%s)
(time_t) 1290035528
(local time) Thu Nov 18 00:12:08 2010
(utc/gmt) Wed Nov 17 23:12:08 2010

Ich gehe mal stark davon aus, dass das so bei dir nicht aussieht. Das erklärt dann auch das (zwar erwünschte aber falsche) Verstellen der Systemzeit: Über das VDR-Shutdownscript wird set_timer aufgerufen, das aufgrund des falschen time-Programms hwclock keine Zeit-/Datumsangabe übergibt


/sbin/hwclock --set --date

Das entspricht in seiner Wirkung einem Verstellen der Hardwareuhr auf


Do 18. Nov 00:00:00 CET 2010

Und/oder beim Neustart wird das Verstellen der Hardwareuhr nicht entsprechend rückgängig gemacht, weil set_timer nicht automatisch aufgerufen wird oder der Wert in time_diff nicht stimmt.

ContiTech
18.11.10, 19:41
OK, sah (wie du vermutet hattest) nicht so aus.

Habe dann mit
date -s "Nov 18, 2010 19:04:05" und
hwclock -wu die Uhrezeit wieder gestellt.

Danach habe ich vorübergehend in vdr-nvram-wakeup.conf den Schalter auf
ENABLED="no" gelegt.

Hoffe das damit temporär mein Problem behoben ist bis ich weiter "fummeln" kann.

Mit
find / -name "vdrshutdown" habe ich nach dem Skript gesucht und wie ich schon zuvor gesagt habe, liegt lediglich unter /usr/share/doc/vdr/examples.

Wie/wo kann ich den Pfad für das Shutdown Skript setzen ?

Lt. set_timer muss ich ja noch ein wenig ändern:


# The System should not update the hardware clock in the shutdown process.
# In Debian Woody set HWCLOCKACCESS=no in /etc/default/rcS

Nun verwende ich aber Debian Lenny und habe genau das gemacht. Ist das für Lenny falsch und wenn ja, was muss ich dann tun ?


# in vdrshutdown replace:
# $NVRAMCMD -ls $1
# by
# $PATH_TO_SET_TIMER/set_timer $1 $2

... und wo muss ich folgendes eintragen:

# and add the following line to your start script before vdr is started
# $PATH_TO_SET_TIMER/set_timer

Vielleicht ist das auch die Erklärung dafür, warum die Hardwareuhr ständig verstellt wird.

Merkwürdi finde ich auch, dass in /var/lib/video keine Datei für time-diff zu finden ist.


Auch die Änderungen aus dem ursprünglichen Beitrag, nach denen ich mich versucht habe, sind ja noch aktiv.

Die sind vielleicht auch alle nicht richtig ???

http://www.vdr-portal.de/board/thread.php?threadid=55324#post527032

ContiTech
19.11.10, 20:17
Ich denke, dass unter /usr/share/vdr/shutdown-hooks/ die Shutdowndatei für Debian liegt: S90.nvram-wakeup

In der set_timer steht folgendes:


# in vdrshutdown replace:
# $NVRAMCMD -ls $1
# by
# $PATH_TO_SET_TIMER/set_timer $1 $2

Schau ich in die obige Datei, dann kann ich das nicht wirklich zuordnen.
Vielleicht wird das für Euch klar ? --> s. Anhang !

Ich denke an dieser Stelle könnte es sein:


# set wakeup time and check nvram-wakeup and check result:

$LOG "$NVRAMCMD -ls $TIMER $COMMANDLINE"

$NVRAMCMD -ls $TIMER $COMMANDLINE

Einer eine Idee ?

ContiTech
19.11.10, 20:25
Ich denke, dass unter /usr/share/vdr/shutdown-hooks/ die Shutdowndatei für Debian liegt: S90.nvram-wakeup

In der set_timer steht folgendes:


# in vdrshutdown replace:
# $NVRAMCMD -ls $1
# by
# $PATH_TO_SET_TIMER/set_timer $1 $2

Schau ich in die obige Datei, dann kann ich das nicht wirklich zuordnen.
Vielleicht wird das für Euch klar ? --> s. Anhang !

Ich denke an dieser Stelle könnte es sein:


# set wakeup time and check nvram-wakeup and check result:

$LOG "$NVRAMCMD -ls $TIMER $COMMANDLINE"

$NVRAMCMD -ls $TIMER $COMMANDLINE

Einer eine Idee ?

buzz768
20.11.10, 10:23
Sehe ich auch so. Hast du dir denn nun das time-Programm aus den nvram-wakeup-Quellen kompiliert? Andererseits wird das in set_timer ja nur benutzt um die Weckezeit von "Sekunden seit 1970" in ein Format umzurechnen, das hwclock versteht.


set_date=`$TIME $set_time | grep "^(local" | cut -f2- -d')' `

Das lässt sich auch mit awk umsetzen.


set_date=`echo $set_time | awk '{print strftime(" %b %d %H:%M:%S %Y", $1);}'`

Test


set_time=$(date +%s)
/usr/sbin/time $set_time | grep "^(local" | cut -f2- -d')'
Sat Nov 20 11:22:29 2010
echo $set_time | awk '{print strftime(" %b %d %H:%M:%S %Y", $1);}'
Nov 20 11:22:29 2010

ContiTech
20.11.10, 20:18
Ich denke das ich nicht kompilieren muss und das richtige gefunden habe.

Hoffe ich doch.

buzz768
20.11.10, 20:55
In #14 habe ich beschrieben wie du das überprüfen kannst.

ContiTech
21.11.10, 20:47
OK, ich habe erfahren, dass das time welches ich benutze nicht das richtige ist.

Ich muss es doch, so wie Du gesagt hast, aus den Sourcen kompilieren.

Werde mich mal nächste Woche dran machen.