Hi Helau Hi findus
Erstmal Danke für Eure Hilfe.
Leider funktioniert es aber immer noch nicht.
OK Ich poste mal die ganzen Skripte vielleicht hab ich ja was verkehrt gemacht.
/usr/bin/settime.sh
#!/bin/bash
# Der Wakeup-Zeitpunkt im BIOS muss auf den 1. des Monats um 00:00:00 Uhr
# eingestellt werden
BiosWakeup="2004-05-31 23:59:59"
# Aufwachzeit in Sekunden seit Epoch umrechnen
Wakeup=`date -d "$1" +%s`
if [ "$?" -eq "1" ]; then
echo "No date or wrong date format."
echo "Syntax:"
echo " settime \"YYYY-MM-DD hh:mm:ss\""
exit 1
fi
Now=`date +%s`
Bios=`date -d "${BiosWakeup}" +%s`
if [ "${Wakeup}" -lt "${Now}" ]; then
echo "Wakup Time is in past."
exit 1
fi
# Zeitdifferenz zwischen Wakeup und aktueller Zeit in Sekunden ausrechnen
Diff=$[${Wakeup}-${Now}]
# Zeitdifferenz zwischen BiosWakeup und jetzt in Sekunden in Datei speichern
echo "$[${Now}-${Bios}+${Diff}]" > /etc/timediff
# Uhr zurück stellen
date -s "${BiosWakeup} ${Diff} seconds ago" >/dev/null
if [ "$?" -gt "0" ]; then
echo "Can't change system date, not running as root?"
exit 1
fi
# CMOS-Uhr aktualisieren
hwclock -w --noadjfile --localtime
Alles anzeigen
Bei linvdr hatte ich im BIOS folgendes eingestellt.
Tag 31
23:59:59
Im Skript steht"Der Wakeup-Zeitpunkt im BIOS muss auf den 1. des Monats um 00:00:00 Uhr eingestellt werden"
Hab das auch probiert. kein Erfolg.
Beim manuellen Ausführen der Datei settime.sh kommt "Wakup Time is in past" die timediff unter /etc wird nicht erstellt.
/usr/bin/correcttime.sh
#!/bin/bash
# Prüfen, ob die CMOS-Uhr überhaupt für das Wakeup verstellt wurde.
if [ -r /etc/timediff ]; then
# Dazu das Änderungsdatum der Datei /etc/timediff besorgen -- damit ist
# zweifelsfrei klar, wann settime die Zeitdifferenz geschrieben hat. Liegt
# die momentane Rechner-Zeit *vor* dem Änderungsdatum von /etc/timediff,
# müssen wir die Zeitdifferenz wieder ausgleichen.
Timediff=`date -r /etc/timediff +%s`
Now=`date +%s`
if [ "${Timediff}" -gt "${Now}" ]; then
# Die Rechnerzeit liegt in der Vergangenheit, die Differenz zur lokalen
# Zeit ist in /etc/timediff gespeichert
Diff=`cat /etc/timediff | head -n 1`
date -s "+${Diff} seconds" >/dev/null
# CMOS-Uhr aktualisieren
hwclock -w --noadjfile --localtime
echo "Correcting system time by ${Diff} seconds..."
exit 0
fi
fi
echo "No need to correct system time."
Alles anzeigen
/usr/bin/poweroff.pl
#!/usr/bin/perl
##
# by Thomas Koch <tom@linvdr.org>
##
use POSIX qw(strftime sprintf);
use Time::Local;
my $PROC_ALARM = "/proc/acpi/alarm";
my $SETTIME = "/usr/bin/settime.sh";
my $DEBUG = 0;
my $WAKEUP_MARGIN = 5;
my $TWOOCLOCK = 1;
my $METHOD = 1; # 0 = ACPI-Wakeup, 1 = settime
sub true() { 1; }
sub false() { 0; }
sub dprint {
$_ = join("", @_);
chomp;
print "$_\n" if($DEBUG);
}
sub setTime {
system("hwclock -w");
#system("hwclock -w --directisa");
}
sub setAlarm {
my $Next = shift;
my $TwoOclock = NextTwoOclock();
my $NextStart;
my $ShouldStart;
setTime();
if($Next) {
if($Next > $TwoOclock) {
$ShouldStart = true;
}
$NextStart = $Next - ($WAKEUP_MARGIN * 60);
dprint("Next event at ", strftime("%d.%m.%Y %H:%M", localtime($Next)));
} else {
$ShouldStart = true;
}
if($TWOOCLOCK && $ShouldStart) {
$NextStart = $TwoOclock;
}
if($NextStart) {
dprint("Programming wakeup at ", strftime("%d.%m.%Y %H:%M:%S", localtime($NextStart)));
if($METHOD == 0) {
if(-e $PROC_ALARM) {
system(sprintf("echo \"%s\" > %s", strftime("%Y-%m-%d %H:%M", localtime($NextStart)), $PROC_ALARM));
} else {
dprint("$PROC_ALARM does not exist");
}
} else {
if(-e $SETTIME) {
system(sprintf("%s \"%s\"", $SETTIME, strftime("%Y-%m-%d %H:%M:00", localtime($NextStart))));
} else {
dprint("$SETTIME does not exist");
}
}
}
}
sub PowerOff {
system("halt") if(!$DEBUG);
}
sub NextTwoOclock {
my $now = time();
# Array-Format: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
my @today = localtime($now);
@today[0..2] = (0, 0, 2);
# get today 2:00 in seconds since epoc
my $TwoOclock = timelocal(@today);
# Check: Is today 2:00 in future or past?
if($now < $TwoOclock) {
# Today two oclock is in future
return $TwoOclock;
} else {
# We're past two oclock, next two oclock is tomorrow (+86400s)
return $TwoOclock+86400;
}
}
if(scalar(@ARGV)) {
# called from vdr
die "Wrong parameter count\n" if(scalar(@ARGV) != 5);
die "$PROC_ALARM missing" if(!-e $PROC_ALARM);
my($Next, $Delta, $Channel, $Recording, $UserShutdown) = @ARGV;
setAlarm($Next);
PowerOff();
} else {
# called from cmdline
$next = `svdrpsend.pl next abs`;
if($next =~ /550 No active timers/) {
setAlarm(0);
PowerOff();
} elsif($next =~ /250 \d+ (\d+)/) {
setAlarm($1);
PowerOff();
} else {
PowerOff();
}
}
Alles anzeigen
sub PowerOff {
system("halt") if(!$DEBUG);
}
den Befehl halt hab ich auch mal nur mit poweroff probiert. Hat aber auch nichts gebracht.
von der kommandozeile aus fährt der Rechner mit poweroff runter.
etc/conf.d/vdr
# call CMD to shutdown the computer
SHUTDOWN="/usr/bin/poweroff.pl"
in der Datei vdr hab ich noch folgende Einträge gesehen.
# Method to Wakeup the machine ( Could be "ACPI" or "NVRAM" )
WAKEUP_METHOD="AUS"
# Time when starting VDR for daily ACPI wakeup ( will be used if a timer is waiting )
WAKEUP_HOUR="5"
# Wakeup buffer in seconds ( e.g. set to 300 if wakeup should be done 5 minutes before the timer )
WAKEUP_RESERVE="300"
# Use PowerOff kernel to shutdown ( needed for some boards when using NVRAM-Wakeup )
POWEROFF_KERNEL="0"
# Time in weeks when to force filesystem check
FSCK_WEEK="0"
# Config file to be used for NVRAM (Unknown,MP_QDI,MP_AVT121,MP_AVT122)
NVRAM_BOARD=""
Alles anzeigen
obwohl ich auch probiert hab über das OSD
ACPI abzuschalten
...dann ändert sich WAKEUP_METHOD="ACPI" in AUS
brachte aber auch nichts.
Gruß Viper67